简化版代码如下,仿真正确。

`timescale 1ns/1ns

module seller2(
	input wire clk  ,
	input wire rst  ,
	input wire d1 ,
	input wire d2 ,
	input wire sel ,
	
	output reg out1,
	output reg out2,
	output reg out3
);
//*************code***********//
    localparam IDLE = 3'd0, // 0
               S0   = 3'd1, // 0.5
               S1   = 3'd2, // 1
               S2   = 3'd3, // 1.5
               S3   = 3'd4, // 2
               S4   = 3'd5, // 2.5
               S5   = 3'd6; // 3
    reg [2:0] nxt_state_w;
    reg [2:0] cur_state_r;

//*************code***********//
    always @(posedge clk or negedge rst) begin
        if (~rst) begin
            cur_state_r <= 'd0;
        end
        else begin
            cur_state_r <= nxt_state_w;
        end
    end
        
    always @(*) begin
        case(cur_state_r)
            IDLE: begin
                case({d1, d2})
                    2'b10: nxt_state_w = S0;
                    2'b01: nxt_state_w = S1;
                    default: nxt_state_w = nxt_state_w;
                endcase
            end
            S0: begin
                case({d1, d2})
                    2'b10: nxt_state_w = S1;
                    2'b01: nxt_state_w = S2;
                    default: nxt_state_w = nxt_state_w;
                endcase
            end
            S1: begin
                case({d1, d2})
                    2'b10: nxt_state_w = S2;
                    2'b01: nxt_state_w = S3;
                    default: nxt_state_w = nxt_state_w;
                endcase
            end
            S2: begin
                if (sel==1'b0)
                    nxt_state_w = IDLE;
                else begin
                    case({d1, d2})
                        2'b10: nxt_state_w = S3;
                        2'b01: nxt_state_w = S4;
                        default: nxt_state_w = nxt_state_w;
                    endcase
                end
            end
            S3: begin
                if (sel==1'b0)
                    nxt_state_w = IDLE;
                else begin
                    case({d1, d2})
                        2'b10: nxt_state_w = S4;
                        2'b01: nxt_state_w = S5;
                        default: nxt_state_w = nxt_state_w;
                    endcase
                end
            end
            default: nxt_state_w = IDLE;
        endcase
    end
        
    always @(posedge clk or negedge rst) begin
        if (~rst) begin
            out1 <= 'd0;
            out2 <= 'd0;
            out3 <= 'd0;
        end
        else begin
            out1 <= !sel && nxt_state_w >= S2;
            out2 <=  sel && nxt_state_w >= S4;
            out3 <= (!sel && nxt_state_w == S3) ||
                    ( sel && nxt_state_w == S5)  ;
        end
    end
    
endmodule