题解 | #自动售卖机#

自动售卖机

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:20
点赞 评论 收藏
分享
这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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