EDA数字秒表的设计.doc

上传人:豆**** 文档编号:23951253 上传时间:2022-07-02 格式:DOC 页数:94 大小:1.16MB
返回 下载 相关 举报
EDA数字秒表的设计.doc_第1页
第1页 / 共94页
EDA数字秒表的设计.doc_第2页
第2页 / 共94页
点击查看更多>>
资源描述

《EDA数字秒表的设计.doc》由会员分享,可在线阅读,更多相关《EDA数字秒表的设计.doc(94页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateEDA数字秒表的设计附件2: 目录 1 绪论12 设计要求23 总体设计要求23.1 基本原理23.2分频器模块33.3 计数模块43.4 记录模块53.5 寄存器模块63.6 回放模块83.7 选择模块93.8 数显模块113.9 数字秒表的总原理图134 仿真调试134.1 分频器模块的仿真调试134.2 计数器模块的仿真调试144.3 记录模块的仿真调试144.

2、4 寄存器模块的仿真144.5 回放模块的仿真调试154.6 选择模块的仿真调试155 管脚分配166 总结与心得体会17参考文献18附录:源程序代码191 绪论 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FP

3、GA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 在EDA软件开发方面

4、,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具在各地开花并结果。2 设计要求 设计一个能测量4名运动员短跑成绩的数字秒表。要求用四位数码管显示时间,格式为00.00s。 秒表设置3个开关输入(清零开关1个,记录开关1个,回放开关1个)。按下“记录”开关,则将当前运动员成绩时间暂存,按下回放开关,依次回放各运动员成绩。3 总体设计要求3.1 基本原理根据要求,数字秒表输入信号有:时钟信号CLK,清零开关CLR,记录开关RST,回放开关RSH;数

5、字秒表的输出信号有:4个数码显示管的显示。数字秒表的主要功能是:计数功能和记录功能数字秒表主要由七个部分构成:一是分频器;二是计数模块;三是记录模块;四是寄存器模块;五是回放模块;六是选择模块;七是数显模块。当清零开关置低位0时,所有显示均清零。分频器模块的作用是将实验板子上50MHZ的信号频率降低到计数所需要的频率100HZ,然后将100HZ的信号作为实验的脉冲输入。计数模块分为十秒、秒、百毫秒、十毫秒四个计数器。当时钟信号来临时,开始计数,十毫秒的进位信号让百毫秒开始计数,百毫秒的进位使秒开始计数,以此类推。记录模块所需要实现的:当按下记录开关的时候,使能开关EN加一,并将当前的显示时间存

6、入到使能所对应的组寄存器中。寄存器模块功能是当记录模块的使能信号来临时,对应的一组寄存器将当前的时间存储起来,到要用的时候再调用。回放模块:当回放开关按下形成一个脉冲的时候,使能开关PN加一,并将对应的寄存器中信号送入数显模块。选择模块:通过使能开关PN来选择所需要的信号送到数显模块,完成计数,记录和回放的功能。数显模块:将选择模块的信号经过译码后输出对应的时间显示数显数字秒表计数分频器记录 寄存器 记录开关 回放开关图1.总体设计框图3.2分频器模块分频器模块所实现的具体功能是将50MHZ的信号转化成所需要的100HZ的信号,所以需要对信号进行500000的分频,设计思想是:在程序内设置具有

7、某范围的变量随时钟计数,前一半输出“0”,后一半输出“1”。实现这个分频器模块的VHDL程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenpinl IS -分频器PORT(CLK_IN:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC);END ENTITY fenpinl;ARCHITECTURE structure of fenpinl is constant count0:integer:=500000;begin divide_clk:pro

8、cess(CLK_IN) variable n0:integer range 0 to 499999;beginIF RISING_EDGE(CLK_IN) THENif(n0(count0/2)then CLK_OUT=0; n0:=n0+1; elsif(n0count0)then CLK_OUT=1; n0:=n0+1; else n0:=0;END if;END IF;END PROCESS divide_clk;END ARCHITECTURE structure;图2.分频器封装图3.3 计数模块 本模块实现的是计数功能,时钟信号是由分频器所得到的100HZ信号,并且本模块由4个十

9、进制的计数模块构成,各级进位作为高级的时钟信号,分别对应十秒,秒,百毫秒和十毫秒,理论可以显示出的最大值为99.99s,并且计数器都是异步清零的。 实现本模块的程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 is -十进制计数器port(clk,clr:in std_logic;-时钟/清零信号 dout:buffer std_logic_vector(3 downto 0); co:out std_logic);-输出/进位信号end count10;arc

10、hitecture behave of count10 isbeginprocess(clr,clk)beginif clr=0 then dout=0000; elsif(rising_edge(clk) then if dout=1001 then dout=0000; co=1; else dout=dout+1;co=0;end if; end if; end process;end behave; 图3.十进制计数器模块封装图3.4 记录模块记录模块的功能是实现当有一个记录脉冲过来时,所记录的使能输出加一,第一个使能输出对应的是第一个寄存器模块,往后以此类推。实现的程序:LIBRAR

11、Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity RECORD1 is -记录模块port( clr:in std_logic; RST:in STD_LOGIC; en:BUFFER std_logic_vector(2 downto 0); -使能输出end;architecture behave of record1 is begin process(clr,RST) begin if clr=0 then en=000; elsif(RISING_edge(RST) then en=en+

12、1; end if; end process;end;图4.记录模块封装图3.5 寄存器模块 寄存器模块主要是由4组16个D触发器构成的,当使能信号EN来临时,对应EN的一组触发器记录一个时间,并且将每一组的时间信号从输出端口输送到选择模块的输入端口。其中一组寄存器的程序为:LIBRARY IEEE;use ieee.std_logic_1164.all;ENTITY DFF1 IS -4位D触发器PORT( clr:in std_logic; en:in std_logic_vector(2 downto 0);-使能信号 clk:in std_logic; d1:in std_logic_

13、vector(3 downto 0);-输入信号 q1:out std_logic_vector(3 downto 0);END;architecture behave of dff1 is signal Q:std_logic_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLR,CLK,EN) BEGIN IF en=000 THEN IF CLR=0 THEN Q=0000; ELSIF RISING_EDGE(CLK) THEN Q=d1; END IF; END IF; END PROCESS; Q1=Q;END;图5.寄存器模块封装图3.6 回放模块回放模块输入

14、是回放按钮的一个脉冲信号,来一个脉冲,使能信号PN加一,然后将使能信号输入到选择模块中作为判断信号。程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity REPLAY is -回放模块port(clr:in std_logic; rsh:in std_logic; pn:buffer std_logic_vector(2 downto 0); -使能输出end;architecture behave of replay isbeginprocess(clr,rsh)beginif

15、clr=0 then pn=000; ELSif (RISING_EDGE(RSH) then pndout0=din0;dout1=din1;dout2=din2;dout3 dout0=q00;dout1=q01;dout2=q02;dout3 dout0=q10;dout1=q11;dout2=q12;dout3 dout0=q20;dout1=q21;dout2=q22;dout3 dout0=q30;dout1=q31;dout2=q32;dout3 dout0=q30;dout1=q31;dout2=q32;dout3ledledledledledledledledledledle

16、d=1000000; END CASE; END PROCESS; END ARCHITECTURE ART;图8.数显模块封装图3.9 数字秒表的总原理图 图9.数字秒表总原理图 如图10所示,输入有四个,分别是:脉冲信号CLK,清零信号CLR,记录信号RST,回放信号RSH。输出即是四个七段数码管的显示 图10.数字秒表总体封装图 4 仿真调试 4.1 分频器模块的仿真调试 由于需求的仿真是500000分频,软件无法显示完全,所以将500000分频改为4分频进行程序的仿真调试 图11.分频器模块的仿真4.2 计数器模块的仿真调试 计数器由于是十进制,所以每次计数到“1001”时,重新归零,

17、并且产生一个进位信号。 图12.十进制计数器的仿真 4.3 记录模块的仿真调试记录模块的主要输入是记录信号的脉冲,输出信号则是使能EN,每来一个记录信号的脉冲,使能信号EN加一,不同的使能信号EN对应不同的寄存器组。 图13.记录模块的仿真4.4 寄存器模块的仿真 寄存器模块是根据使能信号EN来判断使用哪一组寄存器,图中所示是第一组寄存器模块的仿真图14.寄存器模块的仿真4.5 回放模块的仿真调试回放模块的主要输入是回放信号的脉冲,输出信号则是使能PN,每来一个回放信号的脉冲,使能信号PN加一,不同的使能信号PN对应着选择器输出的不同 图15.回放模块仿真4.6 选择模块的仿真调试选择模块根据

18、选择使能PN的不同输出不同,图中的使能为“001”,故输出dout为第一组触发器q0x的记录值图16.选择模块的仿真5 管脚分配 图17.管脚分配图6 总结与心得体会本次课设的真正操作时间只有四天,在这短短的四天之内,我从连quartus怎么用都不知道的新手到现在能够熟练操作,并且能够用VHDL语言完成整个数字秒表的设计,不得不说这次的课设让我收获不少。最开始的时候,课设的主要问题是quartus软件的运用问题,但是自己在网上找到了教学视频,并且虚心请教了那些会用quartus的同学,熟悉掌握软件功能差不多花了我一天时间。看到数字秒表的要求的时候,对于本次设计的第一印象就是需要计数器模块,然后

19、看到还需要满足的记录和回放功能,这个确实不知道要怎么做,经过老师的点拨之后,明白了原来是要用4组16个D触发器做一个寄存器组将需要记录的4个运动员的成绩暂存下来,当要回放的时候,在通过使能开关和选择器会放出所需要显示的运动员的成绩。然后在编程过程中,遇到的问题不少,首先是各个模块的单独实现,这个花费了将近1/3的时间。最后将模块综合的时候,由于元件例化的问题,程序一直在报错,经过反复调试修改,错误为零可以完成编译的时候,仿真的问题也出现了,因为程序的部分问题,第四个数据不能锁存,当按下回放后,后来的计数会继续显示。当加了第四次回放锁存的时候,问题成功解决,程序的主体大致完成。接下来就是管脚的设

20、置,最开始确实是一筹莫展,但是对照着所给的关于板子的pdf文档的介绍,大致明白了各个模块部分对应的管脚是什么,对着所需要的模块的管脚位置,一个一个在assignment editor里面对应的填,然后安装好板子的驱动过后,将程序下载到板子上运行。实物开始运行之后,清零开关,记录开关和回放开关均能正常工作,本次课设的实物演示成功。通过本次课设,我熟练掌握了quartus软件的基本操作以及VHDL程序的编写,并且让我认识到有些时候不能靠别人,那样的结果可能是竹篮打水一场空。有些时候自己要静下心来思考,问题没有自己想得那么复杂。在这次的课设中就是这样,将数字秒表的问题分为了七个模块,每个模块都是可以

21、轻松解决的小问题。将大问题分解成一个个小问题,思维更加活跃,更具有逻辑性,这就是我所学到的东西。参考文献1 潘松著主编,EDA技术实用教程(第二版),科学出版社,2005.2 梁勇 王留奎 EDA技术教程 人民邮电出版社,20103 谭会生主编,EDA技术综合应用实例与分析 西安电子科技大学出版社,20074 徐志军 王金明 尹廷辉 EDA技术与VHDL设计 电子工业出版社,5 江国强 EDA技术习题与实验 电子工业出版社,2005附录:源程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;e

22、ntity miaob isport( clk,clr:in std_logic;-脉冲信号/清零开关 rst,rsh:in std_logic;-记录/回放开关 led0,led1,led2,led3:out std_logic_vector(6 downto 0);end miaob;architecture behave of miaob isCOMPONENT fenpinlport(CLK_IN:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC);end COMPONENT;COMPONENT count10port(clr,clk:in std_logic;-

23、时钟/清零/缓存信号 dout:buffer std_logic_vector(3 downto 0); co:out std_logic);-进位信号end COMPONENT;COMPONENT RECORD1port( clr:in std_logic; RST:in STD_LOGIC; en:BUFFER std_logic_vector(2 downto 0); -使能输出end COMPONENT;COMPONENT dff1port(clr:in std_logic; en:in std_logic_vector(2 downto 0);-使能信号 clk:in std_log

24、ic; d1:in std_logic_vector(3 downto 0);-输入信号 q1:out std_logic_vector(3 downto 0);end COMPONENT;COMPONENT dff2port(clr:in std_logic; en:in std_logic_vector(2 downto 0);-使能信号 clk:in std_logic; d2:in std_logic_vector(3 downto 0);-输入信号 q2:out std_logic_vector(3 downto 0);end COMPONENT;COMPONENT dff3port

25、(clr:in std_logic; en:in std_logic_vector(2 downto 0);-使能信号 clk:in std_logic; d3:in std_logic_vector(3 downto 0);-输入信号 q3:out std_logic_vector(3 downto 0);end COMPONENT;COMPONENT dff4port(clr:in std_logic; en:in std_logic_vector(2 downto 0);-使能信号 clk:in std_logic; d4:in std_logic_vector(3 downto 0);

26、-输入信号 q4:out std_logic_vector(3 downto 0);end COMPONENT;COMPONENT REPLAYport(clr:in std_logic; rsh:in std_logic; pn:buffer std_logic_vector(2 downto 0); -使能输出end COMPONENT;COMPONENT select1PORT( pn:in std_logic_vector(2 downto 0); din0,din1,din2,din3:in std_logic_vector(3 downto 0); q00,q01,q02,q03,

27、q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33:in std_logic_vector(3 downto 0); dout0,dout1,dout2,dout3:out STD_LOGIC_VECTOR(3 DOWNTO 0);end COMPONENT;COMPONENT shumaguan IS PORT( DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);end COMPONENT;SIGNAL CLK_IN,CLK_OUT:std_logic

28、;signal count1,count2,count3,count4:std_logic;signal tdin0,tdin1,tdin2,tdin3,tdout0,tdout1,tdout2,tdout3:std_logic_vector(3 downto 0);signal q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33,q40,q41,q42,q43:std_logic_vector(3 downto 0);signal tled0,tled1,tled2,tled3:std_logic_vector(6 downto 0);signal

29、 tsel:std_logic_vector(1 downto 0);signal ten,tpn:std_logic_vector(2 downto 0);beginU0:fenpinl port map(clk,clk_out);U1:count10 port map(clr,clk_out,tdin0,count1);-十毫秒U2:count10 port map(clr,count1,tdin1,count2);-百毫秒U3:count10 port map(clr,count2,tdin2,count3);-个位秒U4:count10 port map(clr,count3,tdin

30、3,count4);-十位秒U5:RECORD1 port map(clr,rst,ten);U6:dff1 port map(clr,ten,clk,tdin0,q10);U7:dff1 port map(clr,ten,clk,tdin1,q11);U8:dff1 port map(clr,ten,clk,tdin2,q12);U9:dff1 port map(clr,ten,clk,tdin3,q13);U10:dff2 port map(clr,ten,clk,tdin0,q20);U11:dff2 port map(clr,ten,clk,tdin1,q21);U12:dff2 po

31、rt map(clr,ten,clk,tdin2,q22);U13:dff2 port map(clr,ten,clk,tdin3,q23);U14:dff3 port map(clr,ten,clk,tdin0,q30);U15:dff3 port map(clr,ten,clk,tdin1,q31);U16:dff3 port map(clr,ten,clk,tdin2,q32);U17:dff3 port map(clr,ten,clk,tdin3,q33);U18:dff4 port map(clr,ten,clk,tdin0,q40);U19:dff4 port map(clr,te

32、n,clk,tdin1,q41);U20:dff4 port map(clr,ten,clk,tdin2,q42);U21:dff4 port map(clr,ten,clk,tdin3,q43);U22:REPLAY port map(clr,rsh,tpn);U23:SELECT1 port map(tpn,tdin0,tdin1,tdin2,tdin3,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33,q40,q41,q42,q43,tdout0,tdout1,tdout2,tdout3);U24:shumaguan port map(tdo

33、ut0,tled0);U25:shumaguan port map(tdout1,tled1);U26:shumaguan port map(tdout2,tled2);U27:shumaguan port map(tdout3,tled3);led0=tled0;led1=tled1;led2=tled2;led3=tled3;end behave;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenpinl IS -分频器PORT(CLK_IN:IN STD_LOGIC; CL

34、K_OUT:OUT STD_LOGIC);END ENTITY fenpinl;ARCHITECTURE structure of fenpinl is constant count0:integer:=500000;begin divide_clk:process(CLK_IN) variable n0:integer range 0 to 499999;beginIF RISING_EDGE(CLK_IN) THENif(n0(count0/2)then CLK_OUT=0; n0:=n0+1; elsif(n0count0)then CLK_OUT=1; n0:=n0+1; else n

35、0:=0;END if;END IF;END PROCESS divide_clk;END ARCHITECTURE structure;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 is -十进制计数器port(clk,clr:in std_logic;-时钟/清零信号 dout:buffer std_logic_vector(3 downto 0); co:out std_logic);-输出/进位信号end count10;architecture behave of count10 isbeginprocess(clr,clk)beginif clr=0 then dout=0000; elsif(rising_edge(clk)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com