iVerilog 中的 MUX:无法绑定参数/无法评估 genvar 表达式错误
Posted
技术标签:
【中文标题】iVerilog 中的 MUX:无法绑定参数/无法评估 genvar 表达式错误【英文标题】:MUX in iVerilog: Unable to bind parameter/cannot evaluate genvar expression errors 【发布时间】:2020-05-11 22:19:26 【问题描述】:请有人看看我的代码并解释为什么我会收到这些错误。我是iverilog的新手。这是一个项目
Power_ALU.v:13 error: Unable to bind parameter 'select' in 'Power_ALU_tb.ALU8'
Power_ALU.v:13 error: Cannot evaluate genvar conditional expression: (select)==('sd0)
第 13 行是 //INCREMENT 下的第一行
这是我的代码
module PowerALU(Out,Cin,s1,s2,s3,A,B);
input [7:0] A,B;
input Cin,s1,s2,s3;
output [7:0] Out;
wire Cout,A_LT_B,A_GT_B,A_EQ_B;
wire [7:0] Sum,And,Or,Xor,Nand,Nor,Xnor;
wire select;
assign select = s3,s2,s1,Cin;
//INCREMENT
if(select == 0)
begin
assign B = 8'b00000001;
RCA8 rca1(Cout,Sum,A,B,Cin);
assign Out = Sum;
end
//TRANSFER
.
.
.
//EQ
else if(select == 14)
begin
Comparator8 comp3(A_GT_B,A_LT_B,A_EQ_B,A,B);
assign Out = 0,0,0,0,0,0,0,A_EQ_B;
end
endmodule
【问题讨论】:
【参考方案1】:如果您在always
(或initial
)块之外有一个if
语句,它会被解释为一个 generate-if,用于在构建时选择不同的硬件来创建。因此,如果条件不是精化时间常数,如这里,则结果是编译错误。
您应该将if
语句放在always @*
块中,并从分配中删除assign
关键字。您需要将子模块实例移到 always
块之外,它们不能在运行时打开或关闭。
【讨论】:
以上是关于iVerilog 中的 MUX:无法绑定参数/无法评估 genvar 表达式错误的主要内容,如果未能解决你的问题,请参考以下文章
Mux 处理程序未接收到从 curl post 传递的所有查询参数
PHP PostgreSQL PDO 无法使用 LIKE 绑定参数