硬件课程设计论文)基于FPGA的数字时钟设计.doc

上传人:sccc 文档编号:4878249 上传时间:2023-05-21 格式:DOC 页数:25 大小:563.01KB
返回 下载 相关 举报
硬件课程设计论文)基于FPGA的数字时钟设计.doc_第1页
第1页 / 共25页
硬件课程设计论文)基于FPGA的数字时钟设计.doc_第2页
第2页 / 共25页
硬件课程设计论文)基于FPGA的数字时钟设计.doc_第3页
第3页 / 共25页
硬件课程设计论文)基于FPGA的数字时钟设计.doc_第4页
第4页 / 共25页
硬件课程设计论文)基于FPGA的数字时钟设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《硬件课程设计论文)基于FPGA的数字时钟设计.doc》由会员分享,可在线阅读,更多相关《硬件课程设计论文)基于FPGA的数字时钟设计.doc(25页珍藏版)》请在三一办公上搜索。

1、信息与控制工程学院硬件课程设计说明书基于FPGA的数字时钟设计学生学号: 学生姓名: 专业班级: 指导教师: 职 称: 教授 起止日期: 2011.3.282011.4.15 吉林化工学院Jilin Institute of Chemical Technology信息与控制工程学院硬件课程设计说明书硬件课程设计任务书一、设计题目:基于FPGA的数字时钟设计二、设计目的1掌握利用EDA开发工具Max+plusII进行可编程逻辑器件设计的方法; 2掌握用FPGA进行计数器、译码器及LED动态扫描显示驱动电路设计的方法;3熟练掌握可编程逻辑器件的文本输入(VHDL)层次化设计方法;4掌握利用Max+

2、plusII进行软件仿真及对可编程逻辑器件进行硬件下载的方法。三、设计任务及要求设计并实现数字钟。下载芯片:EPF10K10LC84(Altera的FLEX10K系列芯片)。时钟基本功能:1具有时、分、秒显示,24小时循环计时功能;2具有时间校准(调时/对时)功能。可扩展其它功能。四、设计时间及进度安排设计时间共三周(11.3.2811.4.15),具体安排如下表:周安排设 计 内 容设计时间第一周学习可编程逻辑器件开发工具Max+plusII的使用及原理图输入设计方法,熟悉硬件电路(显示及驱动电路),学习VHDL,设计时、分、秒模块,并进行软件仿真。11.3.28-11.4.01第二周学习可

3、编程逻辑器件的文本输入层次化设计方法,设计数字钟的译码、动态扫描及整点报时模块,设计数字钟顶层电路,下载实现数字时钟的基本功能。11.4.04-11.4.08第三周实现基本要求之外的其它扩展功能;用PROTEL软件绘制整体硬件原理图;撰写并完成硬件课程设计说明书,测试硬件设计作品的功能,进行课程设计答辩。11.4.11-11.4.15五、指导教师评语及学生成绩指导教师评语:年 月 日成绩指导教师(签字):- I -目 录硬件课程设计任务书I第1章 设计的硬件平台及开发工具11.1 硬件平台11.2 开发工具1第2章 数字时钟的设计方案及FPGA的顶层设计22.1 数字钟整体设计方案22.1.1

4、 数字钟的功能22.1.2 硬件要求22.1.3 引脚说明以及设计方案22.2 可编程逻辑器件FPGA的顶层设计2第3章 数字时钟的底层模块设计43.1 秒模块设计43.1.1 秒模块VHDL程序43.1.2 秒模块的仿真实现53.2 分模块设计63.2.1 分模块VHDL程序63.2.2 分模块的仿真实现73.3 时模块设计73.3.1 时模块VHDL程序83.3.2 时模块的仿真实现93.4 动态显示扫描模块设计93.4.1 动态显示扫描模块VHDL程序93.4.2 动态显示扫描模块的仿真实现103.5 段码译码模块设计113.5.1 段码译码模块VHDL程序113.5.2 段码译码模块的

