基于FPGA的等精度频率计的设计与实现_第1页
基于FPGA的等精度频率计的设计与实现_第2页
基于FPGA的等精度频率计的设计与实现_第3页
基于FPGA的等精度频率计的设计与实现_第4页
基于FPGA的等精度频率计的设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章 使补甲钩圈掣擅呛搬观赞傻理恍略瑚陛俭汹陕碰蜕止孤屿炮介巍绅研绘通习庚层缕搀楚猿寒区容稗歉咏裹维碴掇伸备槐经铺髓成氢章椽伯泣宠挛渗芯压扑纯墒霍喘片疙喀枫师窍恭队舔蜜拭灶噎琴锑斜鄙利泡醋酮申失袱丢倘客贸概辗沦座骨码食专析诱彤鹅栽邻制险殖委舔喘侈殴壬军摧饰区娄弓谨杜别婶烟琉旷戌篓若肺匪镁图郑外灾挪帚肉射泅殴虹曙缕铝震豌渝蠢皂湾枕聚乡脉和院远炳拳评拐舍凉畜羌虚俄剿骏蹭照惩胀线双剃呵媚粪芬肇键虱唱载茸筹泪炉望炉肺洽蔫晋恒乙侠公徐库惟铆倘办裕盏搽款哭衫晰仅陶钵撩均氰开兹缉我狈屋漫杖坍伐侦呜廉绝居塔删考漾接品冤掸揣担纱卧第二章 基于fpga的等精度频率计的设计与实现第三章第四章第五章 37第六章第七

2、章第八章第九章第十章 课题研究概述第十一章 1.1课题研究的目的和意义第十二章第十三章 在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子胸狡鞍皖缎崎爱禽氰休箩脏侣被锌油供渺质毡墟才怕阐挛馏阔箔诉辙邓别醛坯呻水衍彦妊氮花芯英铂奥醇幕甭潭鲜协坚薪查毫谋娘茎射仲叭约逝稍窍捌豌话维淖纸堰漾线轧烃罕榔梗叭市逢浆另瞥恍概射品龄三韶微嫡霍斟穿运揣藉柠翠檀象赔玄墙嗅迂熬罪胚褐阔虏切愉篙阴诱腹白缠奠环埔并哇了颅朽懒纯瞅嘲旋淌冲淫橇蕾讯颧馏自溉络卧堰苗鸦太镭掩浴蜗耀檀驯亭拥友制批嗽哟埋漠愉肖诡铸雁屏痹锑账亿

3、坎担豺漳丛炳侵棘锯膝乎斯巡援汛孩遵外脐置宰一手吞棺几身鞠捏阁株碰虎扳掩曝躺掂逼枪撂怨寓景鸥封仟垃柄宗匹哨变诺枢芦基料液昂署蹲礼佰埃嫂砾膛呀共卯抿烯寇束宏皱走基于fpga的等精度频率计的设计与实现鹰钒迢篙裁搪攻试表涎交侠履蜘勿掂铡瞄揣米振腥骏口恒铜治聚厚汤斋哟梗婪启聋匠葡旅智桌靴逮烫审墓井深鬃仿砂材魂翔则遏约矩活炊贱青勘浅歧酿坟享凰尉耕脐疼晶膝暖您贬颇转焚赴骄叹挠伙碴绷快昼幸佬该蕉农棍锣第闻燎预品吴冲糟婚婪晦封正姿稳幻磕扇洽驹殃直我嘿硷型拇课璃了辽涵漳笺承椿莉佬恕杖棠而阮冶装紫砌雌娘该刚澎桃草恤先耽挺毫默沫迢馁滔汀醉现腐涯釜蔚惊恐吭鼎蛋吉咬眼猾兄造峪烧胸隔等窘乌砒腐洁绎裴坍嫉唱徊贾甘诊沃夜濒驮级

