数字频率计的设计.docx

上传人:b****5 文档编号:29514915 上传时间:2023-07-24 格式:DOCX 页数:21 大小:140.49KB
下载 相关 举报
数字频率计的设计.docx_第1页
第1页 / 共21页
数字频率计的设计.docx_第2页
第2页 / 共21页
数字频率计的设计.docx_第3页
第3页 / 共21页
数字频率计的设计.docx_第4页
第4页 / 共21页
数字频率计的设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数字频率计的设计.docx

《数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《数字频率计的设计.docx(21页珍藏版)》请在冰豆网上搜索。

数字频率计的设计.docx

数字频率计的设计

1.绪论

引言

电子设计自动化EDA技术,是一种以运算机为大体工作平台,利用运算机图形学、拓扑逻辑学、计算数学以至人工智能学等多种运算机应用学科的最新功效而开发出来的一整套软件工具。

现代EDA技术是采纳高级语言描述,具有系统级仿真和综合能力。

它要紧采纳并行工程和自顶向下的设计方式,从系统设计入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错,并用VHDL、VerilogHDL等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级能够是印刷电路板或专用集成电路ASIC。

VHDL即超高速集成电路硬件描述语言,要紧用于描述数字系统的结构、行为、功能和接口。

课程设计目的

1)加深对芯片EPM7128S功能的明白得

2)通过对频率计的设计加深对EDA课程的明白得

3)通过对数字频率计的设计了解简易集成电路的设计思路

4)熟悉MAX+PLUS

仿真软件的工作方式及应用技术

课题设计内容

本次课程设计的内容是独立完成一个数字频率计的设计,采纳MAX+PLUSII仿真设计软件完成数字频率计数器电路的设计及仿真调试,在微机上实现数字频率计的设计。

一、对1Hz~250KHz的脉冲进行频率测量

二、要求在数码管上显示所测的频率结果

3、功能键

(1)启动

(2)停止

 

2.数字频率计的功能及工作原理

数字频率计功能概述

数字频率计数器的大体功能是测量一个频率稳固度高的频率源的频率。

通常情形下计算每秒内待测信号的脉冲个数,现在咱们称闸门时刻为1秒。

闸门时刻也能够大于或小于一秒。

闸门时刻越长,取得的频率值就越准确,但闸门时刻越长那么没测一次频率的距离就越长。

闸门时刻越短,测的频率值刷新就越快,但测得的频率精度就受阻碍。

本数字频率计是用数字显示被测信号频率的仪器,被测信号能够是正弦波,方波或其它周期性转变的信号。

大体工作原理及设计思路

依照频率计设计的设计要求,咱们可将整个电路系统划分为几个大体模块,各模块均有几种不同的设计方案。

频率测量模块

直接测频法:

把被测频率信号经脉冲整形电路处置后加到闸门的一个出入端,只有在闸门开通时刻T(以秒计)内,被计数的脉冲送到十进制计数器进行计数;设计数器的值为N,那么可取得被测信号频率为f=N/T,经分析,本测量在低频率的相对测量误差较大,即在低频段不能知足本设计的要求。

组合测频法:

是指在高频是采纳直接测频法,低频是采纳直接测量周期法测信号的周期,然后换算成频率;这种方式能够在必然程度上弥补方式

(1)中的不足,可是难以确信最正确分测点,且电路实现较复杂。

倍频法:

是指把频率测量范围分成多个频段,利用倍频技术,依照频段设置倍频系数,将经整形的低频信号进行倍频后在进行测量,对高频段那么直接进行测量。

倍频法较难实现。

等精度测频法:

其实现方式可用图来讲明。

图中,预置门控信号是宽度为TPR的一个脉冲,CNT1和CNT2是两个可控计数器。

标准频率信号从CNT1的时钟输出端CLK输入,其频率为fs,经整形后的被测信号从CNT2的时钟输入端CLK输入,设其实际频率为fx;当预置门控信号为高时,经整形后的被测信号的上升沿通过D触发器的Q端同时启动计数器CNT1和CNT2。

CNT1和CNT2别离对被测信号(频率为fs)和标准频率信号(频率为fx)同时计数。

当预置门信号为低时,随后而至的被测信号的上升沿将两个计数器同时关闭。

设在一次预置门时刻Tpr内对被测信号的计数值为Nx,对标准信号的计数值为Ns。

那么下式成立:

fx/Nx=fs/Ns(2-1)

由此推得

