Когда я пишу универсальный модуль, я часто сталкиваюсь с регистром ширины 0 бит.
module test #(
parameter WIDTH
) (
input logic [31 : 0] x,
output logic [31 : 0] y
);
always_comb begin
y = x[WIDTH - 1 : 0];
end
endmodule
Например, вышеупомянутый модуль извлекает младшие биты WIDTH из x.
Когда WIDTH равен 0, вывод не имеет значения.
Однако, когда модуль создается с WIDTH 0, я получаю следующую ошибку в Modelsim:
# ** Fatal: (vsim-3373) test.sv(8): Range of part-select [-1:0] into 'x' [31:0] is reversed.
Я попробовал следующий код, надеясь оптимизировать плохую часть во время компиляции, но ошибка остается.
if (WIDTH == 0) y = 0;
else y = x[WIDTH - 1 : 0];
Есть ли какое-нибудь средство от этой ситуации?