| 基于VHDL的定时器设计及实现 |
| 设计参数 定时器设计 功能:实现3位数(单位是秒)的倒数 输入信号:置数(为二进制数),开始计数信号 输出信号:计数信号的LED数码管(共阴极)显示码,计数结束信号 设计要求 给出系统整体组成框图 每一个模块的VHDL实现及功能仿真 顶层文件及整体仿真 设计计划 了解EDA的基本知识 学习使用软件Max+PlusII 开始电路设计 学习使用实验箱 继续电路设计 完成电路设计 编程下载、连接电路、调试和验收 参考资料 《数字电子技术基础》.阎石主编.高等教育出版社. 《EDA技术及应用》谭会生等编著,西安电子科技大学出版社 《电子设计自动化教程》王锁萍等编著,电子科技大学出版社 《VHDL设计电子线路》边计年等编著,清华大学出版社 1设计说明 采用了可编程芯片和VHDL语言进行软硬件设计,使硬件大为简化,稳定性也比较好。由于可编程芯片的频率精度可达到50 MHz,因而计时精度很高。本设计采用逐位设定预置时间,以达到三位倒数功能,使用也较为方便。 2 设计原理 本定时器的核心器件为EP1C6Q240C8芯片。该芯片有选位、置位、启动、复位、倒计时等功能,显示采用2个3位LED数码管,并采用共阴接法,可以动态扫描显示。 系统原理框图 3 硬件设计 本系统共有两大模块,分别为控制/定时模块和显示模块。其中控制/定时模块包括按键的功能定义和计时的逻辑定义。显示模块则包括片选模块、位扫描模块和数码管译码模块。 设计时可将秒信号输入控制/定时模块,此时系统将输出六个四位BCD码,以分别表示时、分、秒位。在定时倒计数时,计数器可以秒的速度递减,从而实现倒计时。系统中的位选择器用于对六位进行循环扫描输出,并将扫描输出送到译码器。译码器模块可对输入的四位进行译码,同时在设置数值时用6个LED灯分别指示其所设置的位。 Setw(置位键):用于选定定时器所需定时的对应位。发光二极管对应七段数码管设置,当选定对应的位时,相应的发光二极管亮;
Set(置数键):用于设置选定位的具体数值;
Start键:用于设定好时间后启动秒表计时。可通过软件使start按键经过锁存器后进人模块。Start触发后可产生持续的高电平;
ALM(扬声器):可在计时结束时发声报警;
Clr(清零键):用于计时器的清零复位; 七段数码管用于显示定时数字,set模块用控制数码管的扫描频率。 引脚图 4 主要模块软件程序 图3所示是该定时器的软件系统构成。本软件包括控制/定时模块和显示模块两大部分。 4.1 控制/定时模块 AAA控制/定时模块是该定时器的核心部分,该模块的程序流程图如图4所示。 当START为高电平时,该定时器将进入倒计时阶段。当CLK脉冲上升沿到来时,计数以秒的速度减1,直到计时结束,使ALM位为高电平为止。CLR为复位端,可用来清零,通常采用异步复位方式。SETW用于选位,高电平有效。SET用于对选定的位进行置数,也是高电平有效。ALM输出端将在定时结束时产生高电平。Q0~Q5为四位BCD码输出端口,主要用于显示。 4.2 显示模块 通过jishuqi模块可完成BCD码的转化,再经DIS模块译码.然后输出给七段数码管。 (1)jishuqi模块 jishuqi可产生四位BCD码输入,并从sel端输出。 VHDL源代码如下: library ieee; use ieee.std_logic_11.all; entity jishuqi is port (sel:in std_logic_vector(2 downto 0); a5,a4,a3,a2,a1,a0:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0)); end jishuqi; architecture one of jishuqi is begin process(sel,a0,a1,a2,a3,a4,a5) begin case sel is when“000”=>q<=a0; when“001”=>q<=a1; when“010”=>q<=a2; when“011”=>q<=a3; when“100”=>q<=a4; when“101”=>q<=a5; when others=>q<=”0000” end case; end process; end one; (2)DIS模块 VHDL源代码如下: library ieee; use ieee.std_logic_11.all; entity dis is port (a:in std_logic_vector(3 downto 0); q:out std_logic_vector(6downto 0)); end dis; architecture dis_one of dis is begin process(a) begin case a is when “0000”=>q<=0111111; when“0001”=>q<=0000110; when“0010”=>q<=1011011; when“0011”=>q<=1001111; when“0100”=>q<=1100110; when“0101”=>q<=1101101; when “0110”=>q<=1111101; when“0111”=>q<=0100111; when“1000”=>q<=1111111; when“1001”=>q<=1101111; when others=>q<=”0000000” end case; end process; end dis_one; 5 系统仿真及结果 由此仿真结果可见,当setw置“1”时,statea位选从0到5循环,分别代表六个数码管的位置。当start置“1”时,q5-q0进行借位减法。q5、q4表示小时,最高可到99小时;q3、q2表示分钟,最高59分钟;q1、q0表示秒,最高为59秒。 6 结束语 本次课程设计我从总体要求出发,采用模块化设计方法,实现了三位数倒数的定时设计。同时采用QuartusⅡ4.0仿真环境进行了仿真。结果证明,本课程设计达到了设计要求,完成了设计任务。 这次EDA课程设计给了我一次关于数字电子的实践机会,通过这次课设,我对计数器的使用有了更进一步的了解,进一步把学到的知识应用于实际。通过这次课程设计,我充分认识到了自己在数字电子技术上的不足,对以前学过的知识有了更加深刻的认识,并且学到了许多书本上所学不到的实践知识。在设计电路的过程中我遇到了不少的麻烦,但通过自己的努力和老师、同学的帮助,最终成功完成了闹钟的设计。最重要的是这次EDA课程设计培养了我严谨的行事态度,使我受益匪浅。 |