采用状态机设计实现自动售货机的步骤如下。
1.创建工程
在D:\ISE_GC\目录下,创建工程名为VD的工程,在这里选择的器件族类型(Device Family)是Virtex2P;器件型号(Device)是XC2VP30 ff896-7;综合工具(Synthesis Tool)是XST(VHDL/Verilog);仿真器(Simulator)是ISE Simulator(VHDL/Verilog)。
2.设计输入
状态机由当前状态(CS)、下一个状态(NS)和输出逻辑(OL)三部分组成,可以很据状态机的不同结构采用不同的VerilogHDL描述方法,常用的方法如下:
(1)将CS、NS与OL分别描述。
(2)将CS、NS与OL混合描述。
(3)将NS与OL混合,S单独描述。
(4)将CS与S混合,L单独描述。
(5)将CS与L混合,NS单独描述。
这里采用第三种描述方法,编码方式为7位独热码(one_hot码),如表5-3所示。
表5-3 当前状态、下一状态和输出逻辑的描述
在源代码窗口中单击右键,在弹出的菜单中选择New Source,在弹出的对话框中选择Verilog Moudle,在右端的File name中输入源文件名VD,然后在弹出的源代码编辑框内输入光盘附件5-9所示的代码。
3.行为仿真
(1)由TestBenchWaveForm添加激励 用鼠标右键单击VD.v,在弹出的菜单中选择New Source,在弹出的对话框中选择Test Bench WaveForm,在右端的File name中输入test,单击Next,再单击finish即可。双击test.tbw,在右窗口中设置输入信号的波形,如图5-61所示。
图5-61 Test Bench波形
(2)在sources窗口sources for中选择Behavioral Simulation,行为仿真波形如图5-62所示。
(www.xing528.com)
图5-62 行为仿真波形
由图5-62可以看出:
第一组测试数据:先投入一个5角的硬币,再投入一个1元的硬币,如此反复,即five_jiao和one_yuan间隔设置高电平1,在第二次投入1元硬币的时候,投币总额超过饮料的单价2.5元,系统应该售出商品,有找零,即sell为1,five_jiao_out为1;
第二组测试数据:先投入一个5角的硬币,再连续投入两个1元的硬币,即five_jiao设置高电平1,one_yuan设置2个连续的高电平1,投币总额恰好为饮料的单价2.5元,系统应该售出商品,没有找零,即sell为1,five_jiao_out为0;
第三组测试数据:投入三个1元的硬币,即one_yuan设置三个连续的高电平1,投币总额超过商品的单价2.5元,系统应该售出商品,有找零,即sell为1,five_jiao_out为1。
综合以上仿真分析,验证了设计程序,达到了自动售货机控制系统的功能。
4.进行ChipScope在线调试
(1)生成ChipScope核并添加到工程 只需要使用ICON核和VIO核,利用VIO进行实时观测,ICON核仅控制VIO一个核,所以控制端口数为1。VIO核使用异步输入输出端口,异步输入端口的位宽为2,异步输出端口的位宽为4。
最后得到的核例化后的代码详见光盘附件5-10。
(2)在ISE里进行综合和实现,然后生成bit文件。
(3)在ChipScope里进行观测调试 在Processes窗口中选择双击Analyze Design Using Chipscope进入Chip Scope Pro Analyzer窗口,单击图标检查连接情况,然后下载bit文件进行在线观测。
在VIO核的调试中,用按键模拟投币。投入一个5角和两个1元的硬币后,sell为高电平1,成功售出商品,如图5-63所示。
图5-63 调试结果1
投入五个5角的硬币后,成功售出商品,sell为1,如图5-64所示。
图5-64 调试结果2
从上述调试结果可以看出自动售货机的设计正确。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。