在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx

上传人:b****3 文档编号:17929820 上传时间:2022-12-12 格式:DOCX 页数:13 大小:169.17KB
下载 相关 举报
在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx_第1页
第1页 / 共13页
在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx_第2页
第2页 / 共13页
在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx_第3页
第3页 / 共13页
在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx_第4页
第4页 / 共13页
在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx

《在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

在FPGA上用VHDL实现数字频率计 实验报告Word格式文档下载.docx

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdebounceIS

PORT(key,cp:

INSTD_LOGIC;

--复位键

imp:

OUTSTD_LOGIC);

--去掉窄波后输出

ENDdebounce;

ARCHITECTUREbaseOFdebounceIS

SIGNALql,q2:

STD_LOGIC;

BEGIN

PROCESS(cp)

BEGIN

IFcp'

eventANDcp='

1'

THEN

q2<

=ql;

ql<

=key;

ENDIF;

ENDPROCESS;

imp<

=qlANDNOTq2;

ENDbase;

时序仿真波形:

2、分频电路

USEIEEE.STD_LOGIC_SIGNED.ALL;

ENTITYdividefre4IS

PORT(cp_2m:

INSTD_LOGIC;

--2MHz

cpl:

OUTSTD_LOGIC;

--200Hz

cp2:

--25Hz

cp3:

--5Hz

ENDdividefre4;

ARCHITECTUREbehaviorOFdividefre4IS

SIGNALtout:

INTEGERRANGE0TO4999;

--5000分频

SIGNALtoutl:

INTEGERRANGE0TO7;

--8分频

SIGNALtout2:

INTEGERRANGE0TO39;

--40分频

SIGNALcp_1:

SIGNALcp_2:

SIGNALcp_3:

SIGNALcp:

PROCESS(cp_2m)–分出400Hz时钟

IF(cp_2m'

eventANDcp_2m='

)THEN

IFtout=4999THEN

tout<

=0;

ELSEtout<

=tout+1;

IFtout=2499THEN

cp<

='

0'

;

ELSEcp<

ENDPROCESS;

PROCESS(cp)--200Hz时钟

IF(cp'

cp_1<

=NOTcp_1;

PROCESS(cp_1)--25Hz时钟和5Hz

IF(cp_1'

eventANDcp_1='

IFtoutl=7THENtoutl<

ELSEtoutl<

=toutl+1;

IFtoutl=3THEN

cp_2<

ELSIFtoutl=7THENcp_2<

--8分频得25Hz

IFtout2=39THENtout2<

--40分频得5Hz

ELSEtout2<

=tout2+1;

IFtout2=39THEN

cp_3<

ELSIFtout2=19THENcp_3<

cpl<

=cp_1;

cp2<

=cp_2;

cp3<

=cp_3;

ENDbehavior;

仿真波形:

(因原程序所分频倍数太大,所以这里将5000倍分频降至50倍)

3、计数器

ENTITYfretestIS

PORT(enable:

--使能

--闸门

INput:

--被测信号

reset:

--复位信号

overflow:

--大于1000kHz

Play0,playl,play2,play3:

OUTINTEGERRANGE0TO9;

decimal:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

--小数点,即档位

ENDfretest;

ARCHITECTUREbehaviorOFfretestIS

SIGNALr0_1,r1_1,r2_1,r3_1,r4_1,r5_1:

INTEGERRANGE0TO9;

PROCESS(INput,enable,reset,cp3)

IFenable='

THENNULL;

--不测量

ELSIF(input'

eventANDinput='

)THEN--检测被测信号

IFreset='

THEN--同步复位,高电平有效

overflow<

r0_1<

r1_1<

r2_1<

r3_1<

r4_1<

r5_1<

ELSIFcp3='

THEN--闸门为0时清零

Overflow<

ELSE--闸门为高电平计数

=r0_1+1;

IFr0_1=9THENr1_1<

=r1_1+1;

IF(r1_1=9)THENr2_1<

=r2_1+1;

IF(r2_1=9)THENr3_1<

=r3_1+1;

r2_1<

IF(r3_1=9)THENr4_1<

=r4_1+1;

IF(r4_1=9)THENr5_1<

=r5_1+1;

IF(r5_1=9)THENr5_1<

overflow<

ENDIF;

PROCESS(r5_1,r4_1)

IFr5_1=0ANDr4_1=0THEN--为小于9999Hz时

play0<

=r0_1;

playl<

=r1_1;

play2<

=r2_1;

play3<

=r3_1;

decimal<

="

100"

ELSIFr5_1=0THEN--为几十kHz时

=r4_1;

010"

ELSE--为几百kHz时

=r5_1;

001"

ENDbehavior;

仿真波形

4、锁存器

ENTITYfrelatchIS

PORT(reset:

--复位

--时钟

Overflow:

--大于1000kHz表示

play0,playl,play2,play3:

ININTEGERRANGE0TO9;

INSTD_LOGIC_VECTOR(2DOWNTO0);

--小数点

overlatch:

p0latch,pllatch,p21atch,p31atch:

delatch:

ENDfrelatch;

ARCHITECTUREbehaviorOFfrelatchIS

PROCESS(cp3,reset)

overlatch<

p0latch<

pllatch<

p21atch<

p31atch<

delatch<

=decimal;

ELSIFcp3'

eventANDcp3='

=overflow;

=play0;

=playl;

=play2;

=play3;

delatch<

5、显示模块

ENTITYdisplayIS

PORT(cpl:

--高于1000kHz标志

p0,p1,p2,p3:

--BCD码输入

show:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

--7段码输出

sel:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

--位扫描码

ENDdISplay;

ARCHITECTUREbehaviorOFdisplayIS

SIGNALcount:

INTEGERRANGE0TO3;

SIGNALsel_1:

STD_LOGIC_VECTOR(3DOWNTO0);

PROCESS(cpl)

IF(cpl'

eventANDcpl='

)THEN

IFcount=3THENcount<

ELSE

count<

=count+1;

PROCESS(count)

CASEcountIS

WHEN0=>

sel_1<

1110"

--第0位

WHEN1=>

1101"

--第1位

WHEN2=>

1011"

--第2位

WHEN3=>

0111"

--第3位

ENDCASE;

PROCESS(overflow,sel_1)

IF(overflow='

)THEN

show<

0110111"

--高于1000kHz,显示H

ELSIF(sel_1(0)='

)THEN--第0位数码管译码

CASEp0IS

show<

1111110"

--显示0,a-g

0110000"

--1

1101101"

--2

1111001"

WHEN4=>

0110011"

WHEN5=>

1011011"

WHEN6=>

0011111"

WHEN7=>

1110000"

WHEN8=>

1111111"

WHEN9=>

1110011"

ELSIF(sel_1

(1)='

)THEN--第1位译码

CASEp1IS

WHEN8=>

ELSIF(sel_1

(2)='

)THEN--第2位译码

CASEp2IS

ELSIF(sel_1(3)='

)THEN--第3位译码

CASEp3IS

WHEN1=>

sel<

=sel_1;

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

当前位置:首页 > 法律文书 > 调解书

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

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