实例六 自动售饮料机
3.2.1. 本章导读
了解自动售货机的工作流程以及各个工作状态,以及其testbench,最后在Robei可视化仿真软件经行功能实现和仿真验证。
设计原理
自动售货机的信号定义:clk:时钟输入;reset:系统复位信号;half_dollar:代表投入5角硬币;one_dollar:代表投入1元硬币;half_out:表示找零信号;dispense:表示机器售出一瓶饮料。
当reset=0时,售货机处于工作状态,此时连续往售货机中投硬币(可以是5角也可以是一元),投入最后一枚硬币时,如果之前投入的硬币总和为2.5元,则可以取走一瓶饮料,如果少于2.5元则继续投币,如果为3元则显示可以取出一瓶饮料,而且找零显示信号为高电平。
3.2.2. 设计流程
1. sell模块的设计
(1)新建一个模型命名为sell,类型为module,同时具备4个输入和2个输出,每个引脚的属性和名称参照下图3-2-1经行对应的修改。
(2)添加代码。点击模型下方的 Code添加代码。
代码:
parameter idle=0,half=1,one=2,one_half=3,two=4;
reg[2:0] D;
always @(posedge clk)
begin
if(rst)
begin
dispense=0;
half_out=0;
D=idle;
end
case(D)
idle:
if(half_dollar)
D=half;
else if(one_dollar)
D=one;
half:
if(half_dollar)
D=one;
else if(one_dollar)
D=one_half;
one:
if(half_dollar)
D=one_half;
else if(one_dollar)
D=two;
one_half:
if(half_dollar)
D=two;
else if(one_dollar)
begin
dispense=1;
D=idle;
end
two:
if(half_dollar)
begin
dispense=1;
D=idle;
end
else if(one_dollar)
begin
dispense=1;
half_out=1;
D=idle;
end
endcase
end
(3)保存模型到一个文件夹(文件夹路径不能有空格和中文)中,运行并检查有无错误。
2. sell_test测试文件设计
(1)新建一个具有4个输入2个输出的sell_test测试文件,记得将Module Type设置为 “testbench”,各个引脚配置如图3-2-3所示。