题解 | #自动贩售机1#

自动贩售机1

http://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***********//
    reg[2:0]state,next_state;
    parameter IDLE=3'd0,S1=3'd1,S2=3'd2,S3=3'd3,S4=3'd4,S5=3'd5,S6=3'd6;
    always@(posedge clk or negedge rst)begin
        if(!rst)begin
            state<=IDLE;
        end
        else begin
            state<=next_state;
        end
    end
    always@(*)begin
        case(state)
            IDLE:begin
                if(d1)begin
                    next_state=S1;
                end
                else if(d2)begin
                    next_state=S2;
                end
                else if(d3)begin
                    next_state=S4;
                end
                else begin
                    next_state=next_state;
                end
            end
            S1:begin
                if(d1)begin
                    next_state=S2;
                end
                else if(d2)begin
                    next_state=S3;
                end
                else if(d3)begin
                    next_state=S5;
                end
                else begin
                    next_state=next_state;
                end
            end
            S2:begin
                if(d1)begin
                    next_state=S3;
                end
                else if(d2)begin
                    next_state=S4;
                end
                else if(d3)begin
                    next_state=S6;
                end
                else begin
                    next_state=next_state;
                end
            end
            default:next_state=IDLE;
        endcase
    end
    always@(posedge clk or negedge rst)begin
        if(!rst)begin
            out1<=1'b0;
            out2<=2'd0;
        end
        else if(next_state==S3)begin
            out1<=1'b1;
            out2<=2'd0;
        end
        else if(next_state==S4)begin
            out1<=1'b1;
            out2<=2'd1;
        end
        else if(next_state==S5)begin
            out1<=1'b1;
            out2<=2'd2;
        end
        else if(next_state==S6)begin
            out1<=1'b1;
            out2<=2'd3;
        end
        else begin
            out1<=1'b0;
            out2<=2'd0;
        end
    end

//*************code***********//
endmodule
全部评论

相关推荐

07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
07-11 11:10
门头沟学院 Java
请问各位大三兄弟们跟hr说多久实习时间到时候可以提前跑路吗?
程序员小白条:问就是六个月以上,可以一年,实习都这样,你入职后想跑就跑
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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