版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字频率计实验报告第 1 页 共 3 页数字频率计数字频率计用 VHDL 语言设计实现基于 FPGA 的数字频率计学校:学院:姓名:学号:实验室:实验日期: 摘要第 2 页 共 3 页2摘要摘要本文介绍了一种基于 FPGA 的数字频率的实现方法。该设计采用硬件描述语言 VHDL,在软件开发平台 ISE 上完成。该设计的频率计有三种闸门选择,分别是 1s、0.1s、0.01s,能较准确的测量频率在 10Hz 到 10MHz 之间的信号。使用 ModelSim 仿真软件对各个模块的 VHDL 程序做了仿真,对各个模块的功能进行了测试,并完成了综合布局布线,最终下载到芯片上取得了良好测试效果。关键词
2、:VHDL、 频率计、 FPGA、 测量 引言第 3 页 共 3 页目 录第一章 引言 .1第二章 基于 FPGA 的 VHDL 设计流程 .22.1 概述.22.2 VHDL 语言和 VERILOG HDL 介绍.22.2.1 VHDL 的特点 .32.3 FPGA 介绍 .4第三章 数字频率计的软件开发环境 .53.1 开发环境.53.2 MODELSIM介绍 .53.3 ISE 介绍 .5第四章 数字频率计的设计与实现 .74.1 任务要求.74.2 测量原理.74.3 设计方案与系统需求.74.4 各模块的功能及实现.94.4.1 分频器 .94.4.2 闸门选择器 .104.4.3
3、测频控制器 .114.4.4 计数器 .124.4.5 锁存器 .134.4.6 显示控制系统 .14 4.5 分配引脚和下载实现.154.6 误差分析.16第五章 实验结论及总结 .19参考文献.20致 谢 .21附 录 .22 引言0第一章、引言硬件描述语言(英文: Hardware Description Language ,简称: HDL )是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。以硬件描述语言(Verilog 或 VHDL)所完成的电路设计
4、,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的 FPGA 里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。所谓“频率”,就是周期信号在单位时间(秒)内变化的次数,若在一定的时间间隔 T内计得某周期信号的重复变化次数为 N,则该信号的频
5、率为。测量频率TNf 的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。 本文使用的是直接测频法。 引言1 第二章、基于 FPGA 的 VHDL 设计流程2 第二章、基于 FPGA 的 VHDL 设计流程2.1 概述频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数
6、,此时我们称闸门时间为 1 秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。本文中,数字频率计是用数字显示被测信号频率的仪器,限于实验条件等,被测信号只能是方波。 数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。频率计的设计有传统方法和现代方法,传统的设计方法耗时耗功,设计强度大,且容易出错,设计的质量不一定是最好的。自然我们考虑到现代方法,即二十世纪八十年代兴起的电子设计自动化技术,英文
7、为 Electronic Design Auto,缩写为 EDA。在 EDA 设计工具中,用的最广泛的是 VHDL 和 VERILOG,当然还有其它的,例如 sopc。比较 VHDL 和 VERILOG,在顶层设计方面 VHDL 优于VERILOG,在门级电路设计方面 VERILOG 优于 VHDL。随着复杂可编程逻辑器件(CPLD)的广泛应用,以 EDA 工具作为开发手段,运用 VHDL 语言,将使整个系统大大简化,提高整体的性能和可靠性。本次的频率计设计主要是顶层设计,目的是设计 6 位十进制频率计,学习常用的数字系统设计方法。采用 VDHL 编程设计实现的数字频率计,除被测信号的整形部分
8、、键输入部分以外,其余全部在一片 FPGA 芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。2.2 VHDL 语言和 Verilog HDL 介绍 VHDL 诞生于 1982 年。在 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本,IEEE-1076(简称 87 版)之后,各 EDA 公司相继推出了自己的 VHDL 设计环境,或宣布自己的设计工具可以和VHDL 接口。此后 VHD
9、L 在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。而 Verilog HDL 是由 GDA(Gateway Design Automation)公司的 PhilMoorby 在 1983 年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985 年 Moorby推出它的第三个商用仿真器 Verilog-XL,获得了巨大的成功,从而使得 Verilog 第二章、基于 FPGA 的 VHDL 设计流程3HDL 迅速得到推广应用。1989 年 CADENCE 公司收购了 GDA 公司,使得VerilogHDL 成为了该公司的独家专利
10、。1990 年 CADENCE 公司公开发表了Verilog HDL,并成立 LVI 组织以促进 Verilog HDL 成为 IEEE 标准,即 IEEE Standard 1364-1995。由于 GDA 公司本就偏重于硬件,所以不可避免地Verilog HDL 就偏重于硬件一些,故 Verilog HDL 的底层统合做得非常好。而VHDL 的逻辑综合就较之 Verilog HDL 要出色一些。所以,Verilog HDL 作重强调集成电路的综合,而 VHDL 强调于组合逻辑的综合。2.2.1 VHDL 的特点VHDL 是一种用普通文本形式设计数字系统的硬件描述语言,主要用于描述数字系统的
11、结构、行为、功能和接口,可以在任何文字处理软件环境中编辑。除了含有许多具有硬件特征的语句外,其形式、描述风格及语法十分类似于计算机高级语言。VHDL 程序将一项工程设计项目(或称设计实体)分成描述外部端口信号的可视部分和描述端口信号之间逻辑关系的内部不可视部分,这种将设计项目分成内、外两个部分的概念是硬件描述语言(HDL)的基本特征。当一个设计项目定义了外部界面(端口),在其内部设计完成后,其他的设计就可以利用外部端口直接调用这个项目。VHDL 的主要特点如下: (1)作为 HDL 的第一个国际标准,VHDL 具有很强的可移植性。 (2)具有丰富的模拟仿真语句和库函数,随时可对设计进行仿真模拟
12、,因而能将设计中的错误消除在电路系统装配之前,在设计早期就能检查设计系统功能的可行性,有很强的预测能力。 (3)VHDL 有良好的可读性,接近高级语言,容易理解。 (4)系统设计与硬件结构无关,方便了工艺的转换,也不会因工艺变化而使描述过时。 (5)支持模块化设计,可将大规模设计项目分解成若干个小项目,还可以把已有的设计项目作为一个模块调用。 (6)对于用 VHDL 完成的一个确定设计,可以利用 EDA 工具进行逻辑综合和优化,并能自动地把 VHDL 描述转变成门电路级网表文件。 (7)设计灵活,修改方便,同时也便于设计结果的交流、保存和重用,产品开发速度快,成本低。 VHDL 是一种快速的电
13、路设计工具,其功能涵盖了电路描述、电路合成、电路仿真等设计工作。VHDL 具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门电路级三个不同层次的设计,能够完成从上层到下层(从抽象到具体)逐层描述的结构化设计思想。 用 VHDL 设计电路主要的工作过程是: 1)编辑。用文本编辑器输入设计的源文件(为了提高输入效率,可用某些专用编辑器)。 2)编译。用编译工具将文本文件编译成代码文件,并检查语法错误。 3)功能仿真(前仿真)。在编译前进行逻辑功能验证,此时的仿真没有延时,对于初步的功能检测非常方便。 4)综合。将设计的源文件用自动综合工具由语言转换为实际的电路图(门电路级网表),但此时还没
14、有在芯片中形成真正的电路,就好像是把设计者脑海中的电路画成了原理图。 5)布局、布线。用已生成的网表文件,再根据 CPLD(或 FPGA)器件的容量 第二章、基于 FPGA 的 VHDL 设计流程4和结构,用自动布局布线工具进行电路设计。首先根据网表文件内容和器件结构确定逻辑门的位置,然后再根据网表提供的门连接关系,把各个门的输入输出连接起来,类似于设计 PCB(印刷电路板)时的布局布线工作。最后生成一个供器件编程(或配置)的文件,同时还会在设计项目中增加一些时序信息,以便于后仿真。 6)后仿真(时序仿真)。这是与实际器件工作情况基本相同的仿真,用来确定设计在经过布局、布线之后,是否仍能满足设
15、计要求。如果设计的电路时延满足要求,则可以进行器件编程(或配置)。2.3 FPGA 介绍FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在 PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。传统的电路设计过程是:先画原理图、把原理图绘制成印制电路板图、再制版、安装、调试。有了 FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在 FPGA 中实现。所有步骤均可自动完成。电子设
16、计工程师自己设计专用集成电路成为了一件很容易的事情。FPGA 作为专用集成电路(ASIC)概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段。电子应用设计工程师应用 FPGA 技术不仅可避免通常 ASIC 单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性。目前 FPGA 的两个重要发展与突破是,大多数厂商在其高端器件上都提供了片上的处理器(如 CPU、DSP)等硬核(Hard Core)或固化核(Fixed
17、Core)。比如 Xilinx 的 Virtex II Pro 芯片可以提供 Power PC,而 Altera 的Stratix、Excalibur 等系列芯片可以提供 Nios、DSP 和 Arm 等模块。在 FPGA上集成微处理器,使 SOPC 设计更加便利与强大。另一个发展是在不同器件商推出的高端芯片上大都集成了高速串行收发器,一般能够达到 3Gb/s 以上的数据处理能力,在 Xilinx、Altera、Lattice 都有相应的器件型号提供该功能。这些新功能使 FPGA 的数据吞吐能力大幅度增强。 第三章、数字频率计的软件开发环境5第三章、数字频率计的软件开发环境本章主要介绍项目中将
18、要用到了一系列软件,包括用于 VHDL 语言编写和编译的 ISE 软件和用于程序仿真的仿真软件 ModelSim。3.1 开发环境随着可编程器件纷纷超越百万门级,设计者面临的产品性能与设计效率的挑战也越来越大。设计者必须合理选择各 EDA 厂家提供的加速设计的工具软件,这样才能在较短的时间内设计出高效稳定的产品。在本次设计中,由于选择的FPGA 芯片是由 Xilinx 公司生产的,所以我们主要使用 ModelSim 和 ISE 软件进行仿真和综合。3.2 ModelSim 介绍Mentor 公司的 ModelSim 是业界最优秀的 HDL 语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内
19、核支持 VHDL 和 Verilog 混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk 技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护 IP 核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是 FPGA/ASIC 设计的首选仿真软件。ModelSim 完全支持 VHDL 和 Verilog 标准;采用直接编辑技术,大大提高HDL 编译和仿真速度。还可以利用 ModelSim 调用设计文件进行仿真分析。在调试环境中,设计者可以通过 ModelSim 的快速调试步骤以及对各种信号的监控功能(无论信号处于 VHDL 层,还是处于混合语言层)使仿真的执
20、行过程形象直观化,帮助设计者及时发现漏洞,缩短设计周期。ModelSim 最大的特点是其强大的调试功能:先进的数据流窗口,可以迅速追踪到生产不定或者错误状态的原因;性能分析工具帮助分析性能瓶颈,加速仿真;代码覆盖率检查确保测试的完备;多种模式的波形比较功能;先进的 SignalSpy 功能,可以方便地访问 VHDL 或者 VHDL 和 Verilog 混合设计中的底层信号;支持加密 IP;可以实现与 Matlab 的 Simulink 的联合仿真。3.3 ISE 介绍ISE 的主要功能包括设计输入、综合、仿真、实现和下载,涵盖了可编程 第三章、数字频率计的软件开发环境6逻辑器件开发的全过程,从
21、功能上讲,完成 CPLD/FPGA 的设计流程无需借助任何第三方 EDA 软件。下面简要说明各功能的作用:设计输入:ISE 提供的设计输入工具包括用于 HDL 代码输入和查看报告的ISE 文本编辑器(The ISE Text Editor),用于原理图编辑的工具 ECS(The Engineering Capture System),用于生成 IP Core 的 Core Generator,用于状态机设计的 StateCAD 以及用于约束文件编辑的 Constraint Editor 等。综合:ISE 的综合工具不但包含了 Xilinx 自身提供的综合工具 XST,同时还可以内嵌 Mento
22、r Graphics 公司的 Leonardo Spectrum 和 Synplicity 公司的Synplify,实现无缝链接。 仿真:ISE 本身自带了一个具有图形化波形编辑功能的仿真工具 HDL Bencher,同时又提供了使用 Model Tech 公司的 Modelsim 进行仿真的接口。 实现:此功能包括了翻译、映射、布局布线等,还具备时序分析、管脚指定以及增量设计等高级功能。 下载:下载功能包括了 BitGen,用于将布局布线后的设计文件转换为位流文件,还包括了 IMPACT,功能是进行芯片配置和通信,控制将程序烧写到 FPGA芯片中去。 第四章、数字频率计的设计与实现7第四章、
23、数字频率计的设计与实现4.1 任务要求 本实验核心任务是完成基于 FPGA 利用 VHDL 语言设计一个数字频率计的设计,仿真,下载实现并实际测量效果。具体要求是:频率测量范围为10Hz10MHz,用 6 只数码管以 kHz 为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择 1S、0.1S 和 0.01S 三个闸门时间中的一个,若按下两个及以上或者不选择则随意显示;有两只 LED,一只的亮灭用来显示闸门信号高低电平,另一只当计数器溢出时做溢出指示。4.2 测量原理 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计数每秒内
24、待测信号的脉冲个数,此时我们称闸门时间为 1S,闸门时间也可以大于或小于 1S。闸门时间越长,得到的频率值就准确,但闸门时间越长则每测一次频率的间隔就越长;闸门时间越短,测得频率值刷新就越快,但测得的频率精准度就受影响。4.3 设计方案与系统需求 由电子计数器频率测量基本原理可知,测频功能实现需要脉冲形成电路、闸门、十进制电子计数器、门控电路、时基信号发生器。 图 4.1 实验原理框架 从图 4.1 中可知,所设计的频率计需要 6 个模块,分别是:分频器、闸门选择器、测频控制器,计数器、锁存器以及显示模块。被测信号输入闸门计数器放大整形门控电路石英震荡器锁存器分频器闸门选择扫描显示控制子系统(
25、包括显示译码和扫描控制)闸门选择开关GateOver被测频率显示GATECLEARLATCH1Hz10Hz100Hza,b,c,d,e,f,g,dpselC,selB,selA时间或频率基准信号48MHz1kHz小数点位置实验板上的显示电路 第四章、数字频率计的设计与实现8 核心板硬件结构如下图所示: 结合实际实验板的硬件条件,可以利用 EDA 软件和 VHDL 语言在 EEC-FPGA 实验板上完成频率计的数字部分的设计与实现。Fpga 实验板如图 4-2 所示: 图 4.2 EDA 实验板从图 4.1 和图 4.2 可知,如果以此实验板做为频率计的硬件实现,可以使用 50Mhz 的有源晶振
26、作为时基信号发生器,但是测量需要的时基信号为1S、0.1S、0。01S,因此需要进行分频,另外计数器的输出结果可以使用数码 第四章、数字频率计的设计与实现9管显示,需要一个 1KHz 的扫描信号,也可由晶振分频得到,脉冲形成电路可以使用模拟电路,另外为了使数码管能够稳定显示,在输出之前加一个锁存器,闸门选择可以使用实验板上的拨码开关得到。至此可以确定,可以在 EEC-FPGA实验板实现的数字电路部分为分频器、计数器、锁存器、测频控制、闸门选择、数码管扫描显示控制子系统,这些模块之间的关系如图 4.1 所示。放大整形电路(模拟电路):放大被测信号并将其整形为方波脉冲,该方波脉冲经过闸门后送计数器
27、计数。石英振荡器:产生一个频率高度稳定的信号送分频器分频。分频器:对石英振荡器产生的信号进行分频,得到 100Hz、10Hz 和 1Hz 三个基准频率;同时产一个 1000Hz 的信号作为扫描显示译码模块的时钟,以产生扫描选择信号。门控电路:产生控制信号门控电路在时间基准信号的控制下产生门控信号GATE,门控信号有效时,闸门开通,计数器计数。当门控信号停止作用时,闸门关断。为了使计数结果能够在显示器上稳定的显示,闸门关断后门控电路要产生一个锁存命令 Latch 使锁存器锁存计数结果。在计数结果锁存以后,下一次计数开始以前,门控电路还要产生一个清零信号 CLEAR 将计数器清零,以便重新计数。4
28、.4 各模块的功能及实现4.4.1 分频器 分频器的功能是提供标准闸门时间控制信号以精确控制计数器的开闭。由于闸门时间只有 1S,0.1S,0.01S 三档,且在数码管显示时采用动态扫描的方法,需要产生 1kHz 的扫描信号,由于本设计将下载到开发板上,其提供的标准时间是 50MHz 晶振,所以要对系统的 50MHz 时钟信号进行分频,以产生符合要求的各频率信号:先由系统时钟 50MHz 分频出 1kHz 作为数码管显示的动态扫描信号,再由 1kHz 分频出 100Hz 产生 0.01S 的计数闸门信号脉冲,由 100Hz 分频出10Hz 产生 0.1S 的计数闸门信号脉冲,由 10Hz 分频
29、出 1Hz 产生 1S 的计数闸门信号脉冲。同时给整个系统定义系统复位。由以上分析,可分频器模块如下图所示: 第四章、数字频率计的设计与实现10 这个模块实现了把 50MHz 的晶振信号分成了我们需要的四个信号1Hz,10Hz,100Hz,1KHz。 因为仿真图需经过 50000 个周期 clk_1kHz 才能出现一次上升沿,无法准确显示 50000 次,故而仿真图略。4.4.2 闸门选择器 该模块的功能是根据开关 sw(2:0)的不同输入,实现对输入的几个闸门信号 fdiv_in、fdiv_in10、fdiv_in100 的手动选择,输出被选中的闸门信号fdiv_out 和小数点的控制信号
30、dp_loc(2:0)。生成的模块如下图所示: 第四章、数字频率计的设计与实现11 该模块有四个输入端口,其中 sw(2:0)为选择端,fdiv_in、fdiv_in10、fdiv_in100 为被选时基信号输入端。当 sw 为 001 时,1hz 的输入时基信号被选中,被赋值给输出端口 fdiv_out 输出,此时 dp_loc为 011;当 sw 为 010 时,10hz 时基信号被选中,被赋值给输出端口 fdiv_out输出,此时 dp_loc 为 010;最后当 sw 为 100 时,100hz 时基信号被选中,被赋值给输出端口 fhz 输出,此时 dp_loc 为 001。仿真图如图
31、 4-8 所示:4.4.3 测频控制器 测频控制器是控制整个频率计各模块进行时序工作的控制装置,它对输入的标准时钟信号 fdiv_in 进行变换,产生我们所需要的三个信号闸门信号counter_en_out,锁存信号 latch_en_out 以及清零信号 count_reset_out。其生成的模块如下图所示: 第四章、数字频率计的设计与实现12测频控制器的计数使能信号 fdiv_in 能产生一个周期信号,并对频率计的计数器使能端进行同步控制。当 fdiv_in 为高电平时,允许计数,为低电平时停止计数,并保持其所计得脉冲数。在停止计数期间,首先需要一个锁存信号latch_en_out 的上
32、升沿将计数器在前一秒的计数值锁存进 24 位锁存器latch_en_out 中,并经过显示模块显示。锁存信号之后,必须有一清零信号count_reset_out 对计数器清零,为下一秒的计数操作准备。测频控制信号发生器的仿真工作时序如下图所示。 如果闸门信号 fdiv_in 的频率取 100Hz,那么信号 fdiv_in 的脉宽恰好为0.01S,可以用作计数闸门信号,而选择其他闸门信号时也类似。然后根据测频的时序要求,可得出信号 latch_en_out 和 count_reset_out 的逻辑描述。由图可见,在计数完成后,即计数使能信号 fdiv_in 在 1S 的高电平后,利用其反相值产
33、生一个锁存信号 latch_en_out,由于反相器的器件延时,锁存信号的上升沿是在计数使能信号即闸门信号 fdiv_in 的下降沿之后,即是计数完了才锁存的,符合我们的设计要求。而清零信号 count_reset_out 的上升沿的产生是在下一个 fdiv_in 信号上升沿来临之前,也就是说是清了零才开始计数的,不是计了一会儿数再被清零了继续计数,这也是与我们的设计要求相符合的。4.4.4 计数器 由于要求频率计的显示为十进制六位,所示我们设计的是使能端的十进制计数器,所生成的模块如图所示:其中 clr 是清零端,enc 是计数信号输入端,fx 为被测信号输入端,进位输出作为溢出标志用 ov
34、er 来表示,用以显示计数器计数是否溢出。 第四章、数字频率计的设计与实现13计数器的仿真图如下图所示:从上图可知计数器符合我们设计的要求。4.4.5 锁存器 如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到 第四章、数字频率计的设计与实现14稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。由控制模块产生的 latch 信号来提供锁存脉冲。其生成的功能模块如下图所示:这模块实现了对六位计数结果和溢出信号 over_in 的锁存功能。即锁存信号的上升沿来时送数,其它时候则保持不变。仿真图如下所示:4.
35、4.6 扫描显示控制系统 本模块通过用一个频率 1KHz 的信号来扫描一个多路选择器,实现对六位已经锁存的计数结果的扫描输出,由于 1KHz 相对了人眼的暂留效应已经很高了,所以显示结果不会让人感觉到闪烁。这样就可以在程序中实现对六个 4 位二进制数的译码。译码结果再和段选码结合,同样由 1KHz 的信号来同步扫描选通。最后的输出全部通过下载前的固定引脚连接到 LED 显示管上。实现最终结果的数字显示。输入端包括扫描信号 1KHz,由前小数点指示信号 dp_loc(2:0)以及锁 第四章、数字频率计的设计与实现15存器的输出结果。其生成的模块图如下所示:仿真图如下所示:4.5 分配引脚和下载实
36、现 全部仿真通过后,就运行 ISE 的设计实现,然后分配引脚,即实现设计的输入输出端口与实际芯片的输入输出端口的对应连接。比如六段 LED 管的控制信号就连接到实际电路的六个引脚。需要注意的是一些端口是固定的,不能胡乱的连接。外部信号输入只能由外部信号源接口输入,同时还要考虑内部的可配制逻辑块一切都准备就绪后就可以运行 Configure Device,选择要下载的位文件(.bit)便可开始下载了。 第四章、数字频率计的设计与实现16 管脚分配文件也在附录中给出,仅供参考。4.6 误差分析 在实际测量中,输入 10MHz 的方波,显示为 09.9998MHz,调低一档,若要显示 999.999
37、kHz 则需要输入 1.00001MHz,若在 1Hz 档,将输入方波的频率逐渐增加,增加到约为 800kHz 时,最后一位开始闪烁,随着频率的不断增加,输入频率与显示的差距逐渐增大。1Hz 档测得数据如下:输入(Hz)输出(kHz)1000.00110000.010 100000.1001000001.000 10000010.000100000099.999800000800.0011000001999.9991000002溢出10Hz 档测得的数据:输入(Hz)输出(kHz)100000.011000000.10 10000001.00100000010.00 1000000100.00
38、10000000999.9980000200800.01100000129999.9910000013溢出100Hz 档测得的数据:输入(Hz)输出(kHz)10000000.1100000001.0 1000000010.010000000100.0 100000001000.01000000009999.8 下面我们来分析计数器测频的测量误差。从公式(4-1)可知,上述测频TNf 方法的测量误差,一方面决定于闸门时间 T,另一方面决定于计数器计得的数据。根据误差合成方法,从公式(4-1)可得: (4-2)TTNNffxx 第四章、数字频率计的设计与实现17 公式(4-2)中第一项是数字化仪
39、器所特有的误差,而第二项是闸门时间的相对误差,这项误差决定于石英振荡器所提供的标准频率的准确度。现分述如下。(1) 1 误差 在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间 T 接近甚至等于被测信号周期的xT整数倍 N 倍时,此项误差为最大,图 4-2 画出的就是这种情况。 图 4-2 正负 1 误差 若主门开启时刻为,而第 1 个计数脉冲出现在,图 4-2 (a)中示出了0TxTxT0 的情况(),这时计数器计得 N 个数(图中 N=6);现在再来看图 0T0TTTx
40、4-2 (b)情况,即趋近于 0,这就有两种可能的计数结果:若第 1 个计数脉冲和第 7 个计数脉冲都能通过主门,则可计得 N+1=7 个数;也可能这两个脉冲都没有能进入主门,则只能计得 N-1=5 个数。由此可知,最大的计数误差为个数。所以考虑到公式(4-1),可写成 (4-3)xTfNNN11 式中 T 为闸门时间,为被测频率。从公式(4-3)可知,不管计数值 N 多少,其最大误差总是1 个计数单位,故称“1 个字误差”,简称“1 误差”。而且一定时,增大闸门时间 T,可减小1 误差对测频误差的影响。当 T 选定后,越低,则由1 误差产生的测频误差越大。(2) 标准频率误差 闸门时间 T
41、准不准,主要决定于由石英振荡器提供的标准频率的准确度,若石英振荡器的频率为,分频系数为 k,则 ccfkkTT 第四章、数字频率计的设计与实现18 而 2ccffkT 所以 (4-4)ccffTT 可见,闸门时间的准确度在数值上等于标准频率的准确度,式中负号表示由引起的闸门时间的误差为。T(3) 结论综上所述,可得如下结论:计数器直接测频的误差主要有两项:即误差和标准频率误差。一般,总误差可采用分项误差绝对值合成,即 (4-5)1(ccxxxffTfff 由以上公式可知:当输入频率值为 10000012HZ 时,输出频率值为 9999.99kHZ,误差为:100000129999990100%
42、0.00022%10000012当输入频率值为 10000000Hz 时,输出频率值为 09999.8Hz,其误差为:100000009999980100%0.0002%10000000其余的相对误差计算方法一样,分析结果可见,误差都在 0.0002%左右,这个数很小,因此在一般精度的系统中,就可以应用该频率计来计数或测频。 第五章 实验结论及总结19第五章 实验结论及总结 本文主要介绍了利用 VHDL 语言完成基于 FPGA 的数字频率计的设计与实现。详细介绍了测量原理,设计方案、各模块的设计过程及其实现的功能,并对设计中遇到的问题作了分析和处理;利用 ISE 和 ModelSim 对设计进
43、行了仿真,分析,综合,并最终下载到 FPGA 芯片中,实现了对频率的测量。 (1).通过 ISE 综合,ModelSim 仿真,最终在 EDA 实验板上实现了 10Hz10MHz 频率计的设计,其误差在 0.01%数量级,能够较为精确的测量频率。 (2).当频率计值达到该档量程最大测量值时,这时输入频率值再继续增加,则会产生溢出,并且 LED6 会变亮表示计数器已经溢出。 (3).在测量频率过程中我们应当选择适当的档位,使得测量结果更加精确,特别是溢出信号 LED 亮的时候,一定要选择更高档位来进行测量。而有时为了能更精确的显示频率,也应调低档次来读数。 通过频率计的设计试验,对频率计有了更深
44、的认识,尤其是对频率计的工作原理以及各功能模块的实现有深入了解。此外,还熟悉了 Xilinx ISE 10.1i、ModelSim 软件的用法和 VHDL/Verilog 的编程环境,通过本次的设计培养自己的实验动手能力。这是第一次利用 VHDL 语言来实现基于 FPGA 的实际工程项目,所以在实验过程中不可避免的遇到了很多问题。理论和实践没有有机的联系起来,导致出现各种错误。 参考文献20参考文献1. 蒋焕文,孙续. 电子测量(第二版). 中国计量出版社 (中).2. Volnei A. Pedroni. VHDL 数字电路设计教程. 电子工业出版社 (巴西).3. 姜立东. VHDL 语言
45、程序设计及应用 (第二版). 北京邮电出版社 (中).4. 汤山俊夫. 数字电路设计与制作. 科学出版社 (日).5. 廖超平. EDA 技术. 北京理工大学出版社 (中).6. 孙航. Xilinx 可编程逻辑器件的高级应用与设计技巧. 电子工业出版社 (中). 致 谢21致 谢 在此,我首先向不辞辛劳,诲人不倦的老师 老师,表示最衷心的感谢。本实验在系统的设计和开发、代码的编写和调试过程中都得到了刘老师和皇老师的悉心指导与指正。正是老师们的谆谆教导和热心关怀使我较快的熟悉了如何使用硬件语言 VHDL 来实现项目的过程,并最终顺利完成实验。同时,老师们严谨的治学态度以及对工作的一丝不苟,也使
46、我受益匪浅,终生难忘。 特别感谢同学们在实验期间给予我的巨大帮助与支持。在此,谨向他们致以深深的敬意和诚挚的感谢! 附 录 22附 录分频器(50000 分频,即出来 1kHz 的脉冲)- Engineer: - Create Date:03/15/2015 -LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity frequency_divider_50000 isport(f_in : in std_logic;f_out : out std_logic);end frequency_d
47、ivider_50000;architecture behav of frequency_divider_50000 issignal count : std_logic_vector(15 downto 0) := (others=0);beginprocess(f_in)beginif f_inevent and f_in = 0 thenif count = 49999 thencount 0);elsecount = count + 1;end if;end if;end process;f_out 0);beginprocess(f_in)beginif f_inevent and
48、f_in = 0 thenif count = 9 thencount 0);elsecount = count + 1;end if;end if;end process;f_out fdiv_out = fdiv_in;dp_loc fdiv_out = fdiv_in10;dp_loc fdiv_out = fdiv_in100;dp_loc fdiv_out = 0;dp_loc = 111;end case;end process;end one;测频控制器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARI
49、TH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity control isport(fdiv_in:in std_logic;counter_en_out:out std_logic:=0;counter_reset_out:out std_logic:=0;latch_en_out:out std_logic:=0);end control;architecture one of control issignal sig1,sig2:std_logic:=0;beginprocess(fdiv_in,sig1,sig2)beginif rising_ed
50、ge(fdiv_in) thensig1=not sig1;end if;if falling_edge(fdiv_in) then 附 录 25sig2=not sig2;end if;end process;counter_en_out=sig1;latch_en_out=sig2;counter_reset_out=(not fdiv_in)and(not sig1)and(sig2);end one;计数器:- Company: - Engineer: - - Create Date: 16:32:10 03/18/2015 - Design Name: - Module Name:
51、count_6 - Behavioral - Project Name: - Target Devices: - Tool versions: - Description: - Dependencies: - Revision: - Revision 0.01 - File Created- Additional Comments: -library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following lib
52、rary 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; 附 录 26entity counter_6 is Port ( fx : in STD_LOGIC;
53、enc : in STD_LOGIC; clr : in STD_LOGIC; over_l: out STD_LOGIC; cn1 : out STD_LOGIC_VECTOR (3 downto 0); cn2 : out STD_LOGIC_VECTOR (3 downto 0); cn3 : out STD_LOGIC_VECTOR (3 downto 0); cn4 : out STD_LOGIC_VECTOR (3 downto 0); cn5 : out STD_LOGIC_VECTOR (3 downto 0); cn6 : out STD_LOGIC_VECTOR (3 do
54、wnto 0);end counter_6;architecture Behavioral of counter_6 issignal a,b,c,d,e,f:std_logic_vector(3 downto 0):=0000;begincn1 = a;cn2 = b;cn3 = c;cn4 = d;cn5 = e;cn6 = f;process(fx,clr,enc,a,b,c,d,e,f)beginif clr=1 thena=0000;b=0000;c=0000;d=0000;e=0000;f=0000;over_l=0;elsif rising_edge(fx) thenif enc
55、 = 1 thenif a1001 thena=a+1;else a=0000;if b1001 thenb=b+1; 附 录 27elseb=0000;if c1001 thenc=c+1;elsec=0000;if d1001 thend=d+1;elsed=0000;if e1001 thene=e+1;elsee=0000;if f1001 thenf=f+1;elsef=0000;over_l=1;end if;end if;end if;end if;end if;end if;end if;end if;end process;end Behavioral;锁存器:- Engin
56、eer: - - Create Date:03/15/2015 -LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; 附 录 28entity latch isport(num_in1,num_in2,num_in3,num_in4,num_in5,num_in6:in std_logic_vector(3 downto 0);en,over_in:in std_logic;num_out1,num_out2,num_out3,num_out4,num_out5,num_out6:out std_logic_vector(3 downto 0);over_out:out std_logic);end latch;architecture one of latch isbeginprocess(en,num_in1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粮食铁路运输代理合同
- 离职协议书可以领失业金
- 纺织用工合同协议书
- 房屋租赁合同拖欠房租解除告知函
- 第四章 建设工程合同法律原理与实务-授课教师 吴超兴-1733553549208
- 母乳皂课件讲解
- 《客户服务沟通技巧》课件
- 八年级语文下册《醉翁亭记》课件2人教版 2
- 《雄激素与男科疾病》课件
- 小学六年级下册科学课件教科版第2课时 月相变化
- 皮带机安装方案
- 学生会公寓部工作总结
- 设备安全调试维修作业安全培训
- 苏轼的坎坷一生(被贬路线)课件
- 2024年心理咨询师题库及参考答案(考试直接用)
- 天津大学2022年839物理化学考研真题(含答案)
- 物理化学习题库及答案
- 起重吊装作业安全检查范文
- 小学校本课程《跳绳》教材
- 《Baby》Justin-Bieber版歌词完整版打印下载打印
- 公司业务拓展方案
评论
0/150
提交评论