If statement 无法绑定参数?
我试图通过Verilog创建多个加法器来比较每个加法器的速度 我遇到以下错误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, ); ////////////////////////////////////////////
无法以算术单位绑定参数宽度
这是我目前的代码:
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参数。谢谢你的帮助。