电气工程及其自动化EDA课程设计.docx
VII电气工程及其自动化EDA课程设计课程设计报告题 目: 数字频率计的设计 院 (系): 机电与自动化学院 专业班级: 学生姓名: 学 号: 指导教师: 2014年1月6日至2014年1月10日华中科技大学武昌分校电气工程及其自动化EDA课程设计设计任务书一、设计题目数字频率计的设计二、设计主要内容1设计目的:(1)巩固和加深对EDA技术及应用及数字电子技术基本知识的理解,提高学生综合运用本课程所学知识的能力; (2)培养学生根据课题需要选学参考书籍、查阅手册、图表和文献资料的自学能力;通过独立思考,深入钻研有关问题,学会自己分析解决问题的方法; (3)以学生的动手为主要内容,培养学生系统软、硬件设计、调试的基本思路、方法和技巧,并能熟练使用集成软件Quartus进行有关电路设计与分析; (4)掌握FPGA器件的正确使用方法,提高学生动手能力,能在教师指导下,完成课程任务;(5)培养严肃认真的工作作风和科学态度。通过课程设计实践,帮助学生逐步建立正确的生产观念、工程观念和全局观点。2设计内容:(1)位频率计输入端分别为:系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;(2)可测量范围从1Hz到99999999Hz;(3)将被测信号的频率直接送到个LED显示; 也可选择其它题目,但分量不能低于上述题目。三、原始资料1频率测量方法的基本原理是计算每秒内待测信号的脉冲个数,这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一个计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定的显示。此方法测量精度高。数字频率计由多频信号源模块、测频控制模块、CNT计数模块、32位锁存器模块及频率显示模块组成,其框图为图1所示:信号源计数模块锁存器显示器控制信号100MHzCLK1Hz用于测量用于扫描显示被测信号fsinTESTENLOADCLR产生1MHz信号产生多种频率输出 图1 数字频率计组成框图2在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过;3下载顶层文件到目标芯片;4将被测信号fx输入到系统,数码管将会显示被测信号频率。四、要求的设计成果1、基本要求:在QuartusII软件中新建原理图文件,编译,仿真,锁定管脚并下载到目标芯片。将被测信号fx输入到系统,数码管将会显示被测信号频率。 (1) 根据设计要求, 设计系统的原理框图,说明系统中各主要组成部分的功能; (2) 在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过; (3) 根据软件编好用于系统仿真的测试文件;(4) 编好用于硬件验证的管脚锁定文件;(5) 记录系统各个模块仿真结果; (6) 记录仿真结果中出现的问题及解决办法。2、备选要求:学生可根据课堂教学对EDA技术及应用所掌握知识点的实际情况,也可选择其它方案完成设计,从而形成难易程度不同的设计方法。注意:基本要求学生必须完成,学有余力的学生可以在基本要求完成的前提下,选择其它方案完成设计。一般来说,测频精度越高,考查评价就越高。 五、进程安排表2 进度安排及学时分配表序号课程设计内容学时分配备注1集中学生学习课程设计的关键理论知识、分配设计任务、明确设计要求、查找资料等。1天2根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。 1天完成各模块的VHDL程序设计、编译和时序仿真1天3编程、下载,结合硬件平台,进行调试。完成顶层文件图绘制,对编制好的封图交给老师检查,并按照老师要求修改。1天4撰写课程设计说明书1天5答辩及验收课程设计1 天合计5天六、主要参考资料1 侯伯享. VHDL硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版,2010.2 潘松. EDA技术实用教程. 成都:电子科技大学出版社,2010.3 李玉山. 电子系统集成设计技术. 北京:电子工业出版社,2010.6.4 李国丽.EDA与数字系统设计.北京:机械工业出版社,2009.5 周彩宝.VHDL语言及其应用. 上海:华东计算机技术研究所:2009.6 谭会生.EDA技术中和应用实例与分析.西安:西安电子科技大学出版社,2008. 指导教师(签名): 20 年 月 日目 录第一章 绪论11.1 设计背景11.2 设计意义11.3 本文的主要工作2第二章 EDA技术原理与概述32.1 可编程逻辑器件基本原理32.2 硬件描述语言42.3 集成开发软件5第三章 数字频率计的系统分析103.1 8位十进制数字频率计系统设计的原理103.1.1 数字频率计的基本原理103.1.2 系统总体框架图103.2 8位十进制数字频率计设计任务与要求113.3 目标芯片FLEX10K11第四章 各功能模块基于VHDL的设计与仿真134.1 8位十进制数字频率计的电路逻辑图134.2 测频控制信号发生器的功能模块及仿真144.3系统时钟分频的功能模块及仿真154.4 32位锁存器的功能模块及仿真164.4.1 锁存器164.4.2 锁存器的功能模块及仿真174.5 数码管扫描的功能模块及仿真184.6 数码管译码显示的功能模块及仿真194.7 十进制计数器的功能模块及仿真214.7.1 计数器214.7.2 十进制计数器的功能模块及仿真214.8 8位十进制数字频率计的仿真23第五章 结束语30参考文献318位十进制数字频率计的设计 绪论338位十进制数字频率计的设计 绪论第一章 绪 论1.1设计背景 数字频率计 1是电子测量与仪表技术最基础的电子仪表类别之一,数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,而且它是数字电压必不可少的部件。当今数字频率计不仅是作为电压表,计算机,天线电广播通讯设备,工艺过程自动化装置、多种仪表仪器与家庭电器等许多电子产品中的数据信息输出显示器反映到人们眼帘。集成数字频率计由于所用元件少、投资少、体积小、功耗低,且可靠性高、功能强、易于设计和研发,使得它具有技术上的实用性和应用的广泛性。不论从我们用的彩色电视机、电冰箱、DVD还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。现在频率计已是向数字智能方向发展,即可以很精确的读数也精巧易于控制。数字频率计已是现在频率计发展的方向,它不仅可以很方便的读数。而且还可以使频率的测量范围和测量准确度上都比较先进.而且频率计的使用已设计到很多的方面,数字卫星,数字通讯等高科技的领域都有应用,今天数字频率计的发展已经不仅仅是一个小电子产品的发展也是整个民族乃至整个国家的发展,所以频率计的发展是一个整体的趋势。而从民族产业上来说,我们在这种产业中还落后于西方发达国家,这将会关系到民族产业的兴衰。所以我们必须很重视当前的情况,学习发达国家的先进技术来发展本国的电子信息产业。1.2设计意义 我国的频率计其实不是落后发达国家太多的,我国在这个领域的发展是极其迅速的,现在的技术实际已是多年来见证。我国现阶段电子产品的市场特点,电子数字化发展很快。在我国和发达国家的发展情况是趋于一致的,数字频率计已经应用于高科技等产品上面,可以不无夸张的说没有不包含有频率计的电子产品。我国的CD、VCD、DVD和数字音响广播等新技术已开始大量进入市场。而在今天这些行业中都必须用到频率计。频率计已开始并正在向智能,精细方向的发展。国外的发展比我国要早,所以在这些行业中还领先于我们,我国还是缺少开发和研发的资金投入,很多的电子企业都不太乐意去花大量的时间,资金和精力去研究和开发,这也就使得我国在这方面的人力和资金都不充足,也就无法于发达国家相比,不能够形成一个量产的效果。从而很多的企业没有竞争力,这也和我国其他的民族产业存在相同的情况,这也正是我国在高速发展后的今天很少有自己的民族品牌的原因,所以我国应该大力的支持自己的民族品牌,不仅仅是要在资金和人才的投入,还要有具体的实际行动并起到一定的保护作用。1.3本文的主要工作本文的主要工作为:(1)首先分析了8位十进制数字频率计的基本原理。(2)对设计工具Quartus II进行了介绍,对设计中使用的VHDL语言2-3进行介绍。(3)对数字频率计的各个模块功能的分析,进行了功能仿真测试,得出仿真波形图。本文的安排如下:第一章介绍数字频率计的设计背景,设计意义,第二章介绍EDA技术原理与概述,本论文是以EDA技术为基础编写的所以对EDA技术的要求比较高,对VHDL语言的编写以及QuartusII的运用都要比较熟练。介绍了可编程逻辑器件FPGA和硬件描述语言,第三章是对数字频率计的基本原理以及对设计的要求进行概述,对目标芯片的介绍等,第四章介绍各个功能模块的基本功能以及VHDL语言的分析,将各部分进行仿真并对其进行仿真分析,测出所给频率。对该设计的数字频率计的仿真进行理论值与实验值的验证,第五章是本文的结束语。8位十进制数字频率计的设计 EDA技术原理与概述第二章 EDA技术原理与概述2.1可编程逻辑器件基本原理FPGA 4-5是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达1000万门/片以上,系统性能可达300MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件。与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。 FPGA器件优点:高密度、高速率、系列化、标准化、小型化、多功能、低功耗、低成本,设计灵活方便,可无限次反复编程,并可现场模拟调试验证。图2.1 FPGA基本结构2.2硬件描述语言 目前最主要的硬件描述语言是VHDL和Verilog HDL,Verilog HDL和HDL都是用于逻辑设计的硬件描述语言,并且都已成为IEEE标准。VHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。 VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。Verilog HDL和VHDL作为描述硬件电路设计的语言,其共同的特点在于:能形式化地抽象表示电路的行为和结构、支持逻辑设计中层次与范围的描述、可借用高级语言的精巧结构来简化电路行为的描述、具有电路仿真与验证机制以保证设计的正确性、支持电路描述由高层到低层的综合转换、硬件描述与实现工艺无关。本设计是用的VHDL语言来实现数字频率计的设计的,本设计将重点介绍VHDL语言。VHDL语言主要用于描述数字系统的结构,行为,功能和接口。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。VHDL程序组成部分由实体、构造体、配置、包集合、库5个部分组成。各组成部分的作用是:(1)实体:用于描述所设计的系统的外部接口信号。(2)构造体:用于描述系统内部结构和行为。(3)配置:用于从库中选取不同单元(器件)来组成系统设计的不同版本。(4)包集合:存放各设计模块都能共享的数据类型,常数和子程序等。(5)库:可由系统工程师生成或由ASIC芯片商提供,以便在设计中共享。 VHDL系统优势(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2) VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。 (4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5) VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。2.3集成开发软件QuartusII6-7是Altera公司推出的新一代开发软件,适合于大规模逻辑电路设计,其设计流概括为设计输入8、设计编译、设计仿真和设计下载过程。QuartusII支持多种编辑输入法,包括图形编辑输入法,VHDL,VerilogHDL和AHDL的文本编辑输入法,符号编辑输入法,以及内存编辑输入法。QuartusII与MATLAB和DSP Builder结合可以进行基于FPGA的DSP系统开发,是DSP硬件系统9实现的关键EDA工具,与SOPC Builder结合,可实现SOPC系统开发。Quartus(R) II 软件中的工程由所有设计文件和与设计有关的设置组成。可以使用 Quartus II Block Editor、Text Editor、MegaWizard(R) Plug-In Manager(Tools 菜单)和 EDA 设计输入工具10建立包括 Altera(R) 宏功能模块、参数化模块库 (LPM) 函数和知识产权 (IP) 函数在内的设计。可以使用Settings 对话框(Assignments 菜单)和 Assignment Editor 设定初始设计约束条件。如图2.2所示为设计输入流程图。图2.2 设计输入流程图本设计将以QuartusII软件来进行各个数据的操作,将仿真的图形数据来分析该课题。本设计所选择的QuartusII文本编辑输入法,在文本编辑窗口中完成VHDL设计文件的编辑,然后对设计文件进行编译、仿真操作。详细介绍QuartusII文本编辑输入法的使用方法:1.编辑设计文件(1) 新建一个文件夹。利用资源管理器,新建一个文件夹,如e:SIN GNT。(2) 输入源程序。打开QuartusII,执行FileNew,在New窗口中的“Device Design Files”中选择编译文件的语言类型,这里选“VHDL Files”,然后在VHDL文本编译窗口中键入VHDL程序。如图2.3所示。(3) 文件存盘。执行FileSave As,找到已设立的文件夹e:SIN_GNT,存盘文件名应该与实体名一致。2.创建工程(1)建立新工程管理窗。执行FileNew Project Wizard命名,在图2.4对话框进行工程设置。(2)将设计文件加入工程中。(3)选择仿真器和综合器类型。(4)选择芯片。(5)结束设置。3.编译前设置 图2.3 选择编辑文件的语言类型 图2.4 利用“New Project Wizard”创建工程(1) 选择目标芯片,执行Assignmemtssettings命令,在弹出的对话框中选Compiler Settings项下的Device选目标芯片。(2)选择目标器件编程配置方式,由图2.5的按钮Device Pin Options进入选择窗,可选Configuration方式为Active Serial。 (3)在下图所示的Programming Files窗口,Hexadecimal(Intel-Format)output File,即产生下载文件的同时,产生二进制十六进制配置文件fraqtest.hexout,可用于单片机与EPROM构成的FPGA配置电路系统如图2.6所示。4.编译及了解编译结果 首先执行ProcessingStart Compilation命令,启动全程编译,如果工程中的文件有错误,在下方的Processing处理栏中会显示出来。对于Processing栏显示出的语句格式错误,可双击此条文,即弹出VHDL文件,在闪动的光标处(或附近)可发现文件中的错误。再次进行编译直至排除所有错误。5.仿真(1)打开波形编辑器。选择菜单FileNew命令,在New窗口中选择Other Files中的“Vector Waveform File”打开波形编辑器。(2)设置仿真时间区域。执行EditEnd Time项,在弹出窗口中的Time窗口中的设定仿真时间50s。(3)存盘波形文件。选择File中的Save as,将以名为cnt4b的波形文件存入文件夹。(4)输入信号节点。(5)编辑输入波形。点击时钟名CLK,使之变为蓝色,再点击左列的时钟设置键,在Clock窗口中设置CLK的周期为3s,再对文件存盘。图2.5 选择配置器件和配置方式(6)总线数据格式设置。如果点击输出信号DOUT左旁的“+”,则将展开此总线中的所有信号;如果双击此“+”号左旁的信号标记,将弹出对该信号数据格式设置的Radix栏有4种选择。(7)仿真器参数设置。执行AssignmentSettings命令,在Settings窗口执行CatgorySimulator Settings命名,在此项下分别选中General按钮,观察仿真总体设置情况;选中Mode按钮,以确定仿真模式为时序仿真Timing;选中Optiongs,确认选定“Simulation coverage reporting”;毛刺检测Glitch detection为1ns宽度。(8)启动仿真器,观察仿真结果。执行ProcessingStart Simulation命名,直到出现“Simulation was successful”。仿真波形文件Simulation Report通常会自动弹出,将仿真输出结果与文件数据比较。 图2.6 选定目标器件8位十进制数字频率计的设计 EDA技术原理与概述8位十进制数字频率计的设计 数字频率计的系统分析第三章 数字频率计的系统分析3.1 8位十进制数字频率计系统设计的原理3.1.1数字频率计的基本原理数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。数字频率计的主要功能是测量周期信号的频率。频率是单位时间(1S)内信号发生周期变化的次数。如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。这就是数字频率计的基本原理。3.1.2 系统总体框架图 图 3.1 系统总体框架图总体框图设计思路:由50MHz系统时钟分频得到0.5Hz的基准时钟。在基准时钟的1S 高电平期间计被测频率的脉冲个数,1S高电平结束时计数结束,所记录的脉冲个数是被测信号的频率,为了在数码管上显示计数结果需要锁存器将所计的数锁存,因此,在基准时钟下降沿来的时候锁存器实现锁存功能。为了下次计数必须将本次计数的结果清零,所以在基准时钟低电平期间对计数器清零。被测频率从计数器的是中端输入实现频率的测试。将锁存器锁存的数据输入扫描器,通过译码器将锁存的二进制数译成十进制然后显示到数码管上,最终被读出来。3.2 8位十进制数字频率计设计任务及要求用测频法设计一个八位十进制的数字频率器,测频范围是1HZ到49999999HZ。(1)测量范围信号:方波、正弦波;幅度:0.5V5V;频率:1Hz4999999HZ。(2)测量范围信号:脉冲波;幅度:0.5V5V;脉冲宽度100s.测量误差1%。(3)显示器:十进制数字显示,显示刷新时间110秒连续可调,对上述三种测量功能分别用不同颜色的发光二极管指示。 (4)具有自校功能,时标信号频率为1Hz。 3.3 目标芯片FLEX10K 目标芯片11选用Altera公司生产的FPGA产品FLEX10K系列9中的LC84-4,FLEX10K是ALTERA公司研制的第一个嵌入式的PLD可编程逻辑器件系列。它具有高密度、低成本、低功率等特点,利用FLEX10K系列CPLD可编程逻辑器件的EAB可在系统中实现逻辑功能和存贮功能。FLEX10K是ALTERA公司研制的第一个嵌入式的PLD,它具有高密度、低成本、低功率等特点,是当今ALTERA CPLD中应用前景最好的器件系列之一。它采用了重复可构造的CMOS SRAM工艺,并把连续的快速通道互连与独特的嵌入式阵列结构相结合,同时可结合众多可编程器件来完成普通门阵列的宏功能。每一个FLEX10K器件均包括一个嵌入式阵列和一个逻辑阵列,因而设计人员可轻松地开发集存贮器、数字信号处理器及特殊逻辑等强大功能于一身的芯片。 FPGA采用可编程的查找表LUT(Look Up Table)结构。LUT是可编程的最小逻辑单元,大部分FPGA采用基于SRAM的查找表逻辑形式结构,用SRAM来构成逻辑函数发生器。FLEX内部结构如图3.2所示。图3.2 FLEX内部芯片结构8位十进制数字频率计的设计 数字频率计的系统分析8位十进制数字频率计的设计 各功能模块基于VHDL的设计与仿真第四章 各功能模块基于VHDL的设计与仿真4.1 8位十进制数字频率计的电路逻辑图 8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B 8组成。以下分别叙述频率计各逻辑模块的功能与设计方法。8位十进制数字频率计的电路逻辑如图4.18所示。图4.1 8位十进制数字频率计的电路逻辑图4.2 测频控制信号发生器的功能模块及仿真(1)测频控制信号发生器的功能模块如图4.2所示。图4.2 测频控制信号发生器的功能模块图(2)源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL IS PORT(CLK:IN STD_LOGIC; -1 Hz测频控制时钟 TSTEN:OUT STD_LOGIC; -计数器时钟使能 CLR_CNT:OUT STD_LOGIC; -计数器清零 LOAD:OUT STD_LOGIC); -输出锁存信号END ENTITY TESTCTL;ARCHITECTURE ART OF TESTCTL IS SIGNAL DIV2CLK :STD_LOGIC;BEGINPROCESS ( CLK ) IS BEGINIF CLK'EVENT AND CLK= '1' THEN -1HZ 时钟二分频 DIV2CLK<=NOT DIV2CLK;END IF ;END PROCESS;PROCESS ( CLK,DIV2CLK ) ISBEGIN IF CLK= '0' AND DIV2CLK = '0' THEN -产生计数器清零信号 CLR_CNT<= '1' ELSE CLR_CNT<= '0' ; END IF; END PROCESS; LOAD<=NOT DIV2CLK; TSTEN<=DIV2CLK;END ARCHITECTURE ART;频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟TSTEN,以此作为计数闸门信号。当TSTEN为高电平时,允许计数;当TSTEN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次TSTEN上升沿到哦来之前产生零信号CLEAR,将计数器清零,为下次计数作准备,如图4.3所示为测频控制信号仿真图。图4.3 测频控制信号仿真图4.3系统时钟分频的功能模块及仿真(1)系统时钟分频的分频功能模块如图4.4所以。图4.4 系统时钟分频的功能模块图(2)源程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY div1hz IS PORT(CLK:IN STD_LOGIC; CLOCK:OUT STD_LOGIC); END div1hz; ARCHITECTURE BEHAV OF div1hz IS SIGNAL COUNT:INTEGER RANGE 0 TO 500000; SIGNAL CLK_DATA:STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN IF COUNT=500 THEN COUNT<=0; CLK_DATA<=NOT CLK_DATA; ELSE COUNT<=COUNT+1; END IF; END IF; CLOCK<=CLK_DATA; END PROCESS; END BEHAV;该模块由系统时钟分频模块12为TESTCTL的计数能使信号TSTEN产生一个1S 脉宽的周期信号,并对频率计中的 32 位十进制计数器CNT10的 ENA 使能端进行同步控制。TSTEN高电平时允许计数;当低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,从仿真图4.5中可以看出,一个锁存信号LOAD 的上跳沿将计数器在前一秒的计数值锁存进锁REG32B中,并由外部的十进制 7 段数码管显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。锁存信号后,必须有一个清零信号 CLR_CNT对计数器进行清零,为下一秒的计数操作做准备。图4.5 系统时钟分频的分频功能仿真图4.4 32位锁存器的功能模块及仿真4.4.1锁存器13锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制其与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。4.4.2锁存器的功能模块及仿真(1)32位锁存器的功能模块如图4.6所示。图4.6 锁存器的功能模块图(2)源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;ARCHITECTURE ART OF REG32B IS BEGIN PROCESS ( LOAD, DIN ) IS BEGINIF LOAD 'EVENT AND LOAD= '1' THEN DOUT<=DIN; -锁存输入数据END IF;END PROCESS;END ARCHITECTURE ART;仿真图4.7的LOAD 信号上升沿到来时将对输入到内部的 CNT10 计数信号进行锁存,并将结果输出给SELTIME。当输入信号上升到时就会产生锁存,否则,不进行锁存,该仿真在上升沿的时候,将其锁存起来,直到下个上升沿才会改变锁存的数据,如仿真在“1”的时候上升,则对“1”进行锁存。 图4.7 锁存器的功能仿真4.5 数码管扫描的功能模块及仿真(1)数码管扫描8的功能模块如图4.8所示。图4.8 数码管扫描的功能模块(2)源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SELTIME IS PORT( CLK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DAOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END SELTIME; ARCHITECTURE behav OF SELTIME ISSIGNAL SEC : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN IF(SEC="111") THEN SEC<="000" ELSE SEC<=SEC+1; END IF; END IF; END PROCESS; PROCESS(SEC,DIN(31 DOWNTO 0) BEGIN CASE SEC IS WHEN "000"=>DAOUT<=DIN(3 DOWNTO 0); WHEN "001"=>DAOUT<=DIN(7 DOWNTO 4); WHEN "010"=>DAOUT<=DIN(11 DOWNTO 8); WHEN "011"=>DAOUT<=DIN(15 DOWNTO 12); WHEN "100"=>DAOUT<=DIN(19 DOWNTO 16); WHEN "101"=>DAOUT<=DIN(23 DOWNTO 20); WHEN "110"=>DAOUT<=DIN(27 DOWNTO 24); WHEN "111"=>DAOUT<=DIN(31 DOWNTO 28); WHEN OTHERS=>NULL; END CASE;END PROCESS; SEL<=SEC; END behav; 锁存信号输出 DIN31.0,然后由 SELTIME 进行扫描输出,从仿真图4.9可以得出,当SEL为”000”时选通第一个 CNT1