数字频率计的设计Word下载.docx

上传人:b****4 文档编号:7760461 上传时间:2023-05-09 格式:DOCX 页数:19 大小:279.60KB
下载 相关 举报
数字频率计的设计Word下载.docx_第1页
第1页 / 共19页
数字频率计的设计Word下载.docx_第2页
第2页 / 共19页
数字频率计的设计Word下载.docx_第3页
第3页 / 共19页
数字频率计的设计Word下载.docx_第4页
第4页 / 共19页
数字频率计的设计Word下载.docx_第5页
第5页 / 共19页
数字频率计的设计Word下载.docx_第6页
第6页 / 共19页
数字频率计的设计Word下载.docx_第7页
第7页 / 共19页
数字频率计的设计Word下载.docx_第8页
第8页 / 共19页
数字频率计的设计Word下载.docx_第9页
第9页 / 共19页
数字频率计的设计Word下载.docx_第10页
第10页 / 共19页
数字频率计的设计Word下载.docx_第11页
第11页 / 共19页
数字频率计的设计Word下载.docx_第12页
第12页 / 共19页
数字频率计的设计Word下载.docx_第13页
第13页 / 共19页
数字频率计的设计Word下载.docx_第14页
第14页 / 共19页
数字频率计的设计Word下载.docx_第15页
第15页 / 共19页
数字频率计的设计Word下载.docx_第16页
第16页 / 共19页
数字频率计的设计Word下载.docx_第17页
第17页 / 共19页
数字频率计的设计Word下载.docx_第18页
第18页 / 共19页
数字频率计的设计Word下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字频率计的设计Word下载.docx

《数字频率计的设计Word下载.docx》由会员分享,可在线阅读,更多相关《数字频率计的设计Word下载.docx(19页珍藏版)》请在冰点文库上搜索。

数字频率计的设计Word下载.docx

闸门时间为1S时,最大读数为999.999KHz

第二档:

闸门时间为0.1S时,最大读数为9999.99KHz

第三档:

闸门时间为0.01S时,最大读数为99999.9KHz。

4、显示工作方式:

a、用六位BCD七段数码管显示读数。

b、采用记忆显示方法

c、实现对高位无意义零的消隐。

第三章设计思路

1.频率测量:

所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。

若在一定的时间间隔T内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:

f=N/T。

计数式数字频率正是依照公式f=N/T所表达的频率的定义,进行频率测量的,其工作原理如下图所示。

由上图可知,要测量频率首先应该产生一个时基信号,既f=N/T中的T,除此之外还需要计数电路来测量,一个时基信号内被测信号变化的次数N,

除了以上两个基础电路外,还需要门控电路和闸门信号来实现计数控制。

2.结果显示

设计要求测量结果要被测结果用数码管显示,同时还要有闸门使能显示和溢出显示。

要用数码管显示数据,首先应该对数据进行译码,同时要进行显示还需要显示控制电路既扫描显示电路:

扫描控制和显示译码电路

实验板数码管显示点路

3总体设计

由以上分析给出系统总体设计框图

第四章模块设计及仿真

由上节分析,采用模块化设计,系统可分为:

分频器,闸门选择电路,门控电路,计数器,锁存器和显示译码电路。

1分频器

该电路将产生四个不同频率的信号输出。

采用实验板上的8MHZ晶振作为基准源,对基准信号计数,根据计数值不同产生四路不同频率的信号输出分别为1HZ,10HZ和100HZ,1KHZ。

原程序如下见附录。

分频器结构图

仿真结果如下:

通过对仿真结果的分析,该模块能够正常产生四个信号,且频率大小正确。

该模块可以正常工作。

2.闸门选择电路

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

原程序见附录:

结构图如图

仿真结果如下图:

通过对仿真结果的分析,该模块能够正常产生四个信号,且频率大小正

确。

3门控电路

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

源程序见附录:

结构图如右

仿真图如下

4.计数器

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

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

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

仿真结果及结构图如下

5.锁存器

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

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

四位锁存器级联后的结构图

四位锁存器结构图

四位锁存器的原代码见附录:

6.显示译码电路

该模块实现的是对锁存器锁存的数据进行处理并显示输出,以及小数点的不同闸门的输出显示,以及电路板上七段显示译码管的扫描信号输出。

其中对锁存数据的处理包括溢出有效时的数据消除,和对高位无意义零的自动消隐。

首先我们编写小数点控制的源文件代码:

仿真图如下:

第五章:

硬件实现与调试

下载过程:

光标移至【GenerateProgramingFile】后单击鼠标右键,然后单击【Properties】在打开的对话框的左侧栏选中【ConfigurationOptions】将右侧的UnusedIOBPins这一项改为PullUp,单击OK。

在界面的左下角双击【GenerateProgramingFile】,软件将自动对整个系统进行编译并生成可执行文件。

将弹出的对话框关掉,双击【GenerateProm,ACE,orJTAGFile】在弹出的对话框中点击Finish,在随后出现的对话框中选择生成的可执行文件,然后点击打开,在随后的对话框中点击Bypass。

右键单击左边图标选择Program,在随后的对话框中单击OK,文件将自动下载到开发板上,成功后,接入函数发生器进行测试。

连接好函数发生器后,设定好了函数发生器的输出信号电平(3.3Vpp),方波,1.6V偏移,就可以进行使用了。

