基于FPGA的数字频率计设计报告

2024-10-02

基于FPGA的数字频率计设计报告(精选6篇)

1.基于FPGA的数字频率计设计报告 篇一

武汉理工大学《单片机原理与应用》课程设计说明书 前言

频率测量是电子学测量中最为基本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。

1.1频率计概述

数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号、方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。传统的频率计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路组成,产品不但体积大,运行速度慢而且测量低频信号不准确。本次采用单片机技术设计一种数字显示的频率计,测量准确度高,响应速度快,体积小等优点。

1.2频率计发展与应用

在我国,单片机已不是一个陌生的名词,它的出现是近代计算机技术的里程碑事件。单片机作为最为典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。单片机已成为电子系统的中最普遍的应用。单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。其中以AT89S52为内核的单片机系列目前在世界上生产量最大,派生产品最多,基本可以满足大多数用户的需要。

武汉理工大学《单片机原理与应用》课程设计说明书 系统总体设计

2.1测频的原理

测频的原理归结成一句话,就是“在单位时间内对被测信号进行计数”。被测信号,通过输入通道的放大器放大后,进入整形器加以整形变为矩形波,并送入主门的输入端。由晶体振荡器产生的基频,按十进制分频得出的分频脉冲,经过基选通门去触发主控电路,再通过主控电路以适当的编码逻辑便得到相应的控制指令,用以控制主门电路选通被测信号所产生的矩形波,至十进制计数电路进行直接计数和显示。若在一定的时间间隔T内累计周期性的重复变化次数N,则频率的表达式为式:

Nfx=

TN频率计数器严格地按照f=公式进行测频。由于数字测量的离散性,被测频率在计数

T器中所记进的脉冲数可有正一个或负一个脉冲的1量化误差,在不计其他误差影响的情况下,测量精度将为:

(fA)1N

应当指出,测量频率时所产生的误差是由N和T俩个参数所决定的,一方面是单位时间内计数脉冲个数越多时,精度越高,另一方面T越稳定时,精度越高。为了增加单位时间内计数脉冲的个数,一方面可在输入端将被测信号倍频,另一方面可增加T来满足,为了增加T的稳定度,只需提高晶体振荡器的稳定度和分频电路的可靠性就能达到。

上述表明,在频率测量时,被测信号频率越高,测量精度越高。

2.2总体思路

频率计是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对信号进行计数,计数值就是信号频率。本文介绍了一种基于单片机AT89S52 制作的频率计的设计方法,所制作的频率计测量比较高的频率采用外部十分频,测量较低频率值时采用单片机直接计数,不进行外部分频。该频率计实现10HZ~2MHZ的频率测量,而且可以实现量程自动切换功能,四位共阳极动态显示测量结果,可以测量正弦波、三角波及方波等各种波形的频率值。

2.3具体模块

根据上述系统分析,频率计系统设计共包括五大模块:单片机控制模块、电源模块、放大整形模块、分频模块及显示模块。各模块作用如下:

1、单片机控制模块:以AT89C51单片机为控制核心,来完成它待测信号的计数,译

武汉理工大学《单片机原理与应用》课程设计说明书

码,和显示以及对分频比的控制。利用其内部的定时/计数器完成待测信号周期/频率的测量。

2、电源模块:为整个系统提供合适又稳定的电源,主要为单片机、信号调理电路以及分频电路提供电源,电压要求稳定、噪声小及性价高的电源。

3、放大整形模块:放大电路是对待测信号的放大,降低对待测信号幅度的要求。整形电路是对一些不是方波的待测信号转化成方波信号,便于测量。

4、分频模块:考虑单片机外部计数,使用12 MHz时钟时,最大计数速率为500 kHz,因此需要外部分频。分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。

5、显示模块:显示电路采用四位共阳极数码管动态显示,为了加大数码管的亮度,使用4个PNP三极管进行驱动,便于观测。

综合以上频率计系统设计有单片机控制模块、电源模块、放大整形模块、分频模块及显示模块等组成,频率计的总体设计框图如图2所示。

信号放大整形分频电路微控制器AT89S52数码管显示驱动电路5V电源

图2.1 频率计总体设计框图

武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件设计

3.1 AT89C51主控制器模块

3.1.1 AT89C51的介绍

AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51引脚如下图所示。

图3.1 AT89C51引脚图

3.1.2 复位电路

复位电路是维持单片机最小系统运行的基本模块。复位电路如下图所示。

武汉理工大学《单片机原理与应用》课程设计说明书

图3.2 复位电路

高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。但是告诉对系统要求较高,而且功耗大,运行环境苛刻。考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。合适频率的晶振对于选频信号强度准确度都有好处,本次设计单片机实物具有11.0592M的晶振频率。AT89C51单片机最小系统如下图所示。

图3.3 单片机最小系统原理图

3.2 分频设计模块

分频电路用于扩展单片机频率测量范围,并实现单片机频率和周期测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。

本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号

武汉理工大学《单片机原理与应用》课程设计说明书

周期/频率的测量。单片机AT89C51内部具有2个16位定时计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12 MHz时钟时,最大计数速率为500 kHz),因此采用74LS161进行外部十分频使测频范围达到2MHz。为了测量提高精度,当被测信号频率值较低时,直接使用单片机计数器计数测得频率值;当被测信号频率值较高时采用外部十分频后再计数测得频率值。这两种情况使用74LS151进行通道选择,由单片机先简单测得被测信号是高频信号还是低频信号,然后根据信号频率值的高低进行通道的相应导通,继而测得相应频率值。

3.3 显示模块

显示模块由频率值显示电路和量程转换指示电路组成。频率值显示电路采用四位共阳极数码管动态显示频率计被测数值,使用三极管8550进行驱动,使数码管亮度变亮,便于观察测量。量程转换指示电路由红、黄、绿三个LED分别指示Hz、KHz及MHz档,使读数简单可观。

3.3.1 数码管介绍

常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。根据管脚资料,可以判断使用的是何种接口类型。

LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。在一定范围内,其正向电流与发光亮度成正比。由于常规的数码管起辉电流只有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入端在5 V电源或高于TTL高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。

3.3.2 频率值显示电路

数码管电路设计不加三极管驱动时,数码管显示数值看不清,不便于频率值的测量与调试。因此加入三极管8550进行驱动数码管。使用4位数码管进行频率值显示,如果选择共阴极数码管显示,则需要8个三极管进行驱动,而采用共阳极数码管则需要4个三极

