VHDL八位数码管频率计课程设计.docx

上传人:b****5 文档编号:7963060 上传时间:2023-01-27 格式:DOCX 页数:10 大小:33.36KB
下载 相关 举报
VHDL八位数码管频率计课程设计.docx_第1页
第1页 / 共10页
VHDL八位数码管频率计课程设计.docx_第2页
第2页 / 共10页
VHDL八位数码管频率计课程设计.docx_第3页
第3页 / 共10页
VHDL八位数码管频率计课程设计.docx_第4页
第4页 / 共10页
VHDL八位数码管频率计课程设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

VHDL八位数码管频率计课程设计.docx

《VHDL八位数码管频率计课程设计.docx》由会员分享,可在线阅读,更多相关《VHDL八位数码管频率计课程设计.docx(10页珍藏版)》请在冰豆网上搜索。

VHDL八位数码管频率计课程设计.docx

VHDL八位数码管频率计课程设计

一、课程设计要求

设计一个8位数码管显示的频率计(频率分辨率为1Hz)。

二、总体结构框图

图1总体结构框图

三、课程设计原理

在电子技术中,频率是最基本的参数之一,并且与许多点参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得尤为重要。

测量频率的方法有很多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

数字式频率计的测量原理有两类:

一是直接测频法,即在一定的闸门时间内测量被测信号的脉冲个数;二是间接测频法即周期法,如周期测频法。

直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数阀门的时间长短以达到不同的测量精度;间接测频法适用于低频信号的频率测量。

本次课程设计中使用的是直接测频法,即用计数器在计算机1s内输入信号周期的个数,其测频范围为0Hz-Hz。

四、器件的选择

1、装有QuartusII软件的计算机一台。

2、芯片:

本实验板中为EP芯片。

3、EDA实验箱一个。

4、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载。

5、时钟源。

五、功能模块和信号仿真图以及源程序

(1)系统时钟分频及控制的功能模块图及其源程序

图2功能模块图

作用:

将试验箱上的50MHz的晶振分频,输出CLOCK为数码管提供1kHz的动态扫描频率。

CNT_EN输出为的信号,对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制,当TSTEN高电平时允许计数,低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁存器REG32B中,并由外部的十进制7段数码管显示计数值。

设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号后,必须有一个清零信号RST_CNT对计数器进行清零,为下一秒的计数操作做准备。

该模块的信号仿真图如下:

图3仿真波形图

源程序如下:

--分频

libraryieee;

usefdivwangzhengis

port(clk0:

instd_logic;--输入系统时钟

clk1:

outstd_logic;--输出1hz时钟信号

clk2:

outstd_logic);--输出显示扫描时钟信号

endfdivwangzheng;

architectureaoffdivwangzhengis

begin

p1:

process(clk0)

variablecnt:

integerrange0to;--分频系数为

variableff:

std_logic;

begin

ifclk0'eventandclk0='1'then

ifcnt

cnt:

=cnt+1;

else

cnt:

=0;

ff:

=notff;--反向

endif;

endif;

clk1<=ff;

endprocessp1;

p2:

process(clk0)

variablecnn:

integerrange0to999;--分频系数为499

variabledd:

std_logic;

begin

ifclk0'eventandclk0='1'then

ifcnn<999then

cnn:

=cnn+1;

else

cnn:

=0;

dd:

=notdd;--反向

endif;

endif;

clk2<=dd;

endprocessp2;

enda;

--测频控制器

LIBRARYIEEE;

USETESTCTLwanzhengIS

PORT(CLKK:

INSTD_LOGIC;--1Hz

CNT_EN,RST_CNT,LOAD:

OUTSTD_LOGIC);

ENDTESTCTLwanzheng;

ARCHITECTUREbehavOFTESTCTLwanzhengIS

SIGNALDIV2CLK:

STD_LOGIC;

BEGIN

PROCESS(CLKK)

BEGIN

IFCLKK'EVENTANDCLKK='1'THENDIV2CLK<=NOTDIV2CLK;

ENDIF;

ENDPROCESS;

PROCESS(CLKK,DIV2CLK)

BEGIN

IFCLKK='0'ANDDiv2CLK='0'THENRST_CNT<='1';

ELSERST_CNT<='0';ENDIF;

ENDPROCESS;

