7段译码器没有错误,但测试失败
7-segment decoder does not have errors, but test is failing
下面是我的7段解码器代码:
module decoder(
input i_A,
input i_B,
input i_C,
input i_D,
output o_1,
output o_2,
output o_3,
output o_4,
output o_5,
output o_6,
output o_7
);
reg din;
reg dout;
always @* begin
case(din)
4'd0 : begin dout = 7'b0111111; end
4'd1 : begin dout = 7'b0000110; end
4'd2 : begin dout = 7'b1011011; end
4'd3 : begin dout = 7'b1001111; end
4'd4 : begin dout = 7'b1100110; end
4'd5 : begin dout = 7'b1101101; end
4'd6 : begin dout = 7'b1111101; end
4'd7 : begin dout = 7'b0000111; end
4'd8 : begin dout = 7'b1111111; end
4'd9 : begin dout = 7'b1101111; end
default: dout = 7'b0000000;
endcase
end
代码没有任何错误。但是,当我在 testbench 上测试它时,测试失败了。有人可以帮我吗?下面是测试台上的一项测试。我以为满足了测试的条件,但显然不是。从测试台来看,我认为如果dout
等于参数,则sol_cnt
增加1。我错了吗?我不确定我必须从这里修复什么,因为没有错误,但测试失败了。
reg [3:0] din;
wire [6:0] dout;
reg [3:0] sol_cnt;
parameter SOLUTION_0 = 7'b0111111;
decoder u_decoder (
.i_A ( din[0] ),
.i_B ( din[1] ),
.i_C ( din[2] ),
.i_D ( din[3] ),
.o_1 ( dout[0] ),
.o_2 ( dout[1] ),
.o_3 ( dout[2] ),
.o_4 ( dout[3] ),
.o_5 ( dout[4] ),
.o_6 ( dout[5] ),
.o_7 ( dout[6] )
);
din = 0;
sol_cnt = 0;
din = 0;
#10;
if (dout==SOLUTION_0) begin
$display ("Case 0 is passed");
sol_cnt = sol_cnt + 1;
end
else begin
$display ("Case 0 is failed");
end
decoder
模块有未驱动的输出端口和未连接的输入端口。由于您的测试平台为这些使用总线信号,您不妨使用总线端口:
module decoder(
input [3:0] din,
output reg [6:0] dout
);
always @* begin
case(din)
4'd0 : begin dout = 7'b0111111; end
4'd1 : begin dout = 7'b0000110; end
4'd2 : begin dout = 7'b1011011; end
4'd3 : begin dout = 7'b1001111; end
4'd4 : begin dout = 7'b1100110; end
4'd5 : begin dout = 7'b1101101; end
4'd6 : begin dout = 7'b1111101; end
4'd7 : begin dout = 7'b0000111; end
4'd8 : begin dout = 7'b1111111; end
4'd9 : begin dout = 7'b1101111; end
default: dout = 7'b0000000;
endcase
end
endmodule
在testbench中,dut实例改为:
decoder dut (
.din (din),
.dout (dout)
);
代码运行并通过edaplayground。
下面是我的7段解码器代码:
module decoder(
input i_A,
input i_B,
input i_C,
input i_D,
output o_1,
output o_2,
output o_3,
output o_4,
output o_5,
output o_6,
output o_7
);
reg din;
reg dout;
always @* begin
case(din)
4'd0 : begin dout = 7'b0111111; end
4'd1 : begin dout = 7'b0000110; end
4'd2 : begin dout = 7'b1011011; end
4'd3 : begin dout = 7'b1001111; end
4'd4 : begin dout = 7'b1100110; end
4'd5 : begin dout = 7'b1101101; end
4'd6 : begin dout = 7'b1111101; end
4'd7 : begin dout = 7'b0000111; end
4'd8 : begin dout = 7'b1111111; end
4'd9 : begin dout = 7'b1101111; end
default: dout = 7'b0000000;
endcase
end
代码没有任何错误。但是,当我在 testbench 上测试它时,测试失败了。有人可以帮我吗?下面是测试台上的一项测试。我以为满足了测试的条件,但显然不是。从测试台来看,我认为如果dout
等于参数,则sol_cnt
增加1。我错了吗?我不确定我必须从这里修复什么,因为没有错误,但测试失败了。
reg [3:0] din;
wire [6:0] dout;
reg [3:0] sol_cnt;
parameter SOLUTION_0 = 7'b0111111;
decoder u_decoder (
.i_A ( din[0] ),
.i_B ( din[1] ),
.i_C ( din[2] ),
.i_D ( din[3] ),
.o_1 ( dout[0] ),
.o_2 ( dout[1] ),
.o_3 ( dout[2] ),
.o_4 ( dout[3] ),
.o_5 ( dout[4] ),
.o_6 ( dout[5] ),
.o_7 ( dout[6] )
);
din = 0;
sol_cnt = 0;
din = 0;
#10;
if (dout==SOLUTION_0) begin
$display ("Case 0 is passed");
sol_cnt = sol_cnt + 1;
end
else begin
$display ("Case 0 is failed");
end
decoder
模块有未驱动的输出端口和未连接的输入端口。由于您的测试平台为这些使用总线信号,您不妨使用总线端口:
module decoder(
input [3:0] din,
output reg [6:0] dout
);
always @* begin
case(din)
4'd0 : begin dout = 7'b0111111; end
4'd1 : begin dout = 7'b0000110; end
4'd2 : begin dout = 7'b1011011; end
4'd3 : begin dout = 7'b1001111; end
4'd4 : begin dout = 7'b1100110; end
4'd5 : begin dout = 7'b1101101; end
4'd6 : begin dout = 7'b1111101; end
4'd7 : begin dout = 7'b0000111; end
4'd8 : begin dout = 7'b1111111; end
4'd9 : begin dout = 7'b1101111; end
default: dout = 7'b0000000;
endcase
end
endmodule
在testbench中,dut实例改为:
decoder dut (
.din (din),
.dout (dout)
);
代码运行并通过edaplayground。