题解 | #自动售卖机#

自动售卖机

https://www.nowcoder.com/practice/487953e6d3e3434988e0dd6960b6c9f8

`timescale 1ns/1ns

module sale(
   input                clk   ,
   input                rst_n ,
   input                sel   ,//sel=0,5$dranks,sel=1,10&=$drinks
   input          [1:0] din   ,//din=1,input 5$,din=2,input 10$
 
   output   reg  [1:0] drinks_out,//drinks_out=1,output 5$ drinks,drinks_out=2,output 10$ drinks
   output	reg        change_out   
);

    parameter s0 = 'd0;
    parameter s1 = 'd1;
    parameter s2 = 'd2;
    parameter s3 = 'd3;

    reg [1:0]   state,nstate;

    always@(posedge clk,negedge rst_n)begin
        if(!rst_n)
            state <= s0;
        else
            state <= nstate;
    end

    always@(*)begin
        if(!rst_n)
            nstate = s0;
        else if(sel == 'd0)
            nstate = s0;
        else if(sel == 'd1)begin
            case(state)
            s0:begin 
                if(din == 'd0)
                    nstate = s0;
                else if(din == 'd1)
                    nstate = s1;
                else
                    nstate = s0;
            end

            s1:begin
                if(din == 'd0)
                    nstate = s1;
                else
                    nstate = s0;
            end
            default:nstate = s0;
            endcase
        end
        else
            nstate =s0;
    end

    always@(posedge clk,negedge rst_n)begin
        if(!rst_n)begin
            drinks_out <= 'd0;
            change_out <= 'd0;
        end
        else if(sel == 'd0)begin
            if(din == 'd0)begin
                drinks_out <= 'd0;
                change_out <= 'd0;
            end
            else if(din == 'd1)begin
                drinks_out <= 'd1;
                change_out <= 'd0;
            end
            else if(din == 'd2)begin
                drinks_out <= 'd1;
                change_out <= 'd1;
            end
            else begin
                drinks_out <= 'd0;
                change_out <= 'd0;
            end
        end
        else if(sel == 'd1)begin
            if(state == s1)begin
                if(din == 'd0)begin
                    drinks_out <= 'd0;
                    change_out <= 'd0;
                end
                else if(din == 'd1)begin
                    drinks_out <= 'd2;
                    change_out <= 'd0;
                end
                else if(din == 'd2)begin
                    drinks_out <= 'd2;
                    change_out <= 'd1;
                end
                else begin
                    drinks_out <= 'd0;
                    change_out <= 'd0;
                end
            end
            else if(state == s0)begin
                if(din == 'd2)begin
                    drinks_out <= 'd2;
                    change_out <= 'd0;
                end
                else begin
                    drinks_out <= 'd0;
                    change_out <= 'd0;                    
                end
            end
            else begin
                drinks_out <= 'd0;
                change_out <= 'd0;
        end
        end
        else begin
            drinks_out <= 'd0;
            change_out <= 'd0;
        end
    end



















endmodule

全部评论

相关推荐

秋招0&nbsp;offer是不是费了。
想要offer啊啊啊啊啊啊:0offer+1,十一月份加油
点赞 评论 收藏
分享
小小梦想家l:图片没加载出来给我整的心都凉了,现在心暖暖的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务