《可编程逻辑器件及应用》课程设计报告完整.docx
- 文档编号:25480336
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:17
- 大小:640.23KB
《可编程逻辑器件及应用》课程设计报告完整.docx
《《可编程逻辑器件及应用》课程设计报告完整.docx》由会员分享,可在线阅读,更多相关《《可编程逻辑器件及应用》课程设计报告完整.docx(17页珍藏版)》请在冰豆网上搜索。
《可编程逻辑器件及应用》课程设计报告完整
摘
要
本课程设计给出了一种基于FPGA的多功能数字时钟方法,采用EDA作为开发工具,VHDL语言和图形输入为硬件描述语言,QuartusII9.0作为运行程序的平台,编写的程序经过调试运行,波形仿真验证,下载到EDA实验箱的FPGA芯片,实现了设计目
该系统主要由分频模块、控制模块、计时模块、显示模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,能够在数码管上完成年、月、日和时、分、秒的分别显示,由按键输入进行数字时钟的校时、清零、暂停功能。
关键词:
EDA技术;FPGA;数码管
Abstract
ThecoursedesigngivesaFPGA-basedmultifunctionaldigitalclockusingEDAasadevelopmenttool,VHDLlanguageandgraphicalinputhardwaredescriptionlanguage,theQuartusII9.0asaplatformforrunningtheprogram,writtenproceduresdebuggingandrunning,thewaveformsimulationdownloadedtotheFPGAchiptoachievethedesigngoals.
Thedesignforamulti-functionaldigitalclock,withayear,month,day,hours,minutesandsecondscountdisplaytoa24-hourcyclecount,withthepausetime,clearfunctionandthehoursandminutessettingfunction.
Themainsystemismadeupoffrequencymodule,controlmodule,timemodule,displaymodule.Aftercompilingthedesignandsimulationprocedures,theprogrammablelogicdevicetodownloadverification,thesystemcancompletetheyear,month,dayandthehours,minutesandsecondsrespectively,usingkeystomodify,clear,startandstopthedigitalclock.
Keywords:
EDAtechnology;FPGA;digitalclock;VHDLlanguage;digitaltube
目
录
1绪论...........................................................................................................................................................1
1.1
1.2
课程背景............................................................................................................................................1
设计目的............................................................................................................................................1
2总体设计流程说明...................................................................................................................................2
2.1
数字时钟的工作原理........................................................................................................................2
3
单元模块设计流程...................................................................................................................................5
3.1分频模块............................................................................................................................................5
3.2计数模块............................................................................................................................................5
3.3控制模块............................................................................................................................................7
4系统调试说明及分析.............................................................................................................................10
5总结.........................................................................................................................................................11
6附录.........................................................................................................................................................12
1绪论
1.1课程背景
如今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
EDA技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。
最终形成集成电子系统或专用集成芯片的一门新技术。
这次课程设计利用VHDL硬件描述语言结合可编程逻辑器件进行的,并通过数码管动态显示计时结果。
利用可编程逻辑器件具有其他方式没有的特点,它具有易学,方便,新颖,有趣,直观,设计与实验项目成功率高,理论与实践结合紧密,体积小,容量大,I/O口丰富,易编程等特点,应用非常方便。
所以,本次设计采用可编程逻辑器件实现。
1.2设计目的
现在电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。
因此我们需要一个定时系统来提醒这些忙碌的人。
数字化的钟表给人们带来了极大的方便。
近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
研究数字时钟及其应用,有着非常现实的意义。
1
2.总体设计流程说明
2.1数字时钟的工作原理
振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。
秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。
计满后各计数器清零,重新计数。
日期部分由于日有28天、29天、30天、31天4种情况,故日由年和月共同判断其天数,日计满后向月进位,月满后向年进位。
计数器的输出分别经译码器送数码管显示。
计时出现误差时,可以用校时电路校时、校分、校秒和校年、校月和校日。
在控制信号中除了一般的校时信号外,还有时钟使能信号、时钟清零信号。
控制信号由4×4矩形键盘输入。
时基电路可以由石英晶体振荡电路构成,如果晶振频率为1MHz,经过6次十分频就可以得到秒脉冲信号。
译码显示电路由七段译码器完成,显示由数码管构成。
3单元模块设计流程
3.1分频模块
图6分频模块
图6分频模块设计的原理主要是计数分频,用了两种分频,一种是50MHZ变成200HZ的分频,用于扫描按键输入的时钟脉冲,另外一种是将200HZ分频为1HZ用于时间信号的脉冲。
如200HZ的脉冲经过200次计数后溢出的时钟就是1HZ。
程序仿真波形如图7所示。
2
图7仿真波形
因为50MHZ的仿真太大,仿真的时候等待的时间很长,而且毛刺很多,不容易观察实验的结果,所以软件仿真的时候将分频改成了1000分频方便观察现象,波形中NEWCLK变成1的时候,CLK计数刚好满1000次,说明运行成功。
3.2计数模块
计数模块用到计数器包括年、月、日、时、分、秒,图8和图9分别为秒和日的计数模块。
图8秒的计数模块
计数器是这次设计的基本组成部分,但几个计数器的原理都基本一样,LD是预置数使能端,低电平有效,当LD为0时,DATA的值送给NUM。
正常运作时CLK来一个上升沿,NUM输出加1。
图9日的计数模块
3
LD是置数端、NIAN[6..0]和YUE[3..0]是当前的年月,DATA[4..0]是预置数,MAX_DAYS[4..0]是最大天数的输出端,连接到控制器的输入端,用于调节时间。
仿真波形如图10所示。
图10仿真波形
3.3
控制模块
4
图11控制模块
控制模块是本设计的核心模块,主要实现时间的设置,KEY1是调节时间的总控制,KEY2、KEY3主要负责指定数值的增与减。
当KEY1输入低电平时,时钟暂停,开始调节时钟的秒,再输入多一次时开始调节时间的分钟数值,RES是退出调节的按键,无论进行到哪一步,只要RES输入低电平,调节控制将跳出。
SEC_EN、MIN_EN、HOUR_EN、DAY_EN、MON_EN、YEAR_EN是使能端,相应位为高电平时调节相应的目标。
SEC[5..0]、MIN[5..0]、HOUR[4..0]、DAY[4..0]、MON[3..0]、YEAR[6..0]分别是秒、分、时、日、月、年的预置数,当调节按键KEY1按下时,这些置数将会送给对应的计数器进行显示。
当SEC_EN为低电平时选择调节秒的数值。
控制模块仿真如图12所示。
图12控制模块仿真
时间设置按键KEY1第一次按下时对秒SEC进行设置,SEC_EN有效,KEY2按键输入一个低跳变时,SEC加1,并且SEC的数值0、1、2、3等将会送到计数器的预置数端,这是计数器的LD有效即可将预置数直接送到数码管去显示。
5
当KEY1再次按下时对分MIN进行设置,MIN_EN有效,即连接MIN计数器的LD有效,预置数直接送给MIN计数器,无论计数器里面的值现在是多少,结果都会变成预置数的值,KEY2按键输入一个低跳变时,MIN加1。
RES是退出设置,按下之后,计数器进入正常计时。
另外还需要用到消抖模块,主要是用状态机去除毛刺,其原理和延时去毛刺的原理基本上一样,因为毛刺持续的时间比较短,一般只会存在5至10毫秒,所以如果想消去毛刺的话,只需要检测一个信号(低电平)可以持续5个毫秒的就可以认为是有按键按下去了。
一共用了3个输入按键,分别是:
时间设置选项、时间加1、时间减1,CLK的输入时钟是200HZ。
消抖模块的原理图和仿真波形如图13和图14所示。
图13消抖模块
图14仿真波形
6
4系统调试说明及分析
本系统只有FPGA编程硬件设计电路。
在系统调试中采用自底向上的调试方法,也就是先进行各个单元模块的软件编译,在各个单元模块调试好后再把单元模块原理图化,然后综合起来进行系统的整体编译和仿真。
功能仿真无误后,通过下载数据线将设计文件加载到目标器件—FPGA,通过控制按键观察LED显示是否达到数字钟的设计要求。
经调试,可以完成数字钟功能如图17和18所示。
7
总
结
在这次的课程设计过程中,我更进一步地熟悉了有关数字电路的知识和具体应用。
学会了利用QuarterII9.0软件进行原理图的绘制,硬件描述语言VHDL的编写,实际下载到实验箱上后会出现一系列的问题,因此仿真图和电路连接图还是有一定区别的。
这次设计对于我以后的工作和学习都是一种巨大的帮助,我的专业知识水平也取得一定的进步,非常感谢老师在实验课上的帮助。
同时这次设计是采用硬件描述语言和FPGA芯片相结合进行的数字钟的研究,从中可以看出EDA技术的发展在一定程度上实现了硬件设计的软件化。
设计的过程变的相对简单,容易修改等优点,相信随着电子技术的发展,数字钟的功能会更加多样化,满足人们的各种需要。
8
附录
秒计数模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitymiaois
port(enl,res,clk,madd,mdec:
instd_logic;
a,b:
outstd_logic_vector(3downto0);
ca:
outstd_logic);
endmiao;
architectureSECofmiaois
begin
process(enl,clk,res)
variablem0,m1:
std_logic_vector(3downto0);
begin
ifres='1'thenm0:
="0000";
m1:
="0000";
ca<='0';
elsifclk'eventandclk='1'then
ca<='0';
ifmadd='1'orenl='1'then
ifm0="1000"andm1="0101"thenca<='1';--实际是第59个--脉冲endif;
ifm0<"1001"thenm0:
=m0+1;
elsem0:
="0000";
m1:
=m1+1;
ifm1>"0101"thenm0:
="0000";
m1:
="0000";
ca<='0';
endif;
endif;
elsifmdec='1'then
ifm0="0000"andm1="0000"thenm0:
="1001";
m1:
="0101";
elsifm0>"0000"thenm0:
=m0-1;
elsem0:
="1001";
m1:
=m1-1;
endif;
endif;
endif;
a<=m0;
b<=m1;
endprocess;
9
endSEC;
--计数进程
if(sig2='1')then
if(counter="11")then
sig1<='0';
counter<="00";
else
sig1<='1';
counter<=counter+'1';
endif;
endif;
endif;
endprocess;
process(clky)--列线逐位输出低电平variablejt:
std_logic;
begin
if(clky'eventandclky='1')then
ii(sig1='1')then
jj:
=sig_com(3);
foriin3downto1loop
sig_com(i)<=sig_com(i-1);
endloop;
sig_com(0)<=jt;
else
sig_com<="1110";
endif;
endif;
endprocess;
process(clky)
begin
if(clky'eventandclky='1')then
if(sig1='1')then
com<=sig_com;
else
com<="0000";
endif;
endif;
endprocess;
process(clky)--键码信号赋值begin
if(clky'eventandclky='1')then
if(sig1='1')then
if(tmp='0')then
scan_code<=row&sig_com;
10
else
scan_code<="11111111";
endif;
else
scan_code<="11111111";
endif;
endif;
endprocess;
endbehav;
按键消抖模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityqudouis
port(clk1:
instd_logic;
row:
instd_logic_vector(3downto0);
key_pre:
outstd_logic);
endqudou;
architecturebehavofqudouis
signalsig1,counter:
std_logic_vector(3downto0);
signaltmp1,sig2:
std_logic;
begin
sss1<=row;
ttt1<=sig1(0)andsig1
(1)andsig1
(2)andsig1(3);
key_pre<=counter(0)andcounter
(1)andcounter
(2)andcounter(3);
process(clk1)
begin
if(clk1'eventandclk1='1')then
if(tmp1='0')then
if(sig2='0')then
sig2<='1';
endif;
endif;
if(sig2='1')then
if(counter="1111")then
sig2<='0';
counter<="0000";
else
counter<=counter+'1';
endif;
endif;
endif;
endprocess;
11
endbehav;
扫描显示
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityseltimeis
port(disclk,conv:
instd_logic;
m0,m1,f0,f1,s0,s1,r0,r1,y0,y1,n0,n1,n2,n3:
instd_logic_vector(3downto0);
dataout:
outstd_logic_vector(3downto0);
wsel:
outstd_logic_vector(3downto0));
endseltime;
architecturestofseltimeis
signalcount:
std_logic_vector(3downto0);
begin
wsel<=count;
process(disclk,conv)
begin
ifdisclk'eventanddisclk='1'then
ifcount>="1010"then
count<="0000";
else
count<=count+1;
endif;
endif;
ifconv='1'then
casecountis
when"1010"=>dataout<=s1;
when"1001"=>dataout<=s0;
when"0110"=>dataout<=f1;
when"0101"=>dataout<=f0;
when"0100"=>dataout<=m1;
when"0011"=>dataout<=m0;
whenothers=>dataout<="0000";
endcase;
else
casecountis
when"1010"=>dataout<=n3;
when"1001"=>dataout<=n2;
when"1000"=>dataout<=n1;
when"0111"=>dataout<=n0;
when"0110"=>dataout<=y1;
when"0101"=>dataout<=y0;
when"0100"=>dataout<=r1;
12
when"0011"=>dataout<=r0;
whenothers=>dataout<="0000";
endcase;
endif;
endprocess;
endst;
13
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程逻辑器件及应用 可编程 逻辑 器件 应用 课程设计 报告 完整
![提示](https://static.bdocx.com/images/bang_tan.gif)