Verilog 波形显示一些变量的蓝线和 Hiz
Verilog waveform shows blue lines and Hiz for some variables
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 代码。我首先在全加器中实例化了半加器,然后在四位加器中实例化了全加器,并创建了一个模拟测试台。它可以编译,但我无法从中获得准确的波形。我不知道问题出在设计中还是测试台中。
在您的测试平台中,您将信号 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;
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 代码。我首先在全加器中实例化了半加器,然后在四位加器中实例化了全加器,并创建了一个模拟测试台。它可以编译,但我无法从中获得准确的波形。我不知道问题出在设计中还是测试台中。
在您的测试平台中,您将信号 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;