[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Действительно замена = на <= помогает.
На самом деле в стандарте верилога не описано как должен обрабатывать код симулятор если присвоение '=' используется в разных блоках. Сказано вроде что это должно делаться одновременно.
Реально симулятор при возникновении события (в нашем случае положительный фронт clk) будет выполнять все выражения последовательно.
в доказательство этого работает такая конструкция:
always @(posedge clk) #1 dff1 = in;
always @(posedge clk) dff2 = dff1;
по той же самой причине синтезаторы не видит разницы между = <= если присвоения в разных блоках.
У меня есть хорошая статься посвящённая verilog на русском, там я нашёл ответ на мой вопрос. Она была напечатана в какомто журнале а её автор кто-то из здешних.
E-mail: info@telesys.ru