题解 | #自动售卖机#

自动售卖机

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   
);

    localparam S0 = 1'd0;
    localparam S5 = 1'd1;

    reg state, state_nxt;

    always @(posedge clk or negedge rst_n) begin
		if (!rst_n) begin
			state <= S0;
		end else begin
			state <= state_nxt;
		end
	end	

    always @(*) begin
        case(state)
        S0 : state_nxt = (din == 2'd1 && sel) ? S5 : state;
        S5 : state_nxt = (din != 2'd0) ? S0 : state;
        default : state_nxt = S0;
        endcase
    end

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
                drinks_out <= 2'd0;
                change_out <= 1'b0;
        end else begin
            case(state)
                S0 : begin
                    drinks_out <= (din != 2'd0 && !sel) ? 2'd1 : 
                                  (din == 2'd2 && sel) ? 2'd2 :
                                   2'd0;
                    change_out <= (din == 2'd2 && !sel);
                end
                S5 : begin
                    drinks_out <= (din != 2'd0) ? 2'd2 : 2'd0;
                    change_out <= din == 2'd2;
                end   
            endcase   
        end   
	end	

endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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