Я пишу простой модуль Verilog, который должен иметь ограничения на значения параметров. Под этим я подразумеваю, что общему параметру разрешено присваивать только определенные значения. Я знаю, что это можно сделать на VHDL, есть ли эквивалент или обходной путь в Verilog? Я задаю этот вопрос, потому что компилятор Xilinx, похоже, видит значение углового случая, которое никогда не возникло бы, если бы мой параметр находился в определенном диапазоне.
Я попытался проверить свой параметр в начальном блоке и выполнить $fatal, если он выходит за пределы разрешенного диапазона. Кажется, это очень грязное решение...





Если вы можете использовать SystemVerilog, который поддерживает Vivado, это легко сделать с помощью блока Generate-if.
module top;
dut #(1) u1 ();
endmodule
module dut;
parameter p;
if (!( p inside {[2:3]}) ) $fatal("sorry");
endmodule
Спасибо, я знаю, что да, я просто пытаюсь сохранить свой код только в Verilog... Итак, я думаю, в Verilog нет чистого способа сделать это?
Использование $fatal уже является SystemVerilog. Почему бы не воспользоваться этим в полной мере?
Да, код работает, но я получаю нарушение линтинга, о чем я говорил в абзаце выше!