LOAD<=NOTDIV2CLK;CNT_EN<=DIV2CLK;

ENDbehav;

(2)十进制计数器的功能模块图及其源程序

图4功能模块图

作用:

当使能端为高电平,清零端为低电平时,实现十进制计数功能。

第一个CNT10计数输出CQ=9时,下一秒时钟上升沿到来时,将产生一个CARRY_OUT信号作为下一个CNT10的时钟信号,同时CQ清零,依次递推到8个CNT10。

当清零端为低电平,使能端为低电平时停止计数。

当清零端为高电平时,计数器清零。

该模块的信号仿真图如下:

 

图5仿真波形图

源程序如下:

LIBRARYIEEE;

USECNT10IS

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

ENA:

INSTD_LOGIC;

CQ:

OUTINTEGERRANGE0TO9;

CARRY_OUT:

OUTSTD_LOGIC);

ENDCNT10;

ARCHITECTUREbehavOFCNT10IS

SIGNALCQI:

INTEGERRANGE0TO9;

BEGIN

PROCESS(CLR,CLK,ENA)

BEGIN

IF(CLR='1')THEN

CQI<=0;

ELSIF(CLK'EVENTANDCLK='1')THEN

IF(ENA='1')THEN

IF(CQI=9)THEN

CQI<=0;

CARRY_OUT<='1';

ELSE

CQI<=CQI+1;

CARRY_OUT<='0';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

CQ<=CQI;

ENDbehav;

(3)32位锁存器的功能模块图及其源程序

图6功能模块图

实现方式:

LOAD信号上升沿到来时将对输入到内部的CNT10计数信号进行锁存。

作用:

锁存信号,并将结果输出给SELTIME。

该模块的信号仿真图如下:

图7仿真波形图

源程序如下:

LIBRARYIEEE;

USE

ENTITYREG32BIS

PORT(

LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDENTITYREG32B;

ARCHITECTUREbehavOFREG32BIS

BEGIN

PROCESS(LOAD,DIN)IS

BEGIN

IFLOAD'EVENTANDLOAD='1'THENDOUT<=DIN;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREbehav;

(4)数码管扫描的功能模块图及其源程序

图8功能模块图

作用:

锁存信号输出DIN[31..0],然后由SELTIME进行扫描输出,当SEL为”000”时选通第一个CNT10,输出到LED7进行译码输出。

依次类推。

该模块的信号仿真图如下:

图9仿真波形图

源程序如下:

LIBRARYIEEE;

USESELTIMEIS

PORT(

CLK:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DAOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDSELTIME;

ARCHITECTUREbehavOFSELTIMEIS

SIGNALSEC:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(SEC="111")THEN

SEC<="000";

ELSE

SEC<=SEC+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(SEC,DIN(31DOWNTO0))

BEGIN

CASESECIS

WHEN"000"=>DAOUT<=DIN(3DOWNTO0);

WHEN"001"=>DAOUT<=DIN(7DOWNTO4);

WHEN"010"=>DAOUT<=DIN(11DOWNTO8);

WHEN"011"=>DAOUT<=DIN(15DOWNTO12);

WHEN"100"=>DAOUT<=DIN(19DOWNTO16);

WHEN"101"=>DAOUT<=DIN(23DOWNTO20);

WHEN"110"=>DAOUT<=DIN(27DOWNTO24);

WHEN"111"=>DAOUT<=DIN(31DOWNTO28);

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

SEL<=SEC;

ENDbehav;

(5)七段数码管译码显示的功能模块图及其源程序

图10功能模块图

作用:

将实验结果使用数码管直观的显示出来。

该模块的信号仿真图如下:

图11仿真波形图

源程序如下:

LIBRARYIEEE;

USELED7IS

PORT(DIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDLED7;

ARCHITECTUREbehavOFLED7IS

--SIGNALLED7:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

PROCESS(DIN)

BEGIN

CASEDINIS

WHEN"0000"=>DOUT<="0111111";

WHEN"0001"=>DOUT<="0000110";

WHEN"0010"=>DOUT<="1011011";

WHEN"0011"=>DOUT<="1001111";

WHEN"0100"=>DOUT<="1100110";

WHEN"0101"=>DOUT<="1101101";

WHEN"0110"=>DOUT<="1111101";

WHEN"0111"=>DOUT<="0000111";

WHEN"1000"=>DOUT<="1111111";

WHEN"1001"=>DOUT<="1101111";

WHEN"1010"=>DOUT<="1110111";

WHEN"1011"=>DOUT<="1111100";

WHEN"1100"=>DOUT<="0111001";

WHEN"1101"=>DOUT<="1011110";

WHEN"1110"=>DOUT<="1111001";

WHEN"1111"=>DOUT<="1110001";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREbehav;

(6)3-8译码器的功能模块图及其源程序

图12功能模块图

作用:

利用3-8译码器将数码管的位选信号选通。

该模块的信号仿真图如下:

图13仿真波形图

源程序如下:

LIBRARYIEEE;

USELS138IS

PORT(Q:

INSTD_LOGIC_VECTOR(2DOWNTO0);

D:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

dp:

OUTSTD_LOGIC);

ENDLS138;

ARCHITECTUREbehavOFLS138IS

BEGIN

WITHQSELECT

D<=""WHEN"000",

""WHEN"001",

""WHEN"010",

""WHEN"011",

""WHEN"100",

""WHEN"101",

""WHEN"110",

"01111111"wHEN"111",

""WHENOTHERS;

WITHQSELECT

dp<='1'WHEN"001",

'0'WHENOTHERS;

ENDbehav;

6、顶层模块图

图14总体设计顶层模块图

 

其中8个十进制计数器模块JSQ的底层模块图如图15所示:

图15计数器模块原理图

 

本次课程设计的时钟信号由试验箱上面的5MHz的晶振提供,经过系统时钟和控制模块后分别产生和10kHz的脉冲信号的脉冲信号十进制计数器的使能信号,使计数器统计出待测信号在1s脉宽之间的脉冲数目。

再由计数模块将测得的信号传送给数码管显示部分,通过译码模块产生可以在数码管上显示的BCD码。

而1kHz是作为数码管动态扫描的频率,由于人的视觉暂留现象,频率较高时,数码管看起来就是连续发光。

本设计中使个位显示为数码管的小数点后面一位,由此实现了频率分辨率为1Hz的频率计设计。

 

结论

EDA技术是电子设计的发展趋势,利用EDA工具可以代替设计者完成电子系统设计中的大部分工作。

EDA工具从数字系统设计的单一领域,发展到今天,应用范围己涉及模拟、微波等多个领域,可以实现各个领域电子系统设计的测试、设计仿真和布局布线等,这些都是我在这次课设中深刻体会到的。

经过这次课程设计,让我真正认识了EDA这门学科,了解到这种方式下的设计方案,硬件电路简洁,集成度高,体现了当今社会所需的先进技术,日后必定在有着广阔的发展空间。

通过这次对EDA课程设计的进一步操作,能更好的在QuartusII上进行VHDL程序的编译及各个模块的仿真,虽然在实际操作过程中由于粗心造成了程序的缺失和错误,但都在老师和同学的帮助下一一解决了。

很好地巩固了我们学过的专业知识,使我对数字系统结构也有了更进一步的了解和认识,同时对数据库软件EDA技术、VHDL等系列知识都有了一定的了解。

使用EDA技术开发页面的能力也有了很大提高,也使我们把理论与实践从真正意义上相结合了起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。

在这次课程设计中,虽然应用的都是在书本上学过的知识,但是只有应用到实际中才算真正的学懂了这些知识。

本次数字频率计的涉及到了VHDL语言、QuartusII软件,EDA技术等。

涉及了微机原理和EDA所学的大部分内容。

通过这次课程设计实践巩固了学过的知识并能够较好的利用。

课程设计实践不单是将所学的知识应用于实际,在设计的过程中,只拥有理论知识是不够的。

逻辑思维、电路设计的步骤和方法、考虑问题的思路和角度等也是很重要,需要我们着重注意锻炼的能力。

在这次设计中还发现理论与实际常常常存在很大差距,为了使电路正常工作,必须灵活运用原理找出解决方法。

在课题设计中,通过使用QuartusII这个完全集成化、易学易用的可编程逻辑设计环境,利用VHDL语言设计完成八位十进制数字频率计,能够较好的测定所给频率,并且具有自动清零和自动测试的功能,基本符合此次课程设计给出的要求。

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

当前位置:首页 > 高中教育 > 英语

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

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