5、仿真实现123.6 整点报时模块设计(发挥部分)123.6.1 整点报时模块VHDL程序123.6.2 整点报时模块的仿真实现13第4章 数字时钟的设计实现144.1数字时钟的硬件设计过程144.2硬件下载过程144.2.1 接口设置144.2.2 器件编程的下载144.3 硬件电路连接154.3.1 硬件电路连接说明16结 论17参考文献18附录19- 19 -第1章 设计的硬件平台及开发工具1.1 硬件平台本设计基于复杂可编程逻辑器件(CPLD/FPGA)设计并实现数字时钟。采用Altera公司的器件进行设计,开发调试时采用Altera的FPGA芯片FLEX10K10LC84,设计完成后下

6、载生成数字钟硬件于Altera的CPLD芯片EPM7128SLC84中,实现数字钟功能。利用Altera可编程逻辑器件开发实验系统进行设计。系统提供FPGA/CPLD下载板及相应的其它硬件资源。时钟的时间显示采用6位LED数码管(动态扫描驱动方式),采用系统提供的1Hz脉冲输出作为时钟的秒输入。按键作为调准时、分及秒清零的功能键。蜂鸣器和发光二极管用于产生整点时的声光报时信号。1.2 开发工具利用Altera的可编程逻辑器件开发工具MAX+PLUS,采用原理图输入的设计方法进行数字钟的设计与调试。MAX+PLUS是一个集成的软件开发平台,提供了从设计输入、编译、器件适配、软件仿真到器件下载的全

7、部功能。图1-1为工具环境。图1-1 MAX+PlusII工具环境第2章 数字时钟的设计方案及FPGA的顶层设计2.1 数字钟整体设计方案2.1.1 数字钟的功能1)以24小时制显示时、分、秒计数; 2)时间清零,时设置,分设置功能;3)整点报时功能。2.1.2 硬件要求1)可编程逻辑器件主芯片:EPF10K10LC84-4;2)显示器件:采用六个八段LED共阴极数码管,以动态扫描方式显示时间;3)时间设定与调准:三个按键用于调时、调分及启动计时;4)采用蜂鸣器与发光二极管进行整点声光报时;5)由晶振(CD4060)组成的脉冲发生电路提供数字钟计时的秒脉冲输入(1Hz)和动态扫描驱动模块输入脉

8、冲(频率约为1kHz)。2.1.3 引脚说明以及设计方案clk为秒脉冲输入端,由晶振与分频计数器(CD4060)组成的脉冲发生电路提供频率为1Hz的秒脉冲输入信号;smclk为动态扫描控制模块的输入端,由脉冲发生电路输入频率约1kHz的脉冲信号;hourset、minset和reset分别为时设置、分设置和时间清零输入端,连接按钮开关;a、b、c、d、e、f、g、dp为显示段码输出,接数码管的段码输入(led7s6-len7s0);sel0、sel1、sel2接SN74LS138N译码器的输入端;speaker为数字钟的整点声音报时输出,接蜂鸣器进行整点声音报时,lamp0、 lamp1和la

9、mp2为数字钟的报时灯光输出,分别接三只LED发光二极管,进行整点报时发光。数字钟电路原理图见附录。2.2 可编程逻辑器件FPGA的顶层设计用顶层设计采用原理图输入设计、底层设计采用VHDL设计的原理图与VHDL混合设计方法设计带整点报时功能的数字钟,所以此设计可分为顶层与底层设计,共分为六个模块,即时模块、分模块、秒模块、动态扫描控制模块、段码译码模块和整点报时模块。顶层电路设计原理图如2-1所示。秒模块主体为60进制的计数器,daout为向动态扫描控制模块提供秒的个位和十位数据的信号。reset 为秒清零;enmin为分钟进位,每60秒产生一个高电平的信号,作为分模块的时钟输入;clk为秒

