电子科技大学-电子技术实验-FPGA-频率计-实验报告文档格式.doc
《电子科技大学-电子技术实验-FPGA-频率计-实验报告文档格式.doc》由会员分享,可在线阅读,更多相关《电子科技大学-电子技术实验-FPGA-频率计-实验报告文档格式.doc(25页珍藏版)》请在冰豆网上搜索。
被测输入信号:
方波
测试频率范围为:
10Hz~100MHz
量程分为三档:
第一档:
闸门时间为1S时,最大读数为999.999KHz
第二档:
闸门时间为0.1S时,最大读数为9999.99KHz
第三档:
闸门时间为0.01S时,最大读数为99999.9KHz
显示工作方式:
a、用六位BCD七段数码管显示读数。
b、采用记忆显示方法
c、实现对高位无意义零的消隐。
3、实验思路
根据实验指标,将电路设计分成6个模块:
分频器,闸门选择,门控电路,计数器,锁存器,显示控制。
三、基于VHDL方法的设计方案
1、设计方框图
2、具体说明
石英振荡器:
48MHz的晶振信号。
分频器:
将48MHz的信号分频成1Hz,10Hz,100Hz的基准频率;
同时产生1kHz的信号作为扫描显示控制子系统的时钟。
闸门选择开关:
设置三个开关sel1,sel10,sel100。
闸门选择:
设置一个选择频率输出和三个小数点输出dp1,dp2,dp3。
根据闸门选择开关的信号,当se11有效而其他两个无效时,选择频率输出1Hz信号,dp1,dp2,dp3分别输出0,1,1;
当sel10有效而其他两个无效时,选择频率输出10Hz信号,dp1,dp2,dp3分别输出1,0,1;
当sel100有效而其他两个无效时,选择频率输出100Hz信号,dp1,dp2,dp3分别输出1,1,0。
门控电路:
根据选择频率信号产生闸门信号(计数器使能信号),清零信号,锁存使能信号,各信号的时序关系如图所示:
计数器:
考虑采用6个10进制计数器同步级联的方法。
锁存器:
门控电路产生的锁存使能信号的上升沿触发。
扫描显示控制子系统:
考虑该系统由三部分组成:
预显示部分,消隐部分,显示部分。
预显示部分:
设计一个选择信号switch负责选择对应的LED灯(根据1kHz),并根据传来的数据,产生对应的数码管使能信号序列led(6:
0)。
消隐部分:
设计一个信号hide(5:
0),该信号的每一位分别代表一个LED灯,若该信号某一位为1,则对应的LED灯消隐。
hide信号的赋值根据dp1,dp2,dp3的值以及高位的数据是否为零决定。
显示部分,设置一个使能输出信号G,并令它为低电平,根据hide信号和led信号以及dp1,dp2,dp3信号决定最终的输出。
四、系统电路设计
五、系统单元模块设计
1、分频器
entityfreq_divideris
port(clkin:
instd_logic;
clkout1:
outstd_logic;
clkout10:
clkout100:
clkout1k:
outstd_logic);
endfreq_divider;
architectureBehavioraloffreq_divideris
signalclkcnt1:
integerrange0to:
=0;
signalclkcnt10:
signalclkcnt100:
signalclkcnt1k:
integerrange0to48000:
signalclk1,clk10,clk100,clk1k:
std_logic:
='
1'
;
begin
fc1:
process(clkin)
begin
ifrising_edge(clkin)then
ifclkcnt1=then
clkcnt1<
=1;
clk1<
=notclk1;
else
clkcnt1<
=clkcnt1+1;
endif;
endif;
endprocess;
fc10:
begin
ifrising_edge(clkin)then
ifclkcnt10=then
clkcnt10<
clk10<
=notclk10;
else
clkcnt10<
=clkcnt10+1;
endif;
endif;
endprocess;
fc100:
begin
ifrising_edge(clkin)then
ifclkcnt100=then
clkcnt100<
clk100<
=notclk100;
else
clkcnt100<
=clkcnt100+1;
endif;
endif;
endprocess;
fc1k:
ifclkcnt1k=24000then
clkcnt1k<
clk1k<
=notclk1k;
clkcnt1k<
=clkcnt1k+1;
--assignment
clkout1<
=clk1;
clkout10<
=clk10;
clkout100<
=clk100;
clkout1k<
=clk1k;
endBehavioral;
2、闸门选择
entitygate_selis
port(se1:
se10:
se100:
f1:
f10:
f100:
fref:
dp1:
dp2:
dp3:
endgate_sel;
architectureBehavioralofgate_selis
signalsel:
std_logic_vector(2downto0):
="
000"
sel<
=se1&
se10&
se100;
process(sel,f1,f10,f100)
begin
caseselis
when"
100"
=>
fref<
=f1;
dp1<
0'
dp2<
dp3<
010"
fref<
=f10;
001"
=f100;
whenothers=>
endcase;
endprocess;
3、门控电路
entitygate_conis
port(Bsignal:
gate,reset,latch:
endgate_con;
architectureBehavioralofgate_conis
signalgate_tmp:
signallatch_tmp:
process(Bsignal)
begin
ifrising_edge(Bsignal)then
gate_tmp<
=notgate_tmp;
endif;
iffalling_edge(Bsignal)then
latch_tmp<
gate<
=gate_tmp;
latch<
=latch_tmp;
reset<
=(notBsignal)and(notgate_tmp)and(latch_tmp);
4、计数器
entityconunteris
port(count_en:
Csignal:
clear:
carry_out:
outstd_logic;
result:
outstd_logic_vector(3downto0));
endconunter;
architectureBehavioralofconunteris
signalcount:
std_logic_vector(3downto0):
0000"
signalco_tmp:
=