我刚开始使用verilog并尝试实现一个小块,我想在generate块中调用一个模块,但是带有可变参数,例如:
module abc(a,b,c,d)
input a,b;
output c,d;
generate
if(a=1) begin
xyz xyz1(a,b,c,d);
end
if(a=0) begin
efj xyz1(a,b,c,d);
endgenerate
endmodule
a
和b
的值在每个时钟周期都在变化。我知道我们只能在生成块中使用常量值,但我该如何处理呢?有什么出路吗?
答案 0 :(得分:1)
看起来你需要同时使用这两个模块,所以在没有生成的情况下实例化它们,但是根据它的值将它们的输出连接到abc的输出:
module abc(a,b,c,d);
input a,b;
output reg c,d;
wire c1, d1, c2, d2;
xyz xyz1(a,b,c1,d1);
efj xyz2(a,b,c2,d2);
always @(*)
if (a==1) begin
c=c1; d=d1;
end
else begin
c=c2; d=d2;
end
endmodule
此外,您应该在if语句中使用==运算符,而不是=运算符。