Первый оператор if в блоке Always всегда изначально оценивается как true - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь записать блок всегда, который отображает соответствующий номер на сегментном дисплее ПЛИС. По какой-то причине первое условное условие первоначально оценивается как истинное, даже если переключатель выключен:

always @(posedge i2 or posedge i1)
begin
 if(i2)
    inp11 = x5;
  else
    if(i1)
        inp11 = x9;

end

inp11 изначально установлен на 0, поэтому я ожидаю, что при первом включении FPGA inp11 выдаст 0. 0. Когда отображается 5 (значение x5), а затем я могу переключаться между 5 и 9 в обычном режиме иправильно. Так как это возможно, что inp11 установлен на 5 с переключателем i2 не включен?

1 Ответ

0 голосов
/ 08 декабря 2018

Посмотрите на файл журнала, он, вероятно, сообщает предупреждения с вашим кодом.То, что вы пришли к выводу, это очень уродливая чувствительная к уровню защелка.Будет иметь место поведенческое несоответствие между моделированием RTL и пост-синтезом.

Если вы хотите использовать комбинационную логику:

always @*
begin
  if(i2)
    inp11 = x5;
  else if(i1)
    inp11 = x9;
  else
    inp11 = 'h0; // or some other deterministic value. Do NOT use inp11=inpt11
    // Without the final 'else', a level-sensitive latch is inferred
end

Если вы хотите использовать синхронную логику:

always @(posedge clk)
begin
  if(i2)
    inp11 <= x5;
  else if(i1)
    inp11 <= x9;
end
...