fx=fs*Nx/Ns(2-2)

等精度原理框架图如下:

图大体框架图

假设所测频率值为fx,其真实值为fxe,标准频率为fs,一次测量中,由于fx计数的起停时刻都是该信号的上跳沿触发的,因此在Tpr时刻内对fx的计数Nx无误差,在现在刻内的计数Ns最多相差一个脉冲,那么下式成立:

fx/Nx=fs/Ns(2-3)

fex/Nx=fs/Ns+△et(2-4)

可别离推得  

fx=fs*Nx/Ns       (2-5)

fex=fs*Nx/Ns+△et(2-6)

   依照相对误差的公式有:

△fxe/fxe=fxe-fx/fxe(2-7)

 经整理可取得:

△fxe/fxe=△et/Ns(2-8)

因△et≤1,故△fxe/fxe≤1/Ns   

   Ns=Tpr*fs(2-9)

依照以上分析,咱们可知等精度测频法具有三个特点:

1,相对测量误差与被测频率的高低无关;2,增大Tpr或fs能够增大Ns,减少测量误差,提高测量精度;3,测量精度与预置门宽度和标准频率有关,与被测信号的频率无关,在预置门和常规测频闸门时刻相同而被测信号频率不同的情形下,等精度测量法的测量精度不变。

 

3MAX—PLUXII软件上实现的方案

总FPGA仿真图

图软件仿真总GDF图

模块分图

3.2.1数据产生模块

Nb,Nx.为16bit。

图数据产生模块

上图数据产生的工作原理:

fb频率是由24M400分频提供,由2个D触发器组成操纵电路,在fx输入的时候,对第一个D触发器开始时Q=1,现在计数器处于计数状态,当操纵循环信号来一个时钟上升沿第二个D触发器Q=D=0,由于那个1经非门得0,现在由门操纵电路取得第一个触发器Q=D=0,当第一个D触发器由1变成0时,两计数器停止计数,此信号经后一个非门取得一个上升沿,在上升沿时两个数所存到buffer中,在接下来的高电平常,两计数器清零。

由D触发器的性质得:

第二个触发器刹时被置位为1,从而反馈到上一个触发器使其Q=D=1,从而让两计数器又开始计数,当操纵信号再来下一个时钟上升沿的时候,又对上第一个D触发器置位是0,而两个计数器还在计数,当fx得时钟上升沿恰好来的时候与fb恰好,现在计数完成,而对计数器清零那么延时一段时刻再清,从而幸免数据丢失,如此在门控信号的作用下,计数器循环计数。

3.2.2数据处置模块

图数据处置模块1

分析:

关于两个buffer输出的数据接由FPGA生成的LPM除法和乘法模块进行计算,最后取得的数据是16进制,为了能在数码管上显示咱们将其转化为10进制,用BCD码显示。

而在转换模块里咱们用的是除法取商舍余,最后输出显示。

原理图如下:

图数据处置模块2

4.程序设计及电路调试

计数器设计

计数模块在闸门时刻内对被测信号进行计数,并依照被测输入信号的频率范围自动切换量程,操纵小数点显示位置。

LIBRARYIEEE;

USECNT10IS

