Рассмотрим следующий код Verilog.Использование параметров Verilog, если в остальных случаях
parameter C_SUB_WIDTH = 2;
parameter C_SUB_HEIGHT = 2;
parameter BIT_DEPTH = 12;
reg [5:0] single_block_width;
always @ (*) begin
if(BIT_DEPTH == 8) begin
case({C_SUB_HEIGHT == 1, C_SUB_WIDTH == 1})
2'b00: single_block_width = 6'd16;
2'b10: single_block_width = 6'd16;
2'b11: single_block_width = 6'd24;
default:single_block_width = 6'dx;
endcase
end
else if(BIT_DEPTH == 10) begin
case({C_SUB_HEIGHT == 1, C_SUB_WIDTH == 1})
2'b00: single_block_width = 6'd16;
2'b10: single_block_width = 6'd24;
2'b11: single_block_width = 6'd32;
default:single_block_width = 6'dx;
endcase
end
else if(BIT_DEPTH == 12) begin
case({C_SUB_HEIGHT == 1, C_SUB_WIDTH == 1})
2'b00: single_block_width = 6'd24;
2'b10: single_block_width = 6'd24;
2'b11: single_block_width = 6'd40;
default:single_block_width = 6'dx;
endcase
end
else begin
single_block_width = 6'dx;
end
end
С C_SUB_WIDTH, C_SUB_HEIGHT и BIT_DEPTH все параметры, будет это сделать single_block_width, параметр тоже?
Если нет, то как я могу сделать параметр single_block_width a и установить его значение на основе вышеупомянутых параметров?
Я использую Xilinx Vivado для синтеза вышеуказанного кода. (Его необходимо уметь синтезировать)
Спасибо.
Кстати, для моделирования полезно использовать 'always @ (*)' только с параметрами в всегда блоке. Поскольку параметры никогда не изменяются, для блока не нужно ничего чувствительного, и блок никогда не выполняется. SystemVerilog решает это с помощью конструкции 'always_comb', которая гарантирует, что он будет выполнять блок хотя бы один раз за время 0. –
Спасибо за вашу ценную информацию – user2389323