myq 0 21 марта, 2011 Опубликовано 21 марта, 2011 · Жалоба Доброго всем дня. Последние пару дней Квеста выносит мне мозг. Решил выполнить рефакторинг кода конечного автомата, и переделать его из one-always style в, как это принято, несколько always блоков. Квеста бесится, находит этот Zero-delay loop даже там, где я сто лет ничего не менял. Ниже пример, не относящийся к тому большому КА, просто квеста выдала ошибку в неожиданном месте. Причём эти ошибки валятся уже во время симуляционного процесса, т.е. после команды run, с приостановкой самой симуляции. wire align_now; reg align_delay; reg [7:0] align_counter; always @ (posedge reset or posedge clock) begin if( reset) begin align_counter <= 0; align_delay <= 1; end else begin align_counter <= align_counter + 1; align_delay <= align_now; end end assign align_now = (align_counter < 2); //Zero-Delay Loop Если сделать align_now reg'ом и вставить внуть always - то всё ок, но это же бредово. Это же 1000 раз нормальный код. Причём, сделав align_now reg-ом он находить это ош-ку в других местах. Я так понял, суть ошибки в том, что симулятор детектирует бесконечный цикл в малом промежутке времени, но откуда ему там взяться? На данным момент ликвидирую все конструкции вида always ( * ) и вписываю явный sensitivity list. Скажу, что будет. Заработало. Неужели, такой дорогущий симулятор как Квеста не умеет корректно понимать always ( * ) ? Ага, вставив во все такие always явные списки вместо (*) и в вышеупомянутом фрагменте тоже перестал находить ошибку. Хотя там always ( * ) и не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 марта, 2011 Опубликовано 21 марта, 2011 · Жалоба Неужели, такой дорогущий симулятор как Квеста не умеет корректно понимать always ( * ) ? Ага, вставив во все такие always явные списки вместо (*) и в вышеупомянутом фрагменте тоже перестал находить ошибку. Хотя там always ( * ) и не было. Так ведь always @(*) и always @(posedge...) - это разные вещи. В первом случае получается комбинационная логика, а во втором последовательностная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
myq 0 22 марта, 2011 Опубликовано 22 марта, 2011 · Жалоба Так ведь always @(*) и always @(posedge...) - это разные вещи. В первом случае получается комбинационная логика, а во втором последовательностная. конечно разные, я говорю про замену always @ ( * ) на always @ ( var1 or var2 or ........... or varN) а вышеупомянутый фрагмент я привёл, т.к. он-то составлен по законам жанра, а always @ ( * ) был рядом, тем не менее ошибка всплыла именно на том фрагменте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться