VHDL课程设计报告数字频率计Word文档下载推荐.docx
《VHDL课程设计报告数字频率计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VHDL课程设计报告数字频率计Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
1HZ闸门信号产生与测频时序控制电路、频率计数电路、占空比电路、动态扫描电路和译码显示电路。
由于实验硬件要求所以设计一个动态LED数码管显示即扫描模块。
当系统正常工作时,由实验板的晶振提供50MHZ的标准时钟CLK作为输入信号。
对于频率测量,经过测频时序控制电路产生一个1秒宽度的计数信号,被测信号被送入计数模块,计数模块对输入的矩形波进行计数;
对于占空比测量,通过标准时钟计算被测信号高电平以及周期的时长,并进行相关的换算。
然后将计数结果送入动态扫描电路并通过按键进行选择输出,输出结果由显示译码驱动电路将二进制表示的(BCD码)计数结果转换成相应的十进制结果,在数码管上可以看到计数结果。
图3系统组成
四、程序设计
系统的程序也相应的分成几个部分,以实现系统各个模块的功能。
系统的
程序设计如下所示:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
--------------------------------------------------------------------
ENTITYpinlvjiIS
PORT(k:
INSTD_LOGIC;
--复位信号
k5:
clk:
clkin:
--外部输入被测信号
data_led:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
--八段码
dp:
OUTSTD_LOGIC;
seg:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
--数码管位选信号
ENDpinlvji;
ARCHITECTURErtlOFpinlvjiIS
SIGNALreset:
STD_LOGIC;
SIGNALcnt1,cnt2,cnt3,cnt4,cnt5,cnt6,cnt7:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALbcd:
--BCD码寄存器
SIGNALk_1hz:
INTEGERRANGE0TO50000000;
--秒分频系数
SIGNALen,bclk,clk_shift,check_clk1,check_clk2,check_clk3,check_clk4:
std_logic;
SIGNALpoint:
STD_LOGIC_VECTOR(1DOWNTO0);
--小数点
SIGNALpointout:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALbcd0,bcd1,bcd2,bcd3:
SIGNALtemp:
STD_LOGIC_VECTOR(22DOWNTO0);
SIGNALZKB:
INTEGERRANGE0TO99;
--占空比
SIGNALCNTZ1:
INTEGERRANGE0TO50000000:
=0;
SIGNALCNQ1:
SIGNALCNTZ2:
SIGNALCNQ2:
SIGNALCLKOUT:
STD_LOGIC;
SIGNALZ1:
SIGNALZ0:
SIGNALCNT0:
INTEGERRANGE0TO50000000:
SIGNALZKOUT0,ZKOUT1:
BEGIN
reset<
=NOTk;
process(clk)--分频器;
variablecnt11,cnt22,cnt33,cnt44:
INTEGERRANGETO25000000;
begin
ifreset='
1'
then
cnt11:
cnt22:
cnt33:
check_clk1<
='
0'
;
check_clk2<
check_clk3<
check_clk4<
elsifclk'
eventandclk='
then
ifcnt11=249thencheck_clk1<
=notcheck_clk1;
cnt11:
elsecnt11:
=cnt11+1;
endif;
ifcnt22=24999thencheck_clk2<
=notcheck_clk2;
cnt22:
elsecnt22:
=cnt22+1;
ifcnt33=99999thencheck_clk3<
=notcheck_clk3;
cnt33:
elsecnt33:
=cnt33+1;
ifcnt44=499999thencheck_clk4<
=notcheck_clk4;
cnt44:
elsecnt44:
=cnt44+1;
endprocess;
second:
process(clk,reset)
thenk_1hz<
ifk_1hz<
49999999thenk_1hz<
=k_1hz+1;
elsek_1hz<
=50000000;
49999999andreset='
thenen<
elseen<
process(en,reset,bclk)--此进程完成对被测信号计脉冲数
cnt1<
="
0000"
cnt2<
cnt3<
cnt4<
cnt5<
cnt6<
cnt7<
elsifbclk'
eventandbclk='
ifcnt1="
1001"
thencnt1<
ifcnt2="
thencnt2<
ifcnt3="
thencnt3<
ifcnt4="
thencnt4<
ifcnt5="
THENcnt5<
ifcnt6="
thencnt6<
ifcnt7="
thencnt7<
elsecnt7<
=cnt7+1;
elsecnt6<
=cnt6+1;
elsecnt5<
=cnt5+1;
elsecnt4<
=cnt4+1;
elsecnt3<
=cnt3+1;
elsecnt2<
=cnt2+1;
elsecnt1<
=cnt1+1;
process(clk,en)
ifrising_edge(clk)then
if(k5='
)then
ifen='
ifcnt7>
"
thenbcd3<
=cnt7;
bcd2<
=cnt6;
bcd1<
=cnt5;
bcd0<
=cnt4;
point<
00"
elsifcnt6>
=cnt3;
01"
elsifcnt5>
=cnt2;
10"
elsebcd3<
=cnt1;
11"
endif;
else
bcd3<
1111"
bcd2<
bcd0<
=zkout0;
=zkout1;
variablecnt:
integerrange0to50000;
ifclk'
thencnt:
=cnt+1;
ifcnt<
25000thenclk_shift<
elsifcnt<
50000thenclk_shift<
elsecnt:
clk_shift<
endif;
process(clk_shift,reset)
std_logic_vector(2downto0);
cnt:
000"
shift<
elsifclk_shift'
eventandclk_shift='
ifcnt="
001"
seg<
bcd<
elsifcnt="
010"
=bcd3;
011"
seg<
0111"
pointout<
=bcd2;
100"
1011"
=bcd1;
101"
then
1101"
=bcd0;
110"
1110"
111"
endif;
process(clk_shift,bcd,k5)--译码
begin
ifclk_shift'
)then
dp<
elsif((pointout="
andpoint="
)or(pointout="
))then
elsedp<
casebcdis
when"
=>
data_led<
1000000"
--0
0001"
1111001"
--1
0010"
0100100"
--2
0011"
0110000"
--3
0100"
0011001"
--4
0101"
0010010"
--5
0110"
0000010"
--6
1111000"
--7
1000"
0000000"
--8
0010000"
--9
whenothers=>
1111111"
--Nosignal;
endcase;
endif;
process(clkin)--占空比计算
if(rising_edge(clkin))then
clkout<
=notclkout;
process(clkin,clk)
if(rising_edge(clk))then
ifclkin='
cntz1<
=cntz1+1;
elsifcntz1/=0then
cnq1<
=cntz1;
cntz1<
process(clkout,clk)
ifclkout='
cnt2<
ELSIFcnt2/=0then
cnq2<
zkb<
=cnq1*100/cnq2;
z1<
=CONV_STD_LOGIC_VECTOR((zkbREM10),4);
z0<
=CONV_STD_LOGIC_VECTOR(((zkb/10)REM10),4);
process(clk)
if(rising_edge(clk))then
if(cnt0=50000000)then
cnt0<
zkout0<
=Z0;
zkout1<
=Z1;
elsecnt0<
=cnt0+1;
bclk<
=clkinanden;
endrtl;
五、实验结果
经过多次修改和调试,设计基本上完成了功能要求,各项结果如下:
1、能够测量出方波的频率,其范围1Hz~9.9MHz;
2、可以根据输入信号大小自动变化量程;
3、要求测量的频率绝对误差±
2Hz;
4、测量响应时间小于等于10秒;
5、将测量出的频率或占空比以十进制格式在实验板上的4个数码管上显示;
6、可以通过按键选择测量和显示频率或是占空比。
测试结果附图:
六、结论分析
本设计采用EDA技术,利用直接测频法的原理和VHDL语言,采用自顶向下的设计方法,实现了1Hz~10MHz频率测量和占空比测量的四位十进制的数字频率计,并在QUARTUSⅡ软件平台下对设计项目进行了编译。
实验结果表明,该系统能够满足本次设计的要求,并且具有测量误差小,可靠性高的优点。
七、心得体会
历时一周《可编程数字系统》课程设计结束了,在这个星期中,我遇到了许多问题,而正是在解决一个个问题的过程中,我对VHDL语言的理解和认识也不断加深,对EDA技术有了进一步的了解。
这个课程设计也让我懂得,理论知识真的很重要,而实践能够加深对理论知识的理解,将理论和实践结合起来,才能设计出优秀的作品。
在这个课程设计过程中,我不只是完成一个设计,更重要的是在这一过程中所体会和学到的一些非知识技能层面的东西——细心、坚持、不断学习,我相信这会是一次难得的经历。