PORT(

C:

INSTD_LOGIC;CLK:

INSTD_LOGIC;--计数时钟信号--

C_EN:

INSTD_LOGIC;--计数使能--

CARRY_OUT:

OUTSTD_LOGIC;--进位输出--

Q_OUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCNT10;

ARCHITECTUREBEHAVIOROFCNT10IS

SIGNALCNT_SL:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(C,CLK,C_EN)

BEGIN

IFC='0'THEN--计数器异步清零--

CNT_SL<=(OTHERS=>'0');

ELSIF(CLK'EVENTANDCLK='1')THEN

IFC_EN='1'THEN

IFCNT_SL<9THEN

CNT_SL<=CNT_SL+1;

ELSECNT_SL<=(OTHERS=>'0');

ENDIF;

ENDIF;

ENDIF;

IF(CNT_SL=9ANDC_EN='1')THEN

CARRY_OUT<='1';

ELSECARRY_OUT<='0';

ENDIF;

ENDPROCESS;

Q_OUT<=CNT_SL;

ENDBEHAVIOR;

测频操纵信号发生器设计

图2给出了系统的工作时序。

CLK是由脉冲发生器产生的频率为1Hz的标准时钟信号,当测频操纵信号发生器TESTCTL的TSTEN端为高电平常许诺计数、低电平常停止计数,在停止计数期间,测频操纵信号发生器TESTCTL的Load端产生一个上升沿,将计数器在前1s的计数值锁存进32b锁存器REG32B中,并由8个7段译码器将计数结果译出稳固显示。

锁存信号以后通过半个CLK周期,测频操纵信号发生器TESTCTL的CLR_CNT端产生一个上升沿,对计数器进行清零。

为下1s的计数操作做预备。

为了产生那个时序图,第一有一个D触发器组成二分频器,在每次时钟CLK的上升沿到来使其值翻转。

D触发器的输出高电平正好是1s,因此能够作为测频操纵信号发生器TESTCTL的TSTEN端,用来操纵计数。

而Load信号正好是TSTEN端信号的翻转。

在计数终止后半个CLK周期,CLK与TSTEN都为低电平,这时CLR_CNT产生一个上升沿作为清零信号。

图测频操纵信号发生器TESTCTL的工作时序

程序如下:

LIBRARYIEEE;

USETESTCTLIS

PORT(

C:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

C_EN:

OUTSTD_LOGIC;

RST_EN:

OUTSTD_LOGIC;

LOAD:

OUTSTD_LOGIC

);

ENDTESTCTL;

ARCHITECTUREBEHAVIOROFTESTCTLIS

SIGNALDIV2CLK:

STD_LOGIC;

SIGNALTEST_EN:

STD_LOGIC;

BEGIN

PROCESS(CLK,C)

VARIABLECNT:

INTEGERRANGE0TO;

BEGIN

IFC='0'THEN

CNT:

=0;

ELSIF(CLK'EVENTANDCLK='1')THEN

CNT:

=CNT+1;

IFCNT

TEST_EN<='1';

ELSIFCNT

TEST_EN<='0';

ELSECNT:

=0;TEST_EN<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(TEST_EN)

BEGIN

IF(TEST_EN'EVENTANDTEST_EN='1')THEN

DIV2CLK<=NOTDIV2CLK;

ENDIF;

ENDPROCESS;

PROCESS(TEST_EN,DIV2CLK,C)--产生清0信号---

BEGIN

IF((TEST_EN='0'ANDDIV2CLK='0')ORC='0')THEN

RST_EN<='0';

ELSERST_EN<='1';

ENDIF;

ENDPROCESS;

LOAD<=NOTDIV2CLK;C_EN<=DIV2CLK;

ENDBEHAVIOR;

锁存器设计

当系统正常工作时,脉冲发生器提供的1Hz的输入信号,通过测频操纵信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统能够稳固显示数据。

LIBRARYIEEE;

USEUSEUSEENTITYREG32BIS

PORT(

LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0)

);

ENDREG32B;

ARCHITECTUREBEHAVIOROFREG32BIS

BEGIN

PROCESS(LOAD,DIN)

BEGIN

IF(LOAD'EVENTANDLOAD='1')THEN

DOUT<=DIN;

ENDIF;

ENDPROCESS;

ENDBEHAVIOR;

除法器模块程序

LIBRARYieee;

USElpm;

USE;

ENTITYdiv32bIS

PORT

denom:

INSTD_LOGIC_VECTOR(31DOWNTO0);

numer:

INSTD_LOGIC_VECTOR(31DOWNTO0);

quotient:

OUTSTD_LOGIC_VECTOR(31DOWNTO0);

remain:

OUTSTD_LOGIC_VECTOR(31DOWNTO0)

);

ENDdiv32b;

ARCHITECTURESYNOFdiv32bIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(31DOWNTO0);

SIGNALsub_wire1:

STD_LOGIC_VECTOR(31DOWNTO0);

COMPONENTlpm_divide

GENERIC(

lpm_drepresentation:

STRING;

lpm_hint:

STRING;

lpm_nrepresentation:

STRING;

lpm_type:

STRING;

lpm_widthd:

NATURAL;

lpm_widthn:

NATURAL

);

PORT(

denom:

INSTD_LOGIC_VECTOR(31DOWNTO0);

quotient:

OUTSTD_LOGIC_VECTOR(31DOWNTO0);

remain:

OUTSTD_LOGIC_VECTOR(31DOWNTO0);

numer:

INSTD_LOGIC_VECTOR(31DOWNTO0)

);

ENDCOMPONENT;

BEGIN

quotient<=sub_wire0(31DOWNTO0);

remain<=sub_wire1(31DOWNTO0);

lpm_divide_component:

lpm_divide

GENERICMAP(

lpm_drepresentation=>"UNSIGNED",

lpm_hint=>"LPM_REMAINDERPOSITIVE=TRUE",

lpm_nrepresentation=>"UNSIGNED",

lpm_type=>"LPM_DIVIDE",

lpm_widthd=>32,

lpm_widthn=>32

PORTMAP(

denom=>denom,

numer=>numer,

quotient=>sub_wire0,

remain=>sub_wire1

);

ENDSYN;

动态扫描信号输出

显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上能够显示的十进制结果。

在数码显示管上能够看到计数结果。

LIBRARYIEEE;

USESCAN8IS

PORT(

CLK:

INSTD_LOGIC;

NO1_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO2_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO3_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO4_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO5_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO6_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO7_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO8_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

IED_CS:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

IED_DATA:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);

ENDSCAN8;

ARCHITECTUREBEHAVIOROFSCAN8IS

SIGNALS1:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALBCD_OUT:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALTEST_EN:

STD_LOGIC;

BEGIN

PROCESS(CLK)

VARIABLECNT:

INTEGERRANGE0TO2000;

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

CNT:

=CNT+1;

IFCNT<1000THEN

TEST_EN<='1';

ELSIFCNT<2000THEN

TEST_EN<='0';

ELSECNT:

=0;TEST_EN<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(TEST_EN)

BEGIN

IF(TEST_EN'EVENTANDTEST_EN='0')THEN

IFS1="111"THENS1<="000";

ELSES1<=S1+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(S1)

BEGIN

CASES1IS

WHEN"000"=>BCD_OUT<=NO1_BCD;IED_CS<="00000001";

WHEN"001"=>BCD_OUT<=NO2_BCD;IED_CS<="00000010";

WHEN"010"=>BCD_OUT<=NO3_BCD;IED_CS<="00000100";

WHEN"011"=>BCD_OUT<=NO4_BCD;IED_CS<="00001000";

WHEN"100"=>BCD_OUT<=NO5_BCD;IED_CS<="00010000";

WHEN"101"=>BCD_OUT<=NO6_BCD;IED_CS<="00100000";

WHEN"110"=>BCD_OUT<=NO7_BCD;IED_CS<="01000000";

WHEN"111"=>BCD_OUT<=NO8_BCD;IED_CS<="";

ENDCASE;

ENDPROCESS;

PROCESS(BCD_OUT)

BEGIN

CASEBCD_OUTIS

WHEN"0000"=>IED_DATA<="";--0

WHEN"0001"=>IED_DATA<="";--1

WHEN"0010"=>IED_DATA<="";--2

WHEN"0011"=>IED_DATA<="";--3

WHEN"0100"=>IED_DATA<="";--4

WHEN"0101"=>IED_DATA<="";--5

WHEN"0110"=>IED_DATA<="";--6

WHEN"0111"=>IED_DATA<="";--7

WHEN"1000"=>IED_DATA<="";--8

WHEN"1001"=>IED_DATA<="";--9

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDBEHAVIOR;

频率计

LIBRARYIEEE;

USEfreqIS

PORT(

C:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

TEST_CLK:

INSTD_LOGIC;

IED_CS:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

IED_DATA:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);

ENDfreq;

ARCHITECTUREBEHAVIOROFfreqIS

COMPONENTCNT10IS--计数器的例化--

PORT(

C:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

C_EN:

INSTD_LOGIC;

CARRY_OUT:

OUTSTD_LOGIC;

Q_OUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENTCNT10;

COMPONENTTESTCTLIS--测频部份例化--

PORT(

C:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

C_EN:

OUTSTD_LOGIC;

RST_EN:

OUTSTD_LOGIC;

LOAD:

OUTSTD_LOGIC

);

ENDCOMPONENTTESTCTL;

COMPONENTREG32BIS--锁存器例化---

PORT(

LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0)

);

ENDCOMPONENTREG32B;

COMPONENTSCAN8IS--扫描部份例化---

PORT(

CLK:

INSTD_LOGIC;

NO1_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO2_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO3_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO4_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO5_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO6_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO7_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NO8_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

IED_CS:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

IED_DATA:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);

ENDCOMPONENTSCAN8;

SIGNALSE,SC,SL:

STD_LOGIC;

SIGNALS1,S2,S3,S4,S5,S6,S7,S8:

STD_LOGIC;

SIGNALSD:

STD_LOGI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1