数字频率计文档格式.docx
- 文档编号:16518647
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:18
- 大小:94.31KB
数字频率计文档格式.docx
《数字频率计文档格式.docx》由会员分享,可在线阅读,更多相关《数字频率计文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
K
q4(0)
C
d3d2d1
alert
1
X
q3q2q1
q4q3q2
右第一位
左第一位
设置:
量程档控制开关K,单位显示信号unit。
当K=0时,为1~999Hz量程档,数码管显示的数值为被测信号频率值,unit显示绿色,即单位为Hz;
当K=1时,为1KHz~10KHz量程档,被测信号频率值为数码管显示的数值乘1000,unit显示红色,即单位为KHz。
(5)锁存器模块。
d3~d1,ld。
q1,q2,q3,小数点单位显示unit_display。
(6)扫描显示模块。
q1,q2,q3,扫描时钟scan_clk。
数码管选择信号sel,ledout。
三、仿真与分析:
(1)测量与显示:
测量信号
图2modelsim下
仿真
由上图2仿真结果可知,选择k=0,绿灯表示量程为Hz。
在范围内,数码管最低位亮小数点,满足设计要求。
图3modelsim下
由上图3仿真结果可知,选择k=1,绿灯表示量程为KHz。
在范围内,数码管最高位亮小数点,满足设计要求。
图4modelsim下
报警仿真
由图4仿真结果可知,选择k=1,绿灯表示量程为KHz。
超出测量范围,报警信号alert拉高,触发报警信号,上述设计满足要求。
图5modelsim下
由上图5仿真结果可知,选择k=0,绿灯表示量程为Hz。
四、源代码:
源代码一共由九部分组成,以下我们将对这九部分进行逐一介绍:
(1)顶层例化模块:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityf_counteris
port(clk,selin,test,measure,K:
instd_logic;
alert,led_red,led_green:
outstd_logic;
ledout:
outstd_logic_vector(7downto0);
--端口定义
sel:
outstd_logic_vector(2downto0));
endf_counter;
architecturef_counteroff_counteris
componentdiv_clk
port(clk:
clk1:
outstd_logic);
endcomponent;
componenttm_sel
port(selin,test,measure:
CP:
componentcount
port(CP,clk1:
C:
Q1,Q2,Q3,Q4:
outstd_logic_vector(3downto0));
componentalarm
port(clk1,C,K,CP:
instd_logic_vector(3downto0);
Y,alert:
d1,d2,d3:
componentlock
port(clk1,Y,scan_clk:
unit_display:
cnt_low,cnt_mid,cnt_high:
componentdisplay
port(scan_clk:
cnt_low:
cnt_mid:
cnt_high:
q:
outSTD_LOGIC_VECTOR(3downto0);
sell:
componentdec_led
port(q:
inSTD_LOGIC_VECTOR(3downto0);
inSTD_LOGIC;
sell:
instd_logic_vector(2downto0);
sel:
outstd_logic_vector(2downto0);
ledout:
outSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentdiv_scan_clk
Port(CP:
inSTD_LOGIC;
scan_clk:
outSTD_LOGIC);
signalCP,clk1,C,unit_display,Y,scan_clk:
std_logic;
signalsell:
std_logic_vector(2downto0);
signalQ1,Q2,Q3,Q4,d1,d2,d3,cnt_low,cnt_mid,cnt_high,q:
std_logic_vector(3downto0);
begin
U1:
tm_selportmap(selin,test,measure,CP);
--端口映射
U2:
div_clkportmap(clk,clk1);
U3:
countportmap(CP,clk1,C,Q1,Q2,Q3,Q4);
U4:
alarmportmap(clk1,C,K,CP,Q1,Q2,Q3,Q4,Y,alert,d1,d2,d3);
U5:
lockportmap(clk1,Y,scan_clk,d1,d2,d3,
unit_display,cnt_low,cnt_mid,cnt_high);
U6:
displayportmap(scan_clk,cnt_low,cnt_mid,cnt_high,q,sell);
U7:
dec_ledportmap(q,unit_display,sell,sel,ledout);
U8:
div_scan_clkportmap(CP,scan_clk);
led_red<
=unit_display;
led_green<
=notunit_display;
(2)测量和自校验选择模块(te_sel)
entitytm_selis
endtm_sel;
architecturetm_seloftm_selis
begin
process(selin,test,measure)--测量和自校验选择
if(selin='
0'
)then
CP<
=measure;
else
=test;
endif;
endprocess;
(3)时钟二分频模块
useieee.std_logic_arith.all;
entitydiv_clkis
enddiv_clk;
architecturediv_clkofdiv_clkis
signalclk_counter:
integerrange0to1;
process(clk)--时钟二分频,高电平脉宽为1s
if(clk'
eventandclk='
1'
if(clk_counter=1)then
clk1<
='
;
clk_counter<
=0;
else
=clk_counter+1;
脉冲计数模块
entitycountis
endcount;
architecturecountofcountis
signalcnt_1:
signalcnt_10:
signalcnt_100:
signalcnt_1000:
signalcnt:
process(CP,clk1)
if(CP'
eventandCP='
)then--当CLK=1时,CP上升沿计数
if(clk1='
if(cnt_1="
1001"
cnt_1<
="
0000"
cnt_10<
=cnt_10+'
=cnt_1+'
if(cnt_10="
andcnt_1="
cnt_100<
=cnt_100+'
if(cnt_100="
andcnt_10="
cnt_1000<
=cnt_1000+'
if(cnt_1000="
andcnt_100="
cnt<
Q1<
=cnt_1;
Q2<
=cnt_10;
Q3<
=cnt_100;
--计数端口赋值
Q4<
=cnt_1000;
C<
=cnt;
报警模块
entityalarmis
--clk1是主时钟二分频后的时钟,C是计数器的进位,K为量程控制开关
endalarm;
architecturealarmofalarmis
begin
p1:
process(clk1,Q4,Q3)
begin
if(K='
d3<
=Q4;
=Q3;
endprocessp1;
p2:
process(clk1,Q3,Q2)
d2<
=Q2;
endprocessp2;
p3:
process(clk1,Q2,Q1)
d1<
=Q1;
endprocessp3;
p4:
process(clk1,C,CP)--报警信号alert触发产生
)then
if(C='
alert<
if(Q4="
0001"
andC='
endprocessp4;
Y<
whenK='
else'
锁存器模块
entitylockis
port(clk1,Y,scan_clk:
endlock;
architecturelockoflockis
process(clk1,Y,scan_clk,d1,d2,d3)
unit_display<
=Y;
--数据锁存
cnt_low<
=d1;
cnt_mid<
=d2;
cnt_high<
=d3;
endlock;
扫描时钟模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitydiv_scan_clkis
enddiv_scan_clk;
architecturediv_scan_clkofdiv_scan_clkis
integerrange0to2;
signalclk1:
process(CP)
if(clk1'
eventandclk1='
if(clk_counter<
2)then
elseclk_counter<
endif;
scan_clk<
=clk1;
显示模块
entitydisplayis
port(scan_clk:
q:
outstd_logic_vector(3downto0);
enddisplay;
architecturedisplayofdisplayis
signalmux3:
std_logic_vector(1downto0);
signalq_temp:
signalselec:
P1:
process(scan_clk,cnt_low,cnt_mid,cnt_high)--分时总线切换
if(scan_clk'
eventandscan_clk='
if(mux3<
mux3<
=mux3+1;
elsemux3<
00"
casemux3is
when"
10"
=>
q_temp<
=cnt_low;
selec<
001"
01"
=cnt_mid;
010"
=cnt_high;
100"
whenothers=>
null;
endcase;
endprocessP1;
q<
=q_temp;
sell<
=selec;
数码管译码模块
entitydec_ledis
Port(q:
sell:
sel:
enddec_led;
architecturedec_ledofdec_ledis
process(q,unit_display,sell)--七段译码显示
caseqis
=>
ledout<
00111111"
--显示0
0000011
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字频率计