我刚开始学习Verilog,并决定制作一个4位加法器。为了创建这个4位加法器,我首先构建了half_adder模块,然后构建了一个使用half_adder模块的full_adder模块。在4位加法器中,我使用4个full_adder模块。 至此,所有内容都可以使用Verilator进行编译和模拟。我写了一些测试,并检查了所有输出是否正确。
用4位加法器完成后,我想到了创建一个小的ALU,它使用4位加法器进行加法。现在,当我在ALU模块中创建4位加法器的子模块时,出现了验证器错误。
4位加法器如下:
`default_nettype none
module adder_4_bit(
i_a,
i_b,
o_sum,
o_carry
);
input [3:0] i_a;
input [3:0] i_b;
output [3:0] o_sum;
output wire o_carry;
wire internal_carry1;
wire internal_carry2;
wire internal_carry3;
full_adder full_adder1(
.i_a ( i_a[0] ),
.i_b ( i_b[0] ),
.i_carry ( 1'b0 ),
.o_sum ( o_sum[0] ),
.o_carry ( internal_carry1 )
);
full_adder full_adder2(
.i_a ( i_a[1] ),
.i_b ( i_b[1] ),
.i_carry ( internal_carry1 ),
.o_sum ( o_sum[1] ),
.o_carry ( internal_carry2 )
);
full_adder full_adder3(
.i_a ( i_a[2] ),
.i_b ( i_b[2] ),
.i_carry ( internal_carry2 ),
.o_sum ( o_sum[2] ),
.o_carry ( internal_carry3 )
);
full_adder full_adder4(
.i_a ( i_a[3] ),
.i_b ( i_b[3] ),
.i_carry ( internal_carry3 ),
.o_sum ( o_sum[3] ),
.o_carry ( o_carry )
);
endmodule
ALU(现在)看起来像这样。我仍然需要实现optcode select等,但是即使创建4位加法器子模块也已导致错误...:
`default_nettype none
module alu_4_bit(
i_a,
i_b,
i_opt,
o_result,
o_status
);
input [3:0] i_a;
input [3:0] i_b;
input [3:0] i_opt;
output [3:0] o_result;
output [4:0] o_status;
adder_4_bit adder_4_bit_inst(
.i_a(i_a),
.i_b(i_b),
.o_sum(o_result),
.o_carry(o_status[0])
);
endmodule
运行命令时
verilator -Wall -cc alu_4_bit.v
我收到以下错误:
verilator -Wall -cc alu_4_bit.v
%Error: adder_4_bit:5: Unterminated string
%Error: adder_4_bit:11: Unterminated string
%Error: adder_4_bit:27: Unterminated string
%Error: adder_4_bit:28: Unterminated string
%Error: adder_4_bit:31: Unterminated string
%Error: adder_4_bit:40: Unterminated string
%Error: adder_4_bit:44: Unterminated string
%Error: adder_4_bit:58: Unterminated string
%Error: adder_4_bit:60: Unterminated string
%Error: adder_4_bit:66: Unterminated string
%Error: adder_4_bit:70: Unterminated string
%Error: adder_4_bit:72: Unterminated string
%Error: adder_4_bit:78: Unterminated string
%Error: adder_4_bit:79: Unterminated string
%Error: adder_4_bit:81: Unterminated string
%Error: adder_4_bit:86: Unterminated string
%Error: adder_4_bit:93: Unterminated string
%Error: adder_4_bit:119: Unterminated string
%Error: adder_4_bit:121: Unterminated string
%Error: adder_4_bit:124: Unterminated string
%Error: adder_4_bit:131: Unterminated string
%Error: adder_4_bit:132: Unterminated string
%Error: adder_4_bit:133: Unterminated string
%Error: adder_4_bit:134: Unterminated string
%Error: adder_4_bit:135: Unterminated string
%Error: adder_4_bit:139: Unterminated string
%Error: adder_4_bit:141: Unterminated string
%Error: adder_4_bit:143: Unterminated string
%Error: adder_4_bit:144: Unterminated string
%Error: adder_4_bit:146: Unterminated string
%Error: adder_4_bit:148: Unterminated string
%Error: adder_4_bit:150: Unterminated string
%Error: adder_4_bit:157: Unterminated string
%Error: adder_4_bit:160: Unterminated string
%Error: adder_4_bit:162: Unterminated string
%Error: adder_4_bit:164: Unterminated string
%Error: adder_4_bit:165: Unterminated string
%Error: adder_4_bit:1: syntax error, unexpected $undefined
%Error: Exiting due to 38 error(s)
%Error: Command Failed /usr/local/bin/verilator_bin -Wall -cc alu_4_bit.v
奇怪的是,这些错误似乎来自adder_4_bit.v,而我已经使用Verilator对其进行了编译和仿真。我什至确保它能正常工作。
这里可能是什么问题?
答案 0 :(得分:1)
当我尝试使用verilator进行编译时,没有得到这样的警告,但是我得到了其他一些警告:
alu_4_bit.v:12: Signal is not used: i_opt
我在模块I / O中注释了input[3:0] i_opt
和i_opt的定义,然后收到了此警告。
%Error: alu_4_bit.v:20: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic
我将output[3:0] o_status
替换为output o_status
,并从.o_carry(o_status[0])
中删除了选择位,所以现在是.o_carry(o_status)
。
之后,该设计使用我的Verilator版本(4.004)进行了编译。希望这些对您也有帮助。