Verilog ошибка.не отображаются правильные результаты - PullRequest
0 голосов
/ 22 мая 2018

У меня возникли проблемы с отображением результата моего 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 голосов
/ 22 мая 2018

По умолчанию Verilog интерпретирует числовое литеральное значение как десятичное.Значение 00000010 является десятичным 10. Чтобы Verilog интерпретировал 00000010 как двоичный файл, необходимо указать базу как 'b00000010:

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

См. IEEE Std 1800-2012, раздел 5.7.1 Целочисленные литеральные константы .

...