VHDL第三次作业解析.docx
- 文档编号:10893181
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:16
- 大小:1.22MB
VHDL第三次作业解析.docx
《VHDL第三次作业解析.docx》由会员分享,可在线阅读,更多相关《VHDL第三次作业解析.docx(16页珍藏版)》请在冰豆网上搜索。
VHDL第三次作业解析
数字频率计数显示器
数字频率计数显示器
一、功能与要求
该计数器的功能:
对被测试信号进行计数,在1秒定时结束后,将计数器结果送锁存,同时将计数器清零,为下一次采样测量做好准备。
要求如下:
1、用VHDL完成12位十进制数字频率计的设计及仿真。
2、频率测量范围:
1HZ~10KHZ,分成两个频段,即1~999HZ,1KHZ~10KHZ,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示HZ,亮红灯表示KHZ。
3、具有自动校验和没理两种功能,即能用标准时钟检验、测量精度。
4、具有超量程度报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。
二、设计思路
图2.1是频率计数器的原理图。
图2.1频率计数器的原理图
1、基本原理:
计算单位时间内待测信号的脉冲个数,各模块设计成process。
测量/检验选择模块(testmeas)
测频控制信号发生器(二分频)(clkprocess)
计数器模块(cntprocess)
送存选择、报警模块(tostoreprocess)
锁存模块(storeprocess)
扫描显示模块(cnt3process,busprocess,dispprocess)
2、各模块功能
test
measCP1
select
图2.2测量检验选择
如图2.2为测量/检验选择模块,该模块的信号如下:
输入信号:
选择信号selet,被测信号meas,测试信号test;
输出信号:
CP1。
当selet=0时,为测量状态,CP1=meas;当selet=1时,为检验状态,CP1=test。
检验与测量共用一个电路,只是被测信号CP1不同而已。
图2.3测频控制信号发生顺(二分频)
如图2.3为测频控制信号发生器(二分频),该模块的信号如下:
输入信号:
1HZ时钟信号;
输出信号:
1秒定时信号(周期为2秒)。
图2.4计数器、送存选择、报警模块
1、如图2.4为计数器、送存选择、报警模块,模块的功能如下:
设置:
量程控制开关K,单位显示信号Y,
当K=0时,为1-999HZ量程档,数码管显示的数值为被测信号频率值,unit显示绿色,即单位为HZ;
当K=1时,为1KHZ-10KHZ量程档被测信号频率值为数码管显示数值乘1000,unit显示红色,即单位为KHZ。
2、其中四级十进制计数模块(带进位C)模块功能如下:
输入信号:
RD、CP,用于计数开始、清零、锁存
输出信号:
Q4-Q1设置超出量程档测量范围示警信号alert。
若被测信号频率小于1KHZ(K=0),计数器只进行三级十进制计数,最大显示值999HZ;如果被测信号频率超过此范围,示警信号驱动灯光、扬声器报警;
若被测信号为1KHZ-10KHZ(K=1),计数器进行四位十进制计数,取高三位显示,最大显示值为9.99KHZ,如果被测信号频率超过此范围,报警。
3、送存选择、报警电路状态表如表1。
量程控制
计数器
锁存
小数点位置
报警信号
K
Q04
C
D3D2D1
alert
0
0
1
1
0
1
X
X
0
0
0
1
Q3Q2Q1
Q3Q2Q1
Q3Q2Q1
Q3Q2Q1
右第一位
右第一位
右第一位
右第一位
0
1
0
1
图2.5锁存、扫描显示模块
图2.5为锁存、扫描显示模块,该模块功能如下:
锁存器输入信号:
D3-D1,LD;
输出信号:
Q3-Q1,小数点单位显示unit。
图2.6扫描显示电路
如图2.6扫描显示电路,该模块包含两个模块:
七段显示译码器电路(DECLED)
分时总线切换电路(SCAN)。
三、原理图说明
图3.1频率计显示原理图
如图3.1,输入有扫描时钟clkscan,分频时钟clklhz,单位选择键K,被测信号meas,测试信号test,测试校验选择键sel。
输出有数码管信号led,数码管选择信号ms123,报警信号alert,单位显示信号unit。
四、源代码说明
--实体说明
libraryIEEE;
useIEEE.STDLOGIC1164.ALL;
useIEEE.STDLOGICARITH.ALL;
useIEEE.STDLOGICUNSIGNED.ALL;
entitydigfrqis
Port(clk1hz:
inSTDLOGIC;
clkscan:
instdlogic;
test:
inSTDLOGIC;
meas:
inSTDLOGIC;
sel:
inSTDLOGIC;
k:
inSTDLOGIC;
alert:
outSTDLOGIC;
unit:
outSTDLOGIC;
ms123:
outSTDLOGICVECTOR(2downto1);
led:
outSTDLOGICVECTOR(8downto1);
enddigfrq;
--结构体说明
ArchitectureBehavioralofdigfrqis
signalcpl:
stdlogic;
signalclk05hz:
stdlogic;
signalcp:
stdlogic;
signalrd:
stdlogic:
=’1’;
signalc:
stdlogic;
signalq4,q3,q2,q1:
stdlogicvector(4downto1):
=”0000”
signalload:
stdlogic:
=’0’;
signald3,d2,d1:
stdlogicvector(4downto1):
=”0000”;
signaldata3,data2,data1:
stdlogicvector(4downto1):
=”0000”;
signaldisp:
stdlogicvector(4downto1):
=”0000”;
signalns123s:
STDLOGICVECTOR(2downto1);
begin
--时钟电路,1hz信号二分频产生0.5hz信号,1s高电平,1s低电平
clkprocess:
process(clk1hz)
begin
if(clk1hz’eventandclk1hz=’1’)then
clk05hz<=notclk05hz;
endif;
endprocess;
--测试、校验选择模块
testmeas:
process(sel,meas,test)
begin
if(sel=’1’)then-sel为1时cpl为测试信号
cpl<=meas;
else-sel为0时cpl为校验信号
cpl<=test;
endif;
endprocess;
--锁存的加载信号时load,当分频信号clk05hz上升沿时有效
load<=notclk05hz;
cp<=clk05hzandcpl;
--计数清零信号rd,当分频信号clk05hz为0时有效
rd<=clk05hz;
--四位bcd计数电路
cntprocess:
process(cp,rd)
variableq4s,q3s,q2s,q1s:
integerrange0to9;
variablecs:
integerrange0to1;
begin
if(rd=’0’)then
q4s:
=0;
q3s:
=0;
q2s:
=0;
q1s:
=0;
cs:
=0;
elsif(cp’eventandcp=’1’)then
if(q4s=9andq3s=9andq2s=9andq1s=9andcs=1)then
q4s:
=0;
q3s:
=0;
q2s:
=0;
q1s:
=0;
cs:
=0;
elsif(q4s=9andq3s=9andq2s=9andq1s=9)then
q4s:
=0;
q3s:
=0;
q2s:
=0;
q1s:
=0;
cs:
=0;
elsif(q3s=9andq2s=9andq1s=9)then
q4s:
=q4s+1;
q3s:
=0;
q2s:
=0;
q1s:
=0;
elsif(q2s=9andq1s=9)then
q3s:
=q3s+1;
q2s:
=0;
q1s:
=0;
elsif(q1s=9)then
q2s:
=q2s+1;
q1s:
=0;
elsif
q1s:
=q1s+1;
endif;
endif;
q4<=convstdlogicvector(q4s,4);
q3<=convstdlogicvector(q3s,4);
q2<=convstdlogicvector(q2s,4);
q1<=convstdlogicvector(q1s,4);
if(cs=0)then
c<=’0’;
else
c<=’1’;
endif;
endprocess;
--送锁存电路
tostoreprocess:
process(q4,q3,q2,q1,c,k)
begin
if(k=’0’)then--当计数单位选择k为0时,输出计数器的低三位
d3<=q3;
d2<=q2;
d1<=q1;
if(q4>”0000”orc>’0’)then--此时,当计数超过三位bcd数时,报警信号置1
alert<=’1’;
else
alert<=’0’;
endif;
elsif(k=’1’)then--当计数单位选择k为1时,输出计数器的高三位
d3<=q4;
d2<=q3;
d1<=q2;
if(c>’0’)then--此时,当计数超过四位bcd数时,报警信号置1
alert<=’1’;
else
alert<=’0’;
endif;
endif;
endprocess;
--锁存电路
stroeprocess:
process(load,d1,d2,d3,k)
begin
if(load’eventandload=’1’)then--加载信号load下降时,锁存数据
data3<=d3;
data2<=d2;
data1<=d1;
if(k=’0’)then--当单位选择键k为0时,单位unit置0,显示绿色
unit<=’0’;
else--当单位选择键k为1时,单位unit置1,显示红色
unit<=’1’;
endif;
endif;
endprocess;
--计数到3的计数器,产生数码管选择信号
cnt3process:
process(clkscan)
variablecnt:
integarrange0to2:
=0;
begin
if(clkscan’eventandclkscan=’1’)then
if(cnt=2)then
cnt:
=0;
else
cnt:
=cnt+1;
endif;
endif;
ms123s<=convstdlogicvector(cnt,2);
endprocess;
--数码管信号选择电路
busprocess:
process(data3,data2,data1,clkscan,ms123s)
begin
if(clkscan’eventandclkscan=’1’)then
casems123sis
when”00”=>disp<=data2;
when”01”=>disp<=data3;
when”10”=>disp<=data1;
whenothers=>disp<=data1;
endcase;
endif;
endprocess;
ms123<=ms123s;
--四八译码电路
dispprocess:
process(disp,k,ms123s)
begin
casedispis
when”0000”=>led<=”00111111”;
when”0001”=>led<=”00000110”;
when”0010”=>led<=”01011011”;
when”0011”=>led<=”01001111”;
when”0100”=>led<=”01100110”;
when”0101”=>led<=”01101101”;
when”0110”=>led<=”01111101”;
when”0111”=>led<=”00000111”;
when”1000”=>led<=”01111111”;
when”1001”=>led<=”01101111”;
whenothers=>led<=”00111111”;
endcase;
if(ms123s=”00”andk=‘0’)then
led(8)<=’1’;
elsif(ms123s=”10”andk=’1’)then
led(8)<=’1’;
else
led(8)<=’0’;
endif;
endprocess;
endBehavioral;
五、仿真结果及说明
1、二分频电路仿真结果
图5.1
clk1hz一个时钟产生一个clk05hz电平,clk05hz电平高低交替。
2、测试校验选择电路
图5.2
sel为0时,cp1为测试信号meas,sel为1时,cpl为校验信号test。
3、控制电路
图5.3
当clk05hz为1,被计数信号cp为cp1,当clk05hz为0,被计数信号cp为0;
当clk05hz为1,加载信号load为0,计数清零信号为1,当clk05hz为0,加载信号load为1,计数清零信号为0。
4、四位bcd计数电路
图5.4
当清零信号rd为0时,输出信号q4,q3,q2,q1置零,当清零信号rd为1时,q4,q3,q2,q1为cp的计数值。
5、送锁存,报警模块
图5.5
当键k为0时,对bcd计数的低三位输出,当计数超出999时,报警信号输出为1。
图5.6
当键k为1时,对bcd计数的高三位输出,当计数未超出999时,报警信号输出为0。
6、锁存电路
图5.7
当键k为0时,对bcd计数的低三位锁存;
当加载键load为1时,进行锁存。
7、显示电路
图5.8
ms123为0,1,2时分别显示个位,十位,百位,当单位选择键k为1时,单位显示unit为1(红灯),且,百位数据DB高位dot位为1。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 第三次 作业 解析