Компилятор ModelSim отличается от Quartus

Я использовал ModelSim для моделирования в эти дни, и у меня возникла проблема, а именно:

И это был кусок кода Verilog, подобный этому:

if (cnt == `END_CNT)
...
reg [7:0] cnt;
always @(posedge clk)
    if (en)
        cnt <= cnt +1;
...

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

Но когда я компилировал файл в ModelSim, появлялась ошибка "variables undefined", и мне приходилось перемещать строку определения над оператором if:

reg [7:0] cnt;
...
if (cnt == `END_CNT)
...
always @(posedge clk)
    if (en)
        cnt <= cnt +1;
...

У меня много такого кода, и это меня очень беспокоит. Как новичок в ModelSim, мне интересно, есть ли настройка компилятора (я не могу найти) для решения моей проблемы?


person Mr.Zhou    schedule 08.01.2014    source источник
comment
По моему опыту, Modelsim — самый строгий симулятор в отношении соблюдения языковых законов. @toolic Вы должны сделать свой комментарий ответом.   -  person dwikle    schedule 08.01.2014
comment
@dwikle, тогда я думаю, что такой настройки нет, все равно спасибо.   -  person Mr.Zhou    schedule 10.01.2014
comment
Если вы поместите `default_nettype none в начало вашего исходного кода, тогда quartus также будет жаловаться на ваш код, поэтому вы получите стабильное поведение.   -  person Will    schedule 30.05.2014
comment
Не забудьте после этого сбросить режим типа сети по умолчанию на wire, используя `default_nettype wire . Подробнее о неявных типах цепей здесь: sunburst-design.com/papers/   -  person rascob    schedule 11.03.2017


Ответы (1)


Компилятор Quartus verilog не такой строгий, как компилятор modelsim, поэтому он позволит вам делать некоторые забавные вещи, подобные упомянутому вами.

Однако, согласно стандарту Verilog, регистры могут использоваться только после их объявления, поэтому единственный способ обойти это — переместить объявления регистров до их использования.

ссылка: SystemVerilog Standard (см. раздел 6.5: Сети и переменные) http://standards.ieee.org/findstds/standard/1800-2012.html

person mohsaied    schedule 07.12.2014