• Verilog-自动售卖机


    基础

    题目

    输入输出及状态定义

    input:
    [1:0] coin; coin=00,01:无投币操作;coin=10:投入5分硬币;coin=11:投入10分硬币

    output:
    retuin_coin; return_coin=1:找回5分硬币; return_coin=0:不找回
    finish; finish=1:交易完成,售出饮料; finish=0:交易还未完成

    state:
    IDLE:闲置状态
    WAIT:等待再次投币的状态
    PAY:交易完成,不找零状态
    PAY_RETURN:交易完成,并找零

    状态转移:

    代码

    `timescale 1ns / 1ps
    
    module vending_machine(
    	input clk,
    	input rstn,
    	input [1:0] coin,
    	output return_coin,
    	output finish
        );
    	 
    localparam IDLE = 2'd0;
    localparam WAIT = 2'd1;
    localparam PAY = 2'd2;
    localparam PAY_RETURN = 2'd3;
    
    reg [1:0] state,next_state;
    
    always @(posedge clk or negedge rstn) begin
    	if(!rstn) state <= IDLE;
    	else state <= next_state;
    end
    
    always @(*) begin
    	case(state)
    		IDLE:
    			begin
    				case(coin)
    					2'b00,2'b01:next_state = IDLE;
    					2'b10:next_state = WAIT;
    					2'b11:next_state = PAY;
    				endcase
    			end
    		WAIT:
    			begin
    				case(coin)
    					2'b00,2'b01:next_state = IDLE;
    					2'b10:next_state = PAY;
    					2'b11:next_state = PAY_RETURN;
    				endcase
    			end
    		PAY,PAY_RETURN:next_state = IDLE;
    		default:next_state = IDLE;
    	endcase
    end
    
    assign return_coin = (state == PAY_RETURN)? 1'b1 : 1'b0;
    assign finish = (state == PAY || state == PAY_RETURN)? 1'b1 : 1'b0;
    
    
    endmodule
    
    

    仿真波形

    第一次直接投10分硬币;第二次先投5分,再投5分;第二次先投5分,再投10分

    扩展

    设计一个自动饮料售卖机,饮料有A和B两种,A价格为5分,B价格为10分,硬币有5分和10分两种,并考虑找零

    输入输出及状态定义

    input:
    [1:0] sel; sel=00,01:无选择操作;sel=10:选择5分饮料;sel=11:选择10分饮料
    [1:0] coin; coin=00,01:无投币操作;coin=10:投入5分硬币;coin=11:投入10分硬币

    output:
    retuin_coin; return_coin=1:找回5分硬币; return_coin=0:不找回
    finish; finish=1:交易完成,售出饮料; finish=0:交易还未完成

    state:
    IDLE:闲置状态
    PAY_A:购买A饮料(5分)的状态
    PAY_B:购买B饮料(10分)的状态
    WAIT:购买B饮料等待再次投币的状态
    FINISH:交易完成,不找零状态
    RETURN:交易完成,并找零

    状态转移:

  • 相关阅读:
    TensorFlow中的基本概念
    理解 tf.Variable、tf.get_variable以及范围命名方法tf.variable_scope、tf.name_scope
    深度神经网络关键词解释
    [python] os.path.join() 与 sys.path
    Git 遇到的坑
    [转] 资深程序员得到的职场经验教训
    VS CODE 快捷键
    解决VS Code使用code runner开发Python乱码问题
    熵,条件熵,互信息,交叉熵
    Visual Studio Code 支持TensorFlow配置支持
  • 原文地址:https://www.cnblogs.com/wt-seu/p/13033404.html
Copyright © 2020-2023  润新知