基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx

上传人:b****3 文档编号:6190760 上传时间:2023-05-06 格式:DOCX 页数:34 大小:121.30KB
下载 相关 举报
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第1页
第1页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第2页
第2页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第3页
第3页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第4页
第4页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第5页
第5页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第6页
第6页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第7页
第7页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第8页
第8页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第9页
第9页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第10页
第10页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第11页
第11页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第12页
第12页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第13页
第13页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第14页
第14页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第15页
第15页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第16页
第16页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第17页
第17页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第18页
第18页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第19页
第19页 / 共34页
基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx

《基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。

基于FPGA的数字频率计方案设计书报告Word文档下载推荐.docx

如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。

不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。

在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量精度。

系统单元模块划分:

1)分频器,将产生用于计数控制的时钟分别为1HZ,10HZ,100HZ脉冲和1KHZ的用于七段显示数码管扫描显示的扫描信号。

2)闸门选择器,用于选择不同的闸门时间以及产生后续的小数点的显示位置。

3)门控电路,产生用于计数的使能控制信号,清零信号以及锁存器锁存信号。

4)计数器,用于对输入的待测信号进行脉冲计数,计数输出。

5)锁存器,用于对计数器输出数据的锁存,便于后续译码显示电路的对数据进行记忆显示,同时避免计数器清零信号对数据产生影响。

6)译码显示,用于产生使七段显示数码管的扫描数字显示,小数点显示的输出信号,同时对高位的无意义零进行消隐。

二、单元电路设计

1、分频器:

该电路将产生四个不同频率的信号输出,因为电路板上给出了一个48MHZ的晶振,所以我们只需要对48MHZ的信号进行适当分频即可得到我们所需的四个不同频率的信号输出,我们设计一个输入为48MHZ,有四个输出端分别为1HZ,10HZ和100HZ,1KHZ的分频器,原程序如下:

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entityfenpinqiis

Port(clk:

inSTD_LOGIC;

clkout1:

outSTD_LOGIC;

clkout10:

clkout100:

clkout1K:

outSTD_LOGIC);

endfenpinqi;

architectureBehavioraloffenpinqiis

signalcnt1:

integerrange1to24000000;

signalcnt10:

integerrange1to2400000;

signalcnt100:

integerrange1to240000;

signalcnt1K:

integerrange1to24000;

signalc1:

std_logic;

signalc2:

signalc3:

signalc4:

begin

process(clk)is

begin

ifclk'

eventandclk='

1'

then

ifcnt1<

24000000then--对cnt1进行计数,当cnt1未计满后对其进行加1

cnt1<

=cnt1+1;

elsifcnt1=24000000then--cnt1计满后对其进行赋一,并且令c1进行翻转,然后将c1的值赋给clkout1

c1<

=notc1;

--由于48MHZ的的信号,前一半的时候c1为0,则后一半是为1,就完成了对信号进行分频,产生了1HZ的信号

cnt1<

=1;

endif;

endprocess;

begin

ifclk'

then--方法同上

ifcnt10<

2400000then

cnt10<

=cnt10+1;

elsifcnt10=2400000then

c2<

=notc2;

cnt10<

ifcnt100<

240000then

cnt100<

=cnt100+1;

elsifcnt100=240000then

c3<

=notc3;

cnt100<

ifcnt1K<

24000000then

cnt1K<

=cnt1K+1;

elsifcnt1=24000then

c4<

=notc4;

cnt1K<

clkout1<

=c1;

clkout10<

=c2;

clkout100<

=c3;

clkout1K<

=c4;

endBehavioral;

源文件编写成功后编译并生成图形文件符号如图:

仿真文件编写如下:

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.all;

USEieee.numeric_std.ALL;

ENTITYtbb_vhdIS

ENDtbb_vhd;

ARCHITECTUREbehaviorOFtbb_vhdIS

COMPONENTfenpinqi

