logo资料库

自动售邮票机.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
计算机硬件设计实训 报 告 题目: 自动售邮票机 小组成员: 姓名 学号 分工 成绩 组长 成员 指导教师: 2015 年 12 月
自动售邮票机 一、实训的目的及意义 (一)实训的目的 1、熟练掌握模拟电路、数字逻辑电路的设计、分析、仿真及调试的方法。 2、掌握使用 EDA(电子设计自动化)工具设计模拟电路、数字电路的方法,了 解系统设计的全过程。 3、熟练掌握 Quartus2 软件的基本操作及绘制原理图和进行电路仿真的一般方 法。 4、通过对系统电路设计与制作,进一步巩固所学的理论知识,提高分析问题和 解决问题的能力。 5、学会应用数字电路课程的理论知识独立完成一个课程设计。 6、 能够通过设计掌握独立分析和解决实际问题的能力。 7、通过设计掌握数字电路设计和制作的一般方法。 8、 学会使用和查找设计有关的书籍和资料。 9、通过对实际电路的方案的分析比较、设计计算、元件选取、安装调试环节, 初步掌握简单实用电路的分析方法和工程设计。 10、学会撰写课程设计总结报告,培养严肃认真的工作作风和严谨的科学态度。 11、通过此次实训,引导学生提高和培养自身创新能力,为后续课程的学习,毕 业设计制作以及毕业后的工作打下坚实的基础。 (二)、实训的意义 VHDL 语言是一种用于电路设计的高级语言。VHDL 翻译成中文就是超高速集成电 路硬件描述语言,主要是应用在数字电路的设计中。除了含有许多具有硬件特征 的语句外,VHDL 的语言形式、描述风格以及语法是十分类似于一般的计算机高 级语言。EDA 技术就是以计算机为工具,设计者在 EDA 软件平台上,用硬件描述 语言 VHDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综 合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和 编程下载等工作。EDA 技术的出现,极大地提高了电路设计的效率和可操作性,
减轻了设计者的劳动强度。 本次实训将运用 VHDL 设计一款自动售邮票机,培养 EDA 操作技巧。 二、实训题目分析 本次实训我的小组选择的实训题目为:自动售货机。一下是我对这个题目的分析: 设计一个自动售货机,用开关电平信号模拟投币过程,每次投一枚硬币,但可以 连续投入数枚硬币。机器能自动识别硬币金额,最大为 1 元,最小为 5 角。设定 票价为 2.5 元,每次售一张票。购票时先投入硬币,当投入的硬币总金额达到或 超过票的面值时,机器发出指示,这时可以按取票键取出票。如果所投硬币超过 票的面值,则会提示找零钱,取完票后按找零键,则可以取出零钱。 系统框图如下: 三、设计原理及思想 (一)设计分析 此设计问题可分为币值输入相加模块、主控模块和币值显示模块几部分。 在币值输入相加模块中,用两个开关电平输入按钮分别代表两种硬币输入,one 表示 1 元,half 表示 5 角,每按一次,表示投入一枚硬币。设置 5 角和 1 元输 入计数电路,并设置控制电路,由 5 角和 1 元输入的次数控制十进制加法器的加 数 A 和被加数 B,使输入的币值实时相加。用两位数码管显示当前的投入币值, 显示的币值为 x 元 x 角,币值输入相加模块状态表如下所示。
表 3.1 模块状态表 在主模块中,设置一个复位信号 reset,用于中止交易(系统复位)。设置一个 取票信号 ok,一个邮票给出信号 tout,tout 接 LED 显示,灯亮则表示可以取票, 否则取票键无效,按 ok 键取票,灯灭。设置一个取零钱信号 charge,一个零钱 输出信号 mout,mout 显示高电平,灯亮则表示有零钱,按 charge 取零钱,灯灭。 主控模块中是一个状态机,当币值等于 2.5 元时,有邮票给出,不找零钱;当币 值为 3.0 元时,有邮票给出,找零钱;其余情况下,既无票给出,也不找零钱。 图 3.2 自动售邮票机硬件系统框图 (二)状态转换图 由状态转换表可知,当系统状态为 S0 时,若投入一枚五角硬币时,进入 S1 状态; 若投入一枚一元硬币时,进入 S2 状态。当系统为 S1 状态时,若投入一枚五角硬 币,进入 S2 状态;若投入一枚一元硬币,进入 S3 状态,当系统进入 S2 状态时, 若投入一枚五角硬币,进入 S3 状态;若投入一枚一元硬币,进入 S4 状态,当系
统进入 S4 状态时,若投入一枚五角硬币,进入 S0 状态,同时显示有邮票信号输 出,即 tout 为 1;若投入一枚一元硬币,进入 S1 状态,同时显示有邮票和找零 钱信号输出,即 tout 为 1,mout 为 1。因此,电路的状态数M=5 己足够。故可 画出如下图所示的状态转换图。 图 3.3 状态转换图 (三)状态转换表 取投币信号为输入逻辑变量。投入一枚一元硬币时用 A=1 表示,未投时 A=0。投 入一枚五角硬币用 B=1 表示,未投入时 B=0。给出邮票和找钱为二个输出变量, 分别用 Y、Z 表示。给出邮票时 Y=1,不给出邮票时 Y=0;找回一枚五角硬币时 Z=1,不找时 Z=0。 假定通过传感器产生的投币信号(A=1 或 B=1)在电路转 入新状态的同时也随之消失,否则将被误认为一次投币信号。 设未投币前电 路的初始状态为 S0 ,投入五角硬币以后为 S1 ,投入一元硬币(包括投一枚 一元硬币和两枚五角硬币人情况)以后为 S2 ,以此类推,投入一元五角硬币 以后为 S3 ,投入两元硬币以后为 S4 。因为这样工作中不会出现 AB=11 的情 况,所以与之对应的 S。 Y、Z 均作约束项处理。绘制状态转换表如下:
表 3.4 状态转换表 四、程序设计 (一)编写源码 本次实训我主要是负责编写源代码部分,平时对 VHDL 语言的练习不是特别多, 我会通过这次实训,锻炼并提高的的编写程序的能力,这也是我选择负责本次实 训编写源代码的原因。 我们讨论了一下定义了系统的输入/输出端口信号,考虑顾客只有 4 种操作行为, 即投币、选择、确定与取消,所以定义以下系统输入信号。 1、entity 定义 Reset:系统内部设置给其他顾客重新操作的复位信号; Clk: 由外接信号发射器提供 1024b/s 的系统时钟信号; Ok buy: 购买确认的按键信号; One: 投入 1 元硬币的动作按键; Half: 投入 5 角硬币的动作按键; ML: 采用了 buffer std_logic_vector(3 downto 0) 数组进行编写,显示投入 金额数码显示的高 4 位,使显示的内容更加直观。 ML: 采用了 buffer std_logic_vector(3 downto 0) 数组进行编写,投入金额 数码显示的低 4 位,使显示的内容更加直观。 Mout: 高电平代表推出硬币; Tout: 高电平显示邮票已出货; Charge: 用户已取出零钱按键;
Ok: 用户已取出取邮票按键; 2、 architecture 内容 本实训根据之前的分析,我一共定义了 5 中状态,分别为 a,b,c,d,e 五种状态, 他们分别代表着未投币前电路的初始状态,投入五角硬币以后的状态,投入一元 硬币(包括投一枚一元硬币和两枚五角硬币人情况)以后的状态,,投入一元五 角硬币以后的状态,投入两元硬币以后的状态,和一个 money 信号量。 程序的开始,我先判断是否按下了 RESET 按键,若按下则一切清零。若没有按下 RESET 则开始用 CASE 语句来判断 money 信号量的状态。 Money 信号量为 a 状态时,若投入一枚五角硬币时,进入 b 状态;若投入一枚一 元硬币时,进入 c 状态。 Money 信号量为 b 状态时,若投入一枚五角硬币,进入 c 状态;若投入一枚一元 硬币,进入 d 状态。 Money 信号量为 c 状态时,若投入一枚五角硬币,进入 d 状态;若投入一枚一元 硬币,进入 d 状态。 Money 信号量为 d 状态时,若投入一枚五角硬币,进入 e 状态;若投入一枚一元 硬币,进入 a 状态,同时显示有邮票信号输出,即 tout 为高电平。 Money 信号量为 e 状态时,若投入一枚五角硬币,进入 S0 状态,同时显示有邮 票信号输出,即 tout 为高电平;若投入一枚一元硬币,进入 S1 状态,同时显示 有邮票和找零钱信号输出,即 tout 为高电平,mout 为高电平。 如果 MH=0010,ML=0101 时,说明投入的金额和邮票的价值相等,那么同时按键 OK 已按下表示已取走邮票,即 OK<=‘1’,则 MH=0000,ML=0000,显示有邮票输 出变为低电平,即 Tout<=’0’。 如果 MH=0011,ML=0000 时,说明投入的金额 大于邮票的价值,那么同时按键 OK 已按下表示已取走邮票,即 OK<=‘1’,则 MH=0000,ML=0101,显示有邮票输出变为低电平,即 Tout<=’0’, 显示有零 钱输出变为高电平,即 Mout<=’1’。 如果 MH=0011,ML=0000 时,说明投入的 金额大于邮票的价值,那么同时按键 OK 已按下表示已取走邮票,即 OK<=‘1’, 并且按键 Charge 已按下表示已取走零钱即 Charge 为高电平,则 MH=0000, ML=0000,显示有邮票输出变为低电平,即 Tout<=’0’, 显示有零钱输出变为 低电平,即 Mout<=’0’。 (二)时序仿真 本次实训我主要负责时序仿真部分设定 one,half 与 reset 三个系统输入信号, 可观察到系统输出信号 tout,mout 与输出全局信号 ok 与 cancel 的波形,ok 与 charge 信号用来维持 ok 与 charge 按键操作的状态。 1、新建 VWF 文件 2、确定仿真时间和网络宽度
我设置的 ENDTIME 为 500MS,GRIDSIZE 为 10MS 3、导入输入输出信号量并设置输入信号 为了测试每一种情况我采用了如下的输入方法: 第一次:分别放入 5 个五角硬币,预计结果,结果应该为有邮票输出,但是没有 找零输出。 第二次:分别放入 4 个五角硬币,1 个一元硬币,预计结果,结果应该为有邮票 输出,而且有找零输出。 第三次:分别放入 3 个五角硬币,1 个一元硬币,预计结果,结果应该为有邮票 输出,但是没有找零输出。 第四次:分别放入 2 个五角硬币,2 个一元硬币,预计结果,结果应该为有邮票 输出,并且有找零输出。 第五次:分别放入 1 个五角硬币,2 个一元硬币,预计结果,结果应该为有邮票 输出,但是没有找零输出。 第六次:分别放入 3 个一元硬币,预计结果,结果应该为有邮票输出,并且有找 零输出。 第七次:我先放入 1 个五角硬币,然后按下 RESET 按键,预计结果,一切清零。 五、调试过程中遇到的问题及解决方法 本次调试过程总体来讲进行的比较顺利,但是还是遇到了一点问题: 问题 1:编译错误,程序没有问题,提示 entity 不存在。 解决方法:这时我发现,由于我的马虎,我的文件名称和 ENTITY 不相同,我马 上改正过来,程序才顺利编译。 问题 2:在初期我们为了简化思路,没有设定 ok 和 charge 两个信号量,但是 当进行仿真的时候,出现了这样一个问题:一旦投入的钱数达到了邮票的价钱, 那么每有一个时钟脉冲,那么都会出一个邮票,只能通过每次都按下复位按键, 来进行清零,这样既不方便,又不能是使用者有更好的体验。 解决方法:我们新加入了 ok 和 charge 两个信号量。当 ok 按键按下,系统自 动扣除一张邮票的价钱并且 tout 变为 0,当 charge 按键按下,扣除已经取走的 零钱的价钱并且 mout 变为 0。 六、结果与分析 本次实训的输出信号量为 mh 显示用户投放的元数,ml 显示用户投放的角数,tout 为有邮票输出,mout 为有零钱输出。本次实训的结果描述如下:若投入的钱数 不超过邮票价值,则输出 mout 为 0,tout 为 0,还要继续投入硬币;若投入的 钱数正好为邮票的价值时,则输出的 mout 为 0,tout 为 1,需要取出邮票;若
分享到:
收藏