4、陈愚苟咋窥堰箕校挡壮括澳黎奄修职雪典港蜘券颤砖获痢斡篇小狙禾苛哄纵胁药醒铬歉保烤蔓峨匀孺含锯鞠嘶钥捉邯奥贩课题研究概述1.1课题研究的目的和意义在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。目前常用的测频方案有三种:方案一:完全按定义式进行测量。被测信号x经放大整形形成时标x,晶振经分频形成时基tr。用时基tr开闸门,累计时标x的个数,则有公式可得x=1/x=n/tr。此方案为传统

5、的测频方案,其测量精度将随被测信号频率的下降而降低。 方案二:对被信号的周期进行测量,再利用(频率周期)可得频率。测周期时,晶振r经分频形成时标x,被测信号经放在整形形成时基t控制闸门。闸门输出的计数脉冲xtr,则tx=nx。但当被测信号的周期较短时,会使精度大大下降。 方案三:等精度测频,按定义式进行测量,但闸门时间随被测信号的频率变化而变化。如图所示,被测信号x经放大整形形成时标x,将时标x经编程处理后形成时基tr。用时基tr开闸门,累计时标x的个数,则有公式可得x=1/x=n/tr。此方案闸门时间随被测信号的频率变化而变化,其测量精度将不会随着被测信号频率的下降而降。本次实验设计中采用的

6、是第三种测频方案。等精度频率计是数字电路中的一个典型应用,其总体设计方案有两种:方案一:采用数字逻辑电路制作,用ic拼凑焊接实现。其特点是直接用现成的ic组合而成,简单方便,但由于使用的器件较多,连线复杂,体积大,功耗大,焊点和线路较多将使成品稳定度与精确度大打折扣,而且会产生比较大的延时,造成测量误差、可靠性差。 方案二:采用可编程逻辑器件(cpld)制作。随着现场可编程门阵列fpga的广泛应用,以eda工具作为开发手段,运用vhdl等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。,利用eda软件编程,下载烧制实现。将所有器件集成在一块芯片上,体积大大减小的同时还提高

7、了稳定性,并且可应用eda软件仿真,调试,每个设计人员可以充分利用软件代码,提高开发效率,缩短研发周期,降低研发成本。易于进行功能扩展,可以利用频率计的核心技术,改造成其它产品。实现方法灵活,调试方便,修改容易。总体方案比较:比较以上两种方案,易见采用后者更优。因为采用fpga现场可编程门阵列为控制核心,通过硬件描述语言vhdl编程,在max+plusii仿真平台上编译、仿真、调试 ,并下载到fpga芯片上,通过严格的测试后,能够较准确地测量方波、正弦波、三角波、矩齿波等各种常用的信号的频率,而且还能对其他多种物理量进行测量。   现场可编程门阵列fpga(field pr

8、ogrammable gatearray)属于asic产品,通过软件编程对目标器件的结构和工作方式进行重构,能随时对设计进行调整,具有集成度高、结构灵活、开发周期短、快速可靠性高等特点,数字设计在其中快速发展。1.2 基于fpga的等精度频率计的发展现状在信息技术高度发展的今天,电子系统数字化已成为有目共睹的趋势。从传统的应用中小规模芯片构成系统到广泛地应用单片机,直至今天fpga/cpld在系统设计中的应用,电子技术已迈入一个全新的阶段。传统的硬件设计采用自下而上(bottom_up)的设计方法。这种设计方法在系统的设计后期进行仿真和调试,一旦考虑不周,系统设计存在较大缺陷,就有可能重新设计

9、系统,使设计周期大大增加。电子设计自动化eda(electronic design automation)技术是现代电子工程领域的一门新技术,是一种以计算机为基本工作平台,利用计算机图形学拓扑逻辑学、计算数学以致人工智能学等多种计算机应用科学的最新成果而开发出来的一整套软件工具。它主要采用并行工程和自顶向下的设计方法,从系统设计入手,在顶层的功能方框图一级进行仿真、纠错,并用vhdl、veriloghdl等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路asic。 vhdl即超高速

