Как я могу использовать определения Verilog в операторах if-else

У меня есть определение Verilog следующим образом:

`define NUM_BANKS 4

и если вы хотите использовать его в следующем коде:

if (`NUM_BANKS > 1)
  do something ..
else
  do something else ..

Инструмент Lint жалуется, что это выражение всегда будет оцениваться как true.


person mshaaban    schedule 27.03.2015    source источник


Ответы (2)


После применения `define if всегда будет оценивать 4 > 1. Компилятор выдает ошибку, поскольку if всегда будет неактуальным.

Я бы рекомендовал либо заменить ваш `define на parameter (если вы хотите, чтобы он был изменен модулем более высокого уровня или экземпляром), либо использовать директивы компилятора (http://www.csee.umbc.edu/portal/help/VHDL/verilog/compiler.html например)

`define HASBANKS
`ifdef (HASBANKS)
...
`else
...
`endif
person wilcroft    schedule 27.03.2015
comment
Спасибо, Уилкрофт, именно это я и сделал, чтобы заставить его работать. Я преобразовал определение в параметр, а затем использовал параметр в операторе if. - person mshaaban; 28.03.2015

Lint правильный, так как в вашем выражении 4 > 1 всегда верно. Так что если это то, что вы хотите, нет никаких проблем.

Нео

person Neo Song    schedule 27.03.2015