基于verilog_hdl语言的自动售货机设计内容摘要:

此系统 共有 18 个状态, 故 从状态 0到状态 17,用 5位 2进制码依次表示为 00000— 10001, 然后对输出变量进行编码: 投币显示 num:  000  001  010  011  100 101 卖出货 g2:无 00 water01 Coke10 退币 c3 : 无: 000  001  010  011  100 101 模块 实现与描述 在程序 的设计过程中使用 case 语句,且在判断出 每种状态输入后直接给出了该系统的输出,因此,该自动售货机仅有一个整体模块,即包含了输入和输出(其中源程序见附录)。 如下图 所示: 图 整体模块芯片图 输入输出描述如下: 输入: clk,接入系 统时钟,作为接受外部信号时钟; reset,接入复位信号,作用系统初始化,高电平有效; coin5,投币 5角信号,高电平有效; coin10,投币 1元信号,高电平有效。 输出: water,输出价值 1的饮料的信号,高电平有效; coke,输出价值 ,高电平有效; ,找零 /退币 ,高电平有效; ,找零 /退币 1元信号,高电平有效; ,找零 /退币 ,高电平有效; ,找零 /退币 ,高电平有效; ,找零 /退币 ,高电平有效。 4 自动售货机的仿真 在现实中 自动售货机的状态繁多, 参见图 , 故 此次设计, 仅列 举 三种最具代表性的仿真波形, 分别为“ 5角硬币购买”、“ 1元硬币购买”、“ 5角和 1元硬币混合购买”, 每种情况分三个 波形讨论。 “ 5 角硬币 购买 ” 仿真 与分析 ( 1) 买 water 投入 5 角硬币购买 water 的 仿真如下图 所示: 图 投入 5 角硬币购买 water 输入 : clk(系统时钟信号 )高电平 有 效, 从 开始到 这段时间里,当依次投入 5 角硬币 (coin5), state(状态 )由 0 变到 11(因为先是遇到找零信号,故已找零 元), 说明投入的 实际 总币值为 元。 在投完币之后从 到 给出 water(买水 )信号。 输出 :在 到 里 num(投币显示 )由 0H 变化到5H,二进制表示为 0000~0101,对照状态编码可知为 元 , 恰好验证了前面 state的正确性,当遇到 water 信号, g2(卖出货物变量 )从低电平 0 变到高电平 1,说明此时成功出售 water,c3(找零信号 )由 1 变到 3,对应二进制为 0001~0011,0011编码为 元,故 找零 元 ,满足了 (总额) (水单价) =(找零),此时 state 变为 00 初始状态。 即仿真结果符合现实中的购买过程。 ( 2) 买 coke 投入 5 角硬币购买 coke 的 仿真如下图 所示: 图 投入 5 角硬币购买 coke 输入: clk(系统时钟信号 )高电平 有 效, 从 开始到 这段时间里,当依次投入 5 角 硬币 (coin5), state(状态 )由 0 变到 11(因 为先是遇到找零信号,故已找零 元),说明投入的实际总币值为 元。 在投完币之后从 到 给出 coke(买可乐 )信号。 输出:在 到 里 num(投币显示 )由 0H变化到 5H,二进制表示为 0000~0101,对照状态编码可知为 元,恰好验证了前面state 的正确性,当遇到 coke 信号, g2(卖出货物变量 )从低电平 0 变到高电平 2,说明此时成功出售 coke,c3(找零信号 )由 1 变到 0, 表示不用找零。 此时 满足了 (总额) (可乐 单价) =0(找零),此时 state 在售出 coke 之后由 09 变为 00初始状态。 此 仿真结果符合现实中的购买过程。 ( 3) 取消操作 投入 5 角硬币取消操作的 仿真如下图 所示: 图 投入 5 角硬币取消操作 输入: clk(系统时钟信号 )高电平 有 效,从 开始到 这段时间里,当依次投入 5 角硬币 (coin5), state(状态 )由 0 变到 11(因为先是遇到找零信号,故已找零 元),说明投入的实际总币值为 元。 在投完币之后从 到 给出 cancel(取消)信号。 输出:在 到 里 num(投币显示 )由 0H变化到 5H,二进制表示为 0000~0101,对照状态编码可知为 元,恰好验证了前面 state 的正确性,当遇到 cancel 信号, c3(找零信号 )由 1 变到 5,对应编码为 0101,表示找零 元,也即取消操作。 此时 state 在 遇到 cancel 之后由 10 变为 00 初始状态。 此仿真结果符合现实中的 投币而不 购买 的 过程。 “ 1 元硬币 购买 ” 仿真 与分析 ( 1) 买 water 投入一元硬币购买 water 的 仿真如下图 所示: 图 投入 1 元硬币购买 water 输入: clk(系统时钟信号 )高电平 有 效,从 开始到 这段时间里,当依次投入 1 元硬币 (coin10), state(状态 )由 0 变到 11(因为先是遇到找零信号,故已找零 元),说明投入的实际总币值为 = 元。 在投完币之后从 给出 water(买水 )信号。 输出:在 num(投币显示 )由 0H 变化到 5H,二进制表示为 0000~0101,对照状态编码可知为 元,恰好验证了前面 state 的正确性,当遇到 water 信号, g2(卖出货物变量 )从低电平 0 变到高电平 1,说明此时成功出售 water,c3(找零信号 )由 1 变到 3,对应二进制为 0001~0011,0011 编码为 元,故找零 元,满足了 (总额) (水单价) =(找零),此时 state 由 13 变为 00 初始状态。 即仿 真结果符合现实中的购买过程。 ( 2) 买 coke 投入 1 元硬币购买 coke 的 仿真如下图 所示: 图 投入 1 元硬币购买 coke 输入: clk(系统时钟信号 )高电平 有 效,从 开始到 这段时间里,当依次投入 1 元硬币 (coin10), state(状态 )由 0 变到 11(因为先是遇到找零信号,故已找零 元),说明投入的实际总币值为 元。 在投完币之后从 ns到 给出 coke(买可乐 )信号。 输出:从 到 这段时间里 num(投币显示 )由 0H 变化到 5H,二进制表示为 0000~0101,对照状态编码可知为 元,恰好验证了前面 state 的正确性,当遇到 coke 信号, g2(卖出货物变量 )从低电平 0 变到高电平 2,说明此时成功出售 coke,c3(找零信号 )由 1 变到 0,表示不用找零。 此时满足了 (总额) (可乐单价) =0(找零),此时 state 在售出coke 之后由 09 变为 00 初始状态。 此仿真结果符合现实中的购买过程。 ( 3) 取消操作 投入 1 元硬币取消操作的 仿真如下图 所示: 图 投入 1 元 硬币取消操作 输入: clk(系统时钟信号 )高电平 有 效,从 开始到 这段时间里,当依次投入 1 元 硬币 (coin10), state(状态 )由 0 变到 06, 说明投入的实际总币值为 元。 在投完币之后从 到 给出 cancel(取消)信号。 输出:在 到 里 num(投币显示 )由 0H 变化到 4H,二进制表示为0000~0100,对照状态编码可知为 元,恰好验证了前面 state 的正确性,当遇到 cancel 信号, c3(找零信号 )由 0 变到 4,对应编码为 0100,表示找零 元,也 即取消操作。 此仿真结果符合现。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。