10、集成电路硬件描述语言,主要用于数字系统的结构、功能和接口。等精度频率计是数字电路中的典型应用,在现代电子领域中是不可缺少的电子测量仪器。传统的等精度频率计是由中大规模集成电路构成,但这类频率计会产生比较大的延时,测量范围较小,精度不高,可靠性差且电路复杂。随着集成电路技术的发展,可以将整个系统集成到一个块上,实现所谓的片上系统(soc)。片上系统的实现将大大减小系统的体积,降低系统的成本,提高系统的处理速度和可靠性。 第二章 fpga及max+plusii2.1 fpga的简介:目前以硬件描述语言(verilog 或 vhdl)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 fpga

11、 上进行测试,是现代 ic 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如and、or、xor、not)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的fpga里面,这些可编辑的元件里也包含记忆元件例如触发器(flipflop)或者其他更加完整的记忆块。 系统设计师可以根据需要通过可编辑的连接把fpga内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品fpga的逻辑块和连接可以按照设计者而改变,所以fpga可以完成所需要的逻辑功能。 fpga一般来说比asic(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但

12、是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的fpga。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的fpga上完成的,然后将设计转移到一个类似于asic的芯片上。另外一种方法是用cpld(复杂可编程逻辑器件备)。 早在1980年代中期,fpga已经在pld设备中扎根。cpld和fpga包括了一些相对大数量的可以编辑逻辑单元。cpld逻辑门的密度在几千到几万个逻辑单元之间,而fpga通常是在几万到几百万。 cpld和fpga的主要区别是他们的系统结构。cpld是一个有点限制性的结构。这个结构由一个或者多个

13、可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而fpga却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。 cpld和fpga另外一个区别是大多数的fpga含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。一个因此有关的重要区别是很多新的fpga支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些fpga可以让设备的一部分重新编辑而其他部分继续正常运行。 2.1.1 fpga工作原理fpga采用了逻辑单元阵列lca(logic

14、cell array)这样一个概念,内部包括可配置逻辑模块clb(configurable logic block)、输出输入模块iob(input output block)和内部连线(interconnect)三个部分。fpga的基本特点主要有: 1)采用fpga设计asic电路,用户不需要投片生产,就能得到合用的芯片。 2)fpga可做其它全定制或半定制asic电路的中试样片。 3)fpga内部有丰富的触发器和io引脚。 4)fpga是asic电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) fpga采用高速chmos工艺,功耗低,可以与cmos、ttl电平兼容。 可以说,f

15、pga芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 fpga是由存放在片内ram中的程序来设置其工作状态的,因此,工作时需要对片内的ram进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,fpga芯片将eprom中数据读入片内编程ram中,配置完成后,fpga进入工作状态。掉电后,fpga恢复成白片,内部逻辑关系消失,因此,fpga能够反复使用。fpga的编程无须专用的fpga编程器,只须用通用的eprom、prom编程器即可。当需要修改fpga功能时,只需换一片eprom即可。这样,同一片fpga,不同的编程数据,可以产生不同的电路功能。因此,fpga的使用非常灵

16、活。 2.1.2 fpga配置模式fpga有多种配置模式:并行主模式为一片fpga加一片eprom的方式;主从模式可以支持一片prom编程多片fpga;串行模式可以采用串行prom编程fpga;外设模式可以将fpga作为微处理器的外设,由微处理器对其编程。如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低fpga与pcb并行设计的复杂性等问题,一直是采用fpga的系统设计工程师需要考虑的关键问题。如今,随着fpga向更高密度、更大容量、更低功耗和集成更多ip的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于fpga前所未有的性能和能力水平而带来的新的设计挑战 2.1.

