Перейти к содержанию
    

В чем могут быть причины разной работы схемы

1)нет

2)не знаю, уверен что нет!

3)за тем, что так посчитал разработчик! если он так не думает, то надо ему объяснить!! (с помощью констрейнов) есть другие варианты?

4)как иначе?

5)

6) да

 

Незачет :smile3009:

 

На первый вопрос Вы ответили правильно. На следующие два - совершенно неверно! Любопытно, почему Вы не смогли ответить на 4-ый и 5-ый вопросы?

 

Вы имеете весьма категоричные, ничем не обоснованные и неправильные суждения по тем вопросам, по которым Вы не владеете достаточным количеством информации.

 

Я Вам дам совет:

 

Для начала, поверьте моему утверждению, что симулятор даже не пытается интерпретировать always @(posedge iCLK) oDONE <= А; как регистр. Поверьте, просто потому, что я имею достаточно большой опыт. Затем, используя вопросы с 1-го по 5-й как подсказки, постарайтесь догадаться, почему симулятор не интерпретирует always @(posedge iCLK) oDONE <= А; как регистр.

 

Удачи! :cheers:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как же правильные ответы? Sefo мы с нетерпением ждем правильные ответы на эти интересные вопросы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте с другого конца

 

чем принципиально отличается поведение oDone в конструкции

always @(posedge clk)

oDone <= ....

понимаемого симулятором/синтезатором как регистр от

always @(posedge clk)

oDone <= ....

понимаемого им как-то иначе?

 

если тем что в некоторых случаях в ходе оптимизации и прочего он представляет oDone ни как набор триггеров с клоком, а как некую конструкцию из LUT, то мне и 99% разработчиков я уверен пофиг, и разница есть только для преподовательского состава во время зачета, чтобы поддеть студента и самоутвердится...

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чем принципиально отличается поведение oDone в конструкции

 

Тем, что в одном случае он будет работать гарантировано и стабильно в железе, а во втором случае нужно самому в уме анализировать всю схему вокруг на предмет того, в каком месте могут возникнуть логические гонки, в каком - короткие импульсы и глитчи, и корректно ее строить исходя из того, чтобы эта "гадость" не попадала на управляющие входы защелок на LUTах, или попадала, но только тогда, когда ей туда можно попадать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Погодите погодите

 

always (posedge clk)

oDone <= ...

 

по моему скромному понимают всегда будет по клоку сохранять значение в oDone, за исключениями случаев когда oDone будет соптимизировано и выкинуто из схемы, или вырождено в какую-то другую конструкцию, но однозначно выполняющую те же функции. Если это не так, то создавать схемы будет каким-то адом... А если так, то мне кажется oDone можно считать регистром...

 

я так понимаю мы медленно гребем вот к такой схеме

 

reg oDone = 0;

 

MyModule module_inst

(.outsignal(oDone),

....

);

 

когда оDone объявлен как регистр, а используется фактически как wire, вот только чет я задумался, а не ругнется ли на это синтезатор, хотя бы варнингом?

 

Вообще я давно предлагал и предлагаю переходить на следующий уровень абстракции, в котором пофиг какой элемент чем является и как он реализован, а важно лишь конечное его поведение и результат работы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще я давно предлагал и предлагаю переходить на следующий уровень абстракции, в котором пофиг какой элемент чем является и как он реализован, а важно лишь конечное его поведение и результат работы.

 

Ну для тех, которым пофиг, сколько это в результате стоит, пофиг сколько жрет и пофиг, надежно ли работает - самое то !!! Прямой путь создать глючную и неоптимальную схему.

 

 

а по теме, вообще да, в конструкции с одним posedge в always вроде бы всегда именно регистр получается, и подключить его куда-то не туда не реально, на переменные типа reg нельзя делать ни assign, ни подключать к выходным портам модулей. Но, вопрос то в другом - у автора скорее всего там не просто "posedge clk", раз глючит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну для тех, которым пофиг, сколько это в результате стоит, пофиг сколько жрет и пофиг, надежно ли работает - самое то !!! Прямой путь создать глючную и неоптимальную схему.

 

