版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 摘要摘要随着 EDA 技术的发展和应用领域的扩大与深入,EDA 技术在电子信息、通信、自动控制与计算机应用领域的重要性日益突出。EDA 技术就是依赖功能强大的计算机,在 EDA 工具软件平台上,对以硬件描述语言 VHDL 为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能。本文介绍了基于 VHDL 硬件描述语言设计的多功能数字闹钟的思路和技巧。在 Quartus 11 开发环境中编译和仿真了所设计的程序,并逐一调试验证程序的运行状况。仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟播放音乐功能具有一定的实际应用性。关键词关键
2、词: 闹钟 FPGA VHDL 目录目录摘要摘要 I I目录目录 IIIIII第一章选题背景第一章选题背景 1 11.1 选题研究容 11.2 课题研究功能 11.3 课题相关技术应用 1第二章第二章 FPGAFPGA 简介简介 3 32.1 FPGA 概述 32.1.1 FPGA 基本结构 32.2 FPGA 编程原理 32.3 FPGA 设计流程 4第三章数字闹钟整体方案设计第三章数字闹钟整体方案设计 7 73.1 数字闹钟整体设计 73.1.1 数字闹钟各部分作用 73.2 数字钟的工作原理 7第四章模块电路设计第四章模块电路设计 9 94.1 模块电路图设计 94.2 各模块电路设计
3、9第五章实验结果第五章实验结果 16165.1 实验概述 165.2 实验仿真结果 16第六章总结与展望第六章总结与展望 1818研究结论 18研究展望 18致致 2020参考文献参考文献 2222附录附录 1 1 部分模块代码部分模块代码 2424附录附录 2 2 动态扫描模块程序动态扫描模块程序 3333 III / 34第一章第一章 选题背景选题背景1.11.1 选题研究容选题研究容设计一个 24 小时的闹钟,该闹钟由显示屏、数字键、TIME 键、ALARM 键、扬声器组成。闹钟总体系统包括如下几步分组成:用于键盘输入预置数字的键盘缓冲器;用于时钟计数的计数器;用于保存闹钟时间的闹钟寄存
4、器;用于显示的七段数码显示器与控制以上各个部分协同工作的闹钟控制器。1.21.2 课题研究功能课题研究功能(1)计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示。(2)闹钟功能:如果当前时间与设置的闹钟时间一样,则扬声器发出一段音乐,并维持一分钟。(3) 调时调分调闹钟功能:当需要校时或者要重新设置闹钟的时间时,可通过实验箱上的按键控制。1.31.3 课题相关技术应用课题相关技术应用EDA 技术和硬件描述语言 VHDL 的基础知识,通过对工程实例的系统分析、程序设计和仿真,深入细致地讨论了它们在数字系统设计中的广泛应用。电子设计自动化(Electronic Design Au
5、tomation,即 EDA)技术是指包括电路系统设计、系统仿真、设计综合、PCB 版图设计和制版的一整套自动化流程。随着计算机、集成电路和电子设计技术的高速发展,EDA 技术已经渗透到百姓生活的各个角落,日益成为电子信息类产品的支柱产业。秒表、彩灯控制器、抢答器、电梯控制器、出租车计费器、微波炉控制器、FIR 滤波器、I2C 控制器、DDS、序列检测器、自动售货机、函数发生器、调制解调器和 UART 等 15 个数字系统的 VHDL 设计例,给用户演示了数字电路的设计方法和思路。当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别师大量使用大规模
6、可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。EDA 技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。 1 / 34 第二章第二章 FPGAFPGA 简介简介2.12.1 FPGAFPGA 概述概述 FPGA 是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的 CPLD 是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本一样,只是实现原理略有不同,所以有时可以忽略这两者的区别
7、,统称为可编程逻辑器件或 CPLD/PGFA。CPLD/PGFA 几乎能完成任何数字器件的功能,上至高性能 CPU,下至简单的 74 电路。它如同一白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在 PCB 完成以后,利用 CPLD/FPGA 的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA 开发数字电路,可以大大缩短设计时间,减少 PCB 面积,提高系统的可靠性。这些优点使得 CPLA/FPGA 技术在 20 世纪 90 年代以后得到飞速的发展,同时也大大推动了 EDA 软件和硬件描述语言 HD
8、L 的进步。2.1.12.1.1 FPGAFPGA 基本结构基本结构FPGA 一般由 3 种可编程电路和一个用于存放编程数据的静态存储器 SRAM 组成。这 3 种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IRInterconnect Resource)。可编程逻辑模块 CLB 是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连
9、接开关,它们将各个 CLB 之间或CLB、IOB 之间以与 IOB 之间连接起来,构成特定功能的电路2.22.2 FPGAFPGA 编程原理编程原理硬件设计需要根据各种性能指标、成本、开发周期等因素,确定最佳的实现方案,画出系统框图,选择芯片,设计 PCB 并最终形成样机。CPLD/FPGA 软件设计可分为两大块:编程语言和编程工具。编程语言主要有VHDL 和 Verilog 两种硬件描述语言;编程工具主要是两大厂家 Altera 和Xilinx 的集成综合 EDA 软件(如 MAX+plusII、QuartusII、Foundation、ISE)以与第三方工具(如 FPGA Express、
10、Modelsim、Synposys SVS 等)。具体的设计输入方式有以下几种:1.HDL 语言方式。HDL 既可以描述底层设计,也可以描述顶层的设计,但它不容易做到较高的工作速度和芯片利用率。用这种方式描述的项目最后所能达到的性能与设计人员的水平、经验以与综合软件有很大的关系。2.图形方式。可以分为电路原理图描述,状态机描述和波形描述 3 种形式。有的软件 3 种输入方法都支持,如 Active-HDL。MAX+plusII 图形输入方式只支 3 / 34持电路原理图描述和波形描述两种。电路原理图方式描述比较直观和高效,对综合软件的要求不高。一般大都使用成熟的 IP 核和中小规模集成电路所搭
11、成的现成电路,整体放到一片可编程逻辑器件的部去,所以硬件工作速度和芯片利用率很高,但是但项目很大的时候,该方法就显得有些繁琐;状态机描述主要用来设计基于状态机思想的时序电路。在图形的方式下定义好各个工作状态,然后在各个状态上输入转换条件以与相应的输入输出,最后生成 HDL 语言描述,送去综合软件综合到可编程逻辑器件的部。由于状态机到 HDL 语言有一种标准的对应描述方式,所以这种输入方式最后所能达到的工作速度和芯片利用率主要取决于综合软件;波形描述方式是基于真值表的一种图形输入方式,直接描述输入与输出的波形关系。这种输入方式最后所能达到的工作速度和芯片利用率也是主要取决于综合软件。2.32.3
12、 FPGAFPGA 设计流程设计流程一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是 TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉与实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA 系统设计的工作流程如图 2-2 所示。 系统划分编译器代码级功能仿真综合器适配前时序仿真适配器CPLD/FPGA实现适配后仿真模型适配后时序仿真适配报告
13、ASIC 实现VHDL 代码或图形方式输入仿真综合库器件编程文件 图图 2.32.3 FPGAFPGA 设计流程设计流程 5 / 34第三章第三章 数字闹钟整体方案设计数字闹钟整体方案设计3.13.1 数字闹钟整体设计数字闹钟整体设计1)各个输入输出端口 1、CLK 为外部时钟信号,RESET 为复位信号。 2、KEYPAD 若其中某一位为高电平,则表示用户按下了相应的数字键 3、当 KEYDOWN 为高电平,表示用户按下某一数字键。 4、当 ALAR-BUTTON 为高电平时,表示用户按下 ALARM 键。 5、当 TIME-BUTTON 为高电平时表示用户按下 TIME 键 6、DISPL
14、AY 实际上表示了 4 个 7 段数码管,用于显示时间。 7、SOUND-ALARM 用于控制扬声器发声,当 SOUND-ALARM=1时,扬声器发出蜂鸣,表示到了设定时间。 2)各部分的组成 根据系统的设计要求,整个系统分为 7 个模块:闹钟控制器,译码器,键盘缓冲器,闹钟寄存器,时间计数器,显示驱动器,分频器。3.1.13.1.1 数字闹钟各部分作用数字闹钟各部分作用1、 闹钟控制器:整个系统正常有序工作的核心,按设计要求产生相应的控制逻辑以控制其他部分工作。2、 译码器:可将 KEYPAD 信号转换为 09 的整形数,以直观地表示和处理用户输入的数字。3、 键盘缓冲器:是一个移位寄存器,
15、暂存用户键入的数字,并且实现用户键入数字在显示器上从左到右依次显示。4、 分频器:将较高的外部时钟频率分成每分钟一次的时钟频率,以便进行时钟计数。5、 时间计数器:实际上是一个异步复位、异步置数的累加器,通常情况下进行时钟累加计数,必要时可置入新的时钟值,然后从该值开始新的计数。6、 闹钟寄存器:用于保存用户设置的闹钟时间,是一个异步复位寄存器。7、 显示驱动器:根据需要显示当前时间、用户设置的闹钟时间或用户通过键盘输入新的时间,同时判断当前时间是否已到了闹钟时间,实际上是一个多路选择器加比较器。 3.23.2 数字钟的工作原理数字钟的工作原理数字闹钟电路的基本结构由两个 60 进制计数器和一
16、个 24 进制计数器组成,分别对秒、分、小时进行计时,当计时到 23 时 59 分 59 秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟 CLK 为 1Hz 的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过 4 个数码管来动态显示。数字闹钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号 KEY1、KEY2 控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时 5 个状态。当数字闹钟处于计时状态时,3 个计数
17、器允许计数,且秒、分、时计数器的计数时钟信号分别为 CLK,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,speak 将会被赋予梁祝音乐信号用于驱动扬声器,持续 1 分钟。 7 / 34第四章第四章 模块电路设计模块电路设计4.14.1 模块电路图设计模块电路图设计 图图 4.1-14.1-1 模块电路图模块电路图4.24.2 各模块电路设计各模块电路设计1) 时钟控制模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logi
18、c_unsigned.all;entity shizhong isport( clk: in std_logic; md1:in std_logic; md2:in std_logic_vector(1 downto 0); clken:out std_logic; h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0);end shizhong;architecture one of shizhong issignal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3
19、 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal 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
20、0);signal sec2:std_logic_vector(3 downto 0);begin-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou1=0000;elsif hou1=0010and hou2=0011and md1=0 and md2=01 then-当时间为 23 点且
21、处于校时状态时hou1=0000;elsif (hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (hou2=1001and md1=0 and md2=01) thenhou1=hou1+1;end if;end if;end process h110;-小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101
22、 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif (hou2=1001and md1=0 and md2=01)or (hou1=0010and hou2=0011) thenhou2=0000;-md=1;-elsif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (m
23、d1=0 and md2=01) thenhou2=hou2+1;-speak=clk;-end if;end if;end process h220;-分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2)begin 9 / 34if clkevent and clk=1 thenif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then min1=0000;elsif min1=0101and min2=1001and (md1=0 and md2=00)thenmin1=0000;el
24、sif (min2=1001and (sec1=0101 and sec2=1001) or (min2=1001and md1=0 and md2=00)thenmin1=min1+1;end if;end if;-end if;end process m110;-分钟个位 m220:process(clk,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif min2=1001and (sec1=0101 and sec2=1001)thenmin2=0000;elsif min2=1001and (md1=0 and md2=00)the
25、nmin2=0000;else if (sec1=0101 and sec2=1001) or(md1=0 and md2=00)thenmin2=min2+1;end if;end if;end if;end process m220;-秒十位 s110:process(clk)beginif clkevent and clk=1 thenif (sec1=0101 and sec2=1001)thensec1=0000;else if sec2=1001thensec1=sec1+1;end if;end if;end if;end process s110;-秒个位 s220:proce
26、ss(clk)beginif clkevent and clk=1 thenif sec2=1001 thensec2=0000;else sec2=sec2+1; end if;end if;end process s220;-时间设置小时部分 sethour1:process(clk,seth2)beginif clkevent and clk=1 thenif seth1=0010and seth2=0011 thenseth1=0000;elsif seth2=1001 thenseth1=seth1+1;end if;end if;end process sethour1;setho
27、ur2:process(clk,md1,md2,seth1)beginif clkevent and clk=1 thenif (seth1=0010and seth2=0011)or seth2=1001thenseth2=0000;elsif md1=1 and md2=00 thenseth2=seth2+1;end if;end if;end process sethour2;-时间设置分钟部分 setmin1:process(clk,setm2)beginif clkevent and clk=1 thenif setm1=0101and setm2=1001thensetm1=00
28、00;elsif setm2=1001thensetm1=setm1+1;end if;end if;end process setmin1;setmin2:process(clk,md1,md2)beginif clkevent and clk=1thenif setm2=1001thensetm2=0000;elsif md1=1 and md2=01thensetm2=setm2+1;end if;end if; 11 / 34end process setmin2;-闹铃speaker:process(clk,hou1,hou2,min1,min2)beginif clkevent a
29、nd clk=1thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenclken=1;else clken=0;end if;end if;end process speaker;disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginif md1=0 then-计时时间显示和设置模式h1=hou1;h2=hou2;m1=min1;m2=min2;s1=sec1;s2=sec2;else -闹铃时间现实和设置模式h1=s
30、eth1;h2=seth2;m1=setm1;m2=setm2;s1=1111;s2=1111;end if;end process disp;end one;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_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Spe
31、akera 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 := Count4 + 1; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone)- 11 位可预置计数器 VARIAB
32、LE 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; DelaySpkS : PROCESS(FullSpkS)-将输出再 2 分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC;
33、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.ALL;ENTITY NoteTabs IS PORT (clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOW
34、NTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC -音符数据 ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT; SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGIN CNT8 : PROCESS(clk,Counter) BEGIN IF Counter=138 T
35、HEN Counter = 00000000; ELSIF (clkEVENT AND clk = 1) THEN Counter Counter , q=ToneIndex, inclock=clk); END;LIBRARY IEEE; 13 / 34USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : IN STD_LOGIC);END;ARCHITECT
36、URE one OF ToneTaba ISBEGINPROCESS(Index,en) BEGINIF 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.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY music ISPORT( address:
37、IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncram GENERIC (intended_device_family: STRING;width_a: NATURAL;widthad_a: NATURAL;numwords_a: NATURAL;ope
38、ration_mode: STRING;outdata_reg_a: STRING;address_aclr_a: STRING;outdata_aclr_a: STRING;width_byteena_a: NATURAL;init_file: STRING;lpm_hint: STRING;lpm_type: STRING);PORT ( clock0: IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq
39、 Cyclone,width_a = 4,widthad_a = 8,numwords_a = 256,operation_mode = ROM,outdata_reg_a = UNREGISTERED,address_aclr_a = NONE,outdata_aclr_a = NONE,width_byteena_a = 1,init_file = data1.mif,lpm_hint = ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2,lpm_type = altsyncram)PORT MAP ( clock0 = inclock, address
40、_a = address, q_a = sub_wire0);END SYN; 15 / 34第五章第五章 实验结果实验结果5.15.1 实验概述实验概述本实验是以 KEY2、KEY1 为控制整个闹钟的校时,校分,校闹钟时、分,分别将 KEY21,KEY20,KEY1,送到实验上的三个键,由这三个键来控制整个校时,校分,校闹钟时,校闹钟分的过程,加上分别连接的键叫 A,B,C 键.5.25.2 实验仿真结果实验仿真结果则当 A=0,B=1,C=0 时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加。仿真波形: 图图 5.2-15.2-1当 A=0,B=0,C=0 时是对时钟进行校分,
41、分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形:图 5.2-2当 A=0,B=1,C=1 时是对闹钟进行校分,闹钟时个位和时十位会以二十四进制循环自动增加。仿真波形: 图图 5.2-35.2-3当 A=0,B=0,C=1 时是对闹钟进行校时,闹钟分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形: 图图 5.2-45.2-4而当 A=1,B=0,C=0 或者 A=1,B=1,C=0 是正常的计时时间,秒从零开始计时,每秒加一,当到达五十九在来一个脉冲后,秒十位和秒个位清零,从零开始直到六十一直循环,并且向分个位清零;分位的原理同秒的一样;而时与秒,分的不同之处是,当时计
42、数到二十三时清零并且不向任何位进位。仿真波形: 图图 5.2-55.2-5另外当计数的时,分和闹钟所事先设置时、分相等时,“梁祝”这首歌会响起,作为闹钟并且维持一分钟,一分钟歌曲自动停止。在有条件的情况下,为验证所设计程序是否正确,将程序下载到 FPGA 器件中进行硬件测试。在Quartus开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。最终可以看到时、分、秒正常显示 17 / 34第六章第六章 总结与展望总结与展望研究结论研究结论通过本次实验,系统的复习整个 EDA 的知识,并且了解了 CPLD 可编程芯片的结构和引脚,能够熟练的运用 quartus II 这个软件
43、,尤其可贵的是,学会了使用这个软件来给程序配置引脚,并且实际的通过实验箱的几个按键就可以控制整个操作的过程,终于感到自己所学到的知识可以付诸到实践了。在此次的数字钟设计过程中,更进一步地熟悉有关数字电路的知识和具体应用。学会了利 Max+plus 和 QuarterII 软件进行原理图的绘制,硬件描述语言VHDL 的编写,程序的仿真等工作。并能根据仿真结果分析设计的存在的问题和缺陷,从而进行程序的调试和完善。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如在对具体模块的仿真的过程中,往往没有考虑到整体设计的层面以与与上下模块接口的设计。再加上器件对信号的延时
44、等问题,实际下载到实验箱上后会出现一系列的问题,因此仿真图和电路连接图还是有一定区别的。此次的数字钟设计重在于按键的控制和各个模块代码的编写,虽然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有一定的缺陷和不足。总的来说,通过这次的设计实验更进一步地增强了实验的动手能力,对数字钟的工作原理也有了更加透彻的理解。在本设计调试过程中遇到了一些问题如下:1.当程序下载到实验箱上后,数码管显示全部为零,计数器不工作,经分析得知程序中的总的清零信号保持有效状态,改动程序后计数器开始计数。2.当秒时钟计数到 59 时变 0 时,分计数模块滞后计数,考虑的器件的延时,将程序中
45、秒的进位信号提前 1 秒。3 在检测按键时,由于有些按键控制是秒时钟同步的,所以控制起来显得梢慢些,但是工作正常,能满足实际的需要。研究展望研究展望本设计中虽然有控制键对时钟进行控制,但是用到的按键太多,在实际应用上存在不足。故提出改进方案为用一个按键控制数码管的片选,再用两个按键控制计数的加减。这样可以节省按键资源,以供更多的功能的使用。本设计是采用硬件描述语言和 FPGA 芯片相结合进行的数字钟的研究,从中可以看出 EDA 技术的发展在一定程度上实现了硬件设计的软件化。设计的过程变的相对简单,容易修改等优点,相信随着电子技术的发展,数字钟的功能会更加多样化,满足人们的各种需要。 致致在论文
46、完成之际,我首先向关心帮助和指导我的指导老师许金星表示衷心的感并致以崇高的敬意!在论文工作中,遇到了许多难题,一直得到许金星老师的亲切关怀和悉心指导,使我不断进步。许金星老师以其渊博的学识、严谨的治学态度、的工作作风和他敏捷的思维给我留下了深刻的印象,我将终生难忘。再一次向他表示衷心的感,感他为学生营造的浓郁学术氛围,以与学习、生活上的无私帮助! 值此论文完成之际,谨向许金星老师致以最崇高的意!在学校的学习生活即将结束,回顾两年多来的学习经历,面对现在的收获,我感到无限欣慰。为此,我向热心帮助过我的所有老师和同学表示由衷的感!特别感我的师姐吴谦谦对我的学习和生活所提供的大力支持和关心!还要感一
47、直关心帮助我成长的室友 邓森、王蒙!在我即将完成学业之际,我深深地感我的家人给予我的全力支持!最后,衷心地感在百忙之中评阅论文和参加答辩的各位专家、教授! 19 / 34 参考文献参考文献1. 竹生.微分半动力系统的不变集D:博士学位论文.:大学数学系,19832. 君,常明,娟,基于硬件描述语言(VHDL)的数字时钟设计,理工大学学报,2007,第 23 卷 第 4 期,40-413. 廖日坤,CPLD/FPGA 嵌入式应用开发技术白金手册,中国电力,2003,212-218。4. 王开军,宇柏,面向 CPLD/FPGA 的 VHDL 设计,机械工业,2006,28-65。5. 保经,中国集
48、成电路大全,国防工业,1985。6. 高吉祥,电子技术基础实验与课程设计,电子工业,2002。7. 吕思忠,数子电路实验与课程设计,工业大学,2001。8 自美,电子线路设计、实验、测试,华中理工大学,2003。8. 志杰,集成电路应用识图方法,机械工业,2003,35-40。9. 庆双,电子元器件的选用与检测,机械工业,2003。 21 / 34 附录附录 1 1 部分模块代码部分模块代码(1)分频器关键代码entity div22118400 isport(clk:in std_logic; f1hz:out std_logic);end div22118400;architecture
49、behave of div22118400 issignal temp: integer range 0 to 22118399;beginprocess(clk)beginif rising_edge(clk) thentemp=22118399 then f1hz=1; else f1hz=0;end if;end if;end process;end behave;(2)闹钟模块关键代码entity alarm_set isport(rst,hz1:in std_logic; alarm,ok:in std_logic; sec_tune:in std_logic; min_tune:i
50、n std_logic; hour_tune:in std_logic; sec,min:out integer range 0 to 59; hour: out integer range 0 to 23);end alarm_set;architecture behave of alarm_set issignal sec_temp,min_temp: integer range 0 to 59;signal hour_temp:integer range 0 to 23;begintuning:process(rst,hz1,alarm,ok)beginif rst=1 then sec
51、_temp=0;min_temp=0;hour_temp=0;elsif rising_edge(hz1) thenif alarm=1 and ok=0 then 23 / 34if sec_tune=1 then if sec_temp=59 then sec_temp=0;else sec_temp=sec_temp+1;end if;end if;if min_tune=1 then if min_temp=59 then min_temp=0;else min_temp=min_temp+1;end if;end if;if hour_tune=1 then if hour_temp
52、=23 then hour_temp=0;else hour_temp=hour_temp+1;end if;end if;else null;end if;end if;end process tuning;sec=sec_temp;min=min_temp;hour=hour_temp;end behave;(3)定时模块关键代码entity stop_watch is port(rst,hz1:in std_logic; stop:in std_logic; ok:in std_logic; sec_tune:in std_logic; min_tune:in std_logic; ho
53、ur_tune:in std_logic; stop_sec,stop_min:out integer range 0 to 59; stop_hour:out integer range 0 to 23; index:out std_logic; disp:out std_logic);end stop_watch;architecture behave of stop_watch is signal a_sec,a_min:integer range 0 to 59; signal a_hour:integer range 0 to 23;beginprocess(stop,ok,hz1,
54、rst)beginif rst=1then index=0;disp=0;elsif rising_edge(hz1) then if stop=1 and ok=0 then if sec_tune=1 then if a_sec=59 then a_sec=0;else a_sec=a_sec+1;end if;end if;if min_tune=1 thenif a_min=59 then a_min=0;else a_min=a_min+1;end if;end if;if hour_tune=1 thenif a_hour=23 then a_hour=0; else a_hour
55、=a_hour+1;end if;end if;disp=1;elsif stop=1 and ok=1 then if a_sec=0 then if a_min=0 thenif a_hour=0 then index=1; disp=0;else a_hour=a_hour-1; a_min=59; a_sec=59;end if;else a_min=a_min-1; a_sec=59;end if;else a_sec=a_sec-1; index=0; disp=1; 25 / 34end if;else disp=0;end if;end if;end process;stop_
56、sec=a_sec;stop_min=a_min;stop_hour=a_hour;end behave;(4) 按键消抖本模块用于当有按键按下时,采用软件消抖的办法去除按键抖动。模块的实现方法是先判断是否有按键按下,如有按键按下则延时一段时间,待抖动过去之后再读行线状态,如果仍有低电平行线,则确定有按键按下,然后产生一个有按键按下的信号。该模块有一个时钟输入端口,输入时钟信号是分频出来的 1KHZ 的时钟;有一个输入端口与行线相连,用于输入行线状态;一个输出端口,用于输出有按键按下的信号。该模块的逻辑框图如图 4-6 所示。图 4-6 去抖逻辑框图该电路的 VHDL 程序如下:library
57、 ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity qudou is port(clk1:in std_logic; row:in std_logic_vector(3 downto 0); key_pre:out std_logic);end qudou;architecture behav of qudou is signal sig1,counter:std_logic_vector(3 downto 0); signal tmp1,si
58、g2:std_logic;begin sig1=row; tmp1=sig1(0)and sig1(1)and sig1(2)and sig1(3); key_pre=counter(0)and counter(1)and counter(2)and counter(3);process(clk1)begin if(clk1event and clk1=1)then if(tmp1=0)then if(sig2=0)then sig2=1; end if; end if;if(sig2=1)then if(counter=1111)then sig2=0; counter=0000; else
59、 counter=counter+1; end if; end if;end if;end process;end behav;(5) 键扫描模块键扫描模块的框图如图 4-7 所示。图 4-7 按键扫描模块CLKY 为输入时钟,该时钟是分频模块分出的 4MHZ 的时钟信号,之所以在这里采用频率高的时钟信号就是因为键扫描是一个快过程,不需要太慢的时钟。Key_pre 是由去抖模块输出的有键按下的信号,这个信号引发按键扫描模块部信号的变化,在该状态信号的作用下,模块可以键盘扫描。ROW3.0是行输入信号,与键盘的行线相连,COM3.0是列输出信号,与键盘的列线相连。SCAN_CODE7.0是扫描的键码输出端口。键扫描的基本方法是将列线逐一置成低电平,然后读行线输入端口,如果行线中有低电平出现,说明按键已经确定,将行向量和列向量读入键码中即可。键盘扫描程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东食品药品职业学院《隧道施工技术B》2023-2024学年第一学期期末试卷
- 广东石油化工学院《nux运维实践》2023-2024学年第一学期期末试卷
- 广东培正学院《大数据行业规范指导》2023-2024学年第一学期期末试卷
- 广东农工商职业技术学院《时尚媒体与公关》2023-2024学年第一学期期末试卷
- 广东南方职业学院《环境工程技术经济》2023-2024学年第一学期期末试卷
- 广东茂名健康职业学院《照明设计基础》2023-2024学年第一学期期末试卷
- 七年级下册英语人教版单词表
- 【走向高考2022】人教版高三地理一轮复习-区域地理-第2章-第2讲课时作业
- 【名师一号】2020-2021学年高中英语北师大版必修4-双基限时练7
- 【与名师对话】2022高考地理课标版总复习质量检测3-
- 江西省特种作业人员体检表(共1页)
- 室间隔缺损教学查房
- 幼儿园大班主题《我自己》个别化学习
- 派出所立体化勤务指挥室建设模式探析――以大连市公
- 物资设备部工作述职报告
- 单值移动极差图(空白表格)
- 精品资料(2021-2022年收藏)龙门吊轨道基础施工方案
- 画廊与画家合作协议书范本
- 全口义齿-印模与模型-课件PPT
- 地方课程六年级上册
- 中科院大连化物所模板PPT课件
评论
0/150
提交评论