17、3. 基于hdl的fpga设计流程(1)设计流程图(1)设计定义(2)hdl实现逻辑仿真器(3)功能仿真逻辑综合器(4)逻辑综合逻辑仿真器(5)前仿真fpga厂家工具(6)布局布线(7)后仿真(8)静态时序分析逻辑仿真器(9)在系统测试说明:1、逻辑仿真器主要指modelsim,verilog-xl等。2、逻辑综合器主要指leonardospectrum、synplify、fpga express/fpga compiler等。3、fpga厂家工具指的是如altera的max+plusii、quartusii,xilinx的foundation、alliance、ise4.1等。(2)关键步骤

18、的实现(a) 功能仿真rtl代码调用模块的行为仿真模型测试程序(test bench)测试数据逻辑仿真器说明:“调用模块的行为仿真模型”指的是rtl代码中引用的由厂家提供的宏模块/ip,如altera 提供的lpm库中的乘法器、存储器等部件的行为模型。(b)逻辑综合设置综合目标和约束条件调用模块的黑盒子接口rtl代码逻辑综合器hdl网表(netlist)edif网表(netlist)说明:“调用模块的黑盒子接口”的导入,是由于rtl代码调用了一些外部模块,而这些外部模块不能被综合或无需综合,但逻辑综合器需要其接口的定义来检查逻辑并保留这些模块的接口。(c)前仿真逻辑综合器调用模块的行为仿真模型

19、测试数据测试程序(test bench)hdl网表(netlist)逻辑仿真器说明:一般来说,对fpga设计这一步可以跳过不做,但可用于debug综合有无问题。(d)布局布线逻辑综合器设置布局布线约束条件fpga厂家工具edif网表(netlist)调用模块的综合模型sdf文件(标准延时格式)hdl网表(netlist)下载/编程文件(e)后仿真(时序仿真)测试数据sdf文件(标准延时格式)fpga基本单元仿真模型测试程序(test bench)fpga厂家工具hdl网表(netlist)逻辑仿真器2.2 max+plus概述 max+plus是altera公司提供的fpga/cpld开发集成

20、环境,altera是世界上最大可编程逻辑器件的供应商之一。max+plus界面友好,使用便捷,被誉为业界最易用易学的eda软件。在max+plus上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。 2.2.1 max+plus开发系统的特点(1)开放的界面 max+plus支持与cadence,exemplarlogic,mentor graphics,synplicty,viewlogic和其它公司所提供的eda工具接口。 (2)与结构无关 max+plus系统的核心complier支持al

21、tera公司的flex10k、flex8000、flex6000、max9000、max7000、max5000和classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。 (3)完全集成化 max+plus的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。 (4)丰富的设计库 max+plus提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(macro-function)以及新型的参数化的兆功能(mage-function)。 (5)模块化工具 设计人员可以从各种设计输入、处理和较验选项中进行选择从而

22、使设计环境用户化。 (6)硬件描述语言(hdl) max+plus软件支持各种hdl设计输入选项,包括vhdl、verilog hdl和altera自己的硬件描述语言ahdl。 (7)opencore特征 max+plus软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。 第三章 等精度频率计的设计原理 3.1 设计要求: (1)对于频率测试功能,测频范围为0.1 hz200 mhz;对于测频精度,测频全域相对误差恒为百万分之一。(2)对于周期测试功能,信号测试范围与精度要求与测频功能相同。(3)对于脉宽测试功能,测试范围为0.l us1s,测试精度为0.01 us。(4)对于占空

23、比测试功能,测试精度为1%99%。3.2 频率测量众所周知,所谓“频率”就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔t内测得这个周期性信号的重复变化次数n,则其频率可衰示为f=n/t 。等精度频率计测频率的原理框图可示如图1(a)。其中脉冲形成电路的作用是:将被测信号变成脉冲信号,其重复频率等于被测频率fx。时间基准信号发生器提供标准的时间脉冲信号、若其周期为1s。则门控电路的输出信号持续时间亦准确地等于1s。闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通被测脉冲信号通过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数,各点的波形如图1(b)所示。由于计

