If statement 模块内部,如果在verilog中

If statement 模块内部,如果在verilog中,if-statement,verilog,If Statement,Verilog,我不太懂verilog 我试图调用if语句中的一个模块 我在谷歌上找不到答案,或者我不明白该怎么处理我的代码 我的代码是一个全加器加法 如果我想添加其他内容,我需要原因 这是我的代码: module top (a,b,cin,Cout,Ctemp,sum,clk,X); input [3:0] a,b; input X; input cin,clk; output reg[3:0] sum; output reg[2:0] Ctemp; output reg Cout; always@(po

我不太懂verilog 我试图调用if语句中的一个模块 我在谷歌上找不到答案,或者我不明白该怎么处理我的代码

我的代码是一个全加器加法 如果我想添加其他内容,我需要原因

这是我的代码:

module top (a,b,cin,Cout,Ctemp,sum,clk,X);
input [3:0] a,b;
input  X;
input cin,clk;
output reg[3:0] sum;
output reg[2:0] Ctemp;
output  reg Cout;
always@(posedge clk)
begin
generate
if (X==1)
add bit0(a[0], b[0], cin,  sum[0], Ctemp[0]); //here i need to call add module
add bit1(a[1], b[1], Ctemp[0], sum[1], Ctemp[1]);
add bit2(a[2], b[2], Ctemp[1], sum[2], Ctemp[2]);
add bit3(a[3], b[3], Ctemp[2], sum[3], Cout);
end
endgenerate
endmodule

module add(a, b, cin, sum, cout); 
input  a; 
input  b;
input  cin;
output sum;
output cout;
assign sum = (~a*~b*cin)+(~a*b*~cin)+(a*~b*~cin)+(a*b*cin);
assign cout = (a*b)+(a*cin)+(b*cin);
endmodule

我会给你一些提示。您需要将模块实例化移到
始终
块之外(上方或下方)。然后为要触发的模块的输出添加额外的
wire
声明。我建议将模块实例化端口连接修改为显式(按名称连接),而不是隐式(按顺序连接)。通过这种方式,即使端口顺序发生更改,也将保持连接。对于具有大量端口的模块非常有用。 顶部模块的主体应如下所示:

// ...
add bit3( .a(a[3]), .b(b[3]), .cin(Ctemp[2]),  .sum(pre_sum[3]), .cout(pre_cout));
always@(posedge clk)
begin
  if (X==1) begin
    sum <= pre_sum;
    Cout <= pre_cout;
  end
end

不能在
始终
块中使用
生成
块。你不“调用”模块,你“实例化”它们,你不能在
始终
块中实例化模型。。谢谢你,格雷格
module top (
  input [3:0] a, b,
  input       cin,
  output reg       Cout,
  output     [2:0] Ctemp,
  output reg [3:0] sum,
  input clk,
  input X );