武汉理工大学《单片机原理与应用》课程设计说明书

管驱动,为了节约成本,因此选用共阳极数码管进行动态显示,具体数码管设计电路如图所示。

图3.4 数码管显示电路

3.3.3 档位转换指示电路

根据设计要求,采用红、黄、绿三个LED分别指示Hz、KHz及MHz档,根据被测信号的频率值大小,可以自动切换量程单位,无需手动切换,便于测量和读数,简单方便。具体设计的档位转换LED指示电路如图所示。

图3.5 LED档位指示电路

武汉理工大学《单片机原理与应用》课程设计说明书 系统软件设计

系统软件设计主要采用模块化设计,叙述了各个模块的程序流程图,并介绍了软件Keil和Proteus的使用方法和调试仿真。

4.1 软件模块设计

系统软件设计采用模块化设计方法。整个系统由初始化模块,信号频率测量模块,自动量程转换和显示模块等模块组成。系统软件流程如图所示。

频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。

开始系统初始化频率测量频率是否超过1KHzY硬件十分频N计数器计数测频率值测量数据显示

图4.1 系统软件流程总图

首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动对待测信号的计数。计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时TR清0,停止计数。计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。判断该数的最高位,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。定时/计数器的工作被设置为定时器方式,定时/计数器的计数寄存器清0,在判断待测信号的上跳沿到来后,运行控制位TR

武汉理工大学《单片机原理与应用》课程设计说明书

置为1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位TR清0,停止计数。16位定时/计数器的最高计数值为65535,当待测信号的频率较低时,定时/计数器可以对被测信号直接计数,当被测信号的频率较高时,先由硬件十分频后再有定时/计数器对被测信号计数,加大测量的精度和范围。

4.2 应用软件简介

此设计需要在Keil软件平台上完成程序的调试,在Proteus软件平台上完成仿真显示。因此介绍如何使用Keil和Proteus进行软件的仿真。

4.2.1 Keil简介

Keil软件是目前最流行开发系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象[16]。

4.2.2 protues简介

protues是Labcenter公司出品的电路分析、实物仿真系统,而KEIL是目前世界上最好的51单片机汇编和C语言的集成开发环境。他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能[17]。Protues能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与keil和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。

武汉理工大学《单片机原理与应用》课程设计说明书 系统仿真

5.1 系统总电路图

根据课程设计任务书的要求,本次课设设计的系统总电路图如下图所示。

图5.1 系统总电路图

5.2 系统仿真结果

系统仿真结果图如下图所示,由图中可以看出,LCD显示的值为900Hz,LED显示的值为886Hz,在误差允许的范围内,二者近似相等,符合课设任务书要求。

图5.2 系统仿真结果图

武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件调试

6.1频率计的测试 如图6.1为频率计的测试实物拍摄图。其中函数信号发生器输出频率为1000Hz、幅值为5V的方波信号时,数字频率计测得的频率为996Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

图6.1 频率计测试的实物拍摄图

6.2 低频方波信号发生器的测试

图6.2 低频信号发生器测试的实物拍摄图

武汉理工大学《单片机原理与应用》课程设计说明书

如图6.2为低频信号发生器测试的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为400Hz,经过示波器检测得到幅值为4.88V,频率为396.2Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

6.3 低频方波信号发生器、数字频率计的综合测试

如图6.3为低频方波信号发生器检测频率计的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为300Hz,经过数字频率计检测得到频率的LCD显示值为297Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

图6.3 低频方波信号发生器检测频率计的实物拍摄图

武汉理工大学《单片机原理与应用》课程设计说明书 心得体会

本次设计的过程和结果都给了我很多感触。初次拿到课程设计的题目时,只是对频率有一定的理解,至于怎么设计,几乎没有什么想法。在同学的指导和讲解下,对频率计的介绍有了一定的了解。后来通过不断的学习和查阅资料,终于清楚的知道了频率计的基本情况和设计的方案有了一定的理解。通过对各种性能的比较和所学知识能实现的状况,对本次课程设计进行了设计,最后进行的是课设报告的撰写。

通过本次设计,让我学会了从系统的高度来考虑设计的方方面面,对电路的设计和研究有了更深刻的体会;让我了解到软件的设计是建立在对硬件了解的基础上的,特别是对单片机的功能,引脚定义和内部结构要有较为详细的了解,此外对电路板中所用到的各个芯片的引脚和功能,也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误,养成为程序添加注释和说明的好习惯,以便自己的修改和阅读者轻松的了解程序的各部分及整体的功能。

武汉理工大学《单片机原理与应用》课程设计说明书

参考文献

[1]李华.单片机实用接口技术[M].航空航天大学出版社.2006.[2]张鹏.王雪梅.单片机原理与应用实例教程[M].海军出版社.2007.[3]赫建国等.单片机在电子电路设计中的应用[M].清华大学出版社.2005.[4]康华光.电子技术基础(模拟部分)[M].高等教育出版社.1998. [5]吴清平.单片机原理与应用实例教程[M].海军出版社.2008.武汉理工大学《单片机原理与应用》课程设计说明书

#include #define uint unsigned int #define uchar unsigned char signed long count=0;int i=0, x=0;sbit RS=P1^0;sbit RW=P1^1;sbit E=P2^5;sbit dula=P2^6;sbit wela=P2^7;unsigned int shu[]={0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39};//数字的ASCII码放在数组中

uchar code table[]=“made by Li Houmin”;uchar num;

void delay(int count){ int p;

//延时

while(count--)for(p=0;p<110;p++);}

void write_com(unsigned int n){

RS=0;P0=n;delay(5);

//写指令

E=1;delay(5);

武汉理工大学《单片机原理与应用》课程设计说明书

E=0;}

void write_data(unsigned char t){ RS=1;P0=t;delay(5);

//写数据

E=1;delay(5);E=0;}

void time1_int(void)interrupt 3 { TH1=TL1=0;TR1=1;x++;}

