a123-flex 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Спустя несколько лет после того как мой проект заработал, вчера я в него посмотрел и удивился. Я там нашел такую конструкцию: reg vVar3; reg [3:0] vVar1,vVar2; reg [3:0] iVar9 [cChNum:0]; always @(posedge Clk, posedge iRst) if (iRst) begin .... end else begin for (vCnt1=0; vCnt1<cChNum; vCnt1=vCnt1+1) begin// cicle 1 vVar1 = 0; vVar2 = 0; vVar3 = 0; if (!iVar4[vCnt1]) begin for (vCnt2=0; vCnt2<cChNum; vCnt2=vCnt2+1) begin// cicle 2 ..... vVar3 = 1; vVar2 = vCnt2; vVar1 = iVar9[vCnt2]; iVar4[vCnt1] <= 1; end if (vVar3) begin iVarX <= vVar2; iVarY <= vVar1; .............. end end end Удивило меня то, что она работает. Переменные vVar[1-3] инициализированы как регистровый вектор и бит, а фактически выполняют функции двумерного массива, и вектора соответственно (т.к вычисляются внутре вложенного в цикл цикла). Далее я переписал примерчик, явно повысив размерность переменных на единичку - он продолжил работать как и прежде, только после этого, значения vVarX, захваченные логическим анализатором начали отображаться корректно. Я так понимаю, ето все проделки очень умного синтезатора ? в первом случае, выходит, он по моему формальному описанию сам размножил переменные в цикле ? Кстати, может кто подскажет, в каком месте IEEE нужно искать описание такой ситуации ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Скорее это из-за использования блокирующего присваивания для этих регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Спустя несколько лет после того как мой проект заработал, вчера я в него посмотрел и удивился. Я там нашел такую конструкцию: ..... vVar3 = 1; vVar2 = vCnt2; vVar1 = iVar9[vCnt2]; iVar4[vCnt1] <= 1; end end блокирующие и неблокирующие в одном блоке? Фрр!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a123-flex 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба блокирующие и неблокирующие в одном блоке? Фрр!!! да почему нет-то ? напишите 2 одинаковых цикла один за другим, и разделите в них присвоения: так красивее будет что ли ? вот что с переменными, по-моему более интересный вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bambr 0 19 ноября, 2015 Опубликовано 19 ноября, 2015 · Жалоба Xilinx такое не дает делать в пределах одного always. Это что за синтезатор? Квартус? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a123-flex 0 19 ноября, 2015 Опубликовано 19 ноября, 2015 · Жалоба Xilinx такое не дает делать в пределах одного always. Это что за синтезатор? Квартус? Synplify Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 27 ноября, 2015 Опубликовано 27 ноября, 2015 · Жалоба DC также запрещает это. LINT просто орет на данный тип ошибки. Нафиг нафиг такую конструцию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a123-flex 0 15 декабря, 2015 Опубликовано 15 декабря, 2015 · Жалоба DC также запрещает это. LINT просто орет на данный тип ошибки. Нафиг нафиг такую конструцию всем спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 24 декабря, 2015 Опубликовано 24 декабря, 2015 · Жалоба assign для асинхронного присвоения с "=" "<=" для синхронного по тактовому сигналу или по звездочке - формально тот же assign ЗА ВСЕ ОСТАЛЬНОЕ ПО РУКАМ ЛИНЕЙКОЙ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться