Jump to content
    

Verilog - блок always

Я думаю, если бы автор осознавал важность варнингов, которые Qurtus ему написал, то данной темы бы просто не было.

Возможно, если бы с такого простого кода их не было >400 штук.

 

С posedge Вы получите триггер, при этом, если используете два сигнала в списке чувствительности, то один из них будет являться синхросигналом, а другой асинхронным сбросом(или установкой).

Выходит, что от позиции сигнала будет зависеть способ входа в блок always? Что тогда будет в таком случае? :

always @(negedge SW[0] or negedge SW[1] or negedge SW[2])

Если есть, дайте плз ссылку на статью по этому вопросу.

Share this post


Link to post
Share on other sites

Возможно, если бы с такого простого кода их не было >400 штук.

 

С того кода, что выше Вами приведен 400 варнингов не наберется. :)

 

К тому же, если Вы все-таки хотите, чтобы проект заработал "в железе" (а я думаю, Вы хотите, иначе не занимались бы этим),

 

то разобраться с тем , что пишет Quartus - один из самых быстрых способов этого добиться. 

 

 

 

Выходит, что от позиции сигнала будет зависеть способ входа в блок always? Что тогда будет в таком случае? :

always @(negedge SW[0] or negedge SW[1] or negedge SW[2])

Нет, сообщение, №10 в этой теме:

 

...

А на ресет он возьмет тот сигнал, котоый по коду будет ресетом. А, так как код здесь мягко говоря не тот, что нужно, то синтезатор ничего и не стал делать. И он прав.  :)

 

 

 

Если есть, дайте плз ссылку на статью по этому вопросу.

 

Recommended HDL Coding Styles:

http://www.altera.com/literature/hb/qts/qt...Coding%20Styles

 

Стр. 6-36, Coding Guidelines for Registers and Latches.

Edited by des333

Share this post


Link to post
Share on other sites

С того кода, что выше Вами приведен 400 варнингов не наберется.

Ну я уж наверное числа умею отличать; если бы было не так - не писал бы.

 

Не совсем понятно выражение:

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

И причем тут вообще сигнал ресет и, наконец, триггер ?

Share this post


Link to post
Share on other sites

Ну я уж наверное числа умею отличать; если бы было не так - не писал бы.

 

Ради интереса, скомпилировал код, который Вы указали в первом сообщении - получилось 16 варнингов.  :)

 

Не совсем понятно выражение:

 

И причем тут вообще сигнал ресет и, наконец, триггер ?

Вы прочитали тот документ, ссылку на который я указал? Прочитайте.

Share this post


Link to post
Share on other sites

получилось 16 варнингов

i538541_Warnings.JPG

 

Вы прочитали тот документ, ссылку на который я указал? Прочитайте.

70 страниц английского текста... пока нет.

Share this post


Link to post
Share on other sites

i538541_Warnings.JPG

 

Хм... Странно...

 

А у Вас кроме модуля, который приведен в первом сообщении, еще модули в проекте есть?

 

Если нет, выложите, если не сложно, все варнинги Quartus'а - интересно, что он еще на 425 варнингов нашел.

 

 

 

70 страниц английского текста... пока нет.

 

 

Ну, все 70 сейчас Вам не нужны. Я указал страницу, с которой начинается нужный раздел.

 

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

 

Да и вообще, в handbook'е есть ответы почти на все вопросы (ну, на половину точно, а на вторую половину - в стандарте языка + остальные доки на сайте Альтеры :) )

Edited by des333

Share this post


Link to post
Share on other sites

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

А в *.qsf остались записи от предыдущего проекта - оттуда и большинство варнингов.

Share this post


Link to post
Share on other sites

Из объяснений так и не смог понять - во что же синтезируется блок always и почему синтезатор имеет право превратить конструкцию:

 

always@(posedge SW[1] or posedge SW[0])
begin
  LEDG=1;
end

в конструкцию

assign LEDG=1;

 

это можно назвать оптимизацией ? Но ведь такой сгенерированный rtl не соответствует исходному поведенчесому описанию, в котором ясно прописано - LEDG равно 0, до тех пор пока как минимум один из сигналов SW[1], SW[2] не перейдет из низкого в высокое состояние ?

 

Спасибо

 

----

 

Насколько я понимаю документа, в котором прописывались бы правила, которыми руководствуется синтерзатор при создании rtl-описания по коду Verilog нет. Единственное на что можно опираться это указанный выше Handbook от Altera и соответственно прописанные в нем guidelines ?

Share this post


Link to post
Share on other sites

это можно назвать оптимизацией ? Но ведь такой сгенерированный rtl не соответствует исходному поведенчесому описанию, в котором ясно прописано - LEDG равно 0, до тех пор пока как минимум один из сигналов SW[1], SW[2] не перейдет из низкого в высокое состояние ?

 

А где именно у вас указывается в коде, что LEDG[0] равно 0. Я видел только одну строчку, где LEDG[0] равно 1. Кстати в варнингах Квартус Вам так честно и написал, что LEDG[0] напрямую подключен к VCC.

Share this post


Link to post
Share on other sites

А где именно у вас указывается в коде, что LEDG[0] равно 0. Я видел только одну строчку, где LEDG[0] равно 1. Кстати в варнингах Квартус Вам так честно и написал, что LEDG[0] напрямую подключен к VCC.

А как же гарантии Altera из Handbook'a :) - стр. 6-36 Chapter 6: Recommended HDL Coding Styles:

Register Power-Up Values in Altera Devices

Registers in the device core always power up to a low (0) logic level on all Altera devices.

 

Кстати в варнингах Квартус Вам так честно и написал, что LEDG[0] напрямую подключен к VCC.
Да, вижу:

Warning: Pin "LEDG" stuck at VCC
Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте).

Share this post


Link to post
Share on other sites

Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте).

Потому что, если в списке чувствительности несколько сигналов, то один будет тактовым сигналом, а другой (другие) асинхронными сбросом/установкой.

 

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

 

 

В данном коде этого не было.

Edited by des333

Share this post


Link to post
Share on other sites

А как же гарантии Altera из Handbook'a :) - стр. 6-36 Chapter 6: Recommended HDL Coding Styles:

Да, вижу:

Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте).

 

Как написано , так и сделал. Не видит он оснований триггер ставить ради перехода в 1 по включению питания при опции

Power-Up Don't Care logic option - on

Или of поставьте, а лучше корректно опишите условия относительно сигналов в процессе, когда он 0, а не только по включению питания.

Share this post


Link to post
Share on other sites

Как написано , так и сделал. Не видит он оснований триггер ставить ради перехода в 1 по включению питания при опции

Power-Up Don't Care logic option - on

Или of поставьте, а лучше корректно опишите условия относительно сигналов в процессе, когда он 0, а не только по включению питания.

 

Все-таки, решающую роль сыграл неправильный код. :)  

 

А именно отсутствие описание сброса. Просто, если оставить один сигнал в списке чувствительности, то и с включенной Power-Up Don't Care logic опцией, мы получим в итоге правильный, хотя и не особо полезный, триггер с "1" на входе. 

Share this post


Link to post
Share on other sites

Просто, если оставить один сигнал в списке чувствительности, то и с включенной Power-Up Don't Care logic опцией, мы получим в итоге правильный, хотя и не особо полезный, триггер с "1" на входе. 

 

Лукавите. Опция не важна при явном указании инициализации регистра в описании (у Квартуса)

reg [7:0] LEDG = 8'd0;

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...