void time0_int(void)interrupt 1 { TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;i++;

if(i==20){ i=0;//1s时间已到

武汉理工大学《单片机原理与应用》课程设计说明书

TR1=0;//关闭计数器1 count=65536*x+256*TH1+TL1;x=0;//重新装初值 //重新启动计数器器1 TH1=TL1=0;TR1=1;} }

void show(){

write_com(0x85);write_data(shu[count/100000]);delay(5);

//在第一行第五列显示十万位

write_com(0x86);write_data(shu[(count/10000)%10]);delay(5);write_com(0x87);write_data(shu[(count/1000)%10]);delay(5);write_com(0x88);write_data(shu[(count/100)%10]);delay(5);write_com(0x89);write_data(shu[(count/10)%10]);delay(5);write_com(0x8a);write_data(shu[count%10]);delay(5);

//显示万位 //显示千位 //显示百位

//显示十位

//显示个位

write_com(0x83);write_data(0x66);delay(5);//显示频率表示的字符f write_com(0x84);write_data(0x3d);delay(5);//显示字符= write_com(0x8b);write_data(0x48);delay(5);//显示字母H write_com(0x8c);write_data(0x7a);delay(5);//显示字母z write_com(0x80+0x40);

}

void main()

//第二行显示

for(num=0;num<17;num++){ write_data(table[num]);delay(5);}

武汉理工大学《单片机原理与应用》课程设计说明书

{ TMOD=0x51;

//T1计数、T2定时,且都工作在方式1 TH1=0x00;TL1=0x00;TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;EA=1;

ET0=1;ET1=1;

TR0=1;TR1=1;

dula=0;wela=0;RW=0;E=0;write_com(0x01);write_com(0x38);write_com(0x0c);write_com(0x06);while(1){ show();

delay(5);} }

//开总中断

//中断允许

//启动定时器

//显示清零,数据指针清零

//设置16X2显示5X7点阵,8位数据口

//设置开显示,显示光标且闪烁

//写一个字符后地址指针加1

2.基于FPGA的数字频率计设计报告 篇二

关键词:FPGA,频率计,VHDL,模块设计,元件例化

0 引言

频率计是根据其应用来设计的。频率计数器最常见的应用是确定发射机和接收机的特性。发射机的频率必须进行检验和校准, 才能符合有关规章制度的要求。频率计数器能对输出频率和一些关键的内部频率点 (如本振) 进行测量, 查明无线电发射时候是否满足技术指标。

频率计数器的另一些应用包括计算机领域, 在此领域中的数据通信、微处理器和显示器中都使用了高性能时钟。对性能要求不高的应用领域包括对机电产品进行测量。本设计采用FPGA作为控制核心, 利用直接测量法对被测信号的频率进行测量显示。

1 设计要求

1) 设计4位十进制数字显示的频率计, 其频率测量范围为10k—9999k Hz;

2) 要求量程能够自动转换;

3) 当输入的信号小于10k Hz时, 输出显示全0;当输入的信号大于9999k Hz时, 输出显示全F。

2 设计原理

本设计利用直接测量法进行测量计算, 用一个频率稳定度高的频率源作为基准时钟, 对比测量其他信号的频率, 也就是周期性的被测信号在单位时间内变化的次数。

计数器是严格按照f=N/T的定义进行测频, 其对应的测频原理方框图如图1所示。工作时间波形如图2所示。

频率计的系统主要由被测信号、计数器电路、锁存器电路、时分复用、译码显示、时钟输入和分频电路组成

2.1 整体设计思路

本设计以频率为20MHz的晶振作为主时钟, 在设计中, 需要用到的信号有频率为5Hz的闸门信号, 25Hz的按键消抖延时信号以及200Hz的数码管动态显示扫描信号;这三种信号由分频器产生。分频器产生的5Hz频率的信号传输到计数器, 计数器对闸门信号进行分析, 在高电平期间计数器对被测信号的周期进行计数, 当闸门信号为低电平时停止计数, 将记录的数据传输到锁存器。锁存器对数据锁存后, 计数器即可清零, 为下一次计数做好准备。锁存器再将本次记录的数据传输到显示模块, 显示模块对待显示数据进行译码后输出到数码管进行显示。计数器在正常工作状态下, 不断记录新数据, 最终传输到显示模块, 使频率计实时更新数据。现将每个模块的设计原理介绍如下。

2.2 计数器的设计

计数器的功能主要是在基准时间内对被测信号的周期进行计数如图3所示。

其中enable是使能信号, 高电平有效。cp3是闸门信号;input是被测信号;reset是复位信号, 低电平有效;play0~play3是4位BCD显示输出, 用于显示0~9的数值;decimal是小数点输出位。

使能信号enable由外部按键控制, 当为高电平时计数器开始对被测信号进行测量;复位信号reset同样由外部按键控制, 当输入低电平时系统复位;闸门信号cp3由经硬件描述语言编写的分频器对外部20M晶振进行分频产生, cp3是周期为0.2s的方波信号;计数器正常工作时, 当检测到外部有被测信号input输入时启动计数功能;在闸门信号cp3的高电平时段内即0.1s对被测信号计数。计数器内部含有数据存储单元play0~play3, 将单位时间内检测到的被测信号频率进行记录保存, 待传入显示模块。除了以上信号外, 计数模块还包含两个溢出标志信号overflow和low, 当被测信号的频率小于10k Hz或大于9999k Hz时, 频率计显示全“0”或全“F”。

2.3 锁存器的设计

该部分电路用于对计数器的数据进行锁存, 保证计数模块的数值能正确的输出进行显示。本模块内部包含一个进程语句, 敏感信号为闸门信号cp3和复位信号reset。当语句检测到闸门信号cp3出现下降沿时, 锁存器将由计数器传输过来的信号进行锁存, 从而释放计数器, 使计数器能够进行下一轮的计数, 实现数据的实时更新。锁存器的方块图如图4所示。

2.4 分频器的设计

该模块中输入端口cp_20m为20MHz外部晶振输入端, 分频器利用硬件描述语言对晶振信号进行分频, 最终输出3个不同频率的信号, 即cp1、cp2和cp3。在进行硬件描述时, 先对晶振的20MHz信号进行50000分频产生内部信号cp (频率为400Hz的信号) 。信号cp1为cp的2分频输出频率为200Hz用于动态扫描显示的时基信号;信号cp2为cp1的8分频输出频率为25Hz, 用于按键的消抖;信号cp3为cp1的40分频输出频率为5Hz, 即形成一个0.1S的闸门时间, 做为计数器的闸门信号等。分频器方块图如图5所示。

2.5 显示电路的设计

该模块是描述动态扫描数码管显示代码。其中cp1是一个200Hz的扫描频率。p0, p1, p2, p3是从锁存器传输过来的4个待显示十进制数, 信号show为送入到数码管的输出字形码信号, sel为数码管的位选信号。low和overflow为两个溢出状态标志信号。在代码中利用cp1的上升沿触发进程语句, 进程语句中先判断位选信号该显示哪一位;例如显示第一位时, 对位选信号赋值sel<=“0001”, 然后对第一位数据p0进行译码, 输出到数码管的字形端进行显示, 以此类推, 每5ms (cp1为200Hz) 显示一位数据, 四位数据循环显示使数码管稳定显示数据。

