EDA课程设计报告(自动售货机)
EDA课程设计 自动售货机控制系统(DOC)
电子课程设计——自动售货机控制系统的设计学院:电子信息工程学院专业、班级:通信131503班姓名:学号: 2013150303指导老师:李斌2 0 1 5 年 1 2 月目录绪论 (2)一、设计任务与要求 (3)二、总体框图 (3)框图 (3)设计思路 (3)三、器件选择 (4)四、功能模块 (4)1、分频器模块 (4)2、数码管显示模块 (5)3、取货模块 (7)五、总体设计电路图 (8)1、总体设计电路原理图 (8)2、管脚分配表 (9)3、仿真图 (9)六、心得体会 (10)七、参考文献 (10)自动售货机控制系统的设计绪论近年来,集成电路技术的迅猛发展,特别是可编程逻辑器件的高速发展,电子设计自动化EDA技术成为电子设计工程师的新宠。
EDA技术以计算机为工具完成数字系统的逻辑综合、布局布线和设计仿真等工作。
电路设计者只需要完成对系统功能的描述,就可以由计算机软件进行系统处理,最后得到设计结果,并且修改设计方案如同修改软件一样方便。
利用EDA工具可以极大地提高设计效率。
本设计是一套结构简单,操作方便,性能可靠的自动饮料售卖机产品。
自动饮料售卖机电路设计采用选择商品电路、投币累加电路、统计卖出商品电路等四个基本电路构成。
自动售货机在接受投入钱币后,通过与商品价格比较,确定是否能够售出商品和把算出剩余的钱找回。
当商品输出后售货机自动把上次卖出商品的价格和投入的钱币的总和清零,这时才可以进行下次交易。
自动售货机还应满足商家查看销售商品的总和及使其清零,和控制该售货机进行整体复位。
该售货机可以帮助商家更好的销售商品,并且节省人力,获得更大的利润自动饮料售卖机是能够根据投入的钱币自动取出饮料的机器,它是商业自动化的常用设备,不受时间、地点的限制,能节省人力、方便交易。
现代的自动饮料售卖机的种类、结构和功能依出售的饮料种类而异。
钱币装置是自动饮料售卖机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。
EDA课程设计—自动售票机
EDA课程设计—自动售票机第一篇:EDA课程设计—自动售票机燕山大学EDA课程设计报告书题目:自动售票机姓名:班级:学号:成绩:(注:此文件应以同学学号为文件名)一、设计题目及要求 1.设计题目:自动售票机 2.设计要求:⑴、每次投一枚硬币,但可以连续投入数枚硬币。
硬币种类两种:1元和5角,各用一个按键表示。
⑵、设定票价为2.5元,每次售一张票。
购票时先投入硬币,当投入的硬币总金额达到或超过票的面值时,用LED发出指示,这时可以按取票键取出票。
⑶、如果所投硬币超过票的面值则会有LED提示找零钱,取完票以后按找零键则可以取出零钱。
⑷、用两位数码管显示已投币金额,若刚好投币2.5元,取票后金额归零;若投币超过2.5元,取票后显示找零金额,按下找零键后金额再归零。
1总体设计的文字描述,即由哪几个部分构二、设计过程及内容(包括○2主要模块比较详尽的文字描成的,各个部分的功能及如何实现方法;○述,并配以必要的图片加以说明,但图片数量无需太多)1.总体结构如下:总体设计思路:此自动售票系统总共有5个主要模块,分别是:累加模块,比较器模块,找零模块,数字转换模块,显示器模块。
⑴、累加模块实现金额的累加功能。
实现方法:该模块设置3个输入口(包括5角、1元、复位),8个输出口(B1—B8)。
该模块将在给五角或一元高电平的同时实现金额的累加,复位则会将会对其进行清零。
该模块由一片8位的加法器,2片4位寄存器及简单门电路组成,利用8位加法器将输入的金额(5、10)进行二进制相加(00000101、00001010),通过寄存器后返回到加法器实现累加功能。
复位键则与寄存器复位清零短CLRN相连,实现复位的功能。
⑵、比较器模块实现与票价进行比较的功能。
实现方法:该模块设置了8个输入口(A0—A7)1个取票口,4个输出口。
该模块将累加的钱币与2.5元的票价比较,如果累加金额高于票价则黄灯亮,小于票价则红灯亮,等于票价则绿灯亮。
EDA实验报告---自动售货机
自动售货机的设计一.实验内容:本自动售货机系统,结合EDA技术,采用ALTERA公司可编程逻辑器件(CPLD)EPM7128SLC84-15芯片作为控制核心,再配以必要的外围电路从而实现只销售两种饮料,售价均为15元,可以找零和退币等功能的EDA应用系统。
芯片的设计是以MAX_PLUS II 作为开发平台,VHDL语言作为开发语言,使用掌宇公司CIC_310 CPLD/FPGA数字开发系统完成软件测试。
自己制作下载板与外围电路。
二.实验分析:本自动售货机只销售两种罐装饮料。
售价均为15元。
顾客可以由两个不同投币孔分别投入3个5元硬币或2个10元硬币。
一次交易只能买一罐,且自动找零。
只要按下取消键就会马上无条件退币。
本设计的硬件电路用2个按键电路代替2个投币孔,以LED点亮的数量显示各币种的投入数量,在以4Hz闪烁的LED来显示退币种类与数量。
因为投币是计次电路,应先经过抖动消除电路处理。
本设计采用1000Hz的系统时钟信号来控制所有买卖行为。
系统中设计的复位键为管理人员所用,并未在用户界面中设计。
三.系统设计流程图:四.自动售货机外观图:(为指示灯)五.电路原理图六.PCB图:根据PROTEL99画的系统原理图,成生PCB图。
然后进行布局与布线。
注意:布线时将晶振这种易产生噪声的器件的输出端与芯片时钟输入端的连线尽量布为直线;将电源与地线的宽度定为30mil到100mil之间。
本系统的电流不是很大,所以不用将板子的两面分别布成电源与地。
七.系统实物图:八.软件系统框图九.源程序:1.产生系统频率和退币信号电路首先要根据硬件电路的晶振频率确定分频系数,先产生系统频率,在进一步分频产生退币信号。
由于掌宇公司的开发系统上的晶振频率为20MHz,所以要分频系数分别为20000(COUNT)和250(COUNT1)。
(注:由于在自制的下载板上使用了1MHz的有源晶振,所以把程序中的COUNT的范围改为0到1000即可。
EDA自动售货机课程设计
一、设计目的1.熟悉状态机的使用。
2.了解用VHDL语言实现状态机的过程。
二、设计内容本系统模拟一个自动售票机:所售邮票的价钱分别为:6角和8角;按键设置S1:按一下一角,S2:按一下5角,S3:按一下一元,S8:选择邮票面值,按一下当D1_1亮表示选择6角邮票,按一下D1_2亮表示选择8角邮票,S7:取消操作。
D1_6~D1_8:找回的零钱 D1_1:指示6角邮票D1_2:指示8角邮票 D1_4:提示邮票送出三、设计原理有限状态机FSM及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。
传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、化简次态方程等,而利用VHDL可以避免这些繁琐的过程,直接利用状态转换图进行状态机的描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELsE语句实现。
四、管脚分配实验符号对应附录符号管脚money[0] S1 PIN_66money[1] S2 PIN-67money[2] S3 PIN_68rst RESET PIN_240commodity6 D1_1 PIN_215commodity8 D1_2 PIN_217give_change[0] D1_8 PIN_224give_change[1] D1_7 PIN_225give_change[2 D1_6 PIN_213stamp S8 PIN_75back S7 PIN_76clk100hz Clock PIN_29sell D1_4 PIN_207五、使用说明本程序是一个自动处理人机信息交换的程序,它能根据人们的需要,显示邮票的面值,在付款和付款取消的时候给出相应指示,处理交易中出现的各种情况,并且能在交易后显示是否交易成功。
六、流程图设计七、程序设计如下:library ieee; 初始定义投入壹角硬币的处理电路模块投入五角硬币的处理电路模块投入壹元硬币的处理电路模块选择邮票模块确认与取消处理电路模块退币处理电路模块出货电路模块use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity vendor isport(reset :in std_logic; --系统内部给其他顾客重新操作的复位信号clk :in std_logic; --由外接信号发生器提供的1024Hz 系统时钟信号ok_buy :in std_logic; --购买确认的按键信号cancel_buy :in std_logic; --购买取消的按键信号coin_1 :in std_logic;-- 投入壹角硬币的动作按键coin_5 :in std_logic; --投入五角硬币的动作按键coin_10 :in std_logic; --投入壹圆硬币的动作按键select_liu_yp :in std_logic; --选择六角邮票的按键信号select_ba_yp :in std_logic; --选择八角邮票的按键信号led_liu_yp_ok :out std_logic; --灯亮显示还有六角邮票led_ba_yp_ok :out std_logic; --灯亮显示还有八角邮票led_liu_yp_sel :out std_logic; --灯亮显示六角邮票选择键被按 led_ba_yp_sel :out std_logic; --灯亮显示八角邮票选择键被按 led_buy :out std_logic; --灯亮显示按了购买确认键led_cancel :out std_logic; --灯亮显示按了购买取消键led_one :out std_logic;--1个LED,投入1个1角硬币亮一个LEDled_five :out std_logic;--3个LED,投入1个五角硬币亮一个LEDled_ten :out std_logic;--2个LED,投入1个壹圆硬币亮一个LEDDOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);led_liu_yp_out :out std_logic;--灯亮显示六角邮票已出货led_ba_yp_out :out std_logic --灯亮显示八角邮票已出货);end;architecture arch of vendor issignal ok :std_logic;--用来维持ok_buy的状态signal cancel :std_logic;--用来维持cancel_buy的状态signal money_ok1 :std_logic;--投入金额正确signal money_ok2 :std_logic;--投入金额正确signal return_clk :std_logic;--退币的闪烁信号4Hzsignal liu_yp_choice :std_logic;--用来维持select_liu_yp的状态 signal ba_yp_choice :std_logic;--用来维持select_ba_yp的状态signal total_amount_one:integer range 0 to 1;--壹角硬币的累计投入金额signal total_amount_five:integer range 0 to 5;--五角硬币的累计投入金额signal total_amount_ten :integer range 0 to 10;--壹圆硬币的累计投入金额signal total_amount_6 :integer range 0 to 6;--壹圆硬币的累计投入金额signal total_amount_8 :integer range 0 to 8;--壹圆硬币的累计投入金额signal liu_yp_out :std_logic;--六角邮票已经出货的信号signal ba_yp_out :std_logic;--八角邮票已经出货的信号begincoin_1_counting:block --投入壹角硬币的处理电路模块beginprocess(reset,coin_1)beginif reset='1' then total_amount_one<=0; --复位led_one<='0';elsif rising_edge(coin_1) then --按下投入一角硬币的按钮total_amount_one<=1;led_one<='1'; --灯亮几盏表示投入多少个硬币end if;end process;end block;coin_10_counting:block --投入壹圆硬币的处理电路模块beginprocess(reset,coin_10)beginif reset='1' then total_amount_ten<=0; --复位led_ten<='0';elsif rising_edge(coin_10) then --按下投入一元硬币的按钮total_amount_ten<=10;led_ten<='1'; --灯亮几盏表示投入多少个硬币end if;end process;end block;coin_5_counting:block --投入五角硬币的处理电路模块signal no_coin_five:integer range 0 to 1;beginprocess(reset,coin_5)beginif reset='1' then total_amount_five<=0; --复位led_five<='0';elsif rising_edge(coin_5) then --按下投入五角钱硬币的按钮total_amount_five<=5;led_five<='1'; --灯亮几盏表示投入多少个硬币 end if;end process;end block;select_drink:blockbeginprocess(reset,clk)beginif reset='1' then led_liu_yp_sel<='0'; --复位led_ba_yp_sel<='0';ba_yp_choice<='0';liu_yp_choice<='0';elsif rising_edge(clk) then --时钟上升沿if select_liu_yp='1' then --选择led_liu_yp_sel<='1'; --相应的信号灯亮liu_yp_choice<='1'; --维持选择状态led_ba_yp_sel<='0';ba_yp_choice<='0';end if;if select_ba_yp='1' then --选择led_liu_yp_sel<='0';ba_yp_choice<='1'; --维持选择状态led_ba_yp_sel<='1'; --相应的灯亮liu_yp_choice<='0';end if;end if;end process;end block;ok_or_cancel:block --确认与取消处理电路模块beginp1:process(reset,ok_buy)beginif reset='1' then ok<='0'; --复位led_buy<='0';elsif rising_edge(ok_buy) then --按确认按钮ok<='1'; --维持状态led_buy<='1'; --确认灯亮end if;end process;p2:process(reset,cancel_buy)beginif reset='1' then cancel<='0'; --复位led_cancel<='0';elsif rising_edge(cancel_buy) then --按取消键cancel<='1'; --维持状态led_cancel<='1'; --取消灯亮end if;end process;end block;coin_returned:block --退币处理电路模块signal total_amount:integer range 0 to 16;signal ret:integer range 0 to 16;beginprocess(reset,clk)beginif reset='1' then --复位total_amount<=0;money_ok1<='0';money_ok2<='0';DOUT<="1000000";elsif rising_edge(clk) then --时钟上升沿total_amount<=total_amount_ten+total_amount_five+total_amount_one; --投入总钱数,十进制,单位角if total_amount>=6 then money_ok1<='1';else money_ok1<='0';end if;if total_amount>=8 then money_ok2<='1';else money_ok2<='0';end if;if (cancel='1') then --取消购买CASE total_amount ISWHEN 0=>DOUT<="1000000";--0WHEN 1=>DOUT<="1111001";--1WHEN 2=>DOUT<="0100100";--2WHEN 3=>DOUT<="0110000";--3WHEN 4=>DOUT<="0011001";--4WHEN 5=>DOUT<="0010010";--5WHEN 6=>DOUT<="0000010";--6WHEN 7=>DOUT<="1111000";--7WHEN 8=>DOUT<="0000000";--8WHEN 9=>DOUT<="0010000";--9WHEN 10=>DOUT<="0001000";--10WHEN 11=>DOUT<="0000011";--11WHEN 12=>DOUT<="1000110";--12WHEN 13=>DOUT<="0100001";--13WHEN 14=>DOUT<="0000110";--14WHEN 15=>DOUT<="0001110";--15WHEN 16=>DOUT<="0001001";--16WHEN OTHERS=>DOUT<="1111111";END CASE;end if;if (money_ok1='1' and ok='1' and liu_yp_choice='1') thentotal_amount_6<=6;ret<=total_amount-total_amount_6;elsif( money_ok2='1' and ok='1' and ba_yp_choice='1') thentotal_amount_8<=8;ret<=total_amount-total_amount_8;else ret<=total_amount;end if;if ( ok='1') then --取消购买CASE ret ISWHEN 0=>DOUT<="1000000";--0WHEN 1=>DOUT<="1111001";--1WHEN 2=>DOUT<="0100100";--2WHEN 3=>DOUT<="0110000";--3WHEN 4=>DOUT<="0011001";--4WHEN 5=>DOUT<="0010010";--5WHEN 6=>DOUT<="0000010";--6WHEN 7=>DOUT<="1111000";--7WHEN 8=>DOUT<="0000000";--8WHEN 9=>DOUT<="0010000";--9WHEN 10=>DOUT<="0001000";--10WHEN 11=>DOUT<="0000011";--11WHEN 12=>DOUT<="1000110";--12WHEN 13=>DOUT<="0100001";--13WHEN 14=>DOUT<="0000110";--14WHEN 15=>DOUT<="0001110";--15WHEN 16=>DOUT<="0001001";--16WHEN OTHERS=>DOUT<="1111111";END CASE;end if;end if;end process;end block;give_check:block --出货电路模块beginliu_yp_out<='1' when (money_ok1='1' and ok='1' and liu_yp_choice='1') else '0';led_liu_yp_out<=liu_yp_out;ba_yp_out<='1' when (money_ok2='1' and ok='1' and ba_yp_choice='1') else '0';led_ba_yp_out<=ba_yp_out;end block;end arch;八、设计总结:通过这次小学期设计让我更加深入的了解了VHDL语言的使用及其设计方法,在设计过程中遇到很多问题,通过自己和小组成员的共同努力,把所遇到的问题一一克服,在解决问题的过程中对VHDL的实际应用有了很大的提高九、参考文献:[1] 高峰.单片微型计算机原理与接口技术.科学出版社,2007。
基于EDA的自动售货机系统的设计开题报告范文
基于EDA的自动售货机系统的设计开题报告范文课题名称:基于学院:专业:EDA的自动售货机系统的设计电子电气工程学院电子信息工程一自动售货机设计简介自动售货是20世纪70年代在日本、欧美发展起来的一种全新的消费方式,自动售货机又被称为24小时营业的微型自助超市,它的售货领域非常广泛,是发达国家商品零售的一种主要方式。
自动售货机作为一种先进的消费方式,已经成为城市现代文明发达程度的重要标志,其新颖、时尚的购物方式,24小时营业的特点给人们生活带来了便利,美化了城市环境,受到消费者的欢迎。
但是在我国自动售货机的普及还不及发达国家,主要原因是我国EDA技术的应用水平长期落后于发达国家。
自动售货机控制要求对机内商品信息进行识别,对投入的货币进行运算,并根据所投入的货币数值判断是否能够购买某种商品,并做出相应的反应。
本文设计的自动售货机控制系统主要可以实现投币处理、计算投币总额、输出商品,输出找零等功能,系统工作流程如图1所示。
(2)自动售货机的几个过程在自动售货机控制系统的工作过程中,可分为三个状态:初始状态、投币状态和找零状态。
在每一个状态中完成特定的功能。
首先,在初始状态下,自动售货机通电,初始化机内商品信息(包括商品种类、每种商品的数量以及价格)。
当顾客购买商品时,可根据自己需要通过按键选择其中一种商品(且只限一种),然后进入下一状态,即投币状态。
在投币状态下,当投入硬币总额大于或等于商品价格,并且按确认购买键后将进入找零状态;若按取消键,售货机退出所投硬币,返回到初始状态。
投币结束,若投入的硬币等于或大于商品单价,且确认购买,则商品将送出送货口,并计算输出找零硬币。
出货找零结束时表示一次自动售货过程完成,重新返回到初始状态,计算此时商品信息,并等待下一次售货过程的到来。
(3)自动售货机的基本模块自动售货机控制系统的功能模块逻辑上划分为商品信息存储模块、商品选择模块、投币处理模块,找零模块和显示模块。
eda自动售货票机课程设计
eda自动售货票机课程设计一、课程目标知识目标:1. 让学生理解EDA自动售货票机的基本工作原理和组成结构。
2. 掌握自动售货票机程序设计的基本步骤和关键算法。
3. 了解自动售货票机在生活中的应用及其对便捷性的提升。
技能目标:1. 培养学生运用所学知识进行EDA自动售货票机程序设计和调试的能力。
2. 提高学生动手实践和问题解决的能力,能针对实际问题设计相应的解决方案。
3. 培养学生的团队协作能力,通过分组合作完成项目任务。
情感态度价值观目标:1. 激发学生对电子设计自动化技术的兴趣,培养其探索精神和创新意识。
2. 培养学生关注社会发展,认识到科技对生活的积极影响,增强社会责任感。
3. 引导学生树立正确的价值观,认识到技术应服务于社会、造福于人类。
课程性质:本课程为实践性较强的课程,结合理论教学与实际操作,培养学生运用电子设计自动化技术解决实际问题的能力。
学生特点:学生具备一定的编程基础和电子技术知识,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:教师应注重理论与实践相结合,充分调动学生的积极性和主动性,引导学生通过分组合作、自主探究等方式完成学习任务。
同时,关注学生的个体差异,给予个性化指导,确保课程目标的实现。
通过课程学习,使学生达到预定的学习成果,为后续学习奠定基础。
二、教学内容1. 自动售货票机原理介绍:讲解自动售货票机的工作原理、组成结构及其在各领域的应用。
相关教材章节:第二章 电子支付系统概述,第三节 自动售货机工作原理。
2. 程序设计基础:介绍EDA工具的使用,重点讲解Verilog和VHDL编程语言,为学生设计自动售货票机程序打下基础。
相关教材章节:第三章 现场可编程逻辑器件,第一节 EDA工具简介,第二节 Verilog和VHDL编程基础。
3. 自动售货票机程序设计:分析自动售货票机的需求,指导学生进行程序设计,包括硬件描述语言编写、仿真与调试。
相关教材章节:第四章 数字系统设计,第二节 硬件描述语言编程,第三节 数字系统仿真与调试。
eda课程设计报告报告自动售货机的设计
电子信息科学与技术专业课程设计任务书一.设计说明根据要求可自动出售两种货物,本文设计的自动售货机可销售cola 和pepsi两种饮料:售货机可识别1元和0.5元的两种货币,在一次购买过程中,可购买一个或多个商品,系统会自动计算所需钱数和找零的钱数并自动找零。
另外有3个发光二极管、6个LCD数码管:两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。
1.1.1 流程说明本文设计的自动售货机当通电时,表示一次销售的开始。
顾客选择一种商品或多种商品后就进入投币状态。
若不投币,则自动返回初始状态。
投币后,系统自动计算所投钱数。
若投币够,则出货并找零。
若投币不够,如果顾客没有继续投币,则退币并回到初始状态。
本系统的投币销售流程图如图所示:1.1.2各模块说明本文设计的自动售货机总体分三个模块:总控模块,二进制译码模块、BCD 码译码模块。
总控模块:总控模块是本系统最重要的模块,该模块大体有5个输入端口和6个输出端口。
其输入端口包括clk、coin1(投入一元货币)、coin5(投入0.5元货币)、cola(选择cola)、pepsi(选择pepsi),输出端口有paid(已投入多少钱)、needed(还需多少钱)moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。
该模块实现了本系统最重要的交易过程,包括选择商品、投入货币,计算剩余金额,找零出货等。
二进制译码模块:该模块有一个输入端口和两个输出端口。
输入端口是一个8位的二进制数输出端口bcd0、bcd1是两个4位的BCD码。
该模块的主要的功能是实现将主控模块输出的二进制数(paid、needed、moneyout)转换成BCD 码,以便输出到七段数码管上显示出来。
该模块的原理是将一个8位的二进制转换成2个4位的BCD码,分为高四位和低四位。
BCD码译码模块:该模块有一个输入端口和一个输出端口1.1.3 程序设计主控模块完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shouhuoji isport(clk: in std_logic;coin1:in std_logic;coin5:in std_logic;cola:in std_logic;pepsi:in std_logic;paid:out std_logic_vector(7 downto 0);needed:out std_logic_vector(7 downto 0);success:out std_logic;failure:out std_logic;showmoneyout:out std_logic;moneyout:out std_logic_vector(7 downto 0));end shouhuoji;architecture behav of shouhuoji istype state_type is (qa,qb,qe,qc,qg,qd,qf);--定义七个状态signal current_state :state_type:=qa;signal q:integer range 0 to 100;beginprocess(clk)variable paidtemp:std_logic_vector(7 downto 0);--定义变量variable neededtemp:std_logic_vector(7 downto 0);variable backmoney:std_logic_vector(7 downto 0);variable pricetemp:std_logic_vector(7 downto 0);beginif clk'event and clk='1' thencase current_state iswhen qa=>paidtemp:="00000000";neededtemp:="00000000";backmoney:="00000000";pricetemp:="00000000";q<=0;showmoneyout<='0';moneyout<="00000000";paid<="00000000";needed<="00000000";failure<='0';success<='0';if cola='1' or pepsi='1' then current_state<=qb;if cola='1' then pricetemp:=pricetemp+"00001111";neededtemp:=pricetemp;Elsepricetemp:=pricetemp+"00010100";neededtemp:=pricetemp;end if;end if;paid<=paidtemp;needed<=neededtemp;when qb=>if coin1='1' or coin5='1' thenif coin1='1'then paidtemp:=paidtemp+"00001010";elsepaidtemp:=paidtemp+"00000101";end if;if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:="00000000";current_state<=qd;else neededtemp:=pricetemp-paidtemp;backmoney:="00000000"; current_state<=qc;q<=0;end if;paid<=paidtemp;needed<=neededtemp;end if;if q<8 then q<=q+1;if cola='1' or pepsi='1'then q<=0;if cola='1' then pricetemp:=pricetemp+"00001111"; neededtemp:=neededtemp+"00001111";elsepricetemp:=pricetemp+"00010100"; neededtemp:=neededtemp+"00010100";end if;paid<=paidtemp;needed<=neededtemp;end if;else current_state<=qe;q<=0;end if;when qe=>failure<='1';if q<4 then q<=q+1;else current_state<=qa;q<=0;end if;when qc=>if coin1='1' or coin5='1' thenif coin1='1'then paidtemp:=paidtemp+"00001010";elsepaidtemp:=paidtemp+"00000101";end if;if paidtemp>=pricetemp thenbackmoney:=paidtemp-pricetemp;neededtemp:="00000000";current_state<=qd;else neededtemp:=pricetemp-paidtemp;backmoney:="00000000"; current_state<=qc;end if;paid<=paidtemp;needed<=neededtemp;end if;if coin1/='1'and coin5/='1' thenif q<10 then q<=q+1;else current_state<=qg;end if;else q<=0;end if;when qg=>failure<='1';showmoneyout<='1';moneyout<=paidtemp;current_state<=qf;q<=0;success<='0';when qd=>success<='1';if backmoney>"00000000"then showmoneyout<='1'; moneyout<=backmoney;end if;current_state<=qf;q<=0;when qf=>if q<4 then q<=q+1;else current_state<=qa;q<=0;end if;end case;elseend if;end process;end behav;BCD译码模块完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code1 isport(b:in std_logic_vector(7 downto 0);bcd0:out std_logic_vector(3 downto 0);bcd1:out std_logic_vector(3 downto 0)) ;end code1;architecture one of code1 isbeginprocess(b)begincase b iswhen"00000000"=>bcd0<="0000";bcd1<="0000";--译码“0”;when"00000001"=>bcd0<="0001";bcd1<="0000";--译码“1”;when"00000010"=>bcd0<="0010";bcd1<="0000";--译码“2”;when"00000011"=>bcd0<="0011";bcd1<="0000";--译码“3”;when"00000100"=>bcd0<="0100";bcd1<="0000";--译码“4”;when"00000101"=>bcd0<="0101";bcd1<="0000";--译码“5”;when"00000110"=>bcd0<="0110";bcd1<="0000"; when"00000111"=>bcd0<="0111";bcd1<="0000"; when"00001000"=>bcd0<="1000";bcd1<="0000"; when"00001001"=>bcd0<="1001";bcd1<="0000"; when"00001010"=>bcd0<="0000";bcd1<="0001"; when"00001011"=>bcd0<="0001";bcd1<="0001"; when"00001100"=>bcd0<="0010";bcd1<="0001"; when"00001101"=>bcd0<="0011";bcd1<="0001"; when"00001110"=>bcd0<="0100";bcd1<="0001"; when"00001111"=>bcd0<="0101";bcd1<="0001"; when"00010000"=>bcd0<="0110";bcd1<="0001"; when"00010001"=>bcd0<="0111";bcd1<="0001"; when"00010010"=>bcd0<="1000";bcd1<="0001"; when"00010011"=>bcd0<="1001";bcd1<="0001"; when"00010100"=>bcd0<="0000";bcd1<="0010";译码“20”when others=>null;end case;end process;end one;顶层模块完整程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity top isPort( clk1:in std_logic;C1,C5,P1_5,P2:in std_logic;paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out std_logic_vector(3 downto 0);s,f,showout :out std_logic );end top;architecture one of top iscomponent shouhuojiport ( clk:in std_logic;coin1:in std_logic;coin5:in std_logic;cola:in std_logic;pepsi:in std_logic;paid:out std_logic_vector(7 downto 0);needed:out std_logic_vector(7 downto 0);success:out std_logic;failure:out std_logic;showmoneyout:out std_logic;moneyout:out std_logic_vector(7 downto 0));end component;component code1port(b:in std_logic_vector( 7 downto 0);bcd0:out std_logic_vector(3 downto 0);bcd1:out std_logic_vector(3 downto 0));end component;signal p,n,mo:std_logic_vector( 7 downto 0);--signal s1,s2,s3,s4,s5,s6:std_logic_vector(3 downto 0);beginu0:shouhuoji--各模块连接port map(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2, success=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,mo neyout=>mo);u1:code1 port map(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1);u2:code1 port map(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1); u3:code1 port map(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1); end one;1.1.4各模块的连接各模块的连接如图所示:售货机主控系统和译码器模块图售货机顶层模块2、1 主控模块的仿真上图表示顾客选择了pepsi饮料后,且投了2个一元的硬币。
EDA实习报告(自动售卖机)
EDA实习报告(自动售卖机)第一篇:EDA实习报告(自动售卖机)EDA技术及应用实习报告自动售卖机信息13-2班06号GMH北华大学电气信息工程学院目录一、设计任务功能简介 (2)1、设计任务 (2)2、主要功能 (2)二、原理、方案、框图及任务分解 (2)1、原理 (2)2、方案 (2)3、框图 (3)4、任务分解 (3)三、关键任务的设计代码及注释 (4)四、调试中出现的问题及解决方案 (8)1、问题一 (8)2、问题二 (8)五、产业化市场分析及预测 (8)六、测试及运行结果 (9)七、参考文献 (1)一、设计任务功能简介1、设计任务自动售货机设计。
利用软件QuartusII软件,使用VHDL语言结合硬件要求对本题目设计功能进行编程,并在完成整个硬件程序设计后,在软件平台上进行编译和电路仿真,最后生成的目标文件下载到DE2-70实验板上实现上述所有功能并验证程序的可行性。
2、主要功能本设计主要实现的功能为:货物信息存储功能、商品选择功能、输入钱数处理功能、货架商品更换功能、语音提示功能、信息显示等功能。
二、原理、方案、框图及任务分解1、原理自动售货机(Vending Machine,VEM)是能根据投入的钱币自动付货的机器。
自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。
是一种全新的商业零售形式,又被称为24小时营业的微型超市。
能分为三种:饮料自动售货机、食品自动售货机、综合自动售货机。
自动售货机是台机电一体化的自动化装置,在接受到货币已输入的前提下,靠触摸控制按扭输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。
2、方案根据题目要求机器设有2个投币孔,机器可以接受1元和5元的纸币,分别有八种商品,价格分别为1元,4元,2元,3元,6元,7元,5元,8元,机器采用拨码开关模拟机器的复位键、确认购买键和商品选择,并且通过开发板上的LED等分别显示购买的不同情况,数码管实时显示购买金额,包括投入的价钱,找零的价钱。
EDA课程设计自动售货机
EDA课程设计自动售货机一、教学目标本课程旨在通过学习自动售货机的EDA(电子设计自动化)课程设计,让学生掌握自动售货机的基本工作原理,了解其硬件和软件的设计与实现,培养学生的实际工程能力和创新意识。
知识目标:使学生了解自动售货机的基本组成、工作原理和相关电子技术;掌握自动售货机的硬件设计与软件编程方法。
技能目标:培养学生运用EDA工具进行自动售货机系统设计与仿真能力;培养学生解决实际工程问题的能力,提高学生的创新意识和团队协作能力。
情感态度价值观目标:培养学生对自动售货机及相关技术的兴趣,激发学生创新精神和实践能力;培养学生具备良好的职业道德,使其成为具有社会责任感的工程技术人才。
二、教学内容本课程的教学内容主要包括自动售货机的基本原理、硬件设计与软件编程。
1.自动售货机的基本原理:介绍自动售货机的工作原理、结构及其功能。
2.硬件设计与实现:讲解自动售货机的硬件系统设计,包括控制器、传感器、执行器等硬件组件的选择、连接与调试。
3.软件编程:介绍自动售货机软件系统的架构与设计,讲解控制算法、人机界面设计等软件方面的内容。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
1.讲授法:通过讲解自动售货机的基本原理、硬件设计与软件编程的相关知识,使学生掌握基本概念和理论。
2.案例分析法:分析实际自动售货机的案例,使学生了解自动售货机在实际工程中的应用和设计要点。
3.实验法:安排实验室实践环节,让学生动手搭建自动售货机硬件系统,编写软件程序,验证设计方案的可行性。
4.小组讨论法:学生分组讨论,培养学生的团队协作能力和解决问题的能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统的学习资料。
2.参考书:推荐相关的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作课件、教学视频等多媒体资料,提高课堂教学质量。
4.实验设备:准备自动售货机的实验设备,包括控制器、传感器、执行器等硬件组件,以及相应的调试工具。
电子课程设计报告--自动售货机
电子技术基础课程设计题目名称:自动售货机姓名:学号:组员姓名:班级:指导教师:评语:成绩:教师签名:摘要自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。
1925年美国研制出售香烟的自动售货机,此后又出现了出售邮票、车票的各种现代自动售货机。
一般的自动售货机由钱币装置、指示装置、贮藏售货装置等组成。
钱币装置是售货机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。
如果投入的金额达到购买物品的数值即发出售货信号,并找出余钱。
指示装置用以指示顾客所选商品的品种。
贮藏售货装置保存商品,接收出售指示信号,把顾客选择的商品送至付货口。
一般售货机的钱币装置由投币口、选别装置、确认钱币真伪的检查装置、计算金额的计算装置和找钱装置组成。
而本次课程设计的内容就是在学习相关Verilog代码之后,再结合本学期学习的数字电子技术及其实验的相关知识,通过画出状态图等方式,清楚其逻辑关系和运算过程,编写一个简单的自动售货机程序,实现投入不同的硬币数量和面值,可以得到相应的实际结果,包括出货、找零等功能。
并且利用ModelSim软件来实现程序的测试,以及结果的输出和检验。
关键字:自动售货机 Verilog ModelSim软件状态图目录1 设计目的 (1)2 设计题目 (1)3 设计要求 (1)4 设计内容 (2)4.1有限状态机的描述 (2)4.2状态变化图 (2)4.3定义时钟信号 (3)4.4定义输入和输出端口 (3)4.5V ERILOG代码编写 (4)4.5.1 主程序:用Verilog语言的case语句 (4)4.5.2 测试程序 (6)4.6有限状态机图 (8)5 设计内容仿真实验结果 (9)5.1运行过程 (9)5.2波形分析 (10)6 参考文献 (12)电子课程设计总结与体会 (13)1 设计目的(1)掌握有限状态机的概念和描述方法;(2)掌握时序电路系统的设计方法;(3)学些和掌握Verilog描述数字系统的方法;(4)学习和掌握ModelSim等软件的使用方法;(5)学习和了解IC设计的基本流程。
EDA课程设计——自动售货机控制系统
《电子设计自动化(EDA)技术》课程设计报告题目: 自动售货机控制系统姓名:院系:专业:学号:指导教师:完成时间: 年月日一、课程设计题目、内容与要求………………………………………1、设计题目……………………………………………………………2、具体要求……………………………………………………………二、系统设计……………………………………………………………1、设计思路…………………………………………………………2 、系统原理(包含:框图等阐述)与设计说明等内容三、系统实现……………………………………………………………注:此部分阐述具体实现,包含主要逻辑单元、模块、源代码等内容四、系统仿真…………………………………………………………五、硬件验证(操作)说明………………………………………………六、总结………………………………………………………………七、参考书目…………………………………………………………一、课程设计题目、内容与要求1、设计题目自动售货机控制系统2、具体要求设计一个模拟自动售货机的逻辑控制电路1、它有两个投币口分别为一元投币口和五角投币口。
2、每次只能投入一枚一元或五角硬币。
3、投入一元五角硬币后机器自动给出一瓶矿泉水。
4、投入两元硬币后,在给出一瓶矿泉水的同时找回一枚五角的硬币二、系统设计1、设计思路根据设计要求可以对售货机的基本功能进行确定。
它应该能够区分一元和五角硬币,并且能够对投入的货币进行累加。
当所投币值达到商品售价。
就自动送出商品。
因为题目要求只有一种商品并且其售价为一元五。
根据这一特殊点可设计方案如下:用两个开关分别模拟投入一元和五角硬币时产生的信号,高电平有效。
用两颗LED分别模拟售出商品和找钱信号,灯亮有效。
具体功能实现如下:1、连续两次将IN-YUAN置1,则OUT灯会亮,且ZHAOQIAN也会亮。
表示买一元五的矿泉水,投了两元钱,则售出商品,找回五角零钱。
2、连续三次将IN-JIAO置1,则OUT灯会亮,而ZHAOJIAN不会亮。
自动售货机的EDA实现设计
《数电课程设计报告》题目:自动售货机的EDA实现设计学院:信息科学与工程学院专业班级:电子信息科学与技术08-1学生姓名:何伟伟组员:指导教师:张秀娟目录摘要 (3)一、自动售货机的系统结构 (4)1.1自动售货机的系统结构 (4)1.2自动售货实现的设计要求 (5)二、自动售货机的功能介绍 (5)2.1此次设计的自动售货机的功能简介 (5)2.2实现自动售货机的功能的设计思路 (6)三、分步模块设计及波形辅助分析 (6)3.1Verilog语言简介 (6)3.2程序变量名称解释 (6)3.3商家整体复位模块及分析 (6)3.4顾客货品选择模拟以及显示模块及分析 (8)3.5顾客货币选择以及显示模块及分析 (9)3.6投入货币不足引起警告准备找零显示模块及分析 (10)3.7货物送出及商家卖货额累加显示模块及分析 (10)3.8警告3s或者是按键3s后自动复位准备模块及分析 (11)四、设计仿真 (11)4.1Modelsim简介 (11)4.2完整的程序代码 (12)五、附录 (17)六、参考文献 (19)摘要随着经济发展,21世纪进入信息化,为更好的实现人们生活水平的提高,生活更好、更便捷、更经济已经成为人们追求的对象。
然而小型自动售货机就是在这样的时代背景下产生的,由于它的操作方便简洁等优越性能很好的符合人们需求,故它很快形成了自己市场,并日益扩大。
本文也是基于这个背景下,和读者一起探讨,本文详细介绍了自动售货机系统的方案设计、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧,主要实现自动售货机的功能。
该系统以Verilog编程为核心,以Modelsim软件为辅助,程序结构分模块设计,故结构清晰,加上仿真器仿真结果最大程度说明问题,符合课程设计要求,并加以解释与说明。
另外,用Verilog编程时.v重要,_tb.v也重要,仿真结果只能根据波形图来说明问题,经过多次努力,测试文件已经相当成熟,很好的满足了设计要求,,.v文件穿插文中配合讲解的需要,_tb.v(测试文件)在附录中给出,以供查阅。
eda自动售货机课程设计
eda自动售货机课程设计一、课程目标知识目标:1. 学生理解EDA自动售货机的原理与结构,掌握相关电子元件的功能及工作方式。
2. 学生掌握自动售货机程序设计的基本流程,能运用所学知识对自动售货机进行简单的故障排查。
3. 学生了解自动售货机在日常生活中的应用,认识到电子产品在便捷人们生活方面的作用。
技能目标:1. 学生能够运用所学知识,设计并搭建一个简易的EDA自动售货机模型。
2. 学生能够编写简单的程序,实现对自动售货机的基本控制功能。
3. 学生通过实际操作,培养动手能力、团队协作能力和问题解决能力。
情感态度价值观目标:1. 学生培养对电子科技的兴趣,激发学习热情,树立创新意识。
2. 学生在学习过程中,养成积极主动、认真负责的学习态度,培养良好的学习习惯。
3. 学生认识到科技进步对生活的影响,增强社会责任感和环保意识。
本课程针对五年级学生,结合课程性质、学生特点和教学要求,将目标分解为具体的学习成果。
在教学过程中,注重理论与实践相结合,强调学生的主体地位,激发学生的探究欲望,培养其创新精神和实践能力。
通过本课程的学习,使学生能够将所学知识应用到实际生活中,提高学生的综合素质。
二、教学内容1. 自动售货机原理与结构介绍:包括自动售货机的工作原理、主要部件及其功能。
- 教材章节:第五章“自动控制技术与应用”,第一节“自动售货机的工作原理”2. 电子元件认知:学习常用电子元件(如传感器、微控制器等)的功能与使用方法。
- 教材章节:第四章“电子元件”,第二节“传感器及其应用”3. 程序设计基础:介绍自动售货机程序设计的基本流程和编程方法。
- 教材章节:第七章“程序设计与控制”,第一节“程序设计的基本流程”4. 简易自动售货机模型设计与搭建:分组进行实际操作,设计并搭建自动售货机模型。
- 教材章节:第五章“自动控制技术与应用”,第二节“自动售货机的设计与制作”5. 故障排查与维护:学习自动售货机常见故障的排查方法与维护技巧。
EDA课程设计报告(自动售货机)
E D A课程设计报告(自动售货机)-CAL-FENGHAI.-(YICAI)-Company One1EDA(Verilog)课程设计报告——自动售货机摘要本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用QuartusⅡ软件编写verilog HDL硬件描述语言程序以实现自动售货功能。
本设计主要以程序为主,硬件方面则使用实验箱(芯片Cyclone II—EP2C35F672C8,基于MagicSOPC创新教学实验开发平台),将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。
当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应找多少钱,若交易成功,则对应商品LED灯亮,同时步进电机转动将商品送出。
若所投钱币小于所选商品价格,此时交易不成功,同时对应警告的LED灯亮。
目录前言第一章系统设计1.1 系统设计1.2 总体设计1.3 方案设计第二章详细设计2.1 自动售货机状态描述2.2 详细状态描述2.2.1 初始状态2.2.2 选商品状态2.2.3 投币状态2.2.4 找零状态第三章软件设计3.1 程序总流程图3.2 verilog HDL源程序第四章结果与讨论4.1 实验调试4.1.1 调试步骤4.1.2 实验现象4.2 结果与分析第五章心得体会参考文献附录前言EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
Verilog HDL是众多EDA软件中的一个,结合我们这学期所学课程,本次设计采用的是Verilog公司推出的Verilog硬件描述语言,目的是为了将我们所学应用到实际生活中,同时加深我们对Verilog硬件描述语言,FPGA 芯片等等的认识与掌握。
EDA自动售货机设计
摘要人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。
现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。
自动售货是20世纪70年代在日本、欧美发展起来的一种全新的消费方式,自动售货机又被称为24小时营业的微型自助超市,它的售货领域非常广泛,是发达国家商品零售的一种主要方式。
本设计要实现自动售货机的基本功能,如投币处理、商品选择、购货撤销、异常退币、计算存货等功能。
采用VHDL硬件描述语言编程的设计方法设计系统核心电路的硬件程序,与一般的软件开发不同,VHDL编程更需要熟悉一些底层的硬件知识,特别是数字逻辑电路的设计,因此VHDL编程的方法、思路都要更多的与硬件电路联系起来。
完成系统各个功能模块的硬件程序设计后,在软件平台上进行编译和电路仿真,最后生成的目标文件下载到实验台内的FPGA芯片以实现该系统,并在实验台上对设计进行验证。
关键字:自动售货机;VHDL编程;编译;电路仿真AbstractHuman society has entered into a highly developed information community, social development of information on electronic products progress. the modern electronic products in the performance, the increased complexity of the same time, the price has been a downward trend, and the pace of product faster and faster, the realization of this progress is that of manufacturing technology and electronic design of technology.The coin is in the 70s of 20th century in japan, and develop a new and vending machine is called open 24 hours in the cafeteria, it is very widespread area of sale in retail in the developed countries, is a major way. this is designed to enable automatic machines in the basic functionality, such as a coin, choose and purchases of goods, money is retired, stock and functions. Complete system of the various functional modules of hardware, software design process in the compilation and circuit emulation, the target file download to the test stand in the chip to implement the system fpga, and on the stage of design validation.Keywords:Vending machine;Vhdl programming;Compilation;Circuit simulation目录引言 ........................................................... - 3 - 1 EDA技术简介................................................. - 10 -1.1 EDA技术的发展概况 ..................................... - 10 -1.2 EDA技术的基本特征 ..................................... - 10 -1.2.1“自顶向下”的设计方法 ............................ - 11 -1.2.2高层次设计........................................ - 11 - 2工作原理..................................................... - 11 -2. 1任务概述 .............................................. - 11 -2.2系统设计- 12 -2.3系统组成方框图 ......................................... - 12 -2.4工作过程 ............................................... - 12 - 3设计方案..................................................... - 13 -3.1自动售货机VHDL程序 .................................... - 13 -3.2各功能部件系统仿真图 ................................... - 16 - 结论 ........................................................ - 19 - 参考文献 ...................................................... - 20 -引言自动售货机能够根据投入钱币自动收货的机器,是商业自动化的常用设备。
基于eda的课程设计 自动售货机控制设计
基于eda的课程设计自动售货机控制设计eda 课程设计题目自动售卖机控制的设计系 (部) 班级姓名学号指导教师年月日至月周年月日共日目录1 引言............................................................................ ................................................ 12 EDA简介 ........................................................................... . (2)2.1 EDA技术含义 ........................................................................... ...................... 2 2.2 EDA技术相关概念 ........................................................................... .. (2)2.2.1 “自顶向下”的设计方法 (2)2.2.2 硬件描述语言............................................................................ ............ 2 2.2.3 系统框架结构............................................................................ ............ 3 2.3 EDA技术的基本特征 ........................................................................... .......... 3 3 QuartusII ........................................................................... .. (4)3.1 Quartus II简介 ........................................................................... ...................... 4 3.2 Quartus II特点 ........................................................................... ...................... 4 4 自动售货机的设计............................................................................ (6)4.1 自动售货机设计原理............................................................................ . (6)4.1.1 状态机原理分析............................................................................ ........ 6 4.1.2 状态转移图............................................................................ ................ 6 4.1.3 仿真图分析............................................................................ ................ 6 4.1.4 硬件封装图............................................................................ . (8)5 总结............................................................................ ................................................ 9 参考文献............................................................................ .......................................... 10 附录............................................................................ .. (11)1 引言随着生活节奏的不断加快,自动化已经成为人们日常生活之中不可缺少的组成部分。
EDA课程设计--自动售货机
EDA课程设计一自动售货机二、课程设计目的 (2)二、................................ 课程设计题目描述和要求2三、...................................... 课程设计报告内容23. 1、设计原理、方案论证 (2)3.2、设计过程 (2)3.2.1、系统框图 (2)3.2.2、设计总程序 (3)3.2.3、软件仿真 (4)3. 2. 4管脚定义 (5)3. 2. 5下载程序与仿真结果 (6)四、.................................... 设计总结和心得体会7参考文献 (8)附录 (8)一、课程设计目的:1)熟悉学习QuartusII的编程与调试方式,学会在QuartusII 中使用波形图进行软件仿真,并使用EDA6000进行硬件仿真与调试。
2)设计一个自动售货机,具有投币和选择商品等功能二、课程设计题目描述和要求:首先应搭建识别模块,将代表每种硬币的拨码开关信号和选择的商品信号转变为数码管显示信号。
两者要进行比较,如果钱数大于售出商品则对其进行求差,求差的结果作为找钱信号;如果等于直接售出商品;小于则报警。
程序中会有一个分频模块,对CLK进行分频,并有一个复位键。
三、课程设计报告内容3.1、设计原理、方案论证1)设说-一个自动售货机,此机能出售1元、2. 5元、3元、 3.5元的四种商品。
出售哪种商品可有顾客按动相应的按键即可, 并同时用数码管显示售出的是第几种商品;2)顾客可通过选择投入的钱数来购买商品,并且有一个确认键;3)如果选择投入的钱小于选择的商品价格,则显示出价格和选择的钱数,并且警告灯亮;4)如果选择投入的钱大于选择的商品价格,则显示出价格和找回的钱;5)此售货机有一个整体复位控制。
3. 2、设计过程3. 2. 1>系统框图:module autoseller |clk,ck z g, r3w,ni r led_gcocs z led_xcney_a z led_inoney_b r led_price_a f led_price__b,led^warn); input clk r ok z rst;//^J®r 謫走也渣 W確input [1:0] g; 〃货品选择键input [2:0] it;output [6:0]ledjnonev_b r led_price_b z led_coods;oucput [7:0]led_money_a r led_price^a;oucput iea_warn;rsg f_500;//分•频时钟reg [6:0]gocds;xcg led warn;integer a txp f price,xoney z noney a,money b r price a r price b;reg [6:0] led_jroney_b z led_price_b z led_gccds;rsg[7:0]led xcney a x led price a;alxays @ (pcsedge elk)beginif (a_tTO=499)beginr_5oo=-r_5oo; a_*inp<=0;endelsea_tnp<=a_tr^>41;endalways®(posedge f_500)beginif(rst=ljbeginxcney=0;price=o;led_warn=0;endelsebegin3・M00:Deam3'b30i:Deam3't>oio:Deain3・Mi2:teamprice=10;endprice=25;endprice=30;endprice=35;end10:begin25:cegin30:begin35:beginprice_t>=rrice-price_a w 10: case (noney_a)o :bsam led_irvoney_a=Blsb^am 1 e d_mon ey_a= B ・biooooi.l.0;er :a 2 :bsam led_nv2ney_a=B • bl 1011011; end 3: le d_nvoney_a=3'1511001111; end4 :b^gm led_cv2ney_a=8'1511100110;€1:<1 endcase case (money_b)0:begin led_xaoney_b=7 •i>011111i;end5:begin led_money_t>=7 ・61.203丄01; End endcaee case (prlce_a) 0:begin led_price_a=3•blOllllll^end 1:b«gin led_price_a —3 •blOOOOHO; end 2: B-gin led^price^a-S"bllOl1011;end 3:B-gin led^price^a-S■bliOOllll;end4 :k>-gin led_price_a —3 "blllGOHO; end endcase 0:begin led__price_b-7•bOllllll;end 5: begin lcd_price__b —7 • bii02101 ;cnd endcaseend end endnodulc3・2・3、软件仿真当选择钱数为100即为2元、选择商品为10即为3元时Jed 』arn 亮,led_price 和le(Lmoney\ led^good 分别显示应该显示的数据case (price__b)end*1 •17.?5”IX u>1«UC 5 irier/af20空530. [2 bS&BulatlOft ・od ・ T\ SUDCg 心)/0 ■ I i<U MUM--------------------------------------------------------------------------- 耳w 115 ■| 1亠NUM3- 2. 4管脚定义:-/ I29碍F0I IPlcdjx>x c[7.J) 1"WHIGiwuacs 曲. 31 ® fedjxke a[2] OU p.P0I 114 LW.<J^fcfefo...Irij欢e32 O "PggPUL113 UTT^UCCSyefa...33 0 w p6x 呦POi 112W JTO 母以 列a “皿闻P9LU1 皿uacs 陆・. ledjr^ej^oJ )35 ® Mgbraounraciio L/TTUQD5 怯饥. 拓 O Wjx>K_b{fl川P9L109 皿l 灿艾陆“砂tedj 如K amF0W ~1皿15)5 她. tedjxicej2(6・OS3OU pPflIK 皿116艾轴, ledj 血匝aQ衿也皿6贞 QUP FffIJJ ~pTTUVOO 如・•WjiKeJfo.XJ 40 0 lcdj )oceb[']i S ® 82 皿肋艾陆・, tedcr>x bfoj) ©[ ► A41 <J> ledjAam Ou qi RN.L30 Lvm&oiDs 诗... *2 IF n[2] Inp u* F0I L33 皿M 艾陆・,43 1*也 Inp utWI.B2 bmug 曲.M2..0]竹 IF n[0]I T F0I L31 皿側艾竝, 业q45• okInputP9LB7 皿ng 轴.,电46 IF 曲JWP0LL21L/TTUVO ■憐仕 fa.3. 2・5下载程序与仿真结果:商品选择第二个,投入钱币是5,结果显示中25为价格05为投入的钱,2是选择的商品,led_warn 亮;EDA6000/EDA2000 : E:\autoseller.Mod商品选择第一个,投币35,结果中10为商品价格,25为找零,1为选择的商品莒隧型』谖紡分折資口存睹甜|外部设备10管胆定黒|C lfDlJd 』r c ,d_pr i c«ACEX1K30A•d_none seLcood10 ==.06,05.0403.0201.0010 ==.17.16.15.141312.11 IO 25.2423.2221.20.19.18 IO ==.3433.32 29.28,27.26 IO 25,41.<39.38,37.36135LK L13 LI 2 L10 L9 LSj J J J J J j•30 01011011(5E)G1 DI ioi mo (Bs)G2 till I 111 (?F) G3 10110100(54) * tlO1tt1O(DE :i <35 11010010(02) 66 KC00101 (05) GT□rcoomo (03)LJ 八 J J J J J •-i J> LS L<12 L : 沁 AH :CLD)(KG0)| ECFIHt-JCLEJ g3】)| ioriHz ▼ I9 876 53 2 4 JI4 4 oooooooLA 7?5432100X100031 (01)四、设计总结和心得体会通过本次课程设计,我对Verilog HDL 语言有了更深刻的了解,能够比较 灵活地运用它来实现我们所想要要其实现的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA(Verilog)课程设计报告——自动售货机摘要本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用QuartusⅡ软件编写verilog HDL硬件描述语言程序以实现自动售货功能。
本设计主要以程序为主,硬件方面则使用实验箱(芯片Cyclone II— EP2C35F672C8,基于MagicSOPC创新教学实验开发平台),将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。
当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应找多少钱,若交易成功,则对应商品LED灯亮,同时步进电机转动将商品送出。
若所投钱币小于所选商品价格,此时交易不成功,同时对应警告的LED灯亮。
目录前言第一章系统设计1.1 系统设计1.2 总体设计1.3 方案设计第二章详细设计2.1 自动售货机状态描述2.2 详细状态描述2.2.1 初始状态2.2.2 选商品状态2.2.3 投币状态2.2.4 找零状态第三章软件设计3.1 程序总流程图3.2 verilog HDL源程序第四章结果与讨论4.1 实验调试4.1.1 调试步骤4.1.2 实验现象4.2 结果与分析第五章心得体会参考文献附录前言EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
Verilog HDL是众多EDA软件中的一个,结合我们这学期所学课程,本次设计采用的是Verilog公司推出的Verilog硬件描述语言,目的是为了将我们所学应用到实际生活中,同时加深我们对Verilog硬件描述语言,FPGA芯片等等的认识与掌握。
Ve r i l o g硬件描述语言的主要能力:· 基本逻辑门,例如a n d、o r和n a n d等都内置在语言中。
· 用户定义原语( U D P)创建的灵活性。
用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。
· 开关级基本结构模型,例如p m o s 和n m o s等也被内置在语言中。
· 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。
· 可采用三种不同方式或混合方式对设计建模。
这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。
· Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。
线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
· 能够描述层次设计,可使用模块实例结构描述任何层次。
·设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。
· Verilog HDL不再是某些公司的专有语言而是I E E E标准。
· 人和机器都可阅读Verilog 语言,因此它可作为E D A的工具和设计者之间的交互语言。
· Verilog HDL语言的描述能力能够通过使用编程语言接口( P L I)机制进一步扩展。
P L I是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。
· 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RT L)到算法级,包括进程和队列级。
· 能够使用内置开关级原语在开关级对设计完整建模。
· 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。
· Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。
这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。
· 在行为级描述中, Verilog HDL不仅能够在RT L级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。
· 能够使用门和模块实例化语句在结构级进行结构描述。
· 在Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。
· Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。
· 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。
· 可以显式地对并发和定时进行建模。
· 提供强有力的文件读写能力。
· 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。
第一章系统设计1.1系统设计(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。
(2)灯亮时表示该小商品售出成功。
(3)用开关分别模拟5角、1元硬币和5元纸币投入,用两个数码管显示商品价格,及应找回的钱数。
(4)每次只能售出一种小商品,当投币结束时,按下确认键,若交易成功,则售出货物并找回剩余的硬币;若交易不成功,则找回所投的硬币。
按下复位按键,并将所有拨码开关复位,则回到初始状态。
1.2 总体设计采用FPGA来设计的原理图如图1.1所示.它由控制输入电路、FPGA、电机驱动、显示电路电路组成。
图1.1 采用FPGA设计的自动售货机原理方框图控制输入电路主要是为用户设计的,起到一个输入控制的作用。
FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现自动售货机运作的主要控制模块。
将编写好的verilog HDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把信号输入到FPGA,由八个开关控制输入信号,即消费者选择商品和消费者投币及确认消费,动态数码管显示输出信号,即找零环节和所选择的商品、消费者投币。
1.3方案设计使用现场可编程逻辑器件(FPGA)制作,利用Verilog HDL硬件描述语言编程进行控制,然后烧写实现。
对于自动售货机的设计,本方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度,还可以用软件QuartusⅡ软件进行仿真和调试等,可以充分利用verilog HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易。
第二章详细设计2.1自动售货机状态描述判断开关被按下的个数N。
若N>=2表示所选本次选择无效,返回初始状态;若N=1则显示所选商品,并继续执行下面的流程。
4个开关分别代表4种商品。
3个开关分别代表投入0.5元,1元,5元,统计投入总额。
投入总额与商品价格做比较,如果总额<商品价格,退钱并返回初始状态;如果总额>=商品价格,则继续执行下面的程序。
找零=总额-商品价格,数码管显示找零金额。
状态图如图2.1所示:图2.1自动售货机状态图2.2详细状态描述2.2.1 初始状态各变量都设置为零,所有拨码开关复位,按下rst键后,一切恢复到初始状态。
2.2.2 选商品状态分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。
此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。
选择商品后,数码管显示所选商品价格。
2.2.3 投币状态当选好商品后,开始投币。
同样有一标志位btn_price表示投币金额。
投币口只接受三种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币。
投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则进入下一状态——找零状态。
2.2.4 找零状态投完币,并确认购买商品后,进入找零状态。
首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品价格,则两者做差,得到需要找零的钱。
第三章软件设计3.1 程序总流程图3.2框图(Visio绘制)3.3 Verilog HDL源程序(见附录)第四章结果与讨论4.1 实验调试4.1.1 调试步骤软件调试:运行Quartus II软件,观看仿真波形,为了让数码管显示稳定,我们将原来的50MHZ 的时钟信号进行了10000分频,这样以来,我们的display就不能很好的在仿真波形中显示,为此,我们把中间变量price和price_all(即控制display的变量)调出来显示,只要price 和price_all显示正确,仿真就成功。
仿真波形如下:硬件调试:在软件调试调试成功的情况下,接下来我们要进行硬件调试,步骤如下:①运行Quartus II软件,打开工程。
②再次编译源程序(见附录)。
③分配管脚(见附录)。
④将生成的.sof文件写入FPGA试验箱中。
⑤根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。
实物拍照:交易成功的照片流程(图中拨码开关从左到右依次对应:商品1(0.5元),商品2(1元),商品3(1.5元),商品4(2元),投币0.5元,投币1元,投币5元。
图中按键从左到右第三个为确认,第四个为复位):照片依次为:初始状态,商品选择状态,投币状态,确认交易状态。
交易不成功的照片流程(第三个图中左边的LED不应该亮,之所以亮是忘了复位了):4.1.2 实验现象⑴选择买1.5元的商品,投5元的金额,调试现象如下:①选择1.5元商品数码管显示1.5,再选择一种商品,数码管显示初始状态(88),重新进行商品选择。
②按下5元投币键,对应数码管显示5.0。
③按下确认购买开关,找零时,对应数码管显示3.5,对应1.5元商品的LED灯亮。
⑵选择1.5元的商品,投0.5元的金额,调试现象如下:①选择1.5元的商品,对应数码管显示1.5。
②按下0.5元的投币键,对应数码管显示0.5。
③找零显示0.5元,退回所投的钱,表示警告的LED灯亮(交易不成功)。
4.2 结果与分析调试过程中出现的问题及原因:①数码管显示不正确。
管脚配置不正确导致数码管显示异常。
②重新分配管脚后,仍为先前程序的操作结果。
重新配置管脚后,未运行程序,使得烧写进去的仍为原先的程序。
③步进电机送货不理想,该送的时候送,不该送的时候也送,再次查看相关源程序,多次修改调试。
参考文献[1] 夏宇闻编著《Verilog数字系统教程》北京航空航天出版社[2] 梁瑞宇编写《FPGA设计实验指导书(Verilog HDL)》[3]潘松等著EDA技术实用教程:Verilog_HDL版(第4版)附录(1)自动售货机主模块module auto_seller(clk,rst,display,btn_ok,btn_mon,btn_sell,led_warn,led,StepDrive);input clk,rst,btn_ok;input [2:0] btn_mon;//选择放入的钱input [3:0] btn_sell;//选择商品bbt_5,gz_10,kqs_15,kl_20output [6:0] led;//led_5,led_10,led_15,led_20output led_warn;//钱不足,指示灯output [15:0] display;//数码管显示投入面值,diaplay[15:8]=com位选,display[7:0]=段码output[3:0] StepDrive;reg clk_500Hz;reg [6:0] led;wire s;reg led_warn;//警告放入钱不足reg [15:0] display;reg [31:0] counter;(* synthesis,keep *)reg [9:0] price,price_all;reg [1:0] flag = 2'b00;//数码管显示标志位reg [1:0] flag1 = 2'b00;reg [1:0] flag2 = 2'b00;parameter COUNT1 = 25'd10000;step_motor u(.StepDrive(StepDrive), .clk(clk),. StepEnable(s), .rst(rst));//步进电机例化assign s=(led[3:0]==4'b1111)||(btn_ok==1)||(led_warn==0);/*分频使数码管显示稳定*/always @ (posedge clk)beginif(counter== 0)begincounter <= COUNT1;clk_500Hz <= ~clk_500Hz;endelsecounter <= counter-1;endalways @(negedge rst or posedge clk)beginif(!rst)beginled = 7'b111_1111;//LED灭price_all = 0;//价格清零led_warn =1;price = 0;endelsebegin/*三种面值共8种组合*/case(btn_mon)3'b001: begin price_all = 5;end3'b010: begin price_all = 10;end3'b100: begin price_all = 50;end3'b011: begin price_all = 15;end3'b101: begin price_all = 55;end3'b110: begin price_all = 60;end3'b111: begin price_all = 65;enddefault: begin price_all = 0;end endcasecase(btn_sell)4'b0001: begin price = 5;end4'b0010: begin price = 10;end4'b0100: begin price = 15;end4'b1000: begin price = 20;enddefault: begin price = 0;endendcaseif(btn_ok==0 )beginif(price_all < price) //放入钱不足beginled_warn = 0;price = 0;endelsebegin //金钱足够price_all = price_all-price;if(price_all ==0)led_warn = 1;case(price) //LED灯显示货物卖出5: begin led = 7'b111_1110;end10: begin led = 7'b111_1101;end15: begin led = 7'b111_1011;end20: begin led = 7'b111_0111;enddefault: begin led = 7'b111_1111;endendcaseendendendend/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/always @(posedge clk_500Hz)beginif(btn_sell)begincase(flag)2'b00:begin display<= {8'b1111_1110,1'b1,led7(price%10)};flag=2'b01;end2'b01:begin display<= {8'b1111_1101,1'b0,led7(price/10)};flag=2'b00;endendcaseif(btn_mon)case(flag1)2'b00:begindisplay<= {8'b1111_1110,1'b1,led7(price_all%10)};flag1=2'b01;end2'b01:begindisplay<= {8'b1111_1101,1'b0,led7(price_all/10)};flag1=2'b00;endendcaseendelsebegincase(flag2)2'b00:begin display<={8'b1111_1110,1'b1,7'b0};flag2=2'b01;end2'b01:begin display<={8'b1111_1101,1'b1,7'b0};flag2=2'b00;end endcaseendend/*数码管段码表,供阳数码管[6:0]=hgfedcba*/function [6:0] led7;input [3:0] dis_input;begincase (dis_input)0 : led7 = 7'b100_0000;1 : led7 = 7'b111_1001;2 : led7 = 7'b010_0100;3 : led7 = 7'b011_0000;4 : led7 = 7'b001_1001;5 : led7 = 7'b001_0010;6 : led7 = 7'b000_0010;7 : led7 = 7'b111_1000;8 : led7 = 7'b000_0000;9 : led7 = 7'b001_1000;default : led7 = 7'b000_0000;endcaseendendfunctionendmodule(2)步进电机送货模块module step_motor (StepDrive, clk, StepEnable, rst);input clk;input StepEnable;input rst;reg Dir,t;reg [11:0] c;output[3:0] StepDrive;reg [3:0] StepDrive;reg [2:0] state;reg [31:0] StepCounter = 32'b0;parameter StepLockOut = 32'd200000; reg InternalStepEnable;always @(posedge t)begin if(c==12'h1111_1111_1111)Dir=~Dir;endalways @(posedge clk or negedge rst)beginif ( !rst)beginStepDrive <= 4'b0;state <= 3'b0;StepCounter <= 32'b0;endelsebeginif (~StepEnable == 1'b1)InternalStepEnable <= 1'b1 ;StepCounter <= StepCounter + 31'b1 ; if (StepCounter >= StepLockOut)beginStepCounter <= 32'b0 ;t=~t;if (InternalStepEnable == 1'b1)beginInternalStepEnable <= ~StepEnable ;if (Dir == 1'b1) state <= state + 3'b001 ;else if (Dir == 1'b0) state <= state - 3'b001 ; case (state)3'b000 : StepDrive <= 4'b0001 ;3'b001 : StepDrive <= 4'b0011 ;3'b010 : StepDrive <= 4'b0010 ;3'b011 : StepDrive <= 4'b0110 ;3'b100 : StepDrive <= 4'b0100 ;3'b101 : StepDrive <= 4'b1100 ;3'b110 : StepDrive <= 4'b1000 ;3'b111 : StepDrive <= 4'b1001 ;endcaseendendendendendmodule(3)引脚分配。