题解 | #自动贩售机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
);
/*
idle: non money 
s1 0.5
s2 1
s3 1.5
s4 2
s5 2.5
s6 3
s7 3.5
*/
localparam idle = 6'b000000;
localparam s1   = 6'b000001;
localparam s2   = 6'b000010;
localparam s3   = 6'b000100;
localparam s4   = 6'b001000;
localparam s5   = 6'b010000;
localparam s6   = 6'b100000;

reg [5:0] cs,ns;
wire [2:0] din;

assign din = {d3,d2,d1}; //d3 2 d2 1 d1 0.5

always @(posedge clk or negedge rst) begin
    if(!rst)  cs <= idle;
    else    cs <= ns;
end

always@(*) begin
    case (cs)
        idle: begin
            case (din)
                3'b001: ns = s1;
                3'b010: ns = s2;
                3'b100: ns = s4;
                default: ns = ns;
            endcase
        end
        s1 : begin
            case (din)
                3'b001: ns = s2;
                3'b010: ns = s3;
                3'b100: ns = s5;
                default: ns = ns;
            endcase
        end 
        s2 : begin
            case (din)
                3'b001: ns = s3;
                3'b010: ns = s4;
                3'b100: ns = s6;
                default: ns = ns;
            endcase
        end
        s3 : ns = idle;
        s4 : ns = idle;
        s5 : ns = idle;
        s6 : ns = idle;
        default: ns = idle;  
    endcase
end

always @(posedge clk or negedge rst) begin
    if (!rst) begin
        out1 <= 'b0;
        out2 <= 2'b0;
    end
    else begin case (ns)
        s3: begin
            out1 <= 1'b1;
            out2 <= 2'b0;
        end
        s4: begin
            out1 <= 1'b1;
            out2 <= 2'b01;
        end
        s5: begin
            out1 <= 1'b1;
            out2 <= 2'b10;
        end
        s6: begin
            out1 <= 1'b1;
            out2 <= 2'b11;
        end
        default: begin
            out1 <= 1'b0;
            out2 <= 2'b00;
        end
    endcase
end
end

endmodule

全部评论

相关推荐

09-29 00:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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