2.6 顶层文件的设计

顶层文件的设计可以先用原理图输入法, 对各个模块进行正确连线, 待调试无误后, 再根据原理图输入法, 采用元件例化的方法对顶层文件进行描述。顶层原理图如图6所示。

3 调试技巧

在调试过程中以各个模块为单位, 编好代码后先进性波形图仿真, 对各个模块的波形图进行分析, 如存在问题及时对代码进行分析修改;若波形图不存在问题再进行整体电路的描述设计。若直接进行整体设计再分析的话, 很难判断错误出现的位置, 导致设计效率的降低。另外在对计数模块进行波形仿真时, 建议先将起初的50000分频适当修改为500分频, 并在设置被测信号的频率时也相应的降低频率。若不进行修改, 在进行波形仿真时, 软件要仿真运算很长时间, 同样会降低效率。当对计数模块的波形分析无误后再改回原代码的50000分频既可。

4 硬件配置

本设计的硬件测试是基于GW48系列SOPC/EDA实验开发系统现代DSP实验开发系统, 该设备的显示模块采用动态扫描时, 其数码管的硬件引脚配置如图7所示。

数码管的字形码分别对应管脚:a:173;b:169;c:168;d:167;e:166;f:165;g:164;h:163四位数码管的位选端分别对应管脚:个位:162;十位:161;百位:160;千位:159。

参考文献

[1]谭会生.EDA技术及应用实践[M].2版.湖南大学出版社, 2010.

[2]潘松, 黄继业.EDA技术实用教程[M]..3版.科学出版社, 2006.

3.基于FPGA的数字频率计设计报告 篇三

关键词:FPGA;数字秒表;模块化设计;VHDL

数字集成电路作为当今信息时代的基石,不仅在信息处理、工业控制等生产领域得到普及应用,并且在人们的日常生活中也是随处可见,极大的改变了人们的生活方式。面对如此巨大的市场,要求数字集成电路的设计周期尽可能短、实验成本尽可能低,最好能在实验室直接验证设计的准确性和可行性,因而出现了现场可编程逻辑门阵列FPGA。对于芯片设计而言,FPGA的易用性不仅使得设计更加简单、快捷,并且节省了反复流片验证的巨额成本。对于某些小批量应用的场合,甚至可以直接利用FPGA实现,无需再去订制专门的数字芯片。

文中着重介绍了一种基于FPGA利用VHDL硬件描述语言的数字秒表设计方法,在设计过程中使用基于VHDL的EDA工具ModelSim对各个模块仿真验证,并给出了完整的源程序和仿真结果。

1 总体功能结构设计

一个完整的数字秒表应具有计时、相应的控制以及计时结果显示功能,总体的功能结构如图1所示。黑色线框内是计数模块、使能转化模块和显示译码模块,左边是输入控制信号,右边是显示计时结果的数码显示管,用六位BCD七段数码管显示读数,显示格式如图2,计时范围为:1小时,精度为0.01s。

输入时钟信号由32MHz的石英晶振提供,考虑到设计指标要求秒表精度为0.01秒,计数脉冲的时钟输入就应该是频率为100Hz的脉冲,所以先要设计一个320000分频器,分频器的输出可作计数器的输入;其次计数模块设计应综合考虑秒表的计时范围(1小时)和显示输出(6位输出),6位输出中有两位是六进制输出,其余四位是十进制输出,所以可通过设计4个模10计数器和2个模6计数器来实现,其中较低位的进位输出就是高位的计数输入端。

控制模块应包括开始计时/停止计时、复位两个按钮,即电路设计经常用到的使能端和清零端,这两个控制端口直接接到计数器的清零和史能端即可实现复位、开始计时/停止计时;但是外围使能输入需要经过使能转换电路后,才可变为计数器可用的使能控制信号。因此在输入使能信号和计数器使能输入之间需设计一个信号转换模块。

显示计数结果的模块实现较为简单,只需将六位计数结果通过七段译码电路接到输出即可点亮数码管,无需时序控制,直接用组合逻辑电路就可以实现。数码管显示可以采用扫描显示,用一个频率1KHz的信号扫描一个多路选择器,实现对六位已经锁存的计数结果的扫描输出。

2 各功能模块设计

2.1 分频器模块

分频器的功能是提供标准时钟控制信号以精确控制计数器的开闭,提供的标准信号是32MHz,根据设计精度0.01s的要求,输出信号是100Hz,所以该分频器实现的功能是320000分频,具体的VHDL源程序:

process(clk)

begin