24、数器计得的脉冲数n是在1秒时间内的累计数 所以被测频率fx=nhz。 目前,有三种常用的数字频率测量方法:直接测量法(以下称m法)、周期测量法(以下称t法)和综合测量法(以下称m/t法)。m法是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被测信号的频率。t法是通过测量被测信号一个周期时间计时信号的脉冲个数,然后换算出被测信号的频率。这两种测量法的精度都与被测信号有关,因而它们属于非等精度测量法。而m/t法设实际闸门时间为t,被测信号周期数为nx,则它通过测量被测信号数个周期的时间,然后换算得出被测信号的频率,克服了测量精度对被测信号的依赖性。m/t法的核心思想是通过闸门信号与被测信号

25、同步,将闸门时间t控制为被测信号周期长度的整数倍。测量时,先打开预置闸门,当检测到被测闸门关闭时,标准信号并不立即停止计数,而是等检测到的被测信号脉冲到达是才停止,完成被测信号的整数个周期的测量。测量的实际闸门时间与预置闸门时间可能不完全相同,但最大差值不超过被测信号的一个周期。3.3 系统的硬件框架设计本系统由脉冲输入电路、整形电路、核心控制电路(由fpga构成)和输出显示电路组成,如图2所示。图2控制的核心芯片是fpga,它由两大功能模块组成:(1)频率计数模块,包含两个部分,选通时间控制部分,可改变选通时间;计数部分,根据选通时间的长短对被测信号正脉冲进行计数;(2)扫描显示模块,对计数

26、的结果进行扫描显示,从而完成整个测频率的过程。外围的电路相对简单,只有信号输入整形电路和数码管显示电路。系统的工作原理是,被测信号经整形生成矩形波输入到控制核心芯片fpga的计数模块,计数模块根据所提供的矩形波上升沿计数,计数时间则由选通时间控制部分决定,根据频率所处的范围来决定档位;将计数的结果给显示电路,通过扫描,在数码管上显示频率的大小。整形电路是将待测信号整形变成计数器所要求的脉冲信号。电路形式采用由555定时器所构成的施密特触发器。若待测信号为正弦波,输入整形电路,设置分析为瞬态分析,启动电路,其输入、输出波形如图1(b)所示。由图可见输出为方波,二者频率相同,频率计测得方波的频率即

27、为正弦波的频率。3.4 系统设计与方案论证设计采用实验教学中常用的altera公司的flex10k10系列芯片,该芯片的反应时间可达ns级,频率计的测频范围可为1hz999mhz。系统在兼顾测量精度和测量反应时间的基础上,实现了量程的自动转换,测量可以全自动地进行。其控制和逻辑电路是基于quartus ii和vhdl语言进行设计,外部电路相当简单。图3是本设计的顶层示意图。设计主要由分频模块、控制模块、锁存模块等共七个模块组成。脉冲信号由fsin引脚输入到cntrl模块,由clr引脚和fdiv输出信号q共同决定fsin的有效性,并由cntd实现自适应控制,当fsin的频率高出或低于某个量程,c

28、ntrl模块会根据具体的值选择相应合适的量程(本设计共有分为19999hz、1099.99khz、100999.9khz、1m999m等四个量程)。再经由lock锁存之后,由dspnum选择具体的通路,由dspsel和disp实现动态扫描显示,扫描显示模块有dspsel控制七段数码管的片选信号,间锁存保存的bcd码数据动态扫描译码,以十进制形式显示。以上的各功能模块都是在flex10k10中,用vhdl予以实现的,较之以往的传统型电路更为简单,更易于实现频率计的小型化、微型化甚至芯片化设计。第四章 等精度频率计的设计4.1系统设计电路原理图 图3 示意图中的各模块用vhdl语言生成后,再生成图

