VHDL课程设计报告数字频率计Word文档下载推荐.docx

上传人:b****5 文档编号:16431236 上传时间:2022-11-23 格式:DOCX 页数:14 大小:189.47KB
下载 相关 举报
VHDL课程设计报告数字频率计Word文档下载推荐.docx_第1页
第1页 / 共14页
VHDL课程设计报告数字频率计Word文档下载推荐.docx_第2页
第2页 / 共14页
VHDL课程设计报告数字频率计Word文档下载推荐.docx_第3页
第3页 / 共14页
VHDL课程设计报告数字频率计Word文档下载推荐.docx_第4页
第4页 / 共14页
VHDL课程设计报告数字频率计Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

VHDL课程设计报告数字频率计Word文档下载推荐.docx

《VHDL课程设计报告数字频率计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VHDL课程设计报告数字频率计Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

VHDL课程设计报告数字频率计Word文档下载推荐.docx

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技术有了进一步的了解。

这个课程设计也让我懂得,理论知识真的很重要,而实践能够加深对理论知识的理解,将理论和实践结合起来,才能设计出优秀的作品。

在这个课程设计过程中,我不只是完成一个设计,更重要的是在这一过程中所体会和学到的一些非知识技能层面的东西——细心、坚持、不断学习,我相信这会是一次难得的经历。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1