сколько стоит - пофиг

сколько жрет - пофиг

надежно ли работает - не пофиг, но мой подход не снижает надежность

прямой путь создать глючную схему - не согласен, вы утрируете...

 

 

проверил ISE нормально относится к конструкции

 

reg A;

MyComp CompInst

(.outport(A),

...

)

 

Считает А - просто сигнальной линией, спокойно все синтезит и имплементирует, думаю и надеюсь именно об этом и сообщал нам пытливый оратор выше%) ... Потому что тут А фактически wire а не регистр.

 

Я думаю у автора все-таки неполный констраин, все по началу определяют частоту, но забывают про hold и setup, или же забывают что в реальной схеме сигналы распространяются с разной скоростью, а не мгновенно

 

и конструкции вида

 

always (posedge clk1)

A<=10;

 

а за ними

always (posedge clk2)

if(A == 10) в разных частях схемы могут иметь разное значение истинности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прямой путь создать глючную схему - не согласен, вы утрируете...

 

Я не утрирую, а обобщаю. В общем - прямой путь создать глючную схему. В частностях - может быть и нет, если повезет. А в реальной работе надо минимизировать и стоимость, и потребление, и учитывать все-все, это же живые деньги. Сэкономил на ПЛИСе доллар, получил "лишние" 1000 долларов с партии себе в карман! Сэкономил еще 50 центов на питачнике, получил еще прибавку... и так на каждом элементе!

 

 

А ISE значит глючит и некорректно работает. Нельзя к reg подключать выходные порты! Это ошибка в коде, причем, можно сказать, почти фатальная.

 

 

вот так Diamond ругается, еще даже до синтеза не доходя.

ERROR - /xxxx/xxxx/xxxx.v(266,15-266,25) (VERI-1195) concurrent assignment to a non-net inter_ck_ctrl_wire is not permitted

 

а вот так Synplify:

ERROR - CS164 :"/xxxx/xxxx/xxxx.v":266:14:266:23|Expecting wire for output connection, found inter_ck_ctrl_wire

 

причем это жесткие ERROR, а не предупреждения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не утрирую, а обобщаю. В общем - прямой путь создать глючную схему. В частностях - может быть и нет, если повезет. А в реальной работе надо минимизировать и стоимость, и потребление, и учитывать все-все, это же живые деньги. Сэкономил на ПЛИСе доллар, получил "лишние" 1000 долларов с партии себе в карман! Сэкономил еще 50 центов на питачнике, получил еще прибавку... и так на каждом элементе!

 

Это не "реальная работа" а коммерческая, и погоня за центами никакого отношения к надежности не имеет. Скорее наоборот. Вы противоречите сами себе. "Сэкономил 50 центов на питачнике" и добро пожаловать в комнату садомазо тестирования, а не аукнутся ли Вам эти 50 центов нестабильностью "питачника" в пиковые моменты нагрузки при граничных температурных условиях...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы противоречите сами себе. "Сэкономил 50 центов на питачнике" и добро пожаловать в комнату садомазо тестирования, а не аукнутся ли Вам эти 50 центов нестабильностью "питачника" в пиковые моменты нагрузки при граничных температурных условиях...

 

Ничего я не противоречу, и отлично понимаю, что советую. Если я сделаю такой код, описанная которым схема жрет на пол-ампера меньше, чем результат тупого поведенческого синтеза, то я сэкономлю эти 50 центов на питачнике без малейшего ущерба надежности, имея такой же запас по параметрам. А может, еще и прибавлю в надежности, за счет более простой ПЛИС и меньшей задействованности ресурсов.

 

На этом и живем, собственно, сделать не хуже, чем у конкурента, а лучше - лучше, но при этом раза в два хотя бы дешевле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я пожалуй соглашусь с товарищем Голиковым, более высокий уровень представления данных продиктован растущими объёмами триггеров в проекте. Но как человек, начинавший в схематике, уже подсознательно рисую буквами verilog/vhdl код, как те художники, которые рисуют рисунки, но при этом утверждают, что пишут картины.

