If statement 模块内部,如果在verilog中
我不太懂verilog 我试图调用if语句中的一个模块 我在谷歌上找不到答案,或者我不明白该怎么处理我的代码 我的代码是一个全加器加法 如果我想添加其他内容,我需要原因 这是我的代码: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
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 );