用Verilog实现接受0.5元,1元的可乐售卖机,单价2.5元,考虑找零和出货。

第一步:画出原理图

在这里插入图片描述

第二步,将画出的原理图利用硬件语言实现

module fsm_cola_ctrl(
		input wire sclk,
		input wire rst_n,
		input wire [1:0]pi_money,
		output reg	po_cola,
		output reg  po_money
);

reg [4:0] state;
parameter IDLE	   =5'b00001;
parameter HALF	   =5'b00010;
parameter ONE 	   =5'b00100;
parameter ONE_HALF =5'b01000;
parameter TWO	   =5'b10000;

always@(posedge sclk or negedge rst_n)
		if(!rst_n)
		state<=IDLE;
		else case(state)
			IDLE:	if(pi_money == 2'b01)
			  state <= HALF;
					else if(pi_money == 2'b10)
						state<=ONE;
						else state <= IDLE;
			HALF:	if(pi_money == 2'b01)
					state<=ONE;
					else if(pi_money == 2'b10)
						state <= ONE_HALF;
						else state <= IDLE;	
			ONE:	if(pi_money == 2'b01)
					state <= ONE_HALF;
					else if(pi_money == 2'b10)
						state <= TWO;
						else state&
在设计一个自动售货机的找零功能时,我们需要考虑几个关键点:输入信号(投币金额),总金额累加器,饮料价格,以及输出信号(找零金额)。Verilog语言中,可以使用模块化的设计来实现这个功能。 下面是一个简单的Verilog模块示例,它实现了上述功能: ```verilog module vending_machine( input clk, // 时钟信号 input reset, // 复位信号 input coin_50c, // 投币0.5信号 input coin_100c, // 投币1信号 output reg [3:0] change // 找零金额输出,4位二进制足以表示找零金额,足以覆盖0-15找零 ); // 价格常量定义 parameter PRICE = 250; // 饮料价格为2.5,转换为分是250分 // 内部变量定义 reg [3:0] total = 0; // 总金额,4位足以表示0-15 always @(posedge clk or posedge reset) begin if (reset) begin // 复位时,重置总金额找零金额 total <= 0; change <= 0; end else begin // 根据投币信号累加总金额 if (coin_50c) begin total <= total + 50; // 如果投币0.5,累加0.5 end if (coin_100c) begin total <= total + 100; // 如果投币1,累加1 end // 当总金额达到或超过饮料价格时,计算找零 if (total >= PRICE) begin change <= total - PRICE; // 计算找零金额 total <= total - PRICE; // 更新总金额(扣除饮料价格) end else begin change <= 0; // 如果没有达到价格,则不找零 end end end endmodule ``` 这个模块在每个时钟上升沿检查投币信号,并累加到总金额变量中。当总金额达到或超过设定的饮料价格时,计算找零金额,并更新总金额。注意,这个模块简化了输入处理输出显示逻辑,实际的自动售货机设计可能会更复杂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值