硬件课程设计(论文)-基于FPGA的数字时钟设计_第1页
硬件课程设计(论文)-基于FPGA的数字时钟设计_第2页
硬件课程设计(论文)-基于FPGA的数字时钟设计_第3页
硬件课程设计(论文)-基于FPGA的数字时钟设计_第4页
硬件课程设计(论文)-基于FPGA的数字时钟设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、路,下载实现数字时钟的根本功能。8第三周实现根本要求之外的其它扩展功能;用PROTEL软件绘制整体硬件原理图;撰写并完成硬件课程设计说明书,测试硬件设计作品的功能,进行课程设计辩论。5五、指导教师评语及学生成绩指导教师评语:年 月 日成绩指导教师(签字):目 录 TOC o 1-3 h z HYPERLINK l _Toc36024262 硬件课程设计任务书 PAGEREF _Toc36024262 h I HYPERLINK l _Toc36024263 第1章 设计的硬件平台及开发工具 PAGEREF _Toc36024263 h 1 HYPERLINK l _Toc36024264 1.

4、1 硬件平台 PAGEREF _Toc36024264 h 1 HYPERLINK l _Toc36024265 1.2 开发工具 PAGEREF _Toc36024265 h 1 HYPERLINK l _Toc36024266 第2章 数字时钟的设计方案及FPGA的顶层设计 PAGEREF _Toc36024266 h 2 HYPERLINK l _Toc36024267 2.1 数字钟整体设计方案 PAGEREF _Toc36024267 h 2 HYPERLINK l _Toc36024268 2.1.1 数字钟的功能 PAGEREF _Toc36024268 h 2 HYPERLIN

5、K l _Toc36024269 2.1.2 硬件要求 PAGEREF _Toc36024269 h 2 HYPERLINK l _Toc36024270 2.1.3 引脚说明以及设计方案 PAGEREF _Toc36024270 h 2 HYPERLINK l _Toc36024271 2.2 可编程逻辑器件FPGA的顶层设计 PAGEREF _Toc36024271 h 2 HYPERLINK l _Toc36024272 第3章 数字时钟的底层模块设计 PAGEREF _Toc36024272 h 4 HYPERLINK l _Toc36024273 3.1 秒模块设计 PAGEREF

6、_Toc36024273 h 4 HYPERLINK l _Toc36024274 3.1.1 秒模块VHDL程序 PAGEREF _Toc36024274 h 4 HYPERLINK l _Toc36024275 3.1.2 秒模块的仿真实现 PAGEREF _Toc36024275 h 5 HYPERLINK l _Toc36024276 3.2 分模块设计 PAGEREF _Toc36024276 h 6 HYPERLINK l _Toc36024277 3.2.1 分模块VHDL程序 PAGEREF _Toc36024277 h 6 HYPERLINK l _Toc36024278 3

7、.2.2 分模块的仿真实现 PAGEREF _Toc36024278 h 7 HYPERLINK l _Toc36024279 3.3 时模块设计 PAGEREF _Toc36024279 h 7 HYPERLINK l _Toc36024280 3.3.1 时模块VHDL程序 PAGEREF _Toc36024280 h 8 HYPERLINK l _Toc36024281 3.3.2 时模块的仿真实现 PAGEREF _Toc36024281 h 9 HYPERLINK l _Toc36024282 3.4 动态显示扫描模块设计 PAGEREF _Toc36024282 h 9 HYPER

8、LINK l _Toc36024283 3.4.1 动态显示扫描模块VHDL程序 PAGEREF _Toc36024283 h 9 HYPERLINK l _Toc36024284 3.4.2 动态显示扫描模块的仿真实现 PAGEREF _Toc36024284 h 10 HYPERLINK l _Toc36024285 3.5 段码译码模块设计 PAGEREF _Toc36024285 h 11 HYPERLINK l _Toc36024286 3.5.1 段码译码模块VHDL程序 PAGEREF _Toc36024286 h 11 HYPERLINK l _Toc36024287 3.5.

9、2 段码译码模块的仿真实现 PAGEREF _Toc36024287 h 12 HYPERLINK l _Toc36024288 3.6 整点报时模块设计发挥局部 PAGEREF _Toc36024288 h 12 HYPERLINK l _Toc36024289 3.6.1 整点报时模块VHDL程序 PAGEREF _Toc36024289 h 12 HYPERLINK l _Toc36024290 3.6.2 整点报时模块的仿真实现 PAGEREF _Toc36024290 h 13 HYPERLINK l _Toc36024291 第4章 数字时钟的设计实现 PAGEREF _Toc36

10、024291 h 14 HYPERLINK l _Toc36024292 数字时钟的硬件设计过程 PAGEREF _Toc36024292 h 14 HYPERLINK l _Toc36024293 硬件下载过程 PAGEREF _Toc36024293 h 14 HYPERLINK l _Toc36024294 4.2.1 接口设置 PAGEREF _Toc36024294 h 14 HYPERLINK l _Toc36024295 4.2.2 器件编程的下载 PAGEREF _Toc36024295 h 14 HYPERLINK l _Toc36024296 4.3 硬件电路连接 PAGE

11、REF _Toc36024296 h 15 HYPERLINK l _Toc36024297 4.3.1 硬件电路连接说明 PAGEREF _Toc36024297 h 16 HYPERLINK l _Toc36024298 结 论 PAGEREF _Toc36024298 h 17 HYPERLINK l _Toc36024299 参考文献 PAGEREF _Toc36024299 h 18 HYPERLINK l _Toc36024300 附录 PAGEREF _Toc36024300 h 19第1章 设计的硬件平台及开发工具1.1 硬件平台本设计基于复杂可编程逻辑器件CPLD/FPGA设

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

