Форма волны Verilog показывает синие линии и Hiz для некоторых переменных - PullRequest
0 голосов
/ 21 апреля 2020
module half_adder(sum, carry, a, b); 
input a, b; 
output sum, carry; 
xor sum1(sum, a, b); 
and carry1(carry, a, b); 
endmodule

module full_adder (fsum, fcarry_out, a, b, c); 
input a, b, c; 
output fsum, fcarry_out; 
wire half_sum_1, half_carry_1, half_carry_2; 
half_adder HA1(half_sum_1, half_carry_1, a, b); 
half_adder HA2(fsum, half_carry_2, half_sum_1, c); 
or or1(fcarry_out, half_carry_2, half_carry_1); 
endmodule

module four_bit_binary_adder (full_sum_1, full_sum_2, full_sum_3, full_sum_4, carry_out_4, a, b, c, d, e, f, g, h, c_in);
input a, b, c, d,e,f,g,h, c_in;
output full_sum_1, full_sum_2, full_sum_3, full_sum_4, carry_out_4;
wire full_carry_1, full_carry_2, full_carry_3;
full_adder FA1(full_sum_1, full_carry_1, a, e, c_in);
full_adder FA2(full_sum_2, full_carry_2, b, f , full_carry_1);
full_adder FA3(full_sum_3, full_carry_3, c, g ,  full_carry_2);
full_adder FA4(full_sum_4, carry_out_4 , d, h, full_carry_3);
endmodule

module testbench_4_bit_binary_adder;
  reg  A,B,C,D,E,F,G,H,C_in;
  wire  a,b,c,d,e,f,g;
  four_bit_binary_adder t6(S0,S1,S2,S3,C_out,A,B,C,D,E,F,G,H,C_in);
    initial
    begin
      #100 A=1'B0;B=1'B0;C=1'B0;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B0;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B1;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B1;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B0;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B0;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B1;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B1;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B1;B=1'B0;C=1'B0;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B1;B=1'B0;C=1'B0;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B0;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B0;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B1;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B0;C=1'B1;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B0;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B0;D=1'B1; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;
      #100 A=1'B0;B=1'B1;C=1'B1;D=1'B0; E=1'B0;F=1'B0;G=1'B0;H=1'B0;C_in=1'B0;

    end
  endmodule

Это мой код Verilog. Сначала я инстанцировал половину сумматора в полном сумматоре, а затем инстанцировал полный сумматор в четырехбитном сумматоре и создал тестовый стенд для моделирования. Он компилируется, но я не могу получить точную форму волны из него. Я не могу понять, если проблема в дизайне или испытательном стенде.

1 Ответ

1 голос
/ 21 апреля 2020

В вашем тестовом стенде вы объявили сигналы a,b,c,d,e,f,g как wire, но вы не управляете этими сигналами. Значение по умолчанию wire - z.

Поскольку вы не используете эти сигналы, но используете сигналы S0 - S3, вам следует изменить:

  wire  a,b,c,d,e,f,g;

до:

  wire S0, S1, S2, S3;
...