在FPGA上用VHDL实现数字频率计 实验报告.docx
- 文档编号:6764019
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:169.16KB
在FPGA上用VHDL实现数字频率计 实验报告.docx
《在FPGA上用VHDL实现数字频率计 实验报告.docx》由会员分享,可在线阅读,更多相关《在FPGA上用VHDL实现数字频率计 实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
在FPGA上用VHDL实现数字频率计实验报告
数字系统设计实验报告
一、设计要求:
1、
(1)频率测量范围10Hz~1MHz
(2)量程自动转换,量程分为10KHz(1s)、100KHz(0.1s)、1MHz(10ms)三档。
转换规则如下:
当读数大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大一档;当读数小于0999时,频率计处于欠量程状态,下一次测量时,量程自动减小一档
(3)数据采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示计数结果,并将此显示结果保持到下一次计数结束。
(4)用发光二极管显示量程
二、方案选则
1测量原理:
当预置门控信号为高电平时,启动计数器,被测信号(频率为fx)计数
当预置门控信号为低电平时,关闭计数器
设在一次预置门控时间Tg内对被测信号计数值为Nx,则
fx=Nx/Tg
2具体方案:
本设计中将2MHz的时钟分三次频,分别作为防抖电路的周期信号、显示模块片选信号、计数及锁存模块闸门信号。
防抖电路滤去窄波,显示模块用模4计数器来分别输出四位测量结果。
计数器通过在0.1s内对输入信号的高电平(发生期)进行计数来得出结果,并且为了达到换挡目的,测量时计六位数,通过结果选择档位进行输出。
二、原理图
三、总体电路图
四、流程图
五、设计清单
1、防抖电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
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、分频电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYdividefre4IS
PORT(cp_2m:
INSTD_LOGIC;--2MHz
cpl:
OUTSTD_LOGIC;--200Hz
cp2:
OUTSTD_LOGIC;--25Hz
cp3:
OUTSTD_LOGIC);--5Hz
ENDdividefre4;
ARCHITECTUREbehaviorOFdividefre4IS
SIGNALtout:
INTEGERRANGE0TO4999;--5000分频
SIGNALtoutl:
INTEGERRANGE0TO7;--8分频
SIGNALtout2:
INTEGERRANGE0TO39;--40分频
SIGNALcp_1:
STD_LOGIC;
SIGNALcp_2:
STD_LOGIC;
SIGNALcp_3:
STD_LOGIC;
SIGNALcp:
STD_LOGIC;
BEGIN
PROCESS(cp_2m)–分出400Hz时钟
BEGIN
IF(cp_2m'eventANDcp_2m='1')THEN
IFtout=4999THEN
tout<=0;
ELSEtout<=tout+1;
ENDIF;
IFtout=2499THEN
cp<='0';
ELSEcp<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(cp)--200Hz时钟
BEGIN
IF(cp'eventANDcp='1')THEN
cp_1<=NOTcp_1;
ENDIF;
ENDPROCESS;
PROCESS(cp_1)--25Hz时钟和5Hz
BEGIN
IF(cp_1'eventANDcp_1='1')THEN
IFtoutl=7THENtoutl<=0;
ELSEtoutl<=toutl+1;
ENDIF;
IFtoutl=3THEN
cp_2<='1';
ELSIFtoutl=7THENcp_2<='0';--8分频得25Hz
ENDIF;
IFtout2=39THENtout2<=0;--40分频得5Hz
ELSEtout2<=tout2+1;
ENDIF;
IFtout2=39THEN
cp_3<='1';
ELSIFtout2=19THENcp_3<='0';
ENDIF;
ENDIF;
ENDPROCESS;
cpl<=cp_1;cp2<=cp_2;cp3<=cp_3;
ENDbehavior;
仿真波形:
(因原程序所分频倍数太大,所以这里将5000倍分频降至50倍)
3、计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYfretestIS
PORT(enable:
INSTD_LOGIC;--使能
cp3:
INSTD_LOGIC;--闸门
INput:
INSTD_LOGIC;--被测信号
reset:
INSTD_LOGIC;--复位信号
overflow:
OUTSTD_LOGIC;--大于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;
BEGIN
PROCESS(INput,enable,reset,cp3)
BEGIN
IFenable='0'THENNULL;--不测量
ELSIF(input'eventANDinput='1')THEN--检测被测信号
IFreset='1'THEN--同步复位,高电平有效
overflow<='0';r0_1<=0;r1_1<=0;
r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;
ELSIFcp3='0'THEN--闸门为0时清零
Overflow<='0';r0_1<=0;r1_1<=0;
r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;
ELSE--闸门为高电平计数
r0_1<=r0_1+1;
IFr0_1=9THENr1_1<=r1_1+1;r0_1<=0;
IF(r1_1=9)THENr2_1<=r2_1+1;r1_1<=0;
IF(r2_1=9)THENr3_1<=r3_1+1;r2_1<=0;
IF(r3_1=9)THENr4_1<=r4_1+1;r3_1<=0;
IF(r4_1=9)THENr5_1<=r5_1+1;r4_1<=0;
IF(r5_1=9)THENr5_1<=0;overflow<='1';--大于1000kHz
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(r5_1,r4_1)
BEGIN
IFr5_1=0ANDr4_1=0THEN--为小于9999Hz时
play0<=r0_1;playl<=r1_1;
play2<=r2_1;play3<=r3_1;decimal<="100";
ELSIFr5_1=0THEN--为几十kHz时
play0<=r1_1;playl<=r2_1;
play2<=r3_1;play3<=r4_1;decimal<="010";
ELSE--为几百kHz时
play0<=r2_1;playl<=r3_1;
play2<=r4_1;play3<=r5_1;decimal<="001";
ENDIF;
ENDPROCESS;
ENDbehavior;
仿真波形
4、锁存器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYfrelatchIS
PORT(reset:
INSTD_LOGIC;--复位
cp3:
INSTD_LOGIC;--时钟
Overflow:
INSTD_LOGIC;--大于1000kHz表示
play0,playl,play2,play3:
ININTEGERRANGE0TO9;
decimal:
INSTD_LOGIC_VECTOR(2DOWNTO0);--小数点
overlatch:
OUTSTD_LOGIC;--大于1000kHz
p0latch,pllatch,p21atch,p31atch:
OUTINTEGERRANGE0TO9;
delatch:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));--小数点
ENDfrelatch;
ARCHITECTUREbehaviorOFfrelatchIS
BEGIN
PROCESS(cp3,reset)
BEGIN
IFreset='1'THEN
overlatch<='0';
p0latch<=0;pllatch<=0;
p21atch<=0;p31atch<=0;delatch<=decimal;
ELSIFcp3'eventANDcp3='0'THEN
overlatch<=overflow;
p0latch<=play0;pllatch<=playl;
p21atch<=play2;p31atch<=play3;
delatch<=decimal;
ENDIF;
ENDPROCESS;
ENDbehavior;
仿真波形
5、显示模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYdisplayIS
PORT(cpl:
INSTD_LOGIC;--时钟
overflow:
INSTD_LOGIC;--高于1000kHz标志
p0,p1,p2,p3:
ININTEGERRANGE0TO9;--BCD码输入
show:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--7段码输出
sel:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));--位扫描码
ENDdISplay;
ARCHITECTUREbehaviorOFdisplayIS
SIGNALcount:
INTEGERRANGE0TO3;
SIGNALsel_1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(cpl)
BEGIN
IF(cpl'eventANDcpl='1')THEN
IFcount=3THENcount<=0;
ELSE
count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(count)
BEGIN
CASEcountIS
WHEN0=>sel_1<="1110";--第0位
WHEN1=>sel_1<="1101";--第1位
WHEN2=>sel_1<="1011";--第2位
WHEN3=>sel_1<="0111";--第3位
ENDCASE;
ENDPROCESS;
PROCESS(overflow,sel_1)
BEGIN
IF(overflow='1')THEN
show<="0110111";--高于1000kHz,显示H
ELSIF(sel_1(0)='0')THEN--第0位数码管译码
CASEp0IS
WHEN0=>show<="1111110";--显示0,a-g
WHEN1=>show<="0110000";--1
WHEN2=>show<="1101101";--2
WHEN3=>show<="1111001";
WHEN4=>show<="0110011";
WHEN5=>show<="1011011";
WHEN6=>show<="0011111";
WHEN7=>show<="1110000";
WHEN8=>show<="1111111";
WHEN9=>show<="1110011";
ENDCASE;
ELSIF(sel_1
(1)='0')THEN--第1位译码
CASEp1IS
WHEN0=>show<="1111110";
WHEN1=>show<="0110000";
WHEN2=>show<="1101101";
WHEN3=>show<="1111001";
WHEN4=>show<="0110011";
WHEN5=>show<="1011011";
WHEN6=>show<="0011111";
WHEN7=>show<="1110000";
WHEN8=>show<="1111111";
WHEN9=>show<="1110011";
ENDCASE;
ELSIF(sel_1
(2)='0')THEN--第2位译码
CASEp2IS
WHEN0=>show<="1111110";
WHEN1=>show<="0110000";
WHEN2=>show<="1101101";
WHEN3=>show<="1111001";
WHEN4=>show<="0110011";
WHEN5=>show<="1011011";
WHEN6=>show<="0011111";
WHEN7=>show<="1110000";
WHEN8=>show<="1111111";
WHEN9=>show<="1110011";
ENDCASE;
ELSIF(sel_1(3)='0')THEN--第3位译码
CASEp3IS
WHEN0=>show<="1111110";
WHEN1=>show<="0110000";
WHEN2=>show<="1101101";
WHEN3=>show<="1111001";
WHEN4=>show<="0110011";
WHEN5=>show<="1011011";
WHEN6=>show<="0011111";
WHEN7=>show<="1110000";
WHEN8=>show<="1111111";
WHEN9=>show<="1110011";
ENDCASE;
ENDIF;
ENDPROCESS;
sel<=sel_1;
ENDbehavior;
仿真波形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在FPGA上用VHDL实现数字频率计 实验报告 FPGA VHDL 实现 数字频率计 实验 报告