基于FPGA的数字闹钟设计.doc

上传人:啊飒飒 文档编号:11093065 上传时间:2021-06-29 格式:DOC 页数:38 大小:369.50KB
返回 下载 相关 举报
基于FPGA的数字闹钟设计.doc_第1页
第1页 / 共38页
基于FPGA的数字闹钟设计.doc_第2页
第2页 / 共38页
基于FPGA的数字闹钟设计.doc_第3页
第3页 / 共38页
基于FPGA的数字闹钟设计.doc_第4页
第4页 / 共38页
基于FPGA的数字闹钟设计.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《基于FPGA的数字闹钟设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA的数字闹钟设计.doc(38页珍藏版)》请在三一文库上搜索。

1、摘 要 I 摘摘 要要 随着 EDA 技术的发展和应用领域的扩大与深入,EDA 技术在电子信息、通信、 自动控制及计算机应用领域的重要性日益突出。EDA 技术就是依赖功能强大的计 算机,在 EDA 工具软件平台上,对以硬件描述语言 VHDL 为系统逻辑描述手段完 成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系 统功能。本文介绍了基于 VHDL 硬件描述语言设计的多功能数字闹钟的思路和技 巧。在 Quartus 11 开发环境中编译和仿真了所设计的程序,并逐一调试验证程 序的运行状况。仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可 以实现调时定时闹钟播放音乐功能具有

2、一定的实际应用性。 关键词关键词: 闹钟 FPGA VHDL II 目 录 III 目目 录录 摘摘 要要.I 目目 录录 .III 第一章第一章 选题背景选题背景.1 1.1 选题研究内容.1 1.2 课题研究功能.1 1.3 课题相关技术应用.1 第二章第二章 FPGA 简介简介.3 2.1 FPGA 概述.3 2.1.1 FPGA 基本结构.3 2.2 FPGA 编程原理.3 2.3 FPGA 设计流程.4 第三章第三章 数字闹钟整体方案设计数字闹钟整体方案设计.7 3.1 数字闹钟整体设计.7 3.1.1 数字闹钟各部分作用.7 3.2 数字钟的工作原理.7 第四章第四章 模块电路设计

3、模块电路设计.9 4.1 模块电路图设计.9 4.2 各模块电路设计.9 第五章第五章 实验结果实验结果.16 5.1 实验概述.16 5.2 实验仿真结果.16 第六章第六章 总结与展望总结与展望.18 研究结论.18 研究展望.18 致致 谢谢.20 参考文献参考文献.22 附录附录 1 部分模块代码部分模块代码.24 附录附录 2 动态扫描模块程序动态扫描模块程序.33 目 录 IV 第一章 选题背景 1 第一章第一章 选题背景选题背景 1.1 选题研究内容选题研究内容 设计一个 24 小时的闹钟,该闹钟由显示屏、数字键、TIME 键、ALARM 键、 扬声器组成。 闹钟总体系统包括如下

4、几步分组成:用于键盘输入预置数字的键盘缓冲器; 用于时钟计数的计数器;用于保存闹钟时间的闹钟寄存器;用于显示的七段数 码显示器及控制以上各个部分协同工作的闹钟控制器。 1.2 课题研究功能课题研究功能 (1)计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并 显示。 (2)闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出一段音 乐,并维持一分钟。 (3) 调时调分调闹钟功能:当需要校时或者要重新设置闹钟的时间时,可 通过实验箱上的按键控制。 1.3 课题相关技术应用课题相关技术应用 EDA 技术和硬件描述语言 VHDL 的基础知识,通过对工程实例的系统分析、 程序设计和仿真

5、,深入细致地讨论了它们在数字系统设计中的广泛应用。电子 设计自动化(Electronic Design Automation,即 EDA)技术是指包括电路系统设 计、系统仿真、设计综合、PCB 版图设计和制版的一整套自动化流程。随着计算 机、集成电路和电子设计技术的高速发展,EDA 技术已经渗透到百姓生活的各个 角落,日益成为电子信息类产品的支柱产业。 秒表、彩灯控制器、抢答器、电梯控制器、出租车计费器、微波炉控制器、 FIR 滤波器、I2C 控制器、DDS、序列检测器、自动售货机、函数发生器、调制 解调器和 UART 等 15 个数字系统的 VHDL 设计范例,给用户演示了数字电路的设 计方

