电子科技大学综合实验报告-数字秒表设计_第1页
电子科技大学综合实验报告-数字秒表设计_第2页
电子科技大学综合实验报告-数字秒表设计_第3页
电子科技大学综合实验报告-数字秒表设计_第4页
电子科技大学综合实验报告-数字秒表设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

现代电子综合实验报告电子科技大学 现代电子综合实验报告项目名称数字秒表设计 学生姓名学号指导老师刘曦 2015年11-12月目 录【摘要】1关 键 词1引言2第1章 背景知识介绍31.1 FPGA31.2 EDA31.3 VHDL语言31.4 ModelSim软件41.5 ISE软件41.6 时间简介4第2章 系统设计52.1设计要求52.2 设计分析52.2.1 输入输出分析52.2.2 系统设计原理62.2.3 系统内部模块分析6第3章 模块电路的实现与仿真73.1 按键消抖73.2 分频器83.3 控制器93.4 计数器113.5 锁存器133.6 显示模块14第4章 实验设计164.1 顶层设计164.2 管脚设置17第5章 实验结论17第6章 结果分析18参考文献:18附录:191.分频模块源程序192.消抖模块源程序193.控制模块源程序204.计数器模块源程序22(1)计数器顶层文件程序22(2)10进制仿真程序源程序24(3)6进制仿真程序源程序255.锁存器模块源程序266.显示模块源程序28(1)显示模块顶层文件源程序28(2)扫描模块源程序29(3)数据选择模块源程序30(4)译码器模块源程序317.顶层文件源程序328.管脚分配源程序35【摘要】利用VHDL硬件设计语言基于FPGA实验板设计一个数字表秒。该数字秒表及时范围是0000”00 5959”99,并利用两个按钮开关Start/Stop 和Split/Reset来控制秒表的启动、暂停、继续、停止、复位。根据该要求,将该实验设计分为6个模块,分别为:分频模块、按键消抖模块、计数器模块和按键控制模块、锁存模块和显示模块。最后利用顶层模块将各部分之间联系起来,形成数字秒表系统。关 键 词 FPGA ;VHDL ;ISE13.4软件。引 言 随着大规模集成电路技术和计算机技术的不断发展,EDA技术已广泛应用在通信、电子信息、计算机应用、仪器仪表、家用电器等领域的电子系统设计工作中。EDA技术是以大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过开发工具软件,用编程的方式完成电子系统的设计,自动实现系统的逻辑变异,逻辑化简,逻辑分割,编程下载,最终形成电子系统或专用集成芯片的一门新技术。本次实验利用VHDL硬件设计语言,设计一个基于ISE13.4软件和XILINX学生EDA实验板的数字表秒。数字秒表设计所需要使用的语法简单,各个模块功能明确,易于上手。对于之前未接触过FPGA的新手来说,通过对数字秒表的仿真和设计,可以较为轻松地可以对VHDL语言有个清晰地认识,从而提高初学者们的兴趣。所以数字秒表设计是一个很好的入门实例。第1章 背景知识介绍1.1 FPGAFPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。1.2 EDAEDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。1.3 VHDL语言VHDL语言是一种用于电路设计的高级语言。VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。与其他硬件描述语言相比,VHDL具有功能强大、设计灵活、强大的系统硬件描述能力、很强的移植能力以及易于共享和复用等特点。1.4 ModelSim软件ModelSim是优秀的VHDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。1.5 ISE软件ISE是使用XILINX的FPGA的必备的设计工具。它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。ISE除了功能完整,使用方便外,它的设计性能也非常好,拿ISE 9.x来说,其设计性能比其他解决方案平均快30%,它集成的时序收敛流程整合了增强性物理综合优化,提供最佳的时钟布局、更好的封装和时序收敛映射,从而获得更高的设计性能。先进的综合和实现算法将动态功耗降低了10%。1.6 时间简介时间,是人类用以描述物质运动过程或者时间发生过程的一个参数,确定时间,是靠不受外界影响的物质周期变化的规律。例如月球绕地球周期,地球绕太阳周期,地球自转周期,院子震荡周期等。1960年人们利用地球自转周期中的基本单位平太阳日的1/86400作为一秒,称作世界十秒,由于地球的自转运动存在不规则变化,并有长期减缓的趋势,是的世界时秒逐年变化,不断保持恒定。因此,按此定义复现秒的准确度只能到达1亿分之一秒。因此国际计量大会决定采用以地球公转的运动为基础的历年时秒作为时间单位,即将1900年初附近,太阳的几何平黄经为278度4148”.04的瞬间作为1900年1月0日12时整,从这时刻起的回归年的1/31556925.9747为一秒。时间的基本国际单位是秒。它现在以铯133原子基态的两个超精细能级间跃迁对应的辐射的9,192,631,770个周期的持续时间为标准。测量是按照某种规律,用数据来描述观察到的现象,即对事物作出量化描述。测量是对非量化实物的量化过程。第2章 系统设计2.1设计要求利用EDA软件和HDL语言在EEC-FPGA实验板上完成秒表的设计与实现,具体要求如下所示:(1)秒表的计时范围为0000”00 5959”99。(2)有两个按钮开关Start/Stop和Split/Reset,控制秒表的启动、停止、锁存和复位。(3)用7段译码器控制8个数码管以扫描方式显示计时结果。2.2 设计分析2.2.1 输入输出分析根据设计的总体要求以及所具备的客观条件等因素,所设计的系统的输入有:48MHz有源晶振(1位标准逻辑)、两个按键输入(分别1位),输出有:数码管驱动输出(7位标准逻辑)、数码管选择输出(8位标准逻辑)。输入输出原理图如图1所示:图12.2.2 系统设计原理内部原理图:根据硬件连接方式,8个数码管共用1个段选信号,所以如果希望8个数码管显示计数器输出的数据,就必须使得8个选通信号分别被单独选通,并同时在段信号输入端加上需要在该对应数码管上显示数据,于是随着选通信号的扫描就能实现扫描的目的。虽然每次只有一个LED显示,但是根据人体视觉的暂留效应,只要扫描频率设置为合适的值(1000Hz左右),就可以使肉眼以为在连续显示。系统给定的时钟频率为48MHz,1000Hz的信号可以通过分频模块48000分频而得到。数字跑表的精度为0.01秒,所以需要100Hz的信号用于计数,100Hz的信号可以通过1000Hz的10进制计数模块而得到。数字跑表存在6进制和10进制,而进制模块可以通过当上一位满9或5时给下一级一个进位信号,从而实现进位功能。控制模块可以通过编写状态机读取按键信号,从而实现不同状态之间的切换。由于机械按钮的问题,必须加入消抖电路从而防止错误读取。 2.2.3 系统内部模块分析根据设计的总体要求以及所具备的客观条件等因素,基本部分的实现需要:晶振产生48MHz的信号,48MHz信号通过分频模块得到1000Hz的信号,1000Hz的信号用于扫描显示模块,1000Hz的信号通过10进制计数模块得到100Hz的信号,100Hz的信号用于计数模块。计数模块的输出连接锁存模块的输入,锁存模块的输出连接显示模块的输入。按键由于机械弹性作用,当按下或者释放时可能存在抖动效应,可能使电平信号产生毛刺,产生误读。于是采用消抖模块使按键信号稳定。控制模块用于读取按键值,从而控制计数和锁存模块,实现相应的功能。各模块具体功能如下所示:1)按键消抖模块:消除按键输入信号的抖动,输出单脉冲。2)分频模块:对晶体振荡器产生的时钟信号进行分频,产生1kz的时间基准信号。3)按键控制模块:通过设计状态机,利用两个不同的按键脉冲信号控制状态机的状态,输出计数器的清零与使能、锁存器的使能信号。4)计数器模块:对1000Hz的时间基准脉冲先通过10进制计数模块得到100Hz的信号,100Hz的信号用于计数模块。进行计数,完成计时功能,通过使能和清零信号控制。5)锁存模块:锁存计数结果,通过使能信号控制。6)显示模块:包括扫描技术器、3-8译码器、数据选择器和7段译码器控制8个数码管,并输出数码管驱动信号和数码管选择信号。设计方框图如图2所示:图2第3章 模块电路的实现与仿真3.1 按键消抖(1)实验原理:检测出键闭合后执行一个延时程序,5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。(2)元件符号(3)仿真结果输入为“0”时,输出为恒为“0”输入为“1”时,产生一个延时脉冲3.2 分频器(1)实验原理:在本设计中,在程序的第一个进程中设计了一个48000进制的计数器,对48MHz系统时钟型号进行48000分频,从而得到1kHz的q信号。(2)元件符号仿真结果可以看出clk从0运行到47999时为一个循环,且以1 毫秒为周期3.3 控制器(1)实验原理:通过两个按键分别来实现开始/暂停和锁存/复位功能。 状态图如图所示(2)元件符号3.4 计数器(1)实验原理:先用将1kHz的信号通过一个十进制计数器得到100Hz的信号,将100Hz提供给计数器。由于秒表显示为六位,每一位可以视为一个一位计数器,则跑表的计时过程可由6个一位计数器级联完成,其中包括四个十进制计数器和两个六进制计数器。本设计采用先分别编写六进制和十进制计数器模块,然后进行计数器级联。(2)元件符号(3)仿真结果模6计数器仿真测试图模10计数器仿真测试图3.5 锁存器(1)实验原理:题目要求按下锁存/复位键后可以显示当时数据同时秒表还在继续运行所以需要锁存器进行锁存显示。(2)元件符号3.6 显示模块(1)实验原理:跑表使用8位数码管,采用动态扫描方式实现实时显示,需要8位位选型号Q_dig(7:0)和7位段选信号Q_seg(6:0)。需要一个六进制计数器、六选一数据选择器、3-8译码器和一个七段译码器。六进制计数器的时钟信号频率为1kHZ,计数器输出分别送到3-8译码器和数据选择器。输入的六位信号与计数器输出经过数据选择器进入七段译码器,经编译产生段选控制信号;计数器输出进入3-8译码器,经编译产生位选控制信号。(2)元件符号(3)仿真结果可以看出,输出进行扫描选择,且位选与相应段选相符合第4章 实验设计4.1 顶层设计4.2 管脚设置系统管脚适配表如下:NET Dig0 LOC = N13;NET Dig1 LOC = M13;NET Dig2 LOC = L13;NET Dig3 LOC = K13;NET Dig4 LOC = J13;NET Dig5 LOC = J12;NET Dig6 LOC = H13;NET Dig7 LOC = G13;NET SR LOC = G5;NET SS LOC = H7;NET Seg0 LOC = A9;NET Seg1 LOC = B10;NET Seg2 LOC = A10;NET Seg3 LOC = C10;NET Seg4 LOC = C11;NET Seg5 LOC = A11;NET Seg6 LOC = B12;NET jinzhen LOC = N9;第5章 实验结论通过这次实验,理论与实践相结合才是完成一个好的电路设计所必须具有的素质,不能只懂得理论也不能老实践却对原理还是云里雾里,这些都是不明智的选择。从理论中得出结论,才能真正理解并掌握其中的原理方法,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题。但更重要的是我们要有自己解决问题的思路和方法,这样才能不断完善自己。希望以后能有更多的动手实践机会,在硬件实践中发现自己的不足,弥补自己的不足。然后不断提高自己的软件以及硬件设计的能力,以及自己的实践能力,这样在之后真正运用到工作中或者在社会中,才能更加游刃有余。第6章 结果分析在分频、显示、消抖、控制、计数、锁存等模块中,分频是重点,因为分频决定了计数的准确性和后面一系列模块是否可以正常运行。控制模块是难点,因为涉及到各个功能之间的转换,必须有着清晰的思路。往往很多数字秒表无法正常运作的原因都是控制模块出现了问题。遇到最难解决的问题就要属控制模块状态机的编写,因为控制模块涉及到各个模块之间的转换,必须要有清晰的思路,一旦出现了一个不易察觉小错误,就很难做下去。解决的办法就是状态机涉及清零、计时、锁存三个状态,可以先假设其中两个状态固定,然后单独调试其中一个状态,确认该状态是正确的,然后用同样的办法调试其他的状态。参考文献:【1】李国洪、胡辉、沈明山.EDA技术与实验.机械工业出版社,2009 【2】闫石数字电子技术基础(第五版)高等教育出版社,2006【3】卢毅,VHDL与数字电路设计, 科学出版社, 2009【4】候伯亨,VHDL硬件描述语言与数字逻辑电路设计(修订版), 西电出版社2006【5】John F.Wakerly 著数字设计原理与实践 第4版 机械工业出版社【6】钟丽.数字电路故障容错设计自动化VHDL编译器设计D. 电子科技大学 2007 附录:1.分频模块源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity fenpin is Port ( q : out STD_LOGIC; clk : in STD_LOGIC);end fenpin;architecture Behavioral of fenpin issignal temp: STD_LOGIC :=0;signal count: STD_LOGIC_vector(15 downto 0);beginprocess(clk) beginif falling_edge(clk) thenif (count=47999) thencount0);else count=count+1;end if;end if;end process;q=count(15);end Behavioral;2.消抖模块源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity xiaodou is Port ( clk : in STD_LOGIC; key_in : in STD_LOGIC; key_out : out STD_LOGIC);end xiaodou;architecture Behavioral of xiaodou issignal cnt : STD_LOGIC_VECTOR(2 downto 0);signal key1,key2 : STD_LOGIC;begin p1 : process(key_in,clk)begin if key_in = 1 then cnt = 000;elsif falling_edge(clk) then if cnt /= 7 then cnt = cnt + 1;end if;end if;end process; p2 : process(clk)begin if falling_edge(clk) then if cnt /= 7 then key1 = 0;else key1 = 1;end if;key2 = key1;end if;end process; key_out = (not key1) and key2;end Behavioral;3.控制模块源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity kongzhi is Port ( clk : in STD_LOGIC; k1 : in STD_LOGIC; k2 : in STD_LOGIC;-k1:start/stop?k2:split/reset flag : out STD_LOGIC_VECTOR (2 downto 0);end kongzhi;architecture Behavioral of kongzhi issignal c_state,n_state: STD_LOGIC_VECTOR (2 downto 0):=000;signal input: STD_LOGIC_VECTOR (1 downto 0):=00;beginP0:process(k1,k2,c_state)begininput-if input=10 then-n_state=000;-elsif input=01 then-n_state=011;-else-n_statecase input iswhen 10=n_staten_staten_stateif input=01 thenn_state=010;elsen_state-if input=10 then-n_state=010;-elsif input=01 then-n_state=100;-else-n_statecase input iswhen 10=n_staten_staten_stateifinput=10 thenn_state=010;elsen_staten_state=c_state;end case;end process;P1:process(clk)beginif rising_edge(clk) thenc_state=n_state;end if;end process;flagclk,clr=clr,carry_in=enable,carry_out=carry_out1,count=count0);b1:jishuqi_10 port map(clk=clk,clr=clr,carry_in=carry_out1,carry_out=carry_out2,count=count1);b2:jishuqi_10 port map(clk=clk,clr=clr,carry_in=carry_out2,carry_out=carry_out3,count=count2);b3:jishuqi_10 port map(clk=clk,clr=clr,carry_in=carry_out3,carry_out=carry_out4,count=count3);b4:jishuqi_6 port map(clk=clk,clr=clr,carry_in=carry_out4,carry_out=carry_out5,count=count4);b5:jishuqi_10 port map(clk=clk,clr=clr,carry_in=carry_out5,carry_out=carry_out6,count=count5);b6:jishuqi_6 port map(clk=clk,clr=clr,carry_in=carry_out6,carry_out=carry_out7,count=count6);end Behavioral;(2)10进制仿真程序源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity jishuqi_10 is Port ( clk : in STD_LOGIC; clr : in STD_LOGIC;-flag(2) carry_in : in STD_LOGIC;-flag(1) carry_out : out STD_LOGIC; count : out STD_LOGIC_VECTOR (3 downto 0);end jishuqi_10;architecture Behavioral of jishuqi_10 issignal temp:std_logic_vector(3 downto 0):=0000;beginprocess(clk,clr,temp)beginif clr=1 then temp=0000;carry_out=0;elsif falling_edge(clk) thenif carry_in=1 thenif temp=1001 thentemp=0000;else temp=temp+1;end if;end if;end if;if temp=1001 and carry_in=1 thencarry_out=1;else carry_out=0;end if;count=temp;end process;end Behavioral;(3)6进制仿真程序源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL;- Uncomment the following library declaration if using- arithmetic functions with Signed or Unsigned values-use IEEE.NUMERIC_STD.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity jishuqi_6 is Port ( clk : in STD_LOGIC; clr : in STD_LOGIC;-flag(2) carry_in : in STD_LOGIC;-flag(1) carry_out : out STD_LOGIC; count : out STD_LOGIC_VECTOR (3 downto 0);end jishuqi_6;architecture Behavioral of jishuqi_6 issignal temp:std_logic_vector(3 downto 0):=0000;beginprocess(clk,clr,temp)beginif clr=1 then temp=0000;carry_out=0;elsif falling_edge(clk) thenif carry_in=1 thenif temp=0101 thentemp=0000;else temp=temp+1;end if;end if;end if;if temp=0101 and carry_in=1 thencarry_out=1;else carry_out=0;end if;count=temp;end process;end Behavioral;5.锁存器模块源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity suocunqi is Port ( count1 : in STD_LOGIC_VECTOR (3 downto 0); count2 : in STD_LOGIC_VECTOR (3 downto 0); count3 : in STD_LOGIC_VECTOR (3 downto 0); count4 : in STD_LOGIC_VECTOR (3 downto 0); count5 : in STD_LOGIC_VECTOR (3 downto 0); count6 : in STD_LOGIC_VECTOR (3 downto 0); count_1 : out STD_LOGIC_VECTOR (3 downto 0); count_2 : out STD_LOGIC_VECTOR (3 downto 0); count_3 : out STD_LOGIC_VECTOR (3 downto 0); count_4 : out STD_LOGIC_VECTOR (3 downto 0); count_5 : out STD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论