If statement 无法绑定参数?

If statement 无法绑定参数?,if-statement,verilog,If Statement,Verilog,我试图通过Verilog创建多个加法器来比较每个加法器的速度 我遇到以下错误无法以算术单位绑定参数宽度 这是我目前的代码: module arith_unit #( parameter ADDER_TYPE = 0, parameter WIDTH = 8) (input [WIDTH-1:0] a, input [WIDTH-1:0] b, output [WIDTH-1:0] sum, ); ////////////////////////////////////////////

我试图通过Verilog创建多个加法器来比较每个加法器的速度

我遇到以下错误
无法以算术单位绑定参数宽度

这是我目前的代码:

module arith_unit 
#(
parameter ADDER_TYPE = 0,
parameter WIDTH = 8)
(input [WIDTH-1:0] a,
input [WIDTH-1:0] b,    
output [WIDTH-1:0] sum,
);

////////////////////////////////////////////////////////////////
if (ADDER_TYPE == 0) 
begin
    ripple_carry rc1 (a, b, cin, sum, cout);
end

////////////////////////////////////////////////////////////////
else if (ADDER_TYPE == 1) 
begin
   carry_bypass cb1 (a, b, cin, sum, cout);
end

//// more else statment for ADDER_TYPE...

endmodule  

//////////////////////////////////////////////////////////////////
module ripple_carry_4_bit(a, b, cin, sum, cout);

input [3:0] a,b;
input cin;
wire c1,c2,c3;
output [3:0] sum;
output cout;

full_adder fa0(.a(a[0]), .b(b[0]),.cin(cin), .sum(sum[0]),.cout(c1));
full_adder fa1(.a(a[1]), .b(b[1]), .cin(c1), .sum(sum[1]),.cout(c2));
full_adder fa2(.a(a[2]), .b(b[2]), .cin(c2), .sum(sum[2]),.cout(c3));
full_adder fa3(.a(a[3]), .b(b[3]), .cin(c3), .sum(sum[3]),.cout(cout));

endmodule

////////////////////////////////////////////////////////////////
module ripple_carry (a, b, cin, sum, cout);

input [WIDTH-1:0] a,b;
input cin;
wire c1,c2,c3, c4, c5, c6, c7;
output [WIDTH-1:0] sum;
output cout;

if (WIDTH == 8) begin  //<-------- compiler is pointing here as the problem
    ripple_carry_4_bit rca1 (.a(a[3:0]),.b(b[3:0]),.cin(cin), .sum(sum[3:0]),.cout(c1));
    ripple_carry_4_bit rca2 (.a(a[7:4]),.b(b[7:4]),.cin(c1), .sum(sum[7:4]),.cout(cout));
end

else if (WIDTH == 16) begin
    ripple_carry_4_bit rca1 (.a(a[3:0]),.b(b[3:0]),.cin(cin), .sum(sum[3:0]),.cout(c1));
    ripple_carry_4_bit rca2 (.a(a[7:4]),.b(b[7:4]),.cin(c1), .sum(sum[7:4]),.cout(c2));
    ripple_carry_4_bit rca3 (.a(a[11:8]),.b(b[11:8]),.cin(c2), .sum(sum[11:8]),.cout(c3));
    ripple_carry_4_bit rca4 (.a(a[15:12]),.b(b[15:12]),.cin(c3), .sum(sum[15:12]),.cout(cout));
end

//// more else statment for 32 & 64 bits...

endmodule
模块算术单元
#(
参数加法器_TYPE=0,
参数宽度=8)
(输入[WIDTH-1:0]a,
输入[WIDTH-1:0]b,
输出[WIDTH-1:0]和,
);
////////////////////////////////////////////////////////////////
if(加法器类型==0)
开始
ripple_进位rc1(a、b、cin、sum、cout);
结束
////////////////////////////////////////////////////////////////
else if(加法器类型==1)
开始
进位旁路cb1(a、b、cin、sum、cout);
结束
////加法器类型的更多其他说明。。。
端模
//////////////////////////////////////////////////////////////////
模块纹波进位4位(a、b、cin、sum、cout);
输入[3:0]a,b;
输入cin;
导线c1、c2、c3;
输出[3:0]和;
输出电流;
全加器fa0(.a(a[0]),.b(b[0]),.cin(cin),.sum(sum[0]),.cout(c1));
全加器fa1(.a(a[1]),.b(b[1]),.cin(c1),.sum(sum[1]),.cout(c2));
全加器fa2(.a(a[2]),.b(b[2]),.cin(c2),.sum(sum[2]),.cout(c3));
全加器fa3(.a(a[3]),.b(b[3]),.cin(c3),.sum(sum[3]),.cout(cout));
端模
////////////////////////////////////////////////////////////////
模块波纹_进位(a、b、cin、sum、cout);
输入[WIDTH-1:0]a、b;
输入cin;
导线c1、c2、c3、c4、c5、c6、c7;
输出[宽度-1:0]和;
输出电流;

如果(WIDTH==8)begin/,则有助于显示带有行号的准确错误消息,但在
模块ripple\u carry
中缺少宽度参数声明

module ripple_carry #(parameter WIDTH=8)(...
并在generate块内实例化时添加它

   ripple_carry #(WIDTH) (a, b, cin, sum, cout);

它将有助于显示带有行号的准确错误消息,但在
模块ripple\u carry
中缺少宽度参数声明

module ripple_carry #(parameter WIDTH=8)(...
并在generate块内实例化时添加它

   ripple_carry #(WIDTH) (a, b, cin, sum, cout);

如果。。。否则如果
被包装在一个
生成
块中?@PatrickRoberts真的吗?我检查了
asic-world
,他们的
if和else
示例没有
generate
块。在
asic-world
上,他们不是有条件地声明硬件,而是在
always
块中使用
if-else
作为顺序逻辑。完全不同。@PatrickRoberts哦,好吧,我明白了。我已经用
generate
块修复了
bind参数。谢谢你的帮助。
如果。。。否则如果
被包装在一个
生成
块中?@PatrickRoberts真的吗?我检查了
asic-world
,他们的
if和else
示例没有
generate
块。在
asic-world
上,他们不是有条件地声明硬件,而是在
always
块中使用
if-else
作为顺序逻辑。完全不同。@PatrickRoberts哦,好吧,我明白了。我已经用
generate
块修复了
bind参数。谢谢你的帮助。