PORT(clk:

INstd_logic;

clkout1:

OUTstd_logic;

clkout10:

clkout100:

clkout1K:

OUTstd_logic);

ENDCOMPONENT;

SIGNALclk:

std_logic:

='

0'

;

SIGNALclkout1:

std_logic;

SIGNALclkout10:

SIGNALclkout100:

SIGNALclkout1K:

BEGIN

uut:

fenpinqiPORTMAP(clk=>

clk,

clkout1=>

clkout1,

clkout10=>

clkout10,

clkout100=>

clkout100,

clkout1K=>

clkout1K);

tb:

PROCESS

BEGIN

clk<

='

waitfor10ps;

ENDPROCESS;

END;

对该模块进行仿真结果如下:

有上图可知分频器工作正常,产生的个信号也没有毛刺,结果十分理想。

2、闸门选择器:

在这个模块中我们有四个输出端和六个输入端,其中四个输出端中有一个是频率输出端,是通过三个闸门选择开关输入和三个输入频率决定的,另外三个输出端则是用来后面的小数点控制的,而六个输入端中的三个是上面分频器的三个输出1HZ,10HZ和100HZ,另外三个是电路板上的拨动开关,用来选择闸门,控制输出。

其原程序和分析如下:

libraryIEEE;

entitySELEis

