题解 | #自动贩售机1#

自动贩售机1

https://www.nowcoder.com/practice/dcf59e6c51f6489093495acb1bc34dd8


`timescale 1ns/1ns
module seller1(
    input wire clk  ,
    input wire rst  ,
    input wire d1 ,
    input wire d2 ,
    input wire d3 ,
    
    output reg out1,
    output reg [1:0]out2
);
//*************code***********//
parameter IDEL    =    7'b0000001;
parameter HALF     =    7'b0000010;
parameter ONE     =    7'b0000100;
parameter ONE_HALF = 7'b0001000;
parameter TWO     =    7'b0010000;
parameter TWO_HALF = 7'b0100000;
parameter THREE =    7'b1000000;
reg [6:0] state;
//state
always @(posedge clk or negedge rst) begin  
    if(~rst) begin
        state <= 0;
    end 
    else 
        case (state)
            IDEL: 
            if({d1,d2,d3}==3'b100)begin state <= HALF; end
            else if ({d1,d2,d3}==3'b010) begin state <= ONE; end
            else if ({d1,d2,d3}==3'b001) begin state <= TWO; end
            HALF: 
            if({d1,d2,d3}==3'b100)begin state <= ONE; end
            else if ({d1,d2,d3}==3'b010) begin state <= ONE_HALF; end
            else if ({d1,d2,d3}==3'b001) begin state <= TWO_HALF; end
            ONE: 
            if({d1,d2,d3}==3'b100)begin state <= ONE_HALF; end
            else if ({d1,d2,d3}==3'b010) begin state <= TWO; end
            else if ({d1,d2,d3}==3'b001) begin state <= THREE; end
                // ONE_HALF: state <= IDEL;
                // TWO: state <= IDEL;
                // TWO_HALF: state <= IDEL;
                // THREE: state <= IDEL;
                default : state <= IDEL;
        endcase
end        
//out1
always @(posedge clk or negedge rst) begin  
    if(~rst) begin
        out1  <= 0;
    end 
    else if(state == ONE_HALF||state == TWO||state == TWO_HALF||state == THREE)begin
        out1  <= 1;
    end
    else begin
        out1  <= 0;
    end
end
//out2
always @(posedge clk or negedge rst) begin  
    if(~rst) begin
        out2  <= 0;
    end 
    else if(state == TWO)begin
        out2  <= 1;
    end
    else if(state == TWO_HALF)begin
        out2  <= 2;
    end
    else if(state == THREE)begin
        out2  <= 3;
    end    
    else begin
        out2  <= 0;
    end
end

//*************code***********//
endmodule

#FPGA#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务