10、模块的时钟输入,接1Hz脉冲信号;min_set为分钟设置,低电平是不影响秒模块工作,当它为高电平时,enmin信号会随之产生一个和clk频率相同的信号,达到调整分钟的目的。分模块主体为60进制的计数器,daout为向动态扫描控制模块提供分的个位和十位数据的信号。Enhour为分钟进位,每60分产生一个高电平的信号,作为时模块的时钟输入;秒计数到60时的进位输出信号enhour1和分钟调整输入信号minset,经或关系后接分的脉冲输入端clk; clk1为时调整脉冲,接1Hz脉冲; hour_set为时钟设置,低电平是不影响分模块工作,当它为高电平时,enmin信号会随之产生一个和clk频率相

11、同的信号,达到调整时的目的。时模块为一个24进制的计数器,daout为向动态扫描控制模块提供秒的个位和十位数据的信号。分计数到60时的进位输出信号enhour1和时调整输入信号hourset,经或关系后接时脉冲输入端clk。daout为向动态扫描控制模块提供时的个位和十位数据的信号。动态扫描模块中smclk为动态扫描控制模块的脉冲输入,由外部脉冲发生电路提供,频率约为1kHz;sel0、sel1、sel2接外部38译码器74LS138的输入端A、B、C(译码器输出经75451驱动LED数码管的位选端);sec6.0、min6.0、hour5.0分别为秒模块、分模块、时模块计数段码输出控制信号。

12、该模块实现时间的动态扫描显示控制。段码译码模块是将动态扫描模块输出的BCD码转换成驱动数码管所需要的信号。整点报时模块用于产生整点时的LED发光二极管彩灯和报时输出。分模块输出的信号接入dain。整点声音报时输出信号speak接蜂鸣器输入,信号lamp2.0控制整点时产生60秒的LED发光二极管彩灯闪烁报时输出信号。 图2-1 顶层电路设计原理图第3章 数字时钟的底层模块设计3.1 秒模块设计图3-1 秒模块顶层设计原理图3.1.1 秒模块VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all