Port(SE1:

SE10:

SE100:

F1HZ:

INSTD_LOGIC;

F10HZ:

F100HZ:

INSTD_LOGIC;

FREF:

DP1:

DP2:

DP3:

endSELE;

architectureBehavioralofSELEis

PROCESS(SE1,SE10,SE100)IS

IFSE1='

ANDSE10='

ANDSE100='

THEN

FREF<

=F1HZ;

--当闸门控制在第一档的时候,令输出端输出1HZ输入端的输入,小数点控制dp1有效,dp2,dp3无效

DP1<

DP2<

DP3<

ENDIF;

=F10HZ;

--第二档,输出为10HZ,dp2有效

=F100HZ;

--第三档,输出为100HZ,dp3有效

源代码编写完成后保存并生成图形文件符号如图:

ENTITYTTB_vhdIS

ENDTTB_vhd;

ARCHITECTUREbehaviorOFTTB_vhdIS

COMPONENTSELE

PORT(SE1:

SE10:

SE100:

F1HZ:

F10HZ:

F100HZ:

FREF:

DP1:

DP2:

DP3:

SIGNALSE1:

SIGNALSE10:

SIGNALSE100:

SIGNALF1HZ:

SIGNALF10HZ:

SIGNALF100HZ:

SIGNALFREF:

SIGNALDP1:

SIGNALDP2:

SIGNALDP3:

SELEPORTMAP(

SE1=>

SE1,

SE10=>

SE10,

SE100=>

SE100,

F1HZ=>

F1HZ,

F10HZ=>

F10HZ,

F100HZ=>

F100HZ,

FREF=>

FREF,

DP1=>

DP1,

DP2=>

DP2,

DP3=>

DP3);

F1HZ<

FREF<

waitfor100ns;

WAITFOR100NS;

仿真结果如图:

有仿真结果可知闸门选择器工作正常,能够准确输出我们所需的信号。

3、门控信号:

在此模块中有一个输入端和两个输出端,输入端为上面的闸门选择器输出的频率,两个输出端分别为计数器是能控制信号(锁存器控制信号),和计数器清零信号。

具体源程序即分析如下:

entityCONTROLSis

Port(FREF:

GAT:

CLR:

endCONTROLS;

architectureBehavioralofCONTROLSis

SIGNALG1:

STD_LOGIC:

PROCESS(FREF)IS

BEGIN

IFFREF'

EVENTANDFREF='

G1<

=NOTG1;

--该过程对时钟信号又一次进行分频,产生出半个周期时间为1的控制信号,作为计数使能,保证了时间的准确性

ENDPROCESS;

PROCESS(FREF,G1)IS

IFFREF='

ANDG1='

CLR<

--该过程产生清零信号,即当使能信号为无效0同时时钟为0时,即在技术始终无效半个时钟时间后,对计数器清零

ELSECLR<

--清零信号高电平有效

GAT<

=G1;

--将G1赋给gat输出端,它是计数器的使能信号同时也是锁存器的锁存信号

源文件编写完成后保存编译并生成图形文件符号如图:

仿真文件代码如下:

ENTITYTBCON_vhdIS

ENDTBCON_vhd;

ARCHITECTUREbehaviorOFTBCON_vhdIS

COMPONENTCONTROLS

PORT(FREF:

CLR:

SIGNALGAT:

SIGNALCLR:

CONTROLSPORTMAP(

GAT=>

GAT,

CLR=>

CLR);

FREF<

对上面的文件进行仿真,结果如下:

由上图的仿真结果可知,控制电路工作正常,输出信号稳定,很理想。

同时我们也可以看出来该模块对分频器的时钟输出的稳定性依赖十分严重,一旦分频器输出时钟有毛刺,该控制信号将会完全的无效,这也是为什么我知道上面的分频器设计不是最优的方案,却还是采用了上述方法的原因。

4、计数器:

该模块实现的功能是对输入信号脉冲的计数,并正确的输出结果和溢出。

使用上面的门控信号产生的gat信号控制计数器的使能端,以实现计数器的定时计数。

该模块是使用六个十进制计数器同步并联而成的,首先我们设计用于并联的十进制计数器,原程序如下:

libraryIEEE;

entityCNT10is

Port(CLK:

ENA:

CQ:

outSTD_LOGIC_VECTOR(3downto0);

CO:

endCNT10;

architectureBehavioralofCNT10is

SIGNALCQI:

STD_LOGIC_VECTOR(3DOWNTO0):

="

0000"

--定义中间信号CQI,用于数据输出的循环计数

PROCESS(CLK,CLR)IS

IFCLR='

THENCQI<

--当CLR清零信号有效时使输出为0000,无效时进行下述操作

ELSIFCLK'

EVENTANDCLK='

THEN--对时钟进行计数

IFENA='

THEN--判断使能信号,有效则进行计数,否则不作处理

IFCQI="

1001"

--数据0~9循环,计满后重新回到0

ELSECQI<

=CQI+'

ENDIF;

ENDIF;

CO<

whenena='

andcqi=9else'

--进位信号,最高位的仅为信号作为计数的溢出信号

CQ<

=CQI;

--当且仅当使能有效且计数为9时产生进位信号,进位信号1有效,同步并联时连高位的使能端

文件编写完成后保存编译生成图形文件符号,如上图:

创建图形文件cnt6并按照下图进行连接,保存后编译生成图形文件符号如图:

仿真文件代码如下:

ENTITYTBCNT10_vhdIS

ENDTBCNT10_vhd;

ARCHITECTUREbehaviorOFTBCNT10_vhdIS

COMPONENTCNT10

PORT(CLK:

OUTstd_logic_vector(3downto0);

SIGNALCLK:

SIGNALENA:

SIGNALCQ:

std_logic_vector(3downto0);

SIGNALCO:

CNT10PORTMAP(

CLK=>

CLK,

CLR,

ENA=>

ENA,

CQ=>

CQ,

CO=>

CO);

CLK<

仿真结果如图:

如仿真结果我们可以看出,该模块运行正常,计数稳定,结果十分理想。

5、锁存器:

由于前面的计数器的输出为六组四位二进制数和一个溢出信号,所以我们使用的锁存器也使用六个四位锁存器和一个一位锁存器。

锁存器使用下降沿锁存,即当计数器的使能信号变为无效的一瞬间我们令锁存器将数据锁存。

四位锁存器的原代码如下:

entityLATCH4is

DIN

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

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2