6、法和思路。 当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与 传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产 品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品 的自动化程度和竞争力,缩短研发周期。EDA 技术正是为了适应现代电子技术的 要求,吸收众多学科最新科技成果而形成的一门新技术。 选题背景 2 第二章 FPGA 简介 3 第二章第二章 FPGAFPGA 简介简介 2.1 FPGA 概述概述 FPGA 是现场可编程门阵列(Field Programmable Gate Array)的简称, 与之相应的 CPLD 是复杂可编程逻辑

7、器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可 以忽略这两者的区别,统称为可编程逻辑器件或 CPLD/PGFA。CPLD/PGFA 几乎能 完成任何数字器件的功能,上至高性能 CPU,下至简单的 74 电路。它如同一张 白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的 设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在 PCB 完成以 后,利用 CPLD/FPGA 的在线修改功能,随时修改设计而不必改动硬件电路。使 用 CPLA/FPGA 开发数字电路,可以大大缩短设计时间,减少

8、 PCB 面积,提高系 统的可靠性。这些优点使得 CPLA/FPGA 技术在 20 世纪 90 年代以后得到飞速的 发展,同时也大大推动了 EDA 软件和硬件描述语言 HDL 的进步。 2.1.1 FPGA 基本结构基本结构 FPGA 一般由 3 种可编程电路和一个用于存放编程数据的静态存储器 SRAM 组 成。这 3 种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IRInterconnect Resource)。可编程逻辑模块 CLB 是实现逻辑功能的基本单元,它们通常规则 的排列成一个阵列

9、,散布于整个芯片;可编程输入/输出模块(IOB)主要完成 芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资 源包括各种长度的连接线段和一些可编程连接开关,它们将各个 CLB 之间或 CLB、IOB 之间以及 IOB 之间连接起来,构成特定功能的电路 2.2 FPGA 编程原理编程原理 硬件设计需要根据各种性能指标、成本、开发周期等因素,确定最佳的实 现方案,画出系统框图,选择芯片,设计 PCB 并最终形成样机。 CPLD/FPGA 软件设计可分为两大块:编程语言和编程工具。编程语言主要有 VHDL 和 Verilog 两种硬件描述语言;编程工具主要是两大厂家 Altera

10、和 Xilinx 的集成综合 EDA 软件(如 MAX+plusII、QuartusII、Foundation、ISE) 以及第三方工具(如 FPGA Express、Modelsim、Synposys SVS 等)。具体的设 计输入方式有以下几种: 1.HDL 语言方式。HDL 既可以描述底层设计,也可以描述顶层的设计,但它 不容易做到较高的工作速度和芯片利用率。用这种方式描述的项目最后所能达 到的性能与设计人员的水平、经验以及综合软件有很大的关系。 2.图形方式。可以分为电路原理图描述,状态机描述和波形描述 3 种形式。 有的软件 3 种输入方法都支持,如 Active-HDL。MAX+p

11、lusII 图形输入方式只支 选题背景 4 持电路原理图描述和波形描述两种。电路原理图方式描述比较直观和高效,对 综合软件的要求不高。一般大都使用成熟的 IP 核和中小规模集成电路所搭成的 现成电路,整体放到一片可编程逻辑器件的内部去,所以硬件工作速度和芯片 利用率很高,但是但项目很大的时候,该方法就显得有些繁琐;状态机描述主 要用来设计基于状态机思想的时序电路。在图形的方式下定义好各个工作状态, 然后在各个状态上输入转换条件以及相应的输入输出,最后生成 HDL 语言描述, 送去综合软件综合到可编程逻辑器件的内部。由于状态机到 HDL 语言有一种标 准的对应描述方式,所以这种输入方式最后所能达

12、到的工作速度和芯片利用率 主要取决于综合软件;波形描述方式是基于真值表的一种图形输入方式,直接 描述输入与输出的波形关系。这种输入方式最后所能达到的工作速度和芯片利 用率也是主要取决于综合软件。 2.3 FPGA 设计流程设计流程 一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几 个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实 现,这就是 TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已 被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因 此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对 某种工艺优化

13、的网络表,使工艺转化变得轻而易举。CPLD/FPGA 系统设计的工作 流程如图 2-2 所示。 第二章 FPGA 简介 5 系统划分 编译器 代码级功能仿真 综合器 适配前时序仿真 适配器 CPLD/FPGA实现 适配后仿真模型 适配后时序仿真 适配报告 ASIC 实现 VHDL 代码或图形方式输入 仿真综合库 器件编程文件 图图 2.32.3 FPGAFPGA 设计流程图设计流程图 选题背景 6 第三章 数字闹钟整体方案设计 7 第三章第三章 数字闹钟整体方案设计数字闹钟整体方案设计 3.13.1 数字闹钟整体设计数字闹钟整体设计 1)各个输入输出端口 1、CLK 为外部时钟信号,RESET

