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