毕业设计 基于fpga的等精度数字频率计的设计.doc_第1页
毕业设计 基于fpga的等精度数字频率计的设计.doc_第2页
毕业设计 基于fpga的等精度数字频率计的设计.doc_第3页
毕业设计 基于fpga的等精度数字频率计的设计.doc_第4页
毕业设计 基于fpga的等精度数字频率计的设计.doc_第5页
免费预览已结束,剩余32页可下载查看

下载本文档

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

文档简介

i 本本 科科 生生 毕毕 业业 论论 文文 题 目: 基于 fpga 的等精度数字频率计的设计 i 摘摘 要要 在电子工程,资源勘探,仪器仪表等相关应用中,频率计是工程技术人员必不 可少的测量工具。频率测量也是电子测量技术中最基本最常见的测量之一。不少物 理量的测量,如转速、振动频率等的测量都涉及到或可以转化为频率的测量。 基于传统测频原理的频率计的测量精度会随被测信号频率的下降而降低。本文 介绍了一种基于 FPGA 的等精度数字频率计,它不但具有较高的测量精度,而且在 整个测量区域能保持恒定的测量精度。 文章首先介绍了硬件描述语言(HDL)的发展,以 VHDL 为核心,说明了利用 VHDL 语言进行设计的步骤。然后介绍 FPGA 器件的基本结构和开发流程,接着阐 述等精度数字频率计的工作原理以及利用 VHDL 语言实现数字频率计的具体做法, 重点是利用 BCD 码减法实现的 BCD 码除法器的设计,最后还利用 modelsim 软件 对其进行了仿真,具体分析验证了此设计的正确性。 关键词:关键词: FPGA VHDL 等精度等精度 BCD 码除法码除法 ii Abstract Cymometer is a necessary measure tool for technical engineers in electronic engineering , resource exploration and apparatus using . frequency mesure is one of the most essential and the most common mesure of electronic mesure technology . many physical quantities mesure , such as rotate speed , vibration frequencys mesure , is related with or can be transformed into frequency mesure. The precision of cymometer based on traditional frequency-testing theory will decrese when the measured frequency becomes lower. this article introduces a cymometer of same- precision based on FPGA. The cymometer not only has high precision, but also its precision doesnt decrese when the measured frequency becomes lower. This article first introduces the development of HDL , focusing on VHDL , present the step of design of VHDL . then it introduces the basic structure and the develop flow of FPGA device . in the end , it introduces the theory of cymometer and the specific implement of cymometer based on VHDL , emphasizing the theory of implementing BCD division. the function simulation and logic synthesis also come out, showing the correction of the design . Keywords: FPGA VHDL same-precision BCD division iii 目目 录录 第一章第一章前言前言.1 第二章第二章硬件描述语言(硬件描述语言(HDL).4 2.1VHDL 语言简介.4 2.2VHDL 语言的设计步骤.5 第三章第三章现场可编程门阵列(现场可编程门阵列(FPGA)的基本原理)的基本原理.8 第四章第四章基于基于 FPGA 的等精度数字频率计的等精度数字频率计.10 4.1数字频率计的基本原理及测量方法.10 4.2一般数字频率计.11 4.3 等精度数字频率计.12 4.3.1等精度数字频率计的测频原理.12 4.3.2误差分析.12 4.4 本文所设计的数字频率计. 13 4.4.1 频率计实现的功能 .13 4.4.2 频率计的各部分分析13 4.4.3 仿真与测试16 4.4.4总结与体会.18 第五章第五章工作工作总结总结.19 致谢.20 参考文献参考文献.21 附录.22 A. 分频器代码.22 B. D 触发器代码.23 C. 计数器代码.24 D. 除法器代码.26 E. 频率计代码.29 1 第一章第一章前言前言 现代电子设计自动化(现代电子设计自动化(EDA)技术)技术1 随着全球步入信息化社会,对微电子信息技术和微电子超大规模集成电路基础 技术将不断提出更高的发展要求,微电子技术仍将继续是 21 世纪最为重要和最有活 力的高科技领域之一。而集成电路(IC)技术在微电子领域占有重要的地位。伴随 着 IC 技术的发展,电子设计自动化(EDA)已经逐渐成为重要的设计手段,其广泛 用于模拟与数字电路系统等许多领域。 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术2, 它与电子技术、微电子技术的发展密切相关,吸收了计算机科学领域的大多数最新 研究成果,以高性能的计算机作为工作平台,是 20 世纪 90 年代初从 CAD(计算机 辅助设计) 、CAM(计算机辅助制造) 、CAT(计算机辅助测试) 、CAE(计算机辅 助工程)的概念发展而来的。EDA 技术就是以计算机为工具,在 EDA 软件平台上, 根据硬件描述语言 HDL 完成的设计文件,自动地完成逻辑编译、化简、分割、综合 及优化、布局线、仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载 等工作。设计者的工作仅限于用软件的方式来完成对系统硬件功能的描述,在 EDA 工具的帮助下和应用相应的 FPGA/CPLD 器件,就可以得到最后的设计结果。尽管 目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。这里 所谓的 EDA 主要是指数字系统的自动化设计,因为这一领域的软硬件方面的技术已 经成熟,应用的普及程度也比较大。而模拟电子系统的 EDA 正在进入实用,其初期 的 EDA 工具不一定需要硬件描述语言。此外,从应用的广度和深度来说,由于电子 信息领域的全面数字化,基于 EDA 的数字系统的设计技术具有更大的应用市场和更 紧迫的需求性。 EDA 技术的基本设计方法介绍 1.自顶向下的设计方法3 传统的电路设计方法都是自底向上的,而基于 EDA 技术的自顶向下(top- down)的设计方法正好与其相反,其步骤就是采用可完全独立于目标器件芯片物理 2 结构的硬件描述语言,如VHDL,在系统的基本功能或行为级上对设计的产品进行 描述和定义。 2.系统级设计: 设计准备和系统划分 设计处理(EDA工具综合) 设计准备和系统划分 编译并进行功能仿真 设计输入(原理图、HDL语言或波形图) 适配前时序仿真 适配器 器件编程文件适配报告适配后仿真模型 ASIC实现适配后时序仿真CPLD/FPGA实现 厂家综合库 图 1-1 系统级设计工作流程图 系统级设计的工作流程如图 1-1 所示。第一步,工程师按照“自上向下”的设 计方法进行系统划分。第二步,输入 VHDL 代码,这是高层次设计中最为普遍的输入 方式。此外,还可以采用图形输入方式(框图,状态图等),这种输入方式具有直 观、容易理解的优点。第三步是,将以上的设计输入编译成标准的 VHDL 文件。第四 步是进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用大 型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重 复的次数和时间。一般情况下,这一仿真步骤可略去。第五步是,利用综合器对 VHDL 源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转 化为硬件电路的关键步骤。综合优化是针对 ASIC 芯片供应商的某一产品系列进行的, 所以综合的过程要在相应的厂家综合库支持下才能完成。第六步是,利用产生的网 3 络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗 略的。一般的设计,也可略去这一仿真步骤。第七步是利用适配器将综合后的网络 表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、 逻辑优化、布局布线。第八步是在适配完成后,产生多项设计结果:(1)适配报告, 包括芯片内部资源利用情况,设计的布尔方程描述情况等;(2)适配后的仿真模型; (3)器件编程文件。根据适配后的仿真模型,可以进行适配后的时序仿真,因为已经 得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确地预期未来芯 片的实际性能。如果仿真结果达不到设计要求,就需要修改 VHDL 源代码或选择不同 速度和品质的器件,直至满足设计要求;最后一步是将适配器产生的器件编程文件 通过编程器或下载电缆载入到目标芯片 FPGA 或 CPLD 中。如果是大批量产品开发, 则通过更换相应的厂家综合库,轻易地转由 ASIC 形式实现。 4 第二章第二章硬件描述语言(硬件描述语言(HDL) 硬件描述语言 HDL 是一种用形式化方法描述数字电路和系统的语言4。利用这 种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的 设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设 计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合, 经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路 ASIC 或现场可 编程门阵列 FPGA 自动布局布线工具,把网表转换为要实现的具体电路布线结构。 硬件描述语言 HDL 的发展至今已有 20 多年的历史,并成功地应用于设计的各个 阶段:建模、仿真、验证和综合等。到 20 世纪 80 年代,已出现了上百种硬件描述 语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面 向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向 设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20 世纪 80 年代后期, VHDL 和 Verilog HDL 语言适应了这种趋势的要求,先后成为 IEEE 标准。本次设计 选用的是 VHDL 语言,下面将主要对 VHDL 语言进行介绍。 2.1 VHDL 语言简介语言简介 VHDL 的英文名全称是 Very-High-Speed Integrated Circuit Hardware Description Language5,诞生于 1982 年。1987 年底,VHDL 被 IEEE 和美国国防部 确认为标准硬件描述语言 。自 IEEE 公布了 VHDL 的标准版本,IEEE-1076(简称 87 版)之后,各 EDA 公司相继推出了。此后 VHDL 在电子设计领域得到了广泛的接受, 并逐步取代了原有的非标准的硬件描述语言。1993 年,IEEE 对 VHDL 进行了自己的 VHDL 设计环境,或宣布自己的设计工具可以和 VHDL 接口修订,从更高的抽象层次 和系统描述能力上扩展 VHDL 的内容,公布了新版本的 VHDL,即 IEEE 标准的 1076- 5 1993 版本,(简称 93 版)。现在,VHDL 和 Verilog 作为 IEEE 的工业标准硬件描述 语言,又得到众多 EDA 公司的支持,在电子工程领域,已成为事实上的通用硬件描 述语言。 VHDL 主要用于描述数字系统的结构,行为,功能和接口,非常适用于可编程逻辑芯 片的应用设计。与其它的 HDL 相比,VHDL 具有更强的行为描述能力,从而决定了它 成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结 构,从逻辑行为上描述和设计大规模电子系统的重要保证。就目前流行的 EDA 工具 和 VHDL 综合器而言,将基于抽象的行为描述风格的 VHDL 程序综合成为具体的 FPGA 和 CPLD 等器件的网表文件已不成问题。 2.2 VHDL 语言的设计步骤语言的设计步骤 利用 VHDL 语言进行设计可分为以下几个步骤:6 1设计要求的定义。 在从事设计进行编写 VHDL 代码之前,必须先对你的设计目的和要求有一个明确 的认识。例如,你要设计的功能是什么?对所需的信号建立时间、时钟/输出时间、 最大系统工作频率、关键的路径等这些要求,要有一个明确的定义,这将有助于你 的设计,然后再选择适当的设计方式和相应的器件结构,进行设计的综合。 2用 VHDL 语言进行设计描述。 ()选择设计方式。 设计方式一般说来有三种:自上向下设计,自下向上设计,平坦式设计。前两 种方式包括设计阶层的生成,而后一种方式将描述的电路当作单模块电路来进行的。 自上向下的处理方式要求将你的设计划分成不同的功能元件,每个元件具有专门定 义的输入和输出,并执行专门的逻辑功能。首先生成一个由各功能元件相互连接形 成的顶层模块来做成一个网表,然后再设计其中的各个元件。而自底向上的处理方 法正好相反。平坦式设计则是指所有功能元件均在同一层和同一图中详细进行的。 6 ()编写设计代码。 编写 VHDL 语言的代码与编写其它计算机程序语言与编写其它计算机程序语言的 代码有很大不同,你必须清醒地认识到你正在设计硬件,编写的 VHDL 代码必须能够 综合到采用可编程逻辑器件来实现的数字逻辑之中。懂得 EDA 工具中仿真软件和综 合软件的大致工作过程,将有助于编写出优秀的代码。 3用 VHDL 仿真器对 VHDL 源代码进行功能仿真。 对于大型设计,采用 VHDL 仿真软件对其进行修正,以便尽可能地减少对设计日 程计划的影响。因为对于大型设计,其综合优化、配置往往要花费好几个小时,在 综合之前对源代码仿真,就可以大大减少设计重复和修正错误的次数和时间。但对 于小型设计,则往往不需要先对 VHDL 源代码进行仿真,即使做了,意义也不大。因 为对于小型设计,其综合优化、配置花费的时间不多,而且在综合优化之后,你往 往会发现为了实现性能目标,将需要修改你的设计。在这种情况下,用户事先在源 代码仿真时所花费的时间是毫无意义的,因为一旦改变设计,还必须重新再做仿真。 4利用 VHDL 综合软件对 VHDL 源代码进行综合优化处理。 选择目标器件、输入约束条件后,VHDL 综合优化软件工具将对 VHDL 源代码进 行处理,产生一个优化了的网络表,并可以进行粗略的时序仿真。综合优化软件工 具大致的处理过程如下:首先检测语法和语意错误;然后进行综合处理,对 CPLD 器 件而言,将得到一组工艺专用逻辑方程,对 CPLD 的优化通常包括将逻辑化简为乘积 项的最小和式,降低任何给定的表达式所需的逻辑块输入数,这些方程进一步通过 器件专用优化来实现资源配置。对 FPGA 的优化通常也需要用乘积项的和式来表达逻 辑,方程系统可基于器件专用资源和驱动优化目标只因来实现因式分解,分解的因 子可用来对实现的有效性进行评估,其准则可用来决定是对方程系统进行不同的因 式分解还是保持现有的因子。准则通常是指分享共同因子的能力,即可以被暂存, 以便于和任何新生成的因子相比较。 5配置。 将综合优化处理后得到的优化了的网络表,安放到前面选定的 CPLD 或 FPGA 目 标器件之中,这一过程成为配置。在优化了的网络表配置到目标器件后,从完成的 版图上可以得到连线长短、宽窄的信息,把它们反注到原来的网络表上,为再次进 7 行时序仿真做准备。 6配置后的时序仿真。 这时的时序仿真将检查诸如信号建立时间、时钟到输出、寄存器到寄存器的时 延是否满足要求。因为已经得到实际连线引起的时延数据,所以仿真结果能比较精 确地预期未来芯片的实际性能。如果时延仿真结果不能满足设计的要求,就需要重 新对 VHDL 源代码进行综合优化,并重新装配于新的器件之中,期间不乏反复尝试各 种综合优化过程和配置过程,或选择不同速度品质的器件。同时,也可以重新观察 和分析 VHDL 源代码,以确认描述是正确有效的。只有这样,取得的综合优化和配置 的结果才符合你的实际要求。 7器件编程。 在成功地完成了设计描述、综合优化、配置和配置后的时序仿真之后,则可以 对器件编程和继续进行系统设计的其它工作。 8 可编程输入/输出 I/O 可编程逻辑单元 C 图9-40 可编程布线资源 CLB 第三章第三章 现场可编程门阵列(现场可编程门阵列(FPGA)的基本原理)的基本原理 FPGA 器件具有高密度、高速率、系列化、标准化、小型化、多功能、低功耗、 低成本,设计灵活方便,可无限次反复编程,并可现场模拟调试验证等特点。7使 用 FPGA 器件,可在较短地时间内完成一个电子系统地设计和制作,缩短了研制周 期,达到快速上市和进一步降低成本的要求。 FPGA具有掩模可编程门阵列地通用结构,它由逻辑功能块排成阵列组成,并由 可编程地互连资源连接这些逻辑功能块来实现不同的设计。 FPGA由可配置逻辑块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IR-Interconnect Resource)三部分组成。可配置逻辑块 CLB是实现用户功能的基本单元,它 们通常规则地排列成一个阵列,散布 于整个芯片;可编程输入/输出模块 (IOB)主要完成芯片上逻辑与外部封装 脚的接口,它通常排列在芯片的四周; 可编程互连资源(IR)包括各种长度的 连线线段和一些可编程连接开关, 它们将各个CLB之间或CLB、 IOB之间以及IOB 之间连接起来,构成特定功能的电路。 (1)可配置逻辑块 (CLB) 一般有三种结构形式: 查找表结构; 多路开关结构; 多级与非门 结构。CLB 是 FPGA 地主要组成部分,它主要由逻辑函数发生器、触发器、数据选择 器等电路组成。 (2) 输入/输出模块(IOB) IOB 主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。其 9 结构如下图所示。每个 IOB 控制一个引脚,它们可被配置为输入、输出或双向 I/O 功能。 (3)可编程连线(IR) FPGA 芯片内部单个 CLB 输入输出之间、各个 CLB 之间、 CLB 和 I/OB 之间 的连线由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现所 需功能的电路连接。 连线通路的数量与器件内部阵列的规模有关,阵列规模越大, 连线数量越多。 10 第四章第四章 基于基于 FPGA 的等精度数字频率计的等精度数字频率计 4.1 数字频率计的基本原理及测量方法 频率就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔 T 内测 得这个周期性信号的重复变化次数 N,则其频率可表示为 f=N/T 。 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其 他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间 为 1 秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确, 但闸门时间越长则测量一次频率的间隔就越长。闸门时间越短,测的频率值刷新就 越快,但测得的频率精度就受影响。其原理框图如图 4-1 所示。 Fx 图 4-1 频率计基本原理图 其中脉冲形成电路的作用是:将被测信号变成脉冲信号,其重复频率等于被测 频率 fx。时间基准信号发生器提供标准的时间脉冲信号、若其周期为 1s,则门控电 路的输出信号持续时间亦准确地等于 1s。闸门电路由标准秒信号进行控制,当秒信 号来到时,闸门开通被测脉冲信号通过闸门送到计数译码显示电路。1 秒信号结 束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数 N 是在 1 秒时间内的累 计数 所以被测频率 fx=NHz。 脉冲形成电 路 闸门电路计数译码显示 门控电路 时基信号发生器 11 目前,有三种常用的数字频率测量方法:8直接测量法、周期测量法和综合测 量法。 直接测量法是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被 测信号的频率。设闸门时间为 t, 在此时间内测到的脉冲个数为 n,则 f=n/t; 当 t 取 为 1s 时,f=n,如上所述。 周期测量法是通过测量被测信号一个周期时间的时间,然后换算出被测信号的 频率。设测得被测信号一个周期时间为 t,则 f=1/t。 上述两种测量法的精度都与被测信号有关,因而它们属于非等精度测量法。 而综合测量法设实际闸门时间为 t,在此期间测得被测信号脉冲个数为 n,测得 基准信号脉冲个数为 m,则 f=fs(fs 是基准信号频率),克服了测量精度对被测 n m 信号的依赖性。综合测量法的核心思想是通过闸门信号与被测信号同步,将闸门时 间 t 控制为被测信号周期长度的整数倍。测量时,先打开预置闸门,当检测到被测 闸门关闭时,标准信号并不立即停止计数,而是等检测到的被测信号脉冲到达是才 停止,完成被测信号的整数个周期的测量。测量的实际闸门时间与预置闸门时间可 能不完全相同,但最大差值不超过被测信号的一个周期。 4.2 一般数字频率计 一般数字频率计采用直接测量法,其结构包括一个测频率控制信号发生器、一 个计数器和一个锁存器和七段数码管显示电路。 (1)测频率控制信号发生器 设计频率极的关键是设计一个测频率控制信号发生器,产生测量频率的控制时 序。控制时钟信号 clk 取为 1Hz,2 分频后即可查声一个脉宽为 1 秒的时钟 test- en,以此作为计数闸门信号。当 test-en 为高电平时,允许计数;当 test-en 由高电 平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存 数据后,还要在下次 test-en 上升沿到哦来之前产生零信号 clear,将计数器清零, 为下次计数作准备。 12 (2)计数器 计数器以待测信号作为时钟,清零信号 clear 到来时,异步清零;test-en 为高电平 时开始计数。 (3)锁存器 当 test-en 下降沿到来时,将计数器的计数值锁存,这样可由外部的七段译码器 译码并在数码管显示。设置锁存器的好处是显示的数据稳定,不会由于周期性的清 零信号而不断闪烁。锁存器的位数应跟计数器完全一样。 (4)七段数码管显示电路 显示当前频率值。 4.3等精度数字频率计 4.3.1等精度数字频率计测频原理 等精度测量法如图 4-2 所示9。它的闸门时间不是固定的,而是被测信号周期 的整数倍,即与被测信号同步,因此,它消除了被测信号的计数误差。当预置闸1 门信号 D 为高电平时,基准信号计数器 counter 和被测信号计数器 counter1 并不启 动,而是等到被测信号 Tclk 上升沿到来时才同时开始计数,当预置闸门信号 D 为低 电平时,两个计数器并不马上关闭,同样要等到被测信号 Tclk 上升沿到来时才停止 计数,可以看出,实际闸门时间与预置闸门时间并不相等,而是被测信号周期的整 数倍。这样就实现了闸门和被测信号的同步。 图 4-2 等精度测量法原理图 13 4.3.2 误差分析 设在一次实际闸门实际 T 中对被测信号的计数为 Nx,对基准信号的计数为 Ns,基准信号的频率为 Fs,则被测信号的频率 Fx 为: Fx=(Nx/Ns)*Fs (1) 由式(1)可知,若忽略基准信号频率 Fs 的误差,则相对误差为: =(Fxe-Fx/Fxe)*100% (2) 其中 Fxe 为被测信号的实际频率。 在测量中,由于 Fx 计数的起止时间都是由该信号自身的上升沿触发的,在闸门 时间 T 内对 Fx 的计数 Nx 无误差(Nx=T*Px);对 Fs 的计数 Ns 最多相差一个数的误 差,即Ns1,其测量频率为 Fx=Fs/(Ns+Ns)*Nx (3) 将式(1)和(3)代入式(2) ,并整理得: =Ns/Ns1/Ns=1/( T*Px) 可以看出,测量频率的相对误差仅与闸门时间 T 和基准信号频率 Fs 有关。与被 测信号频率 Fx 的大小无关,闸门时间 T 越长,基准信号频率 Fs 越高,测频的相对 误差就越小。在保证测量精度不变的前提不变的前提下,提高标准信号 Fs 的频率, 可以缩短闸门时间 T,即提高测试速度。 4.4 本文所设计的数字频率计 4.4.1 频率计实现的功能 1.要设计的频率计由四个七段数码管显示频率值,测量范围为 0.001khz 2000khz,单位为 khz。 2.当被测信号频率超出频率计测量范围,显示溢出。 3. 用记忆显示方式,即计数过程中不显示数据,待计数过程结束后,显示计 数结果,并将此显示结果保持到下一次计数结束。显示时间应不小于 1 秒。 14 4.4.2 频率计的各部分分析 整个硬件系统由分频器,计数器 1,计数器 2,D 触发器和 BCD 除法器组成, 总体结构如图 4-3 所示。 图 4-3 等精度频率计结构图 其电路原理图如图 4-4 所示,其中 ff 为分频器,dtri 为 D 触发器,counter 为计数器 1,counter2 为计数器 2,cfq 为除法器。 图 4-4 等精度频率计电路原理图 本频率计频率计的基准时钟信号 sclk 取为 1khz,经分频器分频后得到 1hz 的信号输 入到 D 触发器。在 D 触发器输出 1hz 的使能信号 en,这就可以在程序中以“en 信 号为 1”作为判断条件,如果满足条件则计数器开始计数。当 en 信号变为低电平时, 计数器停止计数,并把当时计数值送到除法器进行计算。因此,预置闸门时间为 基准信号 被测信号 复位信号 分频器 D 触 发器 计数器 1 计数器 2 除法器 15 0.5s,一次显示周期均为 1s,频率计的误差=Ns/Ns1/Ns=1/500=0.002。 被测信号频率 Fx=(Nx/Ns)khz.由于分频器和 D 触发器相对简单,下面只具体分析计 数器和 BCD 码除法器的设计和实现。 1. 计数器的设计和实现 计数器 1 和计数器 2 都设为 6 位,定义计数值 cout 为 out std_logic_vector(23 downto 0)信号,采用 bcd 码计数,计数值=计数值+1,当某 个位计数值为“1001”时,下一个计数脉冲到来时,此位变为“0000” ,向下位进一, 如此类推。 由于基准信号频率为 1khz,预置闸门时间为 0.5s,所以计数器 1 的最终计数值 总会比 500 大。而计数器 2 计数最大值为 999999,所以此频率计能测的最大频率为 Fmax(999999/500)khz2000khz 2. BCD 码除法器的设计和实现 除法是建立在减法基础上的10,此 BCD 数除法也是建立在 BCD 数减法运算 基础上的。利用减法来实现除法通常有两种方式: 第一种是直接从低位开始相减,记录能够相减的次数就是商。此算法要求执 行减法的次数较多,如 6543215=130864.2,就是要执行 130864.2 次算法,器 计算所用的时间就比较可观了。 第二种是采用从高位相减的方法来实现除法,这种算法可极大地减少执行减 法的次数。本设计采用第二种方式实现除法运算。 下面具体分析这种方式实现除法的过程。 本设计需用到 6 位 BCD 数除法,所以以 6 位 BCD 除法为例来说明。假设被除 数为 6 位,如不够 6 位可左移到 6 位,对结果的影响只是商中小数点的位置发生 改变。 首先,将除数左移至 6 位,并记录移动的次数 P 以确定商中小数点在第 P1 位有效数字之后,否则商中小数点在第 P 位有效数字之后。 16 其次,进行循环相减操作。其中,被除数作为被减数,除数作为减数,作减 法,差重新置入被减数的位置,反复相减,直到被减数小于减数为止,记录下能 够相减的次数即得到商的第一位有效数字。然后,将被减数左移一位,继续循环 相减,直到被减数小于减数为止,重新记录此次循环相减中能够相减的次数即为 商的第二位有效数字。依此继续下去可得到商的第三位,第四位等有效数字循环 的次数要视对商中有效数字个数的要求来确定。本设计中需要 4 位有效数字,那 么只需执行 4 轮循环相减操作。要注意的是,当第一次遇到被减数小于减数的时 候,应将减数右移一位,然后继续执行循环相减操作,此后按要求将被减数左移 即可。一次除法执行的全过程如表 4-5 所示。 被除数 (被减数) 除数 (减数) 小数点位置 P 够减次数余数 6543215 65432150000061154321 1543215000034321 4321050000043210 43210050000832100 32100050000621000 21000050000410000 1000005000020 表 4-5 一次除法执行的全过程 结果:6543215130864.2 最后,根据商中小数点的位置即可确定商的大小。 由上述可知,进行除法运算最多需执行 610 次减法运算,这可大大节省 FPGA 的开销。 4.4.3 仿真与测试 17 我选用软件 ModelSim SE 6.0 来进行功能仿真;由于分频器和 D 触发器比较简 单,故将它们的仿真略去。以下分别是计数器,除法器和频率计的仿真。 1、计数器的仿真: 计数器的仿真波形如图 4-6 所示,仿真时间设为 00.7s, sig_clk 为待测信号, 周期 100us,频率为:10khz,占空比 50%。 理论测量值 q=100000.7=7000.从下图中可知,实际测量值是 6999. 图 4-6 计数器的仿真波形 2、除法器的仿真: 除法器的仿真波形如图 4-7 所示 被除数 a=38534, 除数 b=501,38534501=76.914k 18 图 4-7 除法器的仿真波形 从上图可知,商的有效数字为 7691,小数点位置数值为 1,即小数点要向左移 一位,结果为 76.91,与实际结果相符。 3、频率计的综合仿真: 频率计的综合仿真波形如图 4-8 所示 基准信号 sclk 频率为 1khz,被测信号 tclk 周期 T=13us,频率为 76.923khz 19 图 4-8 频率计的综合仿真波形 从上图可看出,测出的频率为 76.92khz,与实际相符。 4.3.44.3.4 总结与体会总结与体会 从仿真图像可以看出,频率计各个功能模块工作正常,频率计能准确的测出被测 信号的频率,仿真结果让人满意。 第五章 工作总结 本次设计主要是用 FPGA 实现了等精度数字频率计,运用了 VHDL 语言编程, 仿真是在 ModelSim 开发环境下实现的,其中重点是计数器和除法器的设计。本次设 20 计用了 4 位有效数字显示频率值,其范围为:0.001khz2000khz,它实现了在测量 范围内等精度的测量,其不足之处在于精度不够高。改进方法是:提高基准信号的 频率,将计数器改为 8 位,用 8 位有效数字显示频率值。 在这次完成毕业设计的过程中,我通过学习和实践,掌握了 VHDL 这门语言,了 解了有关 EDA 软件的使用。在仿真和调试的过程中,我遇到了不少的问题。这使我 体会到,要将理论应用到实际中去,需要克服很多的困难。今后,除了学好理论, 我还要多动手,提高自己的动手能力,累积多一些经验。 致谢 感谢在这次完成毕业设计的过程中给过我指导的同学,如廖世文,刘琳琅等, 特别感谢陈云洽老师给我提供的大量资料和意见。 21 参考文献 1 谭会生,王耀南,EDA 技术基础,北京:人民邮电出版社,2004 2 Birnbaum, Mark. Essential electronic design automation (EDA), Prentice Hall 22 PTR/Pearson Education, c2004. 3 求是科技,张立科,VHDL 应用开发技术与工程实践,北京:人民邮电出版社, 2005 4 陈耀和,VHDL 语言设计的技术,北京:电子工业出版社,2004 5 Perry, Douglas L. VHDL: programming by example New York :McGraw-Hill , c2004 6 赵鑫,蒋亮,齐兆群,李晓凯,VHDL 与数字电路设计,北京:机械工业出版社, 2005 7 刘皖,何君道,谭明,FPGA 设计与应用,北京:清华大学出版社,2006 8 谢小东,李良超,基于 FPGA 的等精度数字频率计的设计,实验科学与技术,增 刊,177-179,2005 年 10 月 9 李锶,刘先文,段日文,一种改进型等精度宽频频率计的设计,湖南理工学院 学报,第 20 卷,第二期,53-56,2007 年 6 月 10 杨君,夏双志,利用高速并行 bcd 数减法实现等精度数字频率计的设计,电测 与仪表,总第 42 卷,第 478 期,27-30,2005 年 10 月 附录 A、 分频器代码 library ieee; 23 use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ff is port( rst1:in std_logic; clk1:in std_logic; clk0_5s:out std_logic ); end ff; architecture rtl of ff is signal q:std_logic; begin process(rst1,clk1) variable cout:integer range 0 to 1000; begin if rst1=1 then cout:=0; q=1; clk0_5s=500 then cout:=0; q=not q; else cout:=cout+1; end if; end if; clk0_5s=q; 24 end process; end rtl; B、 D 触发器代码 use ieee.std_logic_1164.all; entity dtri is port( d,clk2:in std_logic; q:out std_logic ); end dtri; architecture rtl of dtri is begin process(clk2) begin if(clk2 event and clk2=1) then q=d; end if; end process; end rtl; C、 计数器代码 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; 25 use ieee.std_logic_unsigned.all; entity counter is port( rst3,en1:in std_logic; sclk1:in std_logic; q1:out std_logic_vector(23 downto 0) ); end counter; architecture count of counter is signal oflag:std_logic; signal cou1:std_logic_vector(23 downto 0); begin ctrcou:process(rst3,sclk1) begin if rst3=1 then cou1= 000000000000000000000000; else if sclk1 event and sclk1 = 1 then if en1 =1 then if cou1(2

温馨提示

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

评论

0/150

提交评论