sevareva 0 October 10, 2009 Posted October 10, 2009 · Report post Я думаю, если бы автор осознавал важность варнингов, которые Qurtus ему написал, то данной темы бы просто не было. Возможно, если бы с такого простого кода их не было >400 штук. С posedge Вы получите триггер, при этом, если используете два сигнала в списке чувствительности, то один из них будет являться синхросигналом, а другой асинхронным сбросом(или установкой). Выходит, что от позиции сигнала будет зависеть способ входа в блок always? Что тогда будет в таком случае? : always @(negedge SW[0] or negedge SW[1] or negedge SW[2]) Если есть, дайте плз ссылку на статью по этому вопросу. Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 10, 2009 Posted October 10, 2009 (edited) · Report post Возможно, если бы с такого простого кода их не было >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 October 10, 2009 by des333 Quote Share this post Link to post Share on other sites More sharing options...
sevareva 0 October 10, 2009 Posted October 10, 2009 · Report post С того кода, что выше Вами приведен 400 варнингов не наберется. Ну я уж наверное числа умею отличать; если бы было не так - не писал бы. Не совсем понятно выражение: на ресет он возьмет тот сигнал, котоый по коду будет ресетом И причем тут вообще сигнал ресет и, наконец, триггер ? Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 10, 2009 Posted October 10, 2009 · Report post Ну я уж наверное числа умею отличать; если бы было не так - не писал бы. Ради интереса, скомпилировал код, который Вы указали в первом сообщении - получилось 16 варнингов. :) Не совсем понятно выражение: И причем тут вообще сигнал ресет и, наконец, триггер ? Вы прочитали тот документ, ссылку на который я указал? Прочитайте. Quote Share this post Link to post Share on other sites More sharing options...
sevareva 0 October 10, 2009 Posted October 10, 2009 · Report post получилось 16 варнингов Вы прочитали тот документ, ссылку на который я указал? Прочитайте. 70 страниц английского текста... пока нет. Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 10, 2009 Posted October 10, 2009 (edited) · Report post Хм... Странно... А у Вас кроме модуля, который приведен в первом сообщении, еще модули в проекте есть? Если нет, выложите, если не сложно, все варнинги Quartus'а - интересно, что он еще на 425 варнингов нашел. 70 страниц английского текста... пока нет. Ну, все 70 сейчас Вам не нужны. Я указал страницу, с которой начинается нужный раздел. Просто Вы сказали, что Вам непонятна фраза про ресет, а там как раз расписано, как сделать триггер с асинхронным ресетом, с установкой и прочее. Да и вообще, в handbook'е есть ответы почти на все вопросы (ну, на половину точно, а на вторую половину - в стандарте языка + остальные доки на сайте Альтеры :) ) Edited October 10, 2009 by des333 Quote Share this post Link to post Share on other sites More sharing options...
sevareva 0 October 10, 2009 Posted October 10, 2009 · Report post warnings Я указал страницу, с которой начинается нужный раздел. Да, не заметил, спасибо. Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 10, 2009 Posted October 10, 2009 · Report post Вы, видимо, использовали какой-то существующий проект, заменив в нем исходный код верилоговского модуля. А в *.qsf остались записи от предыдущего проекта - оттуда и большинство варнингов. Quote Share this post Link to post Share on other sites More sharing options...
Didro 0 October 11, 2009 Posted October 11, 2009 · Report post Из объяснений так и не смог понять - во что же синтезируется блок 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 ? Quote Share this post Link to post Share on other sites More sharing options...
Sefo 0 October 11, 2009 Posted October 11, 2009 · Report post это можно назвать оптимизацией ? Но ведь такой сгенерированный rtl не соответствует исходному поведенчесому описанию, в котором ясно прописано - LEDG равно 0, до тех пор пока как минимум один из сигналов SW[1], SW[2] не перейдет из низкого в высокое состояние ? А где именно у вас указывается в коде, что LEDG[0] равно 0. Я видел только одну строчку, где LEDG[0] равно 1. Кстати в варнингах Квартус Вам так честно и написал, что LEDG[0] напрямую подключен к VCC. Quote Share this post Link to post Share on other sites More sharing options...
Didro 0 October 11, 2009 Posted October 11, 2009 · Report post А где именно у вас указывается в коде, что 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Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте). Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 11, 2009 Posted October 11, 2009 (edited) · Report post Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте). Потому что, если в списке чувствительности несколько сигналов, то один будет тактовым сигналом, а другой (другие) асинхронными сбросом/установкой. При этом нужно писать код по определенным правилам, чтобы синтезатор смог определить, какой сигнал является сбросом, какой клоком. В данном коде этого не было. Edited October 11, 2009 by des333 Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 11, 2009 Posted October 11, 2009 · Report post А как же гарантии Altera из Handbook'a :) - стр. 6-36 Chapter 6: Recommended HDL Coding Styles: Да, вижу: Вопрос в том, почему он так сделал. Ведь это несоответствует поведенческому описанию (с учетом гарантии нулевых значений на старте). Как написано , так и сделал. Не видит он оснований триггер ставить ради перехода в 1 по включению питания при опции Power-Up Don't Care logic option - on Или of поставьте, а лучше корректно опишите условия относительно сигналов в процессе, когда он 0, а не только по включению питания. Quote Share this post Link to post Share on other sites More sharing options...
Des333 0 October 11, 2009 Posted October 11, 2009 · Report post Как написано , так и сделал. Не видит он оснований триггер ставить ради перехода в 1 по включению питания при опции Power-Up Don't Care logic option - on Или of поставьте, а лучше корректно опишите условия относительно сигналов в процессе, когда он 0, а не только по включению питания. Все-таки, решающую роль сыграл неправильный код. :) А именно отсутствие описание сброса. Просто, если оставить один сигнал в списке чувствительности, то и с включенной Power-Up Don't Care logic опцией, мы получим в итоге правильный, хотя и не особо полезный, триггер с "1" на входе. Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 11, 2009 Posted October 11, 2009 · Report post Просто, если оставить один сигнал в списке чувствительности, то и с включенной Power-Up Don't Care logic опцией, мы получим в итоге правильный, хотя и не особо полезный, триггер с "1" на входе. Лукавите. Опция не важна при явном указании инициализации регистра в описании (у Квартуса) reg [7:0] LEDG = 8'd0; Quote Share this post Link to post Share on other sites More sharing options...