DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 721|回复: 0
打印 上一主题 下一主题

[工仪] 基于CPLD的简易数字频率计的设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 15:14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要:CPLD器件的出现给现代电子设计带来了极大的方便和灵活性,使复杂的数字电子系统设计变为芯片级设计,同时还可以很方便地对设计进行在线修改。首先介绍了频率计的测频原理,然后利用CPLD芯片进行测频计数,从而实现了简易数字频率计的设计。此频率计的设计采用基于VHDL的“Top-Down”(自上而下)的设计方法,从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。所设计的电路在GW48系列SoPC/EDA实验箱上通过硬件仿真,下载到目标器件上运行,能够满足实际测量频率的要求。
关键词:CPLD;VHDL;频率计;设计

0 引言
??? 目前已经有不少文献分别从不同的角度对此问题进行了讨论和研究。有基于FPGA实现的,FPGA的保密性差,它的分段式布线结构决定了其延迟的不可预测性,它的编程信息需存放在外部存储器上,使用方法复杂;也有用标准逻辑器件实现的,用标准逻辑器件使系统布线复杂、体积功耗大、可靠性差、设计周期长,交流和修改不方便。该频率计采用先进的EDA技术及自上而下的设计,使用CPLD芯片,CPLD具有连续连接结构,易于预测延时,使电路仿真更加准确,且编程方便、速度快、集成度高、价格低,从而使系统研制周期大大缩短,产品的性能价格比提高。本频率计采用流行的VHDL语言编程,并在设计平台实现了全部编程设计。该数字频率计的设计及实现具有良好的应用价值和推
广前景。下面对该频率计的软硬件设计进行详细论述。

1 测频原理
1.1 频率的定义
??? 频率定义为在单位时间内,记录被测信号的变化周期数(或脉冲个数)。若记录被测信号的的变化周期数(或脉冲个数)为Nx,则被测频率Fx的数值为Nx,单位为:Hz。
1.2 基本性能指标
??? 测频范围为:1 Hz~1 MHz;
??? 测频精度:相对误差为1 Hz。
1.3 频率计的功能分析
??? 由于数字频率计是一个需对数字信号进行测量和显示的系统,由一片CPLD完成各种测试功能(对被测信号进行计数等),最后将测量结果送数码管显示输出,因此测频需要设置控制电路、计数电路、锁存电路、译码电路,将这些电路设计好的各部分连接起来成为一个整体的电路写人CPLD芯片中,外围电路由显示电路、产生1 Hz的方波电路组成。
??? 控制电路是对计数电路、锁存电路和译码电路进行时序的控制。其控制要求为:先使计数电路在1 s内进行计数,接着在下一个1 s内锁存计数的结果,最后将锁存的数据进行译码和显示。在第一个测量显示周期结束后,控制电路将再次发出控制信号,先对功能电路清零,然后使系统开始第二个测量周期的工作。
??? 计数电路是对被测信号的频率进行计数的主功能电路。根据频率的定义和测频的基本原理,必须由一个脉宽为1 s的对被测信号脉冲计数的允许信号,其测量结果为被测信号在1 s内的脉冲个数,即被测信号的频率。由于被测信号的频率测频范围为1 Hz~1 MHz,因此用计数电路测量时,使用6个输出为4位的二进制数计数器。此计数器从个位开始到高位分别进行计数,使低位计数器的进位与高位计数器的被测信号输入端相连,从计数器电路的结构可知,该电路输出信号是由从低位到高位的多组4位二进制表示的十进制数组成的,用来分别表示被测信号的个、十、百、千等位的数值。
??? 锁存电路的主要功能是对计数器计数输出的数据进行锁定保存。即使在前级计数电路的计数器清零以后,锁存器依然有保存的数据存在,不会造成数据的丢失。锁存电路中的锁存器是对单个十进制计数器数据进行保存,因此锁存器的个数与前一级计数电路的十进制计数器的个数相同。
??? 译码电路的功能是将锁存器保存并将输出的4位二进制代码表示的十进制数进行译码转换,将其转换为能直接驱动数码管显示的十进制数字字符的输出信号。
??? 显示电路由共阴数码管电路构成。由于被测信号的频率测频范围为1 Hz~1 MHz,因此需要6个数码管对其进行显示。

2 频率计各模块设计
2.1 频率计原理框图
??? 此频率计的流程为:被测信号fin输入到CPLD芯片,在控制信号为1 Hz时,在CPLD芯片里完成对被测信号的测频、计数、锁存、译码,输出信号接数码管显示,如图1所示。




                          
                       
                          
                               
2.2 CPLD模块原理框图
??? 由于是一种集成度很高并且可进行用户定制的数字芯片,因此测试功能都用一块CPLD芯片来实现。在硬件电路设计时,可先将CPLD的内部电路分为控制、计数、锁存及译码四个电路模块分别进行设计,然后再将这四个电路模块有机地结合成一个能完成测频功能的整体系统。其CPLD模块原理框图如图2所示。




2.2.1 控制电路模块
??? 为实现控制功能,控制电路模块需输出三个信号:一是允许对被测信号计数的计数信号CNT-EN;二是将前1 s计数器的计数值存入锁存器的锁存信号LOAD;三是为下一个周期计数做准备的计数器清零信号RST-CNT。上述三个信号产生的顺序是:先提供计数信号,这种信号使计数器在1 s内计数,即周期为2 s的信号;接着是提供锁存信号,这种信号对计数值进行锁存,与计数信号反向;最后是发出清零信号,这种信号可对计数器清零。计数器清零结束后又可重新计数,计数进入第二个周期。控制电路模块实际上是一个控制器,它需要一个周期为1 s的信号作为产生并控制控制器输出的时基信号CLKK。控制电路模块中各信号符号及端口功能如图3所示。