最后结果显示程序工作正常,读数清晰稳定,完全符合开始时的要求。

第六章:

总结

通过这次实验,实现了要求的10—100MHz的频率测量范围,也熟悉了VHDL语言的各种编程结构,以及ISE软件的使用规则。

但是过程中也遇到了诸多的难题,比如程序的书写格式错误,以及程序功能结构不能满足要求等,在这里要感谢老师的教导,在老师的指导下基本都克服了这些问题。

总体说来,这次实验还是收获颇丰。

第七章:

附录

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entityfrequency_meteris

Port(clk_48MHz,clear:

inSTD_LOGIC;

sw:

inSTD_LOGIC_VECTOR(2downto0);

frequency_in:

nCS,overout,led_gate:

outSTD_LOGIC;

Dig:

outSTD_LOGIC_VECTOR(2downto0);

Seg:

outSTD_LOGIC_VECTOR(6downto0);

dp:

outSTD_LOGIC);

endfrequency_meter;

architectureBehavioraloffdivis

signalcnt:

integerrange0to(ratio-1):

=0;

begin

process(clkin)

begin

iffalling_edge(clkin)then

cnt<

=cnt+1;

clkout<

='

0'

;

ifcnt=(ratio-1)then

cnt<

clkout<

1'

endif;

endif;

endprocess;

endBehavioral;

architectureBehavioralofcounteris

signalcount:

std_logic_vector(3downto0):

="

0000"

begin

process(rst,clk)

begin

ifrst='

then

count<

="

elsifclk'

eventandclk='

ifcarry_in='

ifcount<

"

1001"

count<

=count+1;

else

endif;

else

null;

endprocess;

count_out<

=count;

carry_out<

whencarry_in='

andcount="

else'

architectureBehavioraloffrequency_meteris

COMPONENTfdiv

GENERIC(

ratio:

integer:

=0

);

PORT(

clkin:

INstd_logic;

clkout:

OUTstd_logic

ENDCOMPONENT;

componentcounteris

port(rst,clk:

instd_logic;

carry_in:

carry_out:

outstd_logic;

count_out:

outstd_logic_vector(3downto0));

endcomponentcounter;

signalgate,latch,reset:

std_logic;

signalcarry_1,carry_2,carry_3,carry_4,carry_5,carry_6:

std_logic;

signalover1,led_gate1:

signalclk_1kHz,clk_100Hz,clk_10Hz,clk_1Hz,Bsignal:

STD_LOGIC;

signalG1,G2:

std_logic:

='

signalsel:

STD_LOGIC_VECTOR(2downto0):

000"

signalfval1,fval2,fval3,fval4,fval5,fval6,data:

STD_LOGIC_VECTOR(3downto0);

signalresult1,result2,result3,result4,result5,result6:

nCS<

U1:

fdiv

GENERICMAP(ratio=>

48000)

PORTMAP(

clkin=>

clk_48MHz,

clkout=>

clk_1kHz

);

U2:

10)

clk_1kHz,

clk_100Hz--open

U3:

clk_100Hz,

clk_10Hz

U4:

clk_10Hz,

clk_1Hz

U5:

counter

Portmap(

rst=>

reset,

clk=>

frequency_in,

carry_in=>

gate,

carry_out=>

carry_1,

count_out=>

result1

);

U6:

carry_2,

result2

U7:

carry_3,

result3

U8:

carry_4,

result4

U9:

carry_5,

result5

U10:

carry_6,

result6

process(sw,clk_100Hz,clk_10Hz,clk_1Hz)

caseswis

when"

011"

=>

Bsignal<

=clk_1Hz;

101"

=clk_10Hz;

110"

=clk_100Hz;

whenothers=>

endcase;

process(Bsignal)

ifrising_edge(Bsignal)then

G1<

=notG1;

iffalling_edge(Bsignal)then

G2<

gate<

=G1;

latch<

=G2;

reset<

=(notBsignal)and(notG1)and(G2);

process(clk_1kHz)

iffalling_edge(clk_1kHz)then

sel<

=sel+1;

ifsel="

sel<

process(sel,fval1,fval2,fval3,fval4,fval5,fval6)

caseselis

data<

=fval1;

001"

=fval2;

010"

=fval3;

=fval4;

100"

=fval5;

=fval6;

Dig<

=sel;

process(data)

Seg<

-------"

casedatais

Seg<

0000001"

0001"

1001111"

0010"

0010010"

0011"

0000110"

0100"

1001100"

0101"

0100100"

0110"

0100000"

0111"

0001111"

1000"

0000000"

0000100"

null;

process(sel,sw)

if(sw="

andsel="

or(sw="

then

dp<

else

process(sw)

if(sw="

)or(sw="

led_gate1<

elsif(sw="

111"

led_gate1<

endif;

process(reset,frequency_in)

ifreset='

over1<

elsifrising_edge(frequency_in)then

over1<

=carry_6orover1;

process(latch)

ifrising_edge(latch)then

overout<

=notover1;

led_gate<

=led_gate1;

fval1<

=result1;

fval2<

=result2;

fval3<

=result3;

fval4<

=result4;

fval5<

=result5;

fval6<

=result6;

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

当前位置:首页 > 工程科技 > 交通运输

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

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