Да, вы можете сделать этот модуль полностью параметризуемым, используя неуправляемый цикл for. Этот цикл будет проверять каждый бит сигнала out
, если индекс цикла все еще меньше двоичного входного сигнала.
Код будет выглядеть следующим образом:
module decoder #(
parameter IN_W = 10,
parameter OUT_W = 1 << IN_W
)
(
input [IN_W-1:0] in,
output reg [OUT_W-1:0] out
);
integer i;
always @* begin
// Use an unrollable loop.
for (i = 0; i < OUT_W; i++) begin
// (in < i) returns a 1-bit value
out[i] = (in < i);
end
end
endmodule
Как вы, наверное, заметили, я также изменил способ объявления портов. В Verilog 2001 - а также в более поздних (системных) версиях Verilog - список портов и объявление портов могут комбинироваться. Этот новый синтаксис, также известный как стиль ANSI, имеет то преимущество, что вам не нужно добавлять столько стандартного кода.