Перейти к содержанию
    

Verilog: работа с переменными в цикле

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

 

Я там нашел такую конструкцию:

 

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 нужно искать описание такой ситуации ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее это из-за использования блокирующего присваивания для этих регистров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я там нашел такую конструкцию:

 

                                 .....
                      vVar3         = 1;
                      vVar2         = vCnt2;
                      vVar1         = iVar9[vCnt2];
                      iVar4[vCnt1] <= 1;                      

          end   

       end

блокирующие и неблокирующие в одном блоке? Фрр!!!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

блокирующие и неблокирующие в одном блоке? Фрр!!!

да почему нет-то ? напишите 2 одинаковых цикла один за другим, и разделите в них присвоения: так красивее будет что ли ?

вот что с переменными, по-моему более интересный вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Xilinx такое не дает делать в пределах одного always. Это что за синтезатор? Квартус?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Xilinx такое не дает делать в пределах одного always. Это что за синтезатор? Квартус?

Synplify

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DC также запрещает это.

LINT просто орет на данный тип ошибки.

Нафиг нафиг такую конструцию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DC также запрещает это.

LINT просто орет на данный тип ошибки.

Нафиг нафиг такую конструцию

всем спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

assign для асинхронного присвоения с "="

"<=" для синхронного по тактовому сигналу или по звездочке - формально тот же assign

 

ЗА ВСЕ ОСТАЛЬНОЕ ПО РУКАМ ЛИНЕЙКОЙ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...