我在显示8位加法器verilog的结果时遇到了一些麻烦
module Adder(a,b,cin,s,co);
input [7:0]a;
input [7:0]b;
output [7:0]s;
output co;
wire [6:0] u;
input cin;
Carry c1(a[0],b[0],cin,s[0],u[0]);
Carry c2(a[1],b[1],u[0],s[1],u[1]);
Carry c3(a[2],b[2],u[1],s[2],u[2]);
Carry c4(a[3],b[3],u[2],s[3],u[3]);
Carry c5(a[4],b[4],u[3],s[4],u[4]);
Carry c6(a[5],b[5],u[4],s[5],u[5]);
Carry c7(a[6],b[6],u[5],s[6],u[6]);
Carry c8(a[7],b[7],u[6],s[7],co);
endmodule
module Carry(a,b,cin,s,co);
input wire a;
input wire b;
input wire cin;
output wire co;
output wire s;
assign co = (a & b) | (b & cin) | (a & cin);
assign s = (~a & ~b & cin) | (~a & b & ~cin) | (a & ~b & ~cin)| (a & b & cin);
endmodule
module testbench;
reg [7:0]a;
reg [7:0]b;
reg cin;
wire [7:0]s;
wire co;
Adder add(a, b, cin, s, co);
initial begin
$dumpfile("result.vcd");
$dumpvars;
a <= 00000010; b <= 00000010; cin <= 0;
#5
$monitor("time=%4d: %b + %b + %b: sum = %b, carry = %b\n",$time,a,b,cin,s,co);
end
endmodule
虽然它正确地添加了所有内容,但却没有添加我原来想要的数字。
time= 5: 00001010 + 00001010 + 0: sum = 00010100, carry = 0
我如何修复它,以便不添加这些数字,而是添加我想要的数字。 (a = 00000010; b = 00000010; cin = 0;) 我已经尝试更改数字,但除非他们是00000001,否则它不起作用。
答案 0 :(得分:0)
默认情况下,Verilog将数字文字值解释为十进制。值00000010
为十进制10.对于Verilog将00000010
解释为二进制,您需要将基数指定为'b00000010
:
a <= 'b00000010; b <= 'b00000010; cin <= 0;
参见IEEE Std 1800-2012,5.7.1节整数文字常量。