变量声明:
output reg a, b, c;
以下内容有什么问题,以Verilog编码:
generate
if (!a && !b && !c)
call call1(param1, param2, param3);
endgenerate
我在if
语句行中收到以下错误:
Error - unknown or bad value for genvar
Elaboration time unknown or bad value encountered for generate if-statement
condition expression.
Please make sure it is elaboration time constant.
我甚至尝试了以下内容:
always @* begin
if (!a && !b && !c)
call call1(param1, param2, param3);
end
当我执行上面的操作时(始终阻止),我收到以下语法错误:
Token is '('
call call1(param1, param2, param3);
^
答案 0 :(得分:3)
您使用verilog的方式看起来有些混淆,特别是您使用的命名约定。
使用生成on EDA Playground的示例的编译版本:
module test;
localparam a = 0;
localparam b = 0;
localparam c = 0;
generate
if (!a && !b && !c) begin
call call1(param1, param2, param3);
end
endgenerate
endmodule
module call(
input param1,
input param2,
input param3
);
endmodule
这实例化调用,即如果a,b和c为0则创建硬件。由于我们无法创建和销毁硬件a,b,c必须是常量。
您已将模块调用调用,这听起来像是在查看软件函数调用。它不是硬件块。
您的端口已命名为 param ,端口不是参数,它们代表将模块相互连接的硬件中的物理线路。
听起来你实际上试图选择逻辑,在这种情况下你需要组合硬件来选择使用哪个输出。
wire out1,out2,result;
call call1 (input1, input2, out1); //<-- Hardware always exists
othercall instance_2(input1, input2, out2);
always @* begin
if (!a && !b && !c)
result = out1; //<-- Output from different modules selected
else
result = out2;
end
如果您没有在两个输出之间进行选择:
call call1 (input1, input2, out1); //<-- Hardware always exists
always @* begin
if (!a && !b && !c)
result = out1; //<-- Output from module selected
else
result = 'b0; // Otherwise drive 0
end