14、 为复位信号。 2、KEYPAD 若其中某一位为高电平,则表示用户按下了相应的数 字键 3、当 KEYDOWN 为高电平,表示用户按下某一数字键。 4、当 ALAR-BUTTON 为高电平时,表示用户按下 ALARM 键。 5、当 TIME-BUTTON 为高电平时表示用户按下 TIME 键 6、DISPLAY 实际上表示了 4 个 7 段数码管,用于显示时间。 7、SOUND-ALARM 用于控制扬声器发声,当 SOUND-ALARM=1时, 扬声器发出蜂鸣,表示到了设定时间。 2)各部分的组成 根据系统的设计要求,整个系统分为 7 个模块:闹钟控制器,译 码器,键盘缓冲器,闹钟寄存器,时间

15、计数器,显示驱动器,分频器。 3.1.13.1.1 数字闹钟各部分作用数字闹钟各部分作用 1、 闹钟控制器:整个系统正常有序工作的核心,按设计要求产生相应的 控制逻辑以控制其他部分工作。 2、 译码器:可将 KEYPAD 信号转换为 09 的整形数,以直观地表示和处理 用户输入的数字。 3、 键盘缓冲器:是一个移位寄存器,暂存用户键入的数字,并且实现用 户键入数字在显示器上从左到右依次显示。 4、 分频器:将较高的外部时钟频率分成每分钟一次的时钟频率,以便进 行时钟计数。 5、 时间计数器:实际上是一个异步复位、异步置数的累加器,通常情况 下进行时钟累加计数,必要时可置入新的时钟值,然后从该值

16、开始新的计数。 6、 闹钟寄存器:用于保存用户设置的闹钟时间,是一个异步复位寄存器。 7、 显示驱动器:根据需要显示当前时间、用户设置的闹钟时间或用户通 过键盘输入新的时间,同时判断当前时间是否已到了闹钟时间,实际上是一个 多路选择器加比较器。 3.2 数字钟的工作原理数字钟的工作原理 数字闹钟电路的基本结构由两个 60 进制计数器和一个 24 进制计数器组成, 分别对秒、分、小时进行计时,当计时到 23 时 59 分 59 秒时,再来一个计数脉 选题背景 8 冲,则计数器清零,重新开始计时。秒计数器的计数时钟 CLK 为 1Hz 的标准信 号。当数字闹钟处于计时状态时,秒计数器的进位输出信号

17、作为分钟计数器的 计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、 秒的计时结果通过 4 个数码管来动态显示。数字闹钟除了能够正常计时外,还 应能够对时间进行调整。因此,通过模式选择信号 KEY1、KEY2 控制数字钟的工 作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、 时 5 个状态。当数字闹钟处于计时状态时,3 个计数器允许计数,且秒、分、时 计数器的计数时钟信号分别为 CLK,秒的进位, 分的进位;当数字闹钟处于调整时 间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时, 可以设定小时和分;当计时到所设定的时刻时,speak 将

18、会被赋予梁祝音乐信号 用于驱动扬声器,持续 1 分钟。 第四章 模块电路设计 9 第四章第四章 模块电路设计模块电路设计 4.1 模块电路图设计模块电路图设计 图图 4.1-14.1-1 模块电路图模块电路图 4.2 各模块电路设计各模块电路设计 1) 时钟控制模块: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shizhong is port( clk: in std_logic; md1:in std_logic; md2:in std_logic_vector(1 d

19、ownto 0); clken:out std_logic; h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0); end shizhong; architecture one of shizhong is signal hou1:std_logic_vector(3 downto 0); signal hou2:std_logic_vector(3 downto 0); signal min1:std_logic_vector(3 downto 0); signal min2:std_logic_vector(3 downto 0); sig

