word格式-可编辑-感谢下载支持
成 绩 评 定 表
学生姓名 专 业 评 语 组长签字: 电子信息工程 班级学号 课程设计题目 自动售邮票的控制电路 成绩 日期
2015 年 月 日 课程设计任务书
word格式-可编辑-感谢下载支持 学 院 学生姓名 课程设计题目 信息科学与工程 专 业 班级学号 电子信息工程 自动售邮票的控制电路 一、 内容及要求: 利用所学的EDA设计方法设计自动售邮票的控制电路,熟练使用使用QUARTUSII应用软件,进一步学习使用VHDL语言、原理图等EDA设计方法进行综合题目的方法。 1.调试底层模块,并时序仿真。 2.设计顶层模块,并时序仿真。 3.撰写课程设计报告.设计报告要求及格式见附件。 二、功能要求: 每次只能售出一枚邮票,当所投硬币达到或超过购买者所选面值时,售出一枚邮票,并找回剩余的硬币,回到初始状态;当所投硬币值不足面值时,可以通过一个复位键退回所投硬币,回到初始状态。 三、进度安排: 课程设计时间为10天(2周) 1、调研、查资料1天。 2、总体方案设计2天。 3、代码设计与调试5天。 4、撰写报告1天。 5、验收1天。 指导教师: 2015年 月 日 专业负责人: 2015年 月 日 学院教学副院长: 2015年 月 日 word格式-可编辑-感谢下载支持
目 录
1 概述.............................................................. 1 1.1 设计背景和意义 .............................................. 2 1.2 设计任务 .................................................... 3 1.3 设计要求 .................................................... 4 2 原理设计及层次划分................................................ 5
2.1 工作原理 .................................................... 6 2.2 层次划分 .................................................... 7 3 软件设计.......................................................... 8
3.1 XX模块代码设计 ............................................. 9 3.2 XX模块代码设计 ............................................ 10 4 仿真及测试....................................................... 11
4.1 XX模块仿真 ................................................ 12 4.2 XX模块仿真 ................................................ 13 5 总结............................................................. 14 6 参考文献......................................................... 15
word格式-可编辑-感谢下载支持
1概述
1.1 设计背景和意义
EDA技术是先进的电子设计手段,随着现代社会的发展,人类社会日趋走向一个物质文明社会。伴随着我国经济的迅速发展,人们生活水平日益提高,人们对各服务行业的自动化程序要求也就越来越高,作为服务行业的自动化装置,已经开始进入到使用单位,自动售货 机更是随处可见极大程人们的生活
1.2 设计任务
用两个发光二极管分别模拟售出面值为6角和8角的邮票,购买者可以通过开关选择一种一种面值的邮票,灯亮表示邮票售出,用开关分别模拟1角、5角和1元硬币投入,用发光二极管分别代表找回的剩余的硬币,每次只能售出一枚邮票,当所投硬币达到或超过购买者所选面值时,售出一枚邮票,并找回剩余的硬币,回到初始状态;当所投硬币值不足面值时,可以通过一个复位键退回所投硬币,回到初始状态。 1.3 设计要求
利用所学的EDA设计方法设计自动售邮票的控制电路,熟练使用使用QUARTUSII应用软件,进一步学习使用VHDL语言、原理图等EDA设计方法进行综合题目的方法。
1.调试底层模块,并时序仿真。 2.设计顶层模块,并时序仿真。
3.撰写课程设计报告.设计报告要求及格式见附件。
word格式-可编辑-感谢下载支持
2 原理设计及层次划分
2.1 工作原理
利用状态机模拟输入累加的钱的总数,通过判决电路对输入的钱的总值进行判断,根据判断结果做出售票、找零、复位等相应的动作。
而对状态机得应用应注意其设计步骤:
a. 逻辑抽象。分析给定的逻辑问题,搞清楚输入和输出,通常取原因或者条件为输入,结果为输出。然后定义输入输出逻辑状态和每个电路状态的含义,并对电路各个状态进行排序和它们之间的转换关系搞清楚。这个过程非常需要严谨务实的作风,因为定义电路的状态的优劣会影响你的整个设计。如果大方向都没有搞好,接下来的设计会变得艰难,甚至走入死角。到时候又回过头来重新定义分析。
b. 通过从实际问题分析出来的时序问题,通过画出状态图一目了然搞清楚它们之间的转换关系。并对状态图进行化简优化。对在相同的输入下有相同输出,并转换到同样一个次态的。要进行合并,这样设计出来的状态机会更简单,高效。 2.2 层次划分
找零
输入电 路
脉冲发生 判决电路 复位电路
售出邮票 word格式-可编辑-感谢下载支持
利用状态机,分别模拟所输入的钱的累积值,根据输入的钱的面值的不同,进入不同的次态,在各个不同的状态下,又通过比较所输入的钱的总值与所选邮票的面值,做出售出邮票并找出相应的零钱。
在下述实验原理中,进程一为脉冲发生电路,不断的通过脉冲变化来扫描是否有相应的输入。进程二是状态转换,将次态的值重新付给现态,不断的改变现有状态。进程三中,首先判断了是选择的何种面值的邮票,而且在复位信号没有被按下的情况下对所售面值为六毛的邮票进行了分析处理,从刚开始输入为零时,根据输入不同的面值的钱来判断下一个状态是什么,并且对在每个相应状态下应该做什么进行了指明,例如如果刚开始输入了一毛,则由初始状态转到输入了一毛的这个状态,如果此时继续输入钱,根据输入的面值进入下一个对应状态,而如果此时按下复位信号,则找出这一毛钱,当然这时是不会售出邮票的,同时现态恢复为初始状态
在选购六毛邮票的情况下,设投币初始状态为ST0,如果投入一枚一毛硬币为(累积一毛)ST1, 如果投入一枚五毛硬币为(累积五毛)ST5,如果投入一枚一元硬币则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0;在ST1状态下如果再次输入一枚一毛硬币(累计两毛)为ST2,如果投入一枚五毛硬币(累计六毛)则输出一枚邮票且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块一)则输出一枚邮票并且找零五毛且次态重新定义为初始状态ST0;在ST2状态下如果再次输入一枚一毛硬币(累计三毛)为ST3,如果投入一枚五毛硬币(累计七毛)则输出一枚邮票并且找零一毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块二)则输出一枚邮票并且找零六毛且次态重新定义为初始状态ST0;在ST3状态下如果再次输入一枚一毛硬币(累计四毛)为ST4,如果投入一枚五毛硬币(累计八毛)则输出一枚邮票并且找零两毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块三)则输出一枚邮票并且找零七毛且次态重新定义为初始状态ST0;在ST4状态下如果再次输入一枚一毛硬币(累计五毛)为ST5,如果投入一枚五毛硬币(累计九毛)则输出一枚邮票并且找零三毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块四)则输出一枚邮票并且找零八毛且次态重新定义为初始状态
word格式-可编辑-感谢下载支持
ST0;在ST5状态下如果再次输入一枚一毛硬币(累计六毛)则输出一枚邮票并且态重新定义为初始状态ST0,如果投入一枚五毛硬币(累计一元)则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块五)则输出一枚邮票并且找零九毛且次态重新定义为初始状态ST0。
如果选择的邮票面值为八毛,七基本原理和六毛面值邮票的一样,在这里就不赘述了。
如果在累计钱数小于邮票面值的情况下按下复位键,这时找零端口的输出为此时的钱的总和,能够实现退钱是通过在每个状态下定义了两个找零信号,在为按复位键的情况下是将信号SIG_ZHAO赋值给找零信号端口,而在按下复位键的情况下,找零信号端口的输出为ZHAORE这个信号的值,而这两个信号的值在不同状态下有相应的不同的值,根据以上思路我们便可以进行程序的编写了。
word格式-可编辑-感谢下载支持
3 软件设计
4代码描述 LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ZIDONG IS
PORT ( RESET : IN STD_LOGIC; --复位信号 CLK,LIU,BA : IN STD_LOGIC; --
INYM,INWM,INYY : IN STD_LOGIC; --钱输入端口 YOU : OUT STD_LOGIC; --邮票出口
ZHAO : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --找钱出口 END ZIDONG;
ARCHITECTURE BEHAV OF ZIDONG IS
TYPE STATES IS (ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7);--状态定义 SIGNAL YIMAO,WUMAO,YIKUAI : STD_LOGIC; --钱输入信号 SIGNAL SIG_YOU : STD_LOGIC;
--输出对应信号
SIGNAL SIG_ZHAO : STD_LOGIC_VECTOR(3 DOWNTO 0);--找零对应信号 SIGNAL ZHAORE :STD_LOGIC_VECTOR(3 DOWNTO 0);--复位时的找零 SIGNAL CURRENT_STATE : STATES; SIGNAL NEXT_STATE : STATES; BEGIN
P1 :PROCESS(CLK) --将输入送相应的信号 BEGIN
IF CLK'EVENT AND CLK='1' THEN YIMAO <= INYM; WUMAO <= INWM; YIKUAI <=INYY; END IF;
END PROCESS P1;
p2 :PROCESS(RESET,CLK)--次态给现态 BEGIN
IF RESET = '1' THEN CURRENT_STATE <= ST0;
ELSIF CLK'EVENT AND CLK='1' THEN CURRENT_STATE <= NEXT_STATE; END IF;
END PROCESS p2;
--现态 --次态
word格式-可编辑-感谢下载支持
p3 :PROCESS(CLK,CURRENT_STATE,NEXT_STATE,YIMAO,WUMAO,YIKUAI)--状态转换 BEGIN
IF RESET ='1' THEN SIG_ZHAO<=ZHAORE;NEXT_STATE<=ST0;--复位找钱 ELSIF LIU='1'THEN CASE CURRENT_STATE IS
WHEN ST0 => ZHAORE<=\"0000\"; --状态S0
IF YIMAO = '1' THEN
--输入1毛 SIG_YOU <= '0';
--不出邮票 SIG_ZHAO <= \"0000\"; --不找钱 NEXT_STATE <= ST1; --次态为ST1 ELSIF WUMAO = '1' THEN
--输入5毛 SIG_YOU <= '0';
--不出邮票 SIG_ZHAO <= \"0000\"; --不找钱 NEXT_STATE <= ST5; --次态为ST5 ELSIF YIKUAI ='1' THEN --输入1块 SIG_YOU <= '1';
--出邮票 SIG_ZHAO <= \"0100\";
--找4毛
NEXT_STATE <= ST0; --次态为ST0
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\";
--不输入 NEXT_STATE <= ST0; END IF;
WHEN ST1 => ZHAORE<=\"0001\" ; IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST2; ELSIF WUMAO = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST0; ELSIF YIKUAI = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0101\";
NEXT_STATE <= ST0;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST1; END IF;
WHEN ST2 => ZHAORE<=\"0010\";
IF YIMAO = '1' THEN
都不变
word格式-可编辑-感谢下载支持
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST3;
ELSIF WUMAO = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0001\"; NEXT_STATE <= ST0;
ELSIF YIKUAI = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0110\"; NEXT_STATE <= ST0;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST2; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST4;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0010\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0111\"; NEXT_STATE <= ST0;
WHEN ST3 => ZHAORE<=\"0011\";
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST3; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST5;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0011\"; NEXT_STATE <= ST0;
WHEN ST4 =>ZHAORE<=\"0100\";
word格式-可编辑-感谢下载支持
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"1000\"; NEXT_STATE <= ST0;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST4; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST0;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0100\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"1001\"; NEXT_STATE <= ST0;
WHEN ST5 => ZHAORE<=\"0101\";
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST5; END IF;
--其他状态 空操作
WHEN OTHERS => NULL; END CASE;
ELSIF BA='1'THEN
CASE CURRENT_STATE IS
--选择8毛的邮票
WHEN ST0 => ZHAORE<=\"0000\"; --状态S0
IF YIMAO = '1' THEN
--输入1毛 --不出邮票 --不找钱 --次态为ST1 --输入5毛 --不出邮票
--不找钱 --次态为ST5 --出邮票
SIG_YOU <= '0';
SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST1; SIG_YOU <= '0';
ELSIF WUMAO = '1' THEN
SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST5;
SIG_YOU <= '1';
ELSIF YIKUAI ='1' THEN --输入1块
word格式-可编辑-感谢下载支持
SIG_ZHAO <= \"0010\"; --找2毛
NEXT_STATE <= ST0; --次态为ST0
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST0; END IF;
--不输入 都不变
WHEN ST1 => ZHAORE<=\"0001\" ;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST2; IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST2;
ELSIF WUMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST6;
ELSIF YIKUAI = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0011\"; NEXT_STATE <= ST0;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST1; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST3;
ELSIF WUMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST7;
ELSIF YIKUAI = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0100\"; NEXT_STATE <= ST0;
WHEN ST2 => ZHAORE<=\"0010\";
word格式-可编辑-感谢下载支持
END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST4;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0101\"; NEXT_STATE <= ST0;
WHEN ST3 => ZHAORE<=\"0011\";
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST3; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST5;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0001\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0110\"; NEXT_STATE <= ST0;
WHEN ST4 =>ZHAORE<=\"0100\";
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST4; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST6;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1';
WHEN ST5 => ZHAORE<=\"0101\";
word格式-可编辑-感谢下载支持
SIG_ZHAO <= \"0010\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0111\"; NEXT_STATE <= ST0;
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST5; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST7;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0011\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"1000\"; NEXT_STATE <= ST0;
WHEN ST6 => ZHAORE<=\"0110\";
ELSE
SIG_YOU <= '0'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST6; END IF;
IF YIMAO = '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST0;
ELSIF WUMAO= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"0100\"; NEXT_STATE <= ST0;
ELSIF YIKUAI= '1' THEN SIG_YOU <= '1'; SIG_ZHAO <= \"1001\"; NEXT_STATE <= ST0;
WHEN ST7 => ZHAORE<=\"0111\";
ELSE
SIG_YOU <= '0';
word格式-可编辑-感谢下载支持
SIG_ZHAO <= \"0000\"; NEXT_STATE <= ST7; END IF;
--其他状态 空操作
WHEN OTHERS => NULL; END CASE; END IF;
END PROCESS p3;
p4 :PROCESS(CLK,SIG_YOU,SIG_ZHAO)--将输出信号送输出端 BEGIN
IF CLK'EVENT AND CLK='1' THEN YOU <= SIG_YOU; ZHAO <= SIG_ZHAO; END IF;
END PROCESS p4; END BEHAV;
5 各模块的时序仿真图
输入端口:CLK(时钟信号)、RESET(复位)、LIU(6毛邮票)、BA(8毛邮
票)、INYM(投入1毛)、INWM(投入5毛)、INYY(投入1元)
输入端口:YOU(出邮票)、ZHAO(找钱)
上图仿真表示,选择购买八角邮票,当投入5毛时钱不够,选择复位放弃购
买,则机器不出邮票,找钱5毛。
word格式-可编辑-感谢下载支持
上图仿真表示,当选择购买6毛邮票时,购买者投入1元,然后机器售出一
张邮票,找钱4毛。
上图仿真表示,当选择购买8毛邮票时,购买者先投入5毛,钱不够不出邮
票,然后又继续投入1毛,还是不够,继续投入1元,机器出邮票,找钱8毛。
6 总结
本次实验通过设计与仿真,基本实现了题目的要求,完成了自动售邮票机的功能,按照购买者要求选择购买6毛或8毛邮票,然后投入相应的钱数,机器是否出票和找零都没有差错。但是由于能力所限,还有一些想法功能没有能力实现,像可以同时购买两张或多张时的实现和当购买者投入相应的钱数后不想买了进行退钱的操作等。
word格式-可编辑-感谢下载支持
7 参考文献
《EDA技术与数字系统设计》 邹彦 电子工业出版社 《EDA技术实用教程》 潘松,黄继业 科学出版社 《VHDL与数字电路设计》 卢杰 科学出版社 《VHDL硬件描述语言》 Bhasker著 机械工业出版社 《电子技术课程设计指导》 彭介华 东南大学出版社
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务