verilog:使用变量输入生成块中的模块的实例化

时间:2014-03-15 00:09:15

标签: verilog

我刚开始使用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

ab的值在每个时钟周期都在变化。我知道我们只能在生成块中使用常量值,但我该如何处理呢?有什么出路吗?

1 个答案:

答案 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语句中使用==运算符,而不是=运算符。