20、nal seth1:std_logic_vector(3 downto 0); signal seth2:std_logic_vector(3 downto 0); signal setm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto 0); signal sec2:std_logic_vector(3 downto 0); 选题背景 10 begin -小时十位 h110:process(clk,hou2,min1,

21、min2,sec1,sec2,md1,md2) begin if clkevent and clk=1 then if (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then hou1=0000; elsif hou1=0010and hou2=0011and md1=0 and md2=01 then-当时间为 23 点且处于校时状态时 hou1=0000; elsif (hou2=1001and(min1=0101 and min2=1001) and (sec1=01

22、01 and sec2=1001)or (hou2=1001and md1=0 and md2=01) then hou1=hou1+1; end if; end if; end process h110; -小时个位 h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1) begin if clkevent and clk=1 then if (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then hou2=0000; els

23、if hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then hou2=0000; elsif (hou2=1001and md1=0 and md2=01) or (hou1=0010and hou2=0011) then hou2=0000;-md=1;- elsif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) or (md1=0 and md2=01) then hou2=hou2+1;-speak=clk;- end if; en

24、d if; end process h220; -分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2) begin if clkevent and clk=1 then if (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then min1=0000; elsif min1=0101and min2=1001and (md1=0 and md2=00)then min1=0000; elsif (min2=1001and (sec1=0101 and sec2=1001) or (min2=

25、1001and md1=0 and md2=00)then min1=min1+1; end if; end if;-end if; 第四章 模块电路设计 11 end process m110; -分钟个位 m220:process(clk,sec1,sec2,md1,md2) begin if clkevent and clk=1 then if min2=1001and (sec1=0101 and sec2=1001)then min2=0000; elsif min2=1001and (md1=0 and md2=00)then min2=0000; else if (sec1=01

26、01 and sec2=1001) or(md1=0 and md2=00)then min2=min2+1; end if; end if;end if; end process m220; -秒十位 s110:process(clk) begin if clkevent and clk=1 then if (sec1=0101 and sec2=1001)then sec1=0000; else if sec2=1001then sec1=sec1+1; end if; end if;end if; end process s110; -秒个位 s220:process(clk) begi

27、n if clkevent and clk=1 then if sec2=1001 then sec2=0000; else sec2=sec2+1; end if; end if; end process s220; -时间设置小时部分 sethour1:process(clk,seth2) begin if clkevent and clk=1 then if seth1=0010and seth2=0011 then seth1=0000; elsif seth2=1001 then seth1=seth1+1; end if; end if; end process sethour1;

28、 sethour2:process(clk,md1,md2,seth1) begin if clkevent and clk=1 then if (seth1=0010and seth2=0011)or seth2=1001then 选题背景 12 seth2=0000; elsif md1=1 and md2=00 then seth2=seth2+1; end if; end if; end process sethour2; -时间设置分钟部分 setmin1:process(clk,setm2) begin if clkevent and clk=1 then if setm1=010

29、1and setm2=1001then setm1=0000; elsif setm2=1001then setm1=setm1+1; end if; end if; end process setmin1; setmin2:process(clk,md1,md2) begin if clkevent and clk=1then if setm2=1001then setm2=0000; elsif md1=1 and md2=01then setm2=setm2+1; end if; end if; end process setmin2; -闹铃 speaker:process(clk,h

30、ou1,hou2,min1,min2) begin if clkevent and clk=1then if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then clken=1; else clken=0; end if; end if; end process speaker; disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2) begin if md1=0 then-计时时间显示和设置模式 h1=hou1;h2=hou2; m1=

31、min1;m2=min2; s1=sec1;s2=sec2; else -闹铃时间现实和设置模式 h1=seth1;h2=seth2; m1=setm1;m2=setm2; s1=1111;s2=1111; end if; end process disp; end one; 第四章 模块电路设计 13 3)乐曲演奏模块: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_L

32、OGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0000; ELSIF clkEVENT AND clk = 1 THEN Count4 := Cou

33、nt4 + 1; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone)- 11 位可预置计数器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN IF PreCLKEVENT AND PreCLK = 1 THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0; END IF; END IF; END PROCESS; Dela

34、ySpkS : PROCESS(FullSpkS)-将输出再 2 分频,展宽脉冲,使扬声器有足 够功率发音 VARIABLE Count2 : STD_LOGIC; BEGIN IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS = 0; END IF; END IF; END PROCESS; END; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.A

35、LL; ENTITY NoteTabs IS PORT (clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END; ARCHITECTURE one OF NoteTabs IS COMPONENT MUSIC -音符数据 ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); 选题背景 14 inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); END COMPONENT; SIG

36、NAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN CNT8 : PROCESS(clk,Counter) BEGIN IF Counter=138 THEN Counter = 00000000; ELSIF (clkEVENT AND clk = 1) THEN Counter Counter , q=ToneIndex, inclock=clk); END; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_V

37、ECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : IN STD_LOGIC); END; ARCHITECTURE one OF ToneTaba IS BEGIN PROCESS(Index,en) BEGIN IF en=0 THEN Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone NULL; END CASE; END IF; END PROCESS; END; LIBRARY ieee; USE ieee.std_logic_1164.al

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1