13、设计方法进行数字钟的设计与调试。MAX+PLUS是一个集成的软件开发平台,提供了从设计输入、编译、器件适配、软件仿真到器件下载的全部功能。图1-1为工具环境。图1-1 MAX+PlusII工具环境第2章 数字时钟的设计方案及FPGA的顶层设计2.1 数字钟整体设计方案 数字钟的功能1以24小时制显示时、分、秒计数; 2时间清零,时设置,分设置功能;3整点报时功能。 硬件要求1可编程逻辑器件主芯片:EPF10K10LC84-4;2显示器件:采用六个八段LED共阴极数码管,以动态扫描方式显示时间;3时间设定与调准:三个按键用于调时、调分及启动计时;4采用蜂鸣器与发光二极管进行整点声光报时;5由晶振

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

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

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

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

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

19、ee.std_logic_unsigned.all; 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位二进制数表示 -daout6.4为十位,daout3.0为个位,60循环计数end entity sec;architecture behave of sec i

20、s signal count:std_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脉冲上升沿el

21、sif(clkevent and clk=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

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

23、05.0ns时daout计数到六十,enmin产生脉冲后daout和count清零并重新开始计数。如上所述功能实现。图3-2 秒模块仿真图3.2 分模块设计图3-3 分模块顶层设计原理图 分模块VHDL程序LIBRARY ieee;_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 STD_LOGIC; -enhour为分钟模块

24、的进位输出daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-2n-160,n=7,27=64,分钟用7位二进制数表示-daout6.4为十位,daout3.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为调时键的脉冲BEGINdaout= count;enhour2=(hour

25、_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; -分钟计数值回零“0000000”零分ELSEcou

26、nt=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; .2 分模块的仿真实现由图3-4可以看出,当clk输入脉冲信号时,态扫描控制模块daout和count开始启动计数,这时时进位enhour为低电平,且时设置hour_set也为低电平。在s时,将hour_set设置为高电平,此时enhou

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

28、);- 2n-124,n=6,26 =32,小时用6位二进制数表示-daout5.4为十位,daout3.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(count(3 downto 0)=1001)THEN -小时的各位是否到“9”IF(count16#23#)

29、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 PROCESS;END behave;.2 时模块的仿真实现由图3-6可以看出,当clk输入脉冲信号时,动态扫描

30、控制模块daout和count开始启动计数。在970.0ns时,daout和count到达24,并且从重新开始计数。如上所述功能实现。图3-6 时模块仿真图3.4 动态显示扫描模块设计图3-7 动态显示扫描模块顶层设计原理图 动态显示扫描模块VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity selmk isport(clk1:in std_logic; -动态扫描输入脉冲sec,min:in std_logic_ve

31、ctor(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译码器输出,译码输出再经驱动接数码管共阴极端end entity selmk;architecture behave of selmk issig

32、nal 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 downto 4);dpdaout=hour(3 downto 0);dpdaout(3 downto 2)=00;daout(1 d

33、ownto 0)=hour(5 downto 4);dpled7sled7sled7sled7sled7sled7sled7sled7sled7sled7snull;end case;end process;end behave;.2 段码译码模块的仿真实现由图3-10可以看出,此模块是将扫描模块的dout信号输出的BCD码转换为数码管可以显示的段码。如上所述功能实现。图 3-10段码译码模块时序仿真图3.6 整点报时模块设计发挥局部图3-11 整点报时模块顶层设计原理图 整点报时模块VHDL程序LIBRARY ieee;use ieee.std_logic_1164.all;use ieee

34、.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);-整点光报时输出,可外接红、蓝、黄三个发光二极管end entity bsmk;architecture behave of bsmk issignal count:std_

35、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; -整点光报时,可接黄色发光二极管end if;else lamp=000; count(0)=0; -没到整点时,无声光报时输出end if;end i

36、f;end process;end behave;.2 整点报时模块的仿真实现clk为脉冲输入信号,lamp表示报警灯的信号显示,speak表示蜂鸣器报警信号显示。由图3-12可以看出,当clk输入脉冲信号时,dain并没有信号产生。而count开始启动计数,在40.0ns时,报时speak开始报警,lamp闪烁显示。在210.0ns时,dain变为1,speak和lamp都变为低电平不再报警。由此可以看出在dain为零时,分钟即为零。如上所述功能实现。图3-12 整点报时模块仿真图第4章 数字时钟的设计实现(1) 开发环境的翻开 单击“开始 “所有程序 “MAX+plus II 10.0 B

37、ASELINE “MAX+plus II 10.0 BASELINE(2) 建立文件 单击“MAX+plus II “Gnaphic Editor来建立新的文件,输入各模块原理图、引脚、原件,定义后连接原理图和原件以及引脚,单击“保存“编译进行文件的编译错误检查。 接口设置在当前文件下单击“File “Project “Set Project to Current File指定文件,点击“MAX+plus II “Programmer弹出下载对话框如图4-1,后选择“Options“Hardware Setup在对话框中选择“ByteBlaster(MV)后单击确定按钮完成设置。图4-1 接口设置对话框 器件编程的下载接口设置成功以后,单击“JIAG “Multi-Device JIAG Chain Setup进入器件编程选择对话框,如图4-2,此时点击“Select Programming File找到文件名为“的编程文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论