is not a constant"if 语句中的错误-6ren"> is not a constant"if 语句中的错误-我正在尝试编写一个简单的模块来根据四个输入信号的值输出一个 14 位数。我的尝试如下所示。 module select_size( input a, input b, inpu-6ren">
gpt4 book ai didi

verilog - " is not a constant"if 语句中的错误

转载 作者:行者123 更新时间:2023-12-04 23:26:40 34 4
gpt4 key购买 nike

我正在尝试编写一个简单的模块来根据四个输入信号的值输出一个 14 位数。我的尝试如下所示。

module select_size(
input a,
input b,
input c,
input d,
output [13:0] size
);

if (a) begin
assign size = 14'h2222;
end
else begin
if (b) begin
assign size = 14'h1111;
end
else begin
if (c) begin
assign size = 14'h0777;
end
else begin
assign size = 14'h0333;
end
end
end

endmodule

编译后,我收到以下错误:

ERROR:HDLCompiler:44 - Line 67: c is not a constant



我不明白为什么如果前面的其他两个 if 语句不起作用,那么它为什么不起作用。我尝试将条件更改为
if (c == 1) begin

但无济于事。

有谁知道如何解决这个错误?谢谢!

最佳答案

两个问题:

1)你需要把if always 中的语句堵塞。

如果你使用verilog-2001,你可以使用

always @*
if ....
end
end

否则指定敏感度列表中的所有输入:
always @(a or b or c or d)
if ....
end
end

2) if 语句中不允许常量赋值。

删除 assign if 中任何语句的关键字堵塞:
if (a) begin
size = 14'h2222;
end

您还必须将 size 声明为 reg类型。

但是我更喜欢用条件运算符重写整个模块,我发现它更适合阅读。以下模块实现了相同的结果:
module select_size(
input a,
input b,
input c,
input d,
output [13:0] size
);

assign size = a ? 14'h2222 :
b ? 14'h1111 :
c ? 14'h0777 :
14'h0333 ;

endmodule

关于verilog - "<signal> is not a constant"if 语句中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836416/

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