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 表达式错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在iverilog中编译unisim代码

Mux 处理程序未接收到从 curl post 传递的所有查询参数

无法在 vue.js 应用程序中播放 Mux 资产

PHP PostgreSQL PDO 无法使用 LIKE 绑定参数

Exchange 2010 PowerShell:无法绑定参数

无法在成员函数中绑定右值引用参数