2.2.2 计数电路模块
??? 计数电路模块将对被测信号进行十进制计数。它虽然由6个十进制计数器组成,但采用CPLD后,设计时只要先制作单个十进制计数器,然后再将多个结构相同的单个十进制计数器在CPLD内部进行连接就可组合成一个完整的计数电路模块。为实现其功能,十进制计数器需要设置三个输入端:即被测信号输入端CLK、计数器状态清零端RST和计数器工作使能端ENA。
??? 需要设置四个输出端,即OUTY[0],OUTY[1],OUTY[2]和OUTY[3],由这四个输出端输出4位二进制代码来表示十进制数。同时,还需要设置进位输出端COUNT。需要设置四个输出端,即OUTY[0],OUTY[1],OUTY[2]和OUTY[3],由这四个输出端输出4位二进制代码来表示十进制数。同时,还需要设置进位输出端COUNT。设置进位输出端COUNT是因为单个十进制计数器只能表示被测信号频率在个、十、百、千等位中的一个数位的数据。被测信号的频率是从个位计数器开始计数的,被测信号变化一次,个位计数器输出加1,当被测信号变化10次时,个位计数器输出为0,而十位计数器输出加1,当十位计数器计满10次时,十位计数器输出为0,而百位计数器输出加1,依次类推,直至千位、万位或更高位。上述十进制计数器都是满10进1,且进位时计数器清零并重新计数。计数电路模块中的单个计数器符号及端口功能如图4所示。




                          
                       
                          
                               
2.2.3 锁存电路模块
??? 锁存电路模块可使显示电路的工作稳定而可靠,避免计数电路模块清零时引起显示闪烁的现象。锁存电路模块是由多个锁存器组成。每个锁存器都是用来锁存与其单独相连的计数器的输出数据。由于每个锁存器锁存的都是4位二进制代码表示的十进制数,其功能完全相同,因此只需要设计制作一个锁存器就可连接组合成一个锁存电路模块。为实现其功能,锁存器需设置一个使锁存器工作的使能端LOAD,四个数据输入端即DIN[0],DIN[1],DIN[2]和DIN[3],并由它们输入计数器的计数值,还需设置四个锁存数据的输出端:即DOUT[0],DOUT[1],DOUT[2]和DOUT[3]。锁存电路模块中单个锁存器的符号及端口功能如图5所示。




2.2.4 译码电路模块
??? 译码电路模块可对表示十进制数的4位二进制代码进行编码,此模块可直接连接数码管驱动器,从而驱动数码管显示出相应的阿拉伯数字等字符。与锁存器电路模块设计一样,它也只需要先设计一个单个的译码器,然后通过连接组合就可构成译码电路模块,从而实现译码功能。为实现其功能,单个译码器需要设置4个数据输入端:即d[0],d[1],d[2]和d[3],并由这些端口输入锁存电路模块输出的4位二进制数据,需要设置7个输出端:即q[0],q[1],q[2],q[3],q[4],q[5]和q[6],它们分别连接7段数码管的7个显示输入端。译码电路模块中单个译码器符号及端口功能如图6所示。





3 软件设计
??? 根据前面的分析,采用VHDL语言设计一个简易的数字频率计,运用自顶向下的设计思想,将系统按功能逐层分割的层次化设计方法进行设计。在顶层对内部各功能块的连接关系和对外的接口关系进行了描述,而功能块的逻辑功能和具体实现形式则由下一层模块来描述。即控制、计数、锁存、译码四个实现数字频率计的核心模块,然后根据图2可以将上述四个模块VHDL源程序作为底层元件,使用QuartusⅡ开发工具,用该工具软件所支持的语言——硬件描述语言VHDL,以文本的方式进行编程输入。在编程时分别对控制、计数、锁存、译码等电路模块进行VHDL文本描述,使每个电路模块以及器件都以文本的形式出现,然后通过编译、波形分析、仿真、调试来完善每个器件的功能。单个器件制作完成后,然后将它们生成库文件,并产生相应的符号,最后用语言将各个己生成库文件的器件的各个端口连接在一起,从而形成了频率计主电路的软件结构。在连接器件时,采用图形输入方式,即在图形输入界面中调出先制作好的库文件器件符号,再将每个器件符号的各端口直接连线,从而构成频率计主电路图。频率计主电路图如图7所示。仿真波形如图8所示。



                          
                       
                          
                               




??? 在GW48系列SoPC/EDA实验箱上下载、调试后,被测信号为fin为十进制,实验箱上的显示值为Dsp(H)。Dsp(H)为十六进制,Dsp(D)为十进制,Clk=1 Hz,通过从实验箱上给出的频率值来验证,从表1可以看到显示结果。




??? 从表1可以看出所显示的结果与被测信号的频率一致。从信号发生器中输入测频范围内的任意频率也可验证。
??? 还可以改变控制信号即Clk的大小从而改变测量范围,当Clk=64 Hz时,理论值为:
???


??? 把实验箱上给出的频率值做被测频率,从表2可以看到显示结果。
??? 从表2可以看出所显示的结果转换后与被测信号的频率一致。





4 结语
??? 采用此种方法设计的简易数字频率计简单、直观,测频范围随时可根据用户需要进行调整,占用的CPLD芯片资源较少,不失为一个很好的数字频率计设计解决方案。由此可见,采用这种技术设计的数字电子系统,大大减少了电路板的尺寸,同时增加了系统可靠性和设计灵活性。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-3 17:02 , 耗时 0.091804 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表