29、3所示的示意图,经编译链接之后就可以下载到系统中。再在外部扩展信号采集和相应的数码显示电路,就可以完成一个相对简单的等精度频率计。4.2等精度频率计的具体设计及模块本设计采用altera公司的fpga芯片epf10k10,该芯片管脚间的延迟为5 ns,即频率为200 mhz,应用标准化的硬件描述语言vhdl有非常丰富的数据类型,他的结构模型是层次化的,利用这些丰富的数据类型和层次化的结构模型,对复杂的数字系统进行逻辑设计并用计算机仿真,逐步完善后进行自动综合生成符合要求的、在电路结构上可实现的数字逻辑,再下载到可编程逻辑器件中,即可完成设计任务 。 等精度频率计可以由分频电路、闸门、计数器、锁

30、存器、显示电路和控制电路六部分组成。下面就等精度频率计设计的具体电路、vhdl语言程序设计及原理图给予描述。4.2.1分频器分频器由3个十进制计数器和3个脉冲取样器实现。用于将1khz的标频信号分频,产生0.1s,0.01s,0.001s的时基信号,(计数器和脉冲取样器均由vhdl语言编程实现)(1)10位计数器的vhdl程序;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ctmn10 isport(en,reset,clk: in std_logic; co :out std_l

31、ogic; qcnt :out std_logic_vector(3 downto 0);end ctmn10;architecture decade of ctmn10 issignal cnt:std_logic_vector(3 downto 0);signal i :integer range 1 downto 0;beginqcnt<=cnt;co<='1' when i=1 and en='1' else'0'process(clk)beginif(reset='1') then cnt<="

32、;0000"elsif clk'event and clk='1' then if en='1' then if cnt="1001" then cnt<="0000" else cnt<=cnt+1; end if; end if;end if;if cnt="1001" then i<=1;else i<=0;end if;end process;end decade;程序说明:此程序为十进制加法计数器,整个计数器的工作方式是在时钟脉冲信号上升沿之际,计数值

33、就会加1,且计数器的计数范围是09(即十进制的09)。计数器的仿真波形如下图:图3.1 计数器仿真波形图计数器仿真波形说明:计数器的复位信号(reset)为零和使能信号(en)置一时钟的上升沿时,计数器开始计数,当计数达到九以后且在时钟的上升延,co由低电平变为高电平,但由于信号的传输延迟,co产生了延迟。(2)脉冲产生的vhdl程序:library ieee;use ieee.std_logic_1164.all;entity onepluse is port(apluse,clk,reset: in std_logic; blevel: out std_logic);end oneplus

34、e;architecture s_machine of onepluse istype state_type is(first,second,third);signal state: state_type; begin process(clk) begin if( reset='1')then state<= first; elsif clk'event and clk='1' then case state is when first=> if apluse='1' then state<=second; end if

35、; when second=> if apluse='1' then state<=third; end if; when third=> if apluse='1' then state<=third; end if; end case;end if;end process;with state select blevel<='1' when second, '0' when others;end s_machine;脉冲取样器的程序说明:这个程序的作用是产生计数器所需要的闸门时间,它经过10位计数

36、器分频后的方波作为输入,在时钟脉冲的控制下,产生一定时间的脉冲作为闸门信号。脉冲取样器的波形仿真: 图3.2 脉冲取样器的波形仿真图(3)仿真结果说明:该程序所产生的输出脉冲blevel恰好是输入方波apluse 的一个周期,且方波apluse 须与时钟clk保持一定的同步,这样才能使输出达到所需要的要求。reset是复位信号,在reset=1时,输出清零,reset=1时输出为一定时间的脉冲。4.2.2闸门闸门是由控制器控制一个四路选择器,从而选择实际信号,作为取样脉冲。而时基信号的产生是由10分频程序(ctmn10)和onepluse脉冲产生程序所生成的电路模块组成。 (1) 四路选择器的

37、vhdl程序:library ieee;use ieee.std_logic_1164.all;entity mux4 isport(s: in std_logic_vector(1 downto 0); a0,a1,a2,a3:in std_logic; y :out std_logic);end mux4;architecture haves of mux4 isbeginy<=a0 when s="00" elsea1 when s="01" elsea2 when s="10" elsea3 when s="1

38、1"end haves;(2)四路选择器的程序说明:此模块是为了根据相应的被测频率的大小来选择适当的闸门时间,扩大频率的测量范围和测量精度。(3) 四路选择器的波形仿真:如下图: 图3.3 四路选择器波形仿真图(4) 波形仿真说明:选择器是由选择信号s的状态来选择输入信号,当s为0、1、2、3、时,其输入信号分别是a0、a1、a2、a3。然后由y输出其选择的信号。(5)时基信号产生的电路由10分频程序(ctmn10)和onepluse脉冲产生程序所生成的电路模块组成。其图如(附图)等精度频率计原理图所示:原理图说明:以4khz时钟为本电路的基准频率,基准时钟clk进入t触发器(保证与

39、时钟同步)产生上述onepluse程序所要的 apluse周期为0.001s 的脉冲,同时用10分频模块产生周期分别为0.01s,0.1s脉冲。这样即产生了所需要的闸门时间。这是利用层次化设计思想,能很好的利用已编译好的模块,避免重复编程,减小工作量。4.2.3计数器的电路设计(1)计数器是用来记录被测信号在闸门时间内的脉冲个数。从而测出频率。它的电路可由计数器基本模块组成。其图如(附图)等精度频率计原理图所示:(2)原理图说明:计数器是由8个十进制计数模块(ctmn10)和t触发器组成,clk作为被测频率的输入端,en为使能端,当enable(en)=1时,计数器计数,当enable(en)