if(clk'event and clk='1')then

if (q=159999)then

q<=0;

count_temp<=not count_temp;

else

q<=q+1;

end if;

end if;

end process;

2.2 计数模块

该计数器要实现最大计数值为59分59秒99的计数,而且为了数码管显示方便,该模块必须通过计数器的级联来实现,即首先分别设计一个模6计数器和一个模10计数器,然后将他们级联,其中调用4次模10计数器、2次模6计数器,这样可以比直接设计模100 的计数器和模60的计数器节省资源。级联时低位的计数进位输出接高位的计数输入端,如图3所示。再考虑到控制模块的要求,每个计数器有三个输入端:时钟、使能和清零,两个输出端:计数输出和进位输出,采用同步使能异步清零的设计方法,每个计数器的使能和清零端都与外围的使能和清零端相联。

该模块的源程序以及ModelSim仿真输出结果如下:

模6计数器的VHDL源程序如下:

process(clear,clk)

begin

if (clear='1') then

tmp<="0000";

carryout<='0';

elsif(clk'event and clk='1') then

if (rst='0') then

if (tmp="0101") then

carryout<='1';

tmp<="0000";

else

tmp<=tmp+1;

carryout<='0';

end if;

end if;

end if;

模10计数器的VHDL源程序与模6计数器类似,为节省篇幅,不再给出。

2.3 使能信号转换模块

数字秒表输入的开始和停止信号是单个脉冲信号,而计数器要持续计数所需的使能信号是持续的高电平,所以需要通过使能控制电路实现使能信号的转换。该模块的VHDL源程序以及ModelSim仿真输出结果如下:

该模块源程序:

process(enablein)

begin

if(enablein'event and enablein='1')then

temp<= not temp;

end if ;

end process;

2.4 译码显示模块

由上面的设计可知,计数器输出为二进制码,不能直接点亮数码管,要想将计数结果通过数码管显示必须再设计一个七段译码电路,以便将计数结果输出。通过分析可知该译码器是一个4输入,7输出元件,其真值表如表1所示:

根据以上真值表可写出译码电路VHDL源程序如下:

process(datainput)

begin

case datainput is

when "0000"=>dataoutput<="0000010";

when "0001"=>dataoutput<="1001111";

when "0010"=>dataoutput<="0010001";

when "0011"=>dataoutput<="0000101";

when "0100"=>dataoutput<="1001100";

when "0101"=>dataoutput<="0100100";

when "0110"=>dataoutput<="0100000";

when "0111"=>dataoutput<="0001111";

when "1000"=>dataoutput<="0000000";

when "1001"=>dataoutput<="0000100";

when others=>dataoutput<="1111111";

end case;

end process;

3 功能验证以及下载实现

完成以上各个子模块的设计后,该数字秒表的模块设计就基本完成了,剩下的工作就是通过一个顶层文件将各个子模块连接起来。在顶层文件中可以将以上各个子模块看作一个个黑匣子,只将其输入输出端对应相连就可以了。下面是该顶层文件的VHDL源程序:

nlc202309021645

architecture Behavioral of topfile is

signal clk:std_logic:='0';

signal enableout:std_logic:='0';

signal data0,data1,data2,

data3,data4,data5:std_logic_vector(3

downto 0):="0000";

component abc

port(clk:in std_logic;

dout:out std_logic);

end component;

component enable

port(enablein:in std_logic;

enableout:out std_logic);

end component;

component highlevel

port(rst,clk,clear:in std_logic;

output1,output2,output3,

output4,output5,output6:out

std_logic_vector(3 downto 0);

carryout:out std_logic);

end component;

component yima

port(datainput:in std_logic_vector(3 downto 0);

dataoutput: out std_logic_vector(6 downto 0));

end component;

begin

u0:abc port map(clkin,clk);

u1:enable port map(enablein,enableout);

u2:highlevel port map(enableout,clk,clear,data0,data1,data2,data3,data4,data5);

u3:yima port map(data0,dataout0);

u4:yima port map(data1,dataout1);

u5:yima port map(data2,dataout2);

u6:yima port map(data3,dataout3);

u7:yima port map(data4,dataout4);

u8:yima port map(data5,dataout5);

end Behavioral;

由于各個子模块都已经经过验证无误,并且顶层文件中不涉及复杂的时序关系,相当于只是将各个模块用导线连接起来,只要各个端口的连接对应正确即可,所以不需写专门的test bench进行验证。完成以上设计后,即可进行逻辑综合,综合无误后进行管脚适配,生成.bit文件然后下载到实验板上测试。经过反复多次测试,以上设计完全满足了预期的设计指标,开始/停止按键和清零按键都能准确的控制秒表的运行,七段显示数码管也能够准确的显示计时结果。通过与标准秒表对比,该设计的计时误差在0.03s以内,而这其中也包括实验板上晶振由于长期使用所带来的误差。

4 结束语

本文所介绍数字秒表设计方法,采用了当下最流行的EDA设计手段。在Xinlinx FPGA开发环境下,采用至上而下的模块化设计方法,使得系统开发速度快、成本低、系统性能大幅度提升。通过实验验证,本文设计的数字秒表计时准确、性能稳定,可以很容易嵌入其他复杂的数字系统,充当计时模块。

利用EDA设计工具,结合基于FPGA的可编程实验板,轻松实现电子芯片的设计,现场观察实验结果,大大缩短了产品的设计周期和调试周期,提高了设计的可靠性和成功率,体现了逻辑器件在数字设计中优越性。

参考文献

[1] 李平. 电子设计自动化技术[M],电子科技大学出版社,2008,198-207.

[2] 瞿殿棠,田万民,厉光伟. VHDL语言在数字设计中的应用研究[J],信息技术研究与应用,2004(3); 44-45 .

[3] 陈耀和. VHDL语言设计技术[M],电子工业出版社,2004(3).

[4] 詹小杏,林浩泉。用CPLD器件设计数字秒表[J],大众科技,2004(10):2.

作者简介

王永维(1987-),男,山西省晋中市。硕士研究生,主要研究方向:半导体功率器件及智能功率集成电路。

收稿日期:2011-07-21

4.基于FPGA的数字频率计设计报告 篇四

摘要:介绍基于FPGA芯片实现的机载合成孔径雷达数字信号处理机接口板卡。该接口板卡负责将输入数据缓存和信息格式转换,然后打包成处理机需要的数据帧发送到信号处理机,并具有PCI接口功能和在线自检测功能。着重介绍了系统的硬件结构设计和软件实现功能,给出了选用的主要芯片的型号。该接口板已应用于某合成孔径雷达数字信号处理机中,整机使用证明该系统工作稳定,实现了设计中要求的功能。

关键词:数据接口LINK口现场可编程门阵列PCI接口

机载合成孔径雷达(SyntheticApertureRadar,简称SAR)是以“合成孔径”原理和脉冲压缩技术为理论基础,以高速数字处理和精确运动补偿为前提条件的高分辨率成像雷达。对于机载合成孔径雷达成像处理来讲,仅有目标的原始回波数据是不够的,还必须获得雷达和载机的参数。另外,为了满足信号处理机实时处理的要求,要求输入到处理机的各种数据符合处理机成像处理的数据格式。这样,处理机在获得数据帧后就可以直接进行成像处理而不必再有格式转换的开销。但是?目标的原始回波数据与雷达和载机的参数数据来自两个不同的设备?它们的数据格式和时序都是由各自的设备确定的,因此信号处理机便面临着与外围设备接口的问题。

1系统功能

在本机载合成孔径雷达系统中,进出接口板卡的数据流包括数据采集设备输入的原始回波数据、监控设备输入的雷达和载机的参数数据以及输出到处理机的成像处理数据。它们有如下特点:①输入数据流的`速度和时序不匹配。数据采集设备和监控设备是两个异步的系统,它们都有自己的定时控制电路,以自己的速度传输数据。②输入输出数据流的信息格式不匹配。数据采集设备输入的原始回波数据和监控设备输入的雷达和载机的参数数据采用FPDP协议传输,接口板卡输出到处理机的数据采用Link口传输协议进行传输。

考虑到进出接口板卡数据流的特点和雷达系统对接口板卡的控制要求,接口板卡要具有如下功能:

(1)设置数据的缓冲、存储逻辑,以适应不同设备之间的速度差异和时序差异;

(2)进行信息格式转换,将目标的原始回波数据与雷达和载机的参数数据打包,插入相应的帧信息形成处理机要求的数据帧,并控制数据流的走向;

(3)实现PCI接口,能够产生PCI中断;

(4)具有在线自检测功能。

2系统硬件结构设计

为了简化系统硬件设计,增加系统的灵活性,采用FPGA芯片实现系统要求的数据格式转换、打包、分发和逻辑控制功能。数据缓存采用硬件FIFO和软件双口RAM。PCI接口采用专用接口芯片实现。硬件FIFO和软件双口RAM的写时钟分别由各自的FPDP接口提供,其它时钟由接口板上的晶振提供。系统的硬件结构框图如图1所示。

2.1输入数据流的缓存方案

为了适应处理机与数据采集设备和监控设备之间的速度差异,解决速度不匹配问题,需要将输入的数据先进行缓存。数据采集设备送入的原始回波数据每帧的数据量比较大,接口板卡上设计了硬件FIFO作为原始回波数据的缓存器,FIFO的读写使能由FPGA编程控制,写时钟由FPDP接口提供,读时钟由接口板卡上的晶振提供。数据采集设备和监控设备是两个异步的系统,雷达参数数据流和原始回波数据流之间没有同步关系,一帧雷达参数数据对应几帧原始回波数据,因此设计中用双口RAM作为雷达参数数据的缓存器。另外,每帧雷达参数的数据量比较小,本设计在FPGA内利用参数化的模块库(LibraryofParameterizedModules,简称LPM)中的lpm_ram_dp编程实现双口RAM,简化了硬件设计。

2.2PCI接口设计?

实现PCI接口的方案一般有两种:采用可编程逻辑器件和采用专用总线接口器件。采用可编程逻辑器件实现PCI接口的最大好处是比较灵活,缺点是设计难度较高,开发周期较长。采用专用接口器件实现虽然没有采用可编程逻辑器件实现那么灵活,但能够有效地降低接口设计的难度,缩短开发时间。本系统采用专用接口器件PCI9052实现接口板卡的PCI接口。

接口板卡的硬件资源为映射到FPGA内部寄存器的I/O映射空间和一个中断源。PCI9052提供5个局部地址空间,选用Space0作为接口板的地址空间,分配16个8位地址。同时设置相应的初始化,PCI配置寄存器中的PCIBAR2设置为0XFFFFFFF0,向系统请求分配内存的数量为16。设置局部地址空间的范围为0X01000000~0X01000010。PCI9052提供两个局部中断源,选用LINTi1。FPGA提供电平触发中断信号,因此PCI9052的中断触发模式设置为电平触发。利用PCI9052的局部设备片选信号CS0#作为FPGA的片选信号。CS0#片选信号的起始地址和地址范围由CS0BaseAddress寄存器的设置值0x01000011决定,即起始地址为1000000h,地址范围为20h。PCI9052寄存器的初始值由串行EEPROM提供,在PCI9052加电后读取。EEPROM必须采用支持连读功能的芯片,本设计中采用FairChildSemiconductor公司的93CS4

6N。

2.3FPGA的配置设计?

本设计为FPGA提供了两种配置方式:主动串行配置和被动串行配置。

主动串行配置由EPC2向FPGA器件输入串行位流的配置数据。在该配置方式下,一直由FPGA控制着配置过程。在加电过程中,FPGA检测到nCONFIG由低到高的跳变时,就开始准备配置。FPGA将CONF_DONE拉低,驱动EPC2的nCS为低,而nSTATUS引脚释放并由上拉电阻拉至高电平使能EPC2。此后,EPC2就用其内部振荡器的时钟将数据串行地从EPC2?DATA?输送到FPGA?DATA0?。当配置完成后,FPGA释放CONF_DONE,将EPC2与系统隔离。

被动串行配置由编程硬件通过ByteBlaster配置。ByteBlaster产生一个由低到高的跳变送到nCONFIG引脚,然后由编程硬件将配置数据送到DATA0引脚,该数据锁存至CONF_DONE变为高电平为止。当CONF_DONE变成高电平时,用DCLK的10个周期初始化FPGA,器件的初始化由下载电缆自动执行。

为了两种配置方式共存,设计中用拨码开关将EPC2与FPGA和ByteBlaster的下载电缆插座隔离。当用被动串行方式配置时,拨码开关断开,由上位机通过ByteBlaster下载电缆加载FPGA。当用主动串行方式配置时,拨码开关接通,由EPC2加载FPGA。电路图如图2所示。

2.4在线自检测功能

板卡设计时还应考虑便于日常调试维护及故障检测定位。板卡在硬件上针对各电源信号和关键的状态信号设计了信号灯,一旦发现有误,便可给出信号触发该电路板上的信号灯告警,定位系统故障。另外在电路设计时应留出测试孔,以增加电路的可测性。

3系统的软件设计

系统上电后,PCI上电复位,FIFO清零。上位机向相应寄存器写入初始值,完成寄存器设置。当系统启动信号有效时,接口板开始接收数据,进行数据打包和分发,直到上位机向接口板卡写停止命令为止。图3给出了系统工作流程图。

3.1数据的打包和流向控制

雷达参数数据和原始回波数据的数据源是异步的,不能保证两者确切的对应关系,接口板卡利用对缓存原始回波数据FIFO和缓存雷达参数数据双口RAM的读写控制,调整雷达参数数据和原始回波数据对应关系,将两种数据源按处理机要求的输入数据格式组成正确的数据帧。雷达参数数据和原始回波数据打包后的数据帧格式如下:

在程序中,设计了雷达参数发送控制计数器Para_counter和回波数据发送控制计数器Data_counter。系统工作后,每次检测到原始回波数据流的数据有效信号data_valid的上升沿(标记收到完整的一帧回波数据)时,启动雷达参数发送控制计数器开始计数,当计数到设定的值(本设计中为25)时停止计数并启动回波数据发送控制计数器开始计数,计数到设定的值(本设计中为5000)时停止计数。当检测到原始回波数据流的数据有效信号data_valid的下降沿(标记开始接收新的一帧回波数据)时,两个计数器都清零。根据计数器的计数值产生Link口选择信号?确定数据的流向。图4给出了数据流向的示意图。图5给出了基于MAXPLUSⅡ10.0的仿真结果,仿真显示正确地实现了数据打包和流向控制。

图3系统工作流程图

3.2Link口传输协议的实现

Link口的数据传输是在同步时钟线(LxCLK)与应答线(LxACK)相互握手的情况下同步传输的。一个传输字为32bit,Link口以4bit为单位进行传输。在LxCLK上升沿,发送端会发送一个新的4bit数据,在LxCLK的下降沿,接收方锁存数据线上的数据。8个4bit数据发送完毕后,如果接收方准备好接收下一个字,则将LxACK置1。发送方在每次发送新字的第一个4bit时对LxACK采样,如果LxACK为0,表明接收方没有准备好,则发送方保持LxCLK为高电平,且数据线上保持当前的4bit数据,直到接收方将LxACK置1,发送方才将LxCLK下拉,并继续发送新的数据。当发送方缓存为空时,表明没有数据需要发送,则LxCLK保持为低电平。接口板利用VHDL语言实现了Link口传输协议。下面给出了关键的程序片断:

ChangeStateMode?process?NibleCount?empty?LxACK?PresentState?empty?

begin

casePresentStateis

whenSendACK=>

ifLxACK='1'andempty='0'then

NextState<=Send?

elseNextState<=SendACK?

endif?

whenSend=>

ifNibleCount/=3or?NibleCount=3andempty='0'andLxAck='1'?then

NextState<=Send?

elseNextState<=SendACK?

endif?

endcase?

endprocesschangestatemode?

图5数据转发仿真时序较

4应用和结论

5.数字频率计设计 篇五

设计一简易数字频率计,其基本要求是:

1)测量频率范围1Hz~10Hz,量程分为4档,即×1,×10,×100,×1000。2)频率测量准确度fx2103.fx3)被测信号可以是下弦波、三角波和方波。4)显示方式为4位十进制数显示。5)使用EWB进行仿真。2.设计原理及方案

频率的定义是单位时间(1s)内周期信号的变化次数。若在一定时间间隔T内测得周期信号的重复变化次数为N,则其频率为

f=N/T 据此,设计方案框图如图1所示。

图1 数字频率计组成框图

其基本原理是,被测信号ux首先经整形电路变成计数器所要求的脉冲信号,频率与被测信号的频率fx相同。时钟电路产生时间基准信号,分频后控制计数与保持状态。当其高电平时,计数器计数;低电平时,计数器处于保持状态,数据送入锁存器进行锁存显示。然后对计数器清零,准备下一次计数。其波形逻辑关系图如图2所示。3.基本电路设计 1)整形电路

整形电路是将待测信号整形变成计数器所要求的脉冲信号。电路形式采用由555定时器所构成的施密特触发器,电路如图XXX所示。若待测信号为三角波,输入整形电路,设置分析为瞬态分析,启动电路,其输入、输出波形如图XXX所示。可见输出为方波,二者频率相同。

2)时钟产生电路

时钟信号是控制计数器计数的标准时间信号,其精度很大程度上决定了频率计的频率测量精度。当要求频率测量精度较高时,应使用晶体振荡器通过分频获得。在此频率计中,时钟信号采用555定时器构成的多谐振荡器电路,产生频率为1Kz的信号,然后再进行分频。多谐振荡器电路如图XXX所示。由555定时器构成多谐振荡器的周期计算公式为

XXXXXXXXXX 取XXXXXXXXXXXXXX,则得到振荡频率为1Kz的负脉冲,其振荡波形如图XXX所示。3)分频器电路

采用计数器构成分频电路,对1Kz的时钟脉冲进行分频,取得不同量程所需要的时间基准信号,实现量程控制。1Kz的时钟脉冲,对其进行3次10分频,每个10分频器的输出信号频率分别为100Hz,10Hz,1Hz三种时间基准信号。对应于以1Kz,100Hz,10Hz,1Hz的信号作为时间基准信号时,相应的量程为×1000,×100,×10,×1。

构成10分频带电路是采用十进制计数器74LS160实现的。具体电路及其输入、输出波形如图XXX所示。

(1)T触发器

T触发器电路是用来将分频带器输出阻抗的窄脉冲整形为方波,因为计数器需要用方波来控制其计数/保持状态的切换。整形后方波的频率为频器输出信号频率的一半,则对应于1Kz,100Kz,10Kz,1Hz的信号,T触发器输出信号的高电平持续时间分别为0.001s,0.01s,0.1s,1s。T触发器采用JK触发器7473为实现,其电路连接图及其输入、输出波形如图XXX所示。

(2)单稳触发器

单稳触发器用于产生一窄脉冲,以触发锁存器,使计数器在计数完毕后更新锁存器数值。单稳触发器电路采用555定时器实现,为了保证系统正常工作,单稳电路产生的脉冲宽度不能大于该量程分频带器输出信号的周期。例如,计数器的最大量程是×1000,对应分频带器输出的时间基准信号频率为1000Hz,周期是1ms。取单稳电路输出脉冲宽度TW=0.1ms。根据TW=1.1RC,取C=0.01Uf,则R=9.8KΩ,取标称什为10KΩ。单稳触发器输入信号是T触发器输出信号经Rd、Cd组成的微分器将方波变成尖脉冲后加到555定时器的触发器。电路图及输入、输出波形如图XXX所示。

(3)延迟反相器

延时反相器的功能是为了得到一个对计数器清零的信号。由于计数器清零是低电平有效,而且计数器清零必须在单稳触发信号之后,故延迟反相器是在上述单稳电路之后,再加一级单稳触发电路,且在其输出端加反相器输出。其输入、输出波形如图XXX所示。(4)计数器

计数器在T触发器输出信号的控制下,对经过整形的待测信号进行脉冲计数,所得结果乘以量程即为待测信号频率。

根据精度要求,采用4个十进制计数器级联,构成N=1000计数器。十进制计数器仍采用74LS160实现。其电路图如图XXX所示。其中计数器的清零信号由延迟反相器提供,控制信号由T触发器提供,计数器输出结果送入锁存器。

(5)锁存器和显示

计数器的结果进入锁存器锁存,4个七段数码管显示测试信号的频率。锁存器使用了两片8D集成触发器实现,其控制信号来自于延迟反相器,具体电路如图XXX所示。

(6)数字频率计的总体电路

图XXX是数字频率计的总体电路图。

4.测试

6.基于FPGA的频率计设计与实现 篇六

关键词:实验教学,频率测量,电路设计,FPGA,仿真

0 引言

频率计是实验室、计量室和科研、生产中最常用的测量仪器之一。在各高校数字系统设计课程中已将其列为工程实践环节的重要教学内容。本文介绍的频率计符合目前测量仪器的发展趋势,具有测量精确、自动化和数字化程度高、成本低、体积小及操作简单等特点。硬件电路已在自主研发的FPGA创新开发实验箱上实现。

1 总体方案设计

1.1 测量原理

根据信号频率设置频率计的量程,选择合适的时间基准信号,即闸门时间,然后在闸门时间内对被测量信号进行计数,计数结果即为被测信号的频率。频率计工作时序如图1所示。

从图中可知,当时间基准信号为高电平时,闸门打开,频率计开始对被测信号进行计数。闸门时间表达式为

undefined

式中,fB为时间基准信号的频率。

被测信号频率表达式为

undefined

将时间基准信号取反,并利用其上升沿将测量结果存入频率计的寄存器中。同时,还将时间基准信号低电平时间作为清零信号的有效时间。

1.2 主要技术性能指标

①频率测量范围:

1Hz~10MHz。

②量程:

四挡,1Hz~10kHz、10kHz~100kHz、100kHz~1MHz和1MHz~10MHz。

③量程转换方式:

自动。

④测量数据显示方式:

LED数码管,四位,共阳极,动态扫描。用数码管的小数点代表kHz计量单位。

⑤测量误差:

≤0.05%FSR(满量程)。

2 系统设计描述

2.1 电路结构

根据总体设计方案,将频率计划分成三个子系统和一个控制器。其中,测量子系统由计数器模块、寄存器模块组成;显示子系统由动态扫描译码电路模块、LED数码管组成;时钟子系统由时钟信号源模块、分频器模块组成;控制器由量程切换电路模块、时基电路模块组成。频率计电路结构如图2所示。时钟信号源模块可选用现成电路或单独设计。

2.2 工作原理

在图2中,时钟信号源产生频率很高的时钟信号,经过分频以后,得到频率为1Hz、10Hz、100Hz和1kHz四种时钟信号,这些信号作为时基电路输入信号CPx,其中1kHz信号还用于动态扫描译码控制信号。经时基电路再将CPx转换成时间基准信号TB,闸门时间TW分别为1s、0.1s、0.01s和0.001s。

测量开始,TW为1s,计数器对被测信号υi进行计数,如果计数超过规定值9999,产生溢出信号OFLW,在其作用下,量程转换电路输出信号SW状态发生变化,自动完成一次量程的换挡,同时将TW调整为0.1s,计数器重新计数。如果还有溢出信号,继续量程换挡,调整TW,直到不再有溢出信号为止。被测信号与时基信号的对应关系见表1。

TB还被用作寄存器的置数脉冲信号和计数器的清零信号。在闸门时间结束时,将计数器中的测量数据存入寄存器。测量数据直接从寄存器调出,因此LED数码管显示测量结果比较稳定。

*小数点代表kHz计量单位。

3 电路设计

3.1 计数器电路

计数器电路如图3所示。3片74160和1片74161采用串行进位方式连接,扩展成一个异步的9999进制加法计数器。计数器清零端CLRN与时基准电路输出端TB连接。TB为高电平时,即闸门时间,被测脉冲信号从FUN-CLK端输入,开始对其进行计数。当片(4)的输出Q16Q15Q14Q13=1010时,表示计数器已经计到第10000个脉冲,超过规定值9999,于是输出端OVERFLOW由低电平跳变为高电平,产生一个溢出信号。

3.2 量程转换电路

量程转换电路如图4所示。其中74160接成了一个同步四进制加法计数器,它的时钟输入端CLK与计数器输出端OVERFLOW(溢出)连接,在溢出信号作用下,量程转换电路输出端S1、S0依次输出00、01、10和11四个编码,实现自动换挡。

3.3 时基电路

时基电路如图5所示。其中74153接成一个4选1数据选择器,JK触发器接成了1/2分频器。输入端C0~C3分别接分频器输出的1Hz、10Hz、100Hz和1kHz时钟信号,S1、S0端与量程转换电路输出端连接。S1S0=00,表示量程的第一个档,此时,1Y=C0,即从1Y端输出频率为1Hz的时钟信号,再经过1/2分频后,从时间基准信号输出端TB得到频率为0.5Hz的时基信号,闸门时间TW=1/2T=1s。同理,S1S0=01、10、11时,分别表示量程的第二、三、四档,对应的闸门时间分别为0.1s、0.01s和0.001s。TB端与计数器清零端CLRN连接,控制计数器的工作状态。LD-CLK端输出作为同步寄存器置数脉冲信号(上升沿有效)。

3.4 寄存器电路

两片74273组成一个16位同步寄存器,其数据输入端与计数器数据输出端连接,数据输出与动态扫描译码电路中的显示译码电路连接,时钟输入端CLK与时基电路LD-CLK端连接。在LD-CLK信号的上升沿,将计数器中的测量数据存入寄存器。

3.5 动态扫描译码电路

动态扫描译码电路由显示译码电路、扫描状态编码电路、位选择电路和小数点位置控制电路组成,其功能成是对寄存器中的数据进行译码、动态扫描显示及控制小数点显示位置。

3.6 分频器

时钟信号源输出的时钟信号频率很高,经过分频器将其分频为1Hz、10Hz、100Hz和1kHz时钟信号。这四种信号再经过1/2分频,得到时间基准信号,其中1kHz时钟信号还用于动态扫描译码电路。

频率计电路如图6所示。

4 结束语

频率计仿真结果如图7所示。从图中可以看出,当FUN-CLK端输入的脉冲信号频率为9.876kHz,测量结果也是9.876kHz;LED1~LED4循环为1,依次驱动四个数码管(从高位到低位排列)的阳极,显示4位测量数据,而LED1为1时,DP为0,点亮最高位数码管的小数点。电路下载到FPGA创新开发实验教学箱后,经过实际测试,整机技术性能指标已满足设计要求。本实验教学范例具有实际意义和推广价值。

参考文献

[1]刘延飞,李棋,郭锁利,等.开发EDA综合实验平台提高学生工程创新能力[J].实验研究与探索,2007,26(8):63-64.

[2]曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计[M].北京:清华大学出版社,2006.

[3]张亦华,延明,肖冰.数字逻辑设计实验与EDA工具[M].北京:北京邮电大学出版社,2003.

上一篇:浅谈新课标下的小学科学课评价方法下一篇:雅思写作句型表达:如何表达时间