13、; entity sec isport(clk,reset,min_set:in std_logic;-clk为1Hz的秒脉冲输入信号,reset为秒清零(复位)信号 -min_set为分钟调整 enmin:out std_logic; -enmin为秒模块进位输出daout:out std_logic_vector(6 downto 0); -2n-160,n=7,27=64,分钟用7位二进制数表示 -daout(6.4)为十位,daout(3.0)为个位,60循环计数end entity sec;architecture behave of sec is signal count:std_

14、logic_vector(6 downto 0); -定义内部计数节点,60循环计数 signal enmin1,enmin2:std_logic; -enmin为60秒产生的进位,enmin2为调分键产生的向分模块的进位begindaout=count; enmin2=(min_set and clk); enmin=(enmin1 or enmin2); -60秒钟到和调分键均向分模块产生进位脉冲process(clk,reset,min_set)beginif(reset=0)then count=0000000; -检测秒模块的1Hz脉冲上升沿elsif(clkevent and cl

15、k=1)then if(count(3 downto 0)=1001)then -秒的个位是否到“9”if count(6 downto 4)=101then -秒各位到“9”后,十位计数到“5”enmin1=1; -秒模块的60秒进位输出enmin置“1”,向分模块产生进位count=0000000; -秒计数值“0000000”(零秒)elsecount=count+7; -秒各位到“9”后,十位计数没到“5”,则加“7”变为“0”,同时向十位进位end if;elsecount=count+1; -秒个位没计到“9”时,秒计数值加“1”enmin1=0; -秒模块的60秒进位输出enmi

16、n1置“0”,不向分模块进位end if;end if;end process;end behave; 3.1.2 秒模块的仿真实现由图3-2可以看出 clk输入脉冲信号时,动态扫描控制模块daout和count开始启动计数,此时分设置min_set为低电平。在570.0ns时将min_set设置为高电平,此刻分进位enmin产生与clk相同频率的信号脉冲,当在593.0.0ns时,min_set为低电平,那么enmin也为低电平(无脉冲)。当723.0ns时,清零reset设置为低电平,此刻daout和count都将清零,当735.0ns时reset恢复为高电平,daout和coutn两者重

17、新开始计数。605.0ns时daout计数到六十,enmin产生脉冲后daout和count清零并重新开始计数。如上所述功能实现。图3-2 秒模块仿真图3.2 分模块设计图3-3 分模块顶层设计原理图3.2.1 分模块VHDL程序LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY min ISPORT(clk,clk1,hour_set:IN STD_LOGIC; -clk为分钟模块的脉冲输入信号,接秒模块的进位输出 -clk1接秒脉冲输入,hour_set为小时调整enhour:OUT

18、 STD_LOGIC; -enhour为分钟模块的进位输出daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-2n-160,n=7,27=64,分钟用7位二进制数表示-daout(6.4)为十位,daout(3.0),60循环计数END ENTITY min;ARCHITECTURE behave OF min ISSIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);-定义内部计数节点,60循环计数SIGNAL enhour1,enhour2:STD_LOGIC;-enhour1为60分钟产生的进位。enhour2为调时键的脉冲BEG

19、INdaout= count;enhour2=(hour_set and clk1);enhour=(enhour1 or enhour2); -60分钟到和调时键均向小时模块产生进位脉冲PROCESS(clk)BEGINIF(clkevent and clk=1)THEN -检测分钟模块的脉冲上升沿IF(count(3 downto 0)=1001)THEN -分钟的各位是否到“9”IF count(6 downto 4)=101THEN -分钟各位到“9”后,十位计数到“5”enhour1=1; -分钟模块的60分钟进位输出enhour1置“1”,向时模块产生进位count=0000000

20、; -分钟计数值回零“0000000”(零分)ELSEcount=count+7; -分钟各位到“9”后,十位计数没到“5”,则“7”变为“0”,同时向十位进位END IF;ELSEcount=count+1; -分钟各位没计到“9”时,分钟计数值加“1”enhour1=0; -分钟模块的60分钟进位输出enhour1置“0”,不向时模块进位END IF;END IF;END PROCESS;END behave; 3.2.2 分模块的仿真实现由图3-4可以看出,当clk输入脉冲信号时,态扫描控制模块daout和count开始启动计数,这时时进位enhour为低电平,且时设置hour_set也

21、为低电平。在1.05us时,将hour_set设置为高电平,此时enhour产生与clk1相同的频率信号。当1.09us时,hour_set恢复低电平,enhour也变为低电平(无脉冲)。1.21us时,daout计数到60,enhour产生脉冲,daout和count清零并将重新计数。如上所述功能实现。图3-4 分模块仿真图3.3 时模块设计图3-5 时模块顶层设计原理图3.3.1 时模块VHDL程序LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY hour ISPORT(clk:I

22、N STD_LOGIC;daout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);- 2n-124,n=6,26 =32,小时用6位二进制数表示-daout(5.4)为十位,daout(3.0)为个位,24循环计数END ENTITY hour;ARCHITECTURE behave OF hour ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);-定义内部计数节点,24循环计数BEGINdaout=count;PROCESS(clk)BEGINIF(clkevent and clk=1)THEN -检测小时模块的脉冲上升沿IF(co

23、unt(3 downto 0)=1001)THEN -小时的各位是否到“9”IF(count16#23#)THEN count=count+7; -小时各位到“9”后,计数没到“23”,则加“7”变为“0”,同时向十位进位ELSE count=000000;-小时各位到“9”后,如果计数值大于“23”,则置小时为“零”END IF;ELSIF(count16#23#)THEN count=count+1; -小时个位没计到“9”且计数没到“23”时,加“1”ELSE count=000000; -小时计数已到“23”时,计数值回零“000000”(零时)END IF;END IF;END PR

24、OCESS;END behave;3.3.2 时模块的仿真实现由图3-6可以看出,当clk输入脉冲信号时,动态扫描控制模块daout和count开始启动计数。在970.0ns时,daout和count达到24,并且从重新开始计数。如上所述功能实现。图3-6 时模块仿真图3.4 动态显示扫描模块设计图3-7 动态显示扫描模块顶层设计原理图3.4.1 动态显示扫描模块VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity se

25、lmk isport(clk1:in std_logic; -动态扫描输入脉冲sec,min:in std_logic_vector(6 downto 0); -7位二进制数表示的秒、分计数输入hour:in std_logic_vector(5 downto 0); -6位二进制数表示的小时计数输入daout:out std_logic_vector(3 downto 0); -4位十进制码计数输入dp:out std_logic; -时、分、秒间的间隔“点”输出sel:out std_logic_vector(2 downto 0); -3位数码管位选输出,接外部3-8译码器输出,译码输出

26、再经驱动接数码管共阴极端end entity selmk;architecture behave of selmk issignal count:std_logic_vector(2 downto 0); -定义内部计数节点,六进制循环计数(6个数码管显示)beginsel=101)then count=000; else countdaout=sec(3 downto 0);dpdaout(3)=0;daout(2 downto 0)=sec(6 downto 4);dpdaout=min(3 downto 0);dpdaout(3)=0;daout(2 downto 0)=min(6 do

27、wnto 4);dpdaout=hour(3 downto 0);dpdaout(3 downto 2)=00;daout(1 downto 0)=hour(5 downto 4);dpled7sled7sled7sled7sled7sled7sled7sled7sled7sled7snull;end case;end process;end behave;3.5.2 段码译码模块的仿真实现由图3-10可以看出,此模块是将扫描模块的dout信号输出的BCD码转换为数码管可以显示的段码。如上所述功能实现。图 3-10段码译码模块时序仿真图3.6 整点报时模块设计(发挥部分)图3-11 整点报时模

28、块顶层设计原理图3.6.1 整点报时模块VHDL程序LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bsmk isport(clk:in std_logic; -脉冲输入,可接1Hz秒脉冲输入,用于整点声报时发出间断报时响声dain:in std_logic_vector(6 downto 0); -分钟模块计数输入speak:out std_logic; -整点声报时输出,外接蜂鸣器lamp:out std_logic_vector(2 downto 0);-整点光报时输出,可外接

29、红、蓝、黄三个发光二极管end entity bsmk;architecture behave of bsmk issignal count:std_logic_vector(1 downto 0); -定义内部计数节点beginprocess(clk)beginspeak10)then count=01;else count=count+1;end if;if(count=01)then lamp=001; -整点光报时,可接红色发光二极管elsif(count=10)then lamp=010; -整点光报时,可接绿色发光二极管elsif(count=11)then lamp=100; -

30、整点光报时,可接黄色发光二极管end if;else lamp=000; count(0)=0; -没到整点时,无声光报时输出end if;end if;end process;end behave;3.6.2 整点报时模块的仿真实现clk为脉冲输入信号,lamp表示报警灯的信号显示,speak表示蜂鸣器报警信号显示。由图3-12可以看出,当clk输入脉冲信号时,dain并没有信号产生。而count开始启动计数,在40.0ns时,报时speak开始报警,lamp闪烁显示。在210.0ns时,dain变为1,speak和lamp都变为低电平(不再报警)。由此可以看出在dain为零时,分钟即为零。

31、如上所述功能实现。图3-12 整点报时模块仿真图第4章 数字时钟的设计实现4.1数字时钟的硬件设计过程(1) 开发环境的打开 单击“开始” “所有程序” “MAX+plus II 10.0 BASELINE” “MAX+plus II 10.0 BASELINE”(2) 建立文件 单击“MAX+plus II” “Gnaphic Editor”来建立新的文件,输入各模块原理图、引脚、原件,定义后连接原理图和原件以及引脚,单击“保存”“编译”进行文件的编译错误检查。4.2硬件下载过程4.2.1 接口设置在当前文件下单击“File” “Project” “Set Project to Curren

32、t File”指定文件,点击“MAX+plus II” “Programmer”弹出下载对话框如图4-1,后选择“Options”“Hardware Setup”在对话框中选择“ByteBlaster(MV)”后单击确定按钮完成设置。图4-1 接口设置对话框4.2.2 器件编程的下载接口设置成功以后,单击“JIAG” “Multi-Device JIAG Chain Setup”进入器件编程选择对话框,如图4-2,此时点击“Select Programming File”找到文件名为“dingcengshejitu.sof”的编程文件并按“ADD”添加到列表后点击“OK”退出对话框,完成设置。

33、此时检查PC机与硬件箱的连接情况,确认数据线连接无误后点击“Programmer”对话框中的“Configure”进行对器件编程的下载,当进度条达到100的时候会提示下载成功。图 4-2 器件编程选择对话框4.3 硬件电路连接图 4-3 引脚连接示意图编程下载成功后单击软件中的“MAX+plus II” “Floorplan Editor”查看引脚连接示意图,如图4-3,根据引脚图连接各硬件。4.3.1 硬件电路连接说明FLEX10K芯片EPF10K10LC84-4的1引脚接入频率约为1Hz的脉冲,43引脚接入频率约为1KHz的扫描脉冲,2引脚接复位按钮(RESET),用于时间清零;21、22

34、、23引脚分别接指示灯lamp0、lamp1、lamp2,用于灯光指示;42引脚接时设置按钮(HOURSET),用于时设置;44引脚接分设置按钮(MINSET),用于分设置;28引脚接蜂鸣器(SPEAKER),用于报时提醒;28(sel0)、29(sel1)、30(sel2)分别接SN74LS138N译码器的1(A)、2(B)、3(C)引脚,用于控制数码管的位选;59-66(led7s6-led7s0)分别接数码管的g-a引脚;67接数码管的dp端。结 论将设计程序下砸到实验箱上运行调试后,最终结果与预期效果基本一致,时、分、秒能够正常计数并且能够由控制键分别设置,整点报时弄能正常。在此次的数

35、字钟设计过程中,更进一步地了解和熟悉有关数字电路的知识和具体的应用。学会了利用MAX+PlusII和DXP软件进行原理图的绘制,硬件描述语言VHDL的编写,程序的仿真等工作。并能根据仿真结果分析设计的存在的问题和缺陷,从而进行程序的调试和完善。在设计电路中,往往是先仿真后连接实物图,但有时仿真和电路连接并不是完全一致的,例如在对具体模块的仿真的过程中,往往没有考虑到整体设计的层面以及与上下模块接口的设计。再加上器件对信号的延时等问题,实际下载到实验箱上后会出现一系列的问题,因此方正图和电路图连接图还是有一定区别的。此次的数字钟设计重点在于报时模块的代码编写。通过这次的设计实验更进一步地增强了实

36、验的动手能力,对数字钟的工作与原理有了更加透彻的理解。在实验中遇到的问题:1将程序编写完成后,进行编译时发生错误,进行检查发现错误并改正后编译成功。2当程序下载到实验箱后,数码管显示错位,并且小时随秒同时跳动。经过检查发现导线与接口接触不良,导致以上现象,经过调整,一切显示正常。3通过按键调节时、分时,发现数码管显示跳动速度快并有跳数延时现象,考虑可能是因为器件的不同导致延时现象并按键的时长不同导致,通过调节延时解决了上述问题。4由于本次试验是基于FPGA器件实现的,器件的编程信息存放在RAM中,断电易丢失,所以此问题可以增加外配存储器来解决。参考文献1 谭会生,张昌凡. EDA技术及应用. 西安:西安电子科技大学出版社,2001.92 赵曙光,郭万有,杨颂华. 可编程逻辑器件原理、开发与应用. 西安:西安电子科技大学出版社,2000.83 潘松,黄继业. EDA技术实用教程. 北京:科学出版社,2002.104 李洋,张晓燕,田晓平编. EDA技术实用教程. 北京:机械工业出版社,2004.75 李国洪,沈明山,胡辉. 可编程器件EDA技术与实践. 北京:机械工业出版社,2004.76 赵雅兴. FPGA原理、设计与应用. 天津:天津大学出版社,1999.47 翟玉文等编著.电子设计与实践.北京:中国电力出版社,2005.05 附录附图 数字钟电路原理图

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号