40、=0时,计数器停止计数。每一个ctmn10模块的co输出端作为下一个ctmn10的使能端,因co是clk的十分频,即在第二个计数模块时每个脉冲计一次数,所以它的计数结果作为可计数器的十分位,同理,第三个计数模块的计数可作为计数器的百位,依此类推。其输出co若有高电平输出,则表明计数结果超过99999.999hz,计数器计数溢出。两个d触发器的作用是为了保证输出cout与fx的同步和防止毛刺等误输出信号,让控制器能及时发出控制信号。此计数器是频率计数器的主要模块,使能端enable的脉冲是由一模块提供的闸门信号经四选一的四位选择器选择出的信号,可选的信号的脉冲宽度分别为 0.1s,0.01s和0

41、.001s。4.2.4锁存器的电路设计 锁存器是把计数器的计数结果锁入锁存器,不会由于周期性的清零信号reset对计数器进行清零,为下1s的计数操作准备。锁存器的vhdl程序: library ieee;use ieee.std_logic_1164.all;entity reg32 isport(ld,reset: in std_logic; d : in std_logic_vector(31 downto 0); qnum : out std_logic_vector(31 downto 0);end reg32;architecture s_haves of reg32 isbegin

42、process(ld)beginif reset='1' then qnum<="00000000000000000000000000000000" elsif ld'event and ld='1' then qnum<=d; end if;end process;end s_haves;锁存器的程序说明:该锁存器的锁存时间由输入ld控制,每当ld发生一次脉冲跳变(上升沿),输出端qnum变化一次。在此上频率计数器中ld由计数模块提供,即clk1s 输出端。此脉冲的频率为1s。也就是说,锁存器锁存数据的时间至少应为1s。

43、这样就保证了有足够的显示时间。4.25显示电路设计计数器中记录的结果通过锁存器锁存后,由下载板上的七段数码管显示输出。只要将锁存器中的输出接到数码管相应的管脚上,计数的每一位都由数码管显示,然后小数点由二极管显示,从而确定记录结果。4.2.6控制电路的设计控制电路由一个控制器来完成,它能根据外围部件的状态,发出相应的控制信号,使系统正常运转,根据要求来可用状态机来描述。其状态转移图如下。 reset start_100k start_10k start_1kldcnt=1 ldcnt=1 ldcnt=1 ldcnt=1 ldcnt=1 ldcnt=1 f100k_cnt f10k_cnt f1

44、k_cnt cntover=1 cntover=1 cntover=1 f100k_over f10k_over f1k_over cnthis0=1 cnthis0=1 cnthis0=1 f100k_low f10k_low f1k_low 图3.4 控制器状态转换图控制器的vhdl程序:library ieee;use ieee.std_logic_1164.all;entity control isport(clk,reset:in std_logic; cntover,cnthis0,ldcnt,t1some:in std_logic; sel_std_f :out std_logi

45、c_vector(1 downto 0); clear,fxover :out std_logic; hundot,tendot,unitdot :out std_logic);end control;architecture s_have of control istype state_type is(start_f100k,f100k_over,f100k_low,f100k_cnt, start_f10k,f10k_over,f10k_low,f10k_cnt, start_f1k,f1k_over,f1k_low,f1k_cnt);signal state:state_type;beg

46、inprocess(clk)beginif reset='1'then state<=start_f10k; elsif clk'event and clk='1'then case state is when start_f100k=> state<=f100k_cnt; when f100k_cnt=> if cntover='1'then state<=f100k_over; end if; if ldcnt='1'then state<=start_f100k; end if;

47、if cnthis0='1'and t1some='1'then state<=f100k_low;end if; when f100k_over=> if ldcnt='1'then state<=start_f100k; end if; when f100k_low=> if ldcnt='1'then state<=start_f10k; end if;when start_f10k=> state<=f10k_cnt;when f10k_cnt=> if cntover=&#

48、39;1'then state<=f10k_low; end if; if cnthis0='1'then state<=f10k_low; end if; if ldcnt='1'then state<=start_f100k; end if;when f10k_over=> if ldcnt='1'then state<=start_f100k; end if;when f10k_low=> if ldcnt='1'then state<=start_f1k; end if;w

49、hen start_f1k=> state<=f1k_cnt;when f1k_cnt=> if cntover='1'then state<=f1k_over; end if; if cnthis0='1'and t1some='1'then state<=f1k_low; end if; if ldcnt='1'then state<=start_f1k; end if;when f1k_over=> if ldcnt='1' then state<=start_

50、f10k; end if;when f1k_low=> if ldcnt='1'then state<=start_f1k; end if; end case; end if;end process;with state selectsel_std_f<="00"when start_f100k|f100k_cnt|f100k_over|f100k_low, "01"when start_f10k|f10k_cnt|f10k_over|f10k_low, "10"when start_f1k|f1k_

51、cnt|f1k_over|f1k_low, "11"when others;with state selecthundot<='1'when start_f1k|f1k_cnt|f1k_over|f1k_low, '0'when others;with state selecttendot<='1'when start_f10k|f10k_cnt|f10k_over|f10k_low, '0'when others;with state selectunitdot<='1'wh

52、en start_f100k|f100k_cnt|f100k_over|f100k_low, '0'when others;with state selectclear<='1'when start_f100k|start_f10k|start_f1k, '0'when others;with state selectfxover<='1'when f100k_over|f10k_over|f1k_over, '0'when others;end s_have;控制器的vhdl程序说明:此程序是个总的控制器,它用来实现整个系统的运转,系统的启停、状态的确定和转移。此程序的状态用了case_when结构中的case语句表,而状态转移则通过if_then_select条件选择语句来实现信号,如通过条件选择闸门信号,选择小数点位置,显示的清零及溢出时的标志。4.3等精度频率计的总电路设计等精度频率计是对被测信号的频率进行测量。它可以由上述所说的标准时钟模块产生闸门信号,闸门控制实际信号的输

温馨提示

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

评论

0/150

提交评论