Verilog错误。没有显示正确的结果

时间:2018-05-22 18:03:14

标签: verilog

我在显示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,否则它不起作用。

1 个答案:

答案 0 :(得分:0)

默认情况下,Verilog将数字文字值解释为十进制。值00000010为十进制10.对于Verilog将00000010解释为二进制,您需要将基数指定为'b00000010

            a <= 'b00000010; b <= 'b00000010; cin <= 0;

参见IEEE Std 1800-2012,5.7.1节整数文字常量