gpt4 book ai didi

verilog - 如何正确处理零位宽情况?

转载 作者:行者123 更新时间:2023-12-04 15:44:50 26 4
gpt4 key购买 nike

我在写泛型模块的时候,经常遇到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

例如,上面的模块从 x 中提取最低的 WIDTH 位。当 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];

这种情况有什么补救办法吗?

最佳答案

您的过程代码需要编译,即使具有错误范围的分支从未被采用。

module test #(
parameter WIDTH
) (
input logic [31 : 0] x,
output logic [31 : 0] y
);
always_comb
if (WIDTH == 0) y = 'x;
else y = x[WIDTH - 1 + (WIDTH==0): 0];
endmodule

你也可以这样做

module test #(
parameter WIDTH
) (
input logic [31 : 0] x,
output logic [31 : 0] y
);
if (WIDTH==0)
assign y = 'x;
else
assign y = x[WIDTH - 1: 0];
endmodule

关于verilog - 如何正确处理零位宽情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56336090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com