Но, возможно категория триггеров наиболее продуктивна в verilog/vhdl описании, и уж точно более надёжна. А вот более высокий уровень абстракции (с базовой категорией мышления – объект а ля ООП) реализован какими-то другими языками разработки.

 

Ничего я не противоречу, и отлично понимаю, что советую. Если я сделаю такой код, описанная которым схема жрет на пол-ампера меньше, чем результат тупого поведенческого синтеза, то я сэкономлю эти 50 центов на питачнике без малейшего ущерба надежности, имея такой же запас по параметрам. А может, еще и прибавлю в надежности, за счет более простой ПЛИС и меньшей задействованности ресурсов.

На этом и живем, собственно, сделать не хуже, чем у конкурента, а лучше - лучше, но при этом раза в два хотя бы дешевле.

И с товарищем СМом вынужден согласиться. Всё красиво написано. Главное что бы гонка за центами не была в ущерб поддерживаемости и масштаби́руемости.

Изменено пользователем kuchynski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При продаже 100 приборов в год, стоимостью 68 000 евро каждый,

 

экономия на "питачнике" 50 центов, дает доп прибыль 50 долларов в год, на фоне около 7 лямов евро:)...

 

если копнуть чуть глубже, то мой день работы обходится фирме в 5000 рублей, то есть порядка 140-150 долларов, в итоге если я экономя 50 центов на "питачнике" делаю это дольше чем 3 часа я разоряю фирму)...

 

 

 

А что стандарт говорит на объявление типа

reg [7 : 0] A = 0;

 

в целом я понимаю претензии сиплифая,

есть некая хрень,у которой еще задано значение, и теперь ее надо подключить к выходному порту, и не понятно как на ней будет меняться значение.

 

ISE реабилитирован, ISE проглотило это дело, потому что нигде далее по тексту я не обращался к этому регистру как к регистру, он нигде не попадал под клок и так далее, в итоге его притянуло к земле и соптимизировало, а если взять используемый сигнал, то получается

 

ERROR:HDLCompiler:329 - "\\vboxsrv\hostrepository\SYNC_MOTOR\FPGA\Main_V1_00.v" Line 94: Target <LOCKED> of concurrent assignment or output port connection should be a net type.

 

отсюда получается что все таки объявление

reg A = 0; - объявление регистра, как не крути... и я опять заинтригован в чем ошибка о которых писалось выше....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начальная инициализация допустима, она по стандарту допустима. Нельзя делать регистрам постоянные подключения к другим цепям (включая выходные порты модулей), а инициализировать константой - можно (начиная с V-2001), и даже некоторые синтезаторы для некоторых семейств ПЛИС это могут воплотить в железе, хотя, вообще, это предназначено для симуляции, и аналогично указанию значения в блоке initial.

 

 

reg A=0; - это не объявление регистра, это объявление переменной, которая может стать синхронным регистром после синтеза. Надо еще поглядеть, что там в always-ах указано, и как завязано с содержимым блока, и с другими сигналами.

 

 

PS

А вот мой день работы не стоит каких-то определенных денег. Сколько произведу и продам устройств, в которых в том числе применяются и ПЛИС с моей "начинкой", столько и получу прибыли. Поэтому и считаю каждый цент. И если сделаю устройство дорогим, то вообще ничего не продам, конкуренты не спят!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

reg A = 0; - объявление регистра, как не крути...

 

Интересно, сколько раз нужно написать, что reg A; reg B; reg C; и пр. с присвоением или без - ОБЪЯВЛЕНИЕМ РЕГИСТРА НЕ ЯВЛЯЮТСЯ ПОТОМУ, ЧТО reg в Verilog НЕ ОЗНАЧАЕТ РЕГИСТР (ТРИГГЕР) !!!

 

 

Кстати, а куда изчез автор темы? Где код-то, который мы так активно обсуждаем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добро пожаловать в VHDL! Там есть только signal, без всякого этого идиотского разделения на reg и wire.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...