基于VHDL的数字闹钟设计.doc_第1页
基于VHDL的数字闹钟设计.doc_第2页
基于VHDL的数字闹钟设计.doc_第3页
基于VHDL的数字闹钟设计.doc_第4页
基于VHDL的数字闹钟设计.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

摘 要 I 摘摘 要要 随着 EDA 技术的发展和应用领域的扩大与深入 EDA 技术在电子信息 通信 自动控制及计算机应用领域的重要性日益突出 EDA 技术就是依赖功能强大的计 算机 在 EDA 工具软件平台上 对以硬件描述语言 VHDL 为系统逻辑描述手段完 成的设计文件 自动地完成逻辑优化和仿真测试 直至实现既定的电子线路系 统功能 本文介绍了基于 VHDL 硬件描述语言设计的多功能数字闹钟的思路和技 巧 在 Quartus 11 开发环境中编译和仿真了所设计的程序 并逐一调试验证程 序的运行状况 仿真和验证的结果表明 该设计方法切实可行 该数字闹钟可 以实现调时定时闹钟播放音乐功能具有一定的实际应用性 关键词关键词 闹钟 FPGA VHDL II 目目 录录 摘摘 要要 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 第四章第四章 模块电路设计模块电路设计 9 4 1 模块电路图设计 9 4 2 各模块电路设计 9 第五章第五章 实验结果实验结果 16 5 1 实验概述 16 5 2 实验仿真结果 16 第六章第六章 总结与展望总结与展望 18 研究结论 18 研究展望 18 致致 谢谢 20 参考文献参考文献 22 附录附录 1 部分模块代码部分模块代码 24 附录附录 2 动态扫描模块程序动态扫描模块程序 33 目 录 III 第一章第一章 选题背景选题背景 1 1 选题选题研究内容研究内容 设计一个 24 小时的闹钟 该闹钟由显示屏 数字键 TIME 键 ALARM 键 扬声器组成 闹钟总体系统包括如下几步分组成 用于键盘输入预置数字的键盘缓冲器 用于时钟计数的计数器 用于保存闹钟时间的闹钟寄存器 用于显示的七段数 码显示器及控制以上各个部分协同工作的闹钟控制器 1 2 课题课题研究功能研究功能 1 计时功能 这是本计时器设计的基本功能 可进行时 分 秒计时 并 显示 2 闹钟功能 如果当前时间与设置的闹钟时间相同 则扬声器发出一段音 乐 并维持一分钟 3 调时调分调闹钟功能 当需要校时或者要重新设置闹钟的时间时 可 通过实验箱上的按键控制 1 3 课题课题相关技相关技术应术应用用 EDA 技术和硬件描述语言 VHDL 的基础知识 通过对工程实例的系统分析 程序设计和仿真 深入细致地讨论了它们在数字系统设计中的广泛应用 电子 设计自动化 Electronic Design Automation 即 EDA 技术是指包括电路系统设 计 系统仿真 设计综合 PCB 版图设计和制版的一整套自动化流程 随着计算 机 集成电路和电子设计技术的高速发展 EDA 技术已经渗透到百姓生活的各个 角落 日益成为电子信息类产品的支柱产业 秒表 彩灯控制器 抢答器 电梯控制器 出租车计费器 微波炉控制器 FIR 滤波器 I2C 控制器 DDS 序列检测器 自动售货机 函数发生器 调制 解调器和 UART 等 15 个数字系统的 VHDL 设计范例 给用户演示了数字电路的设 计方法和思路 当今电子产品正向功能多元化 体积最小化 功耗最低化的方向发展 它与 传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件 使产 品的性能提高 体积缩小 功耗降低 同时广泛运用现代计算机技术 提高产品 的自动化程度和竞争力 缩短研发周期 EDA 技术正是为了适应现代电子技术的 要求 吸收众多学科最新科技成果而形成的一门新技术 第一章 选题背景 1 选题背景 2 第二章第二章 FPGAFPGA 简介简介 2 1 FPGA 概述概述 FPGA 是现场可编程门阵列 Field Programmable Gate Array 的简称 与之相应的 CPLD 是复杂可编程逻辑器件 Complex Programmable Logic Device 的简称 两者的功能基本相同 只是实现原理略有不同 所以有时可 以忽略这两者的区别 统称为可编程逻辑器件或 CPLD PGFA CPLD PGFA 几乎能 完成任何数字器件的功能 上至高性能 CPU 下至简单的 74 电路 它如同一张 白纸或是一堆积木 工程师可以通过传统的原理图输入或硬件描述语言自由的 设计一个数字系统 通过软件仿真可以事先验证设计的正确性 在 PCB 完成以 后 利用 CPLD FPGA 的在线修改功能 随时修改设计而不必改动硬件电路 使 用 CPLA FPGA 开发数字电路 可以大大缩短设计时间 减少 PCB 面积 提高系 统的可靠性 这些优点使得 CPLA FPGA 技术在 20 世纪 90 年代以后得到飞速的 发展 同时也大大推动了 EDA 软件和硬件描述语言 HDL 的进步 2 1 1 FPGA 基本基本结结构构 FPGA 一般由 3 种可编程电路和一个用于存放编程数据的静态存储器 SRAM 组 成 这 3 种可编程电路是 可编程逻辑模块 CLB Configurable Logic Block 输入 输出模块 IOB I O Block 和互连资源 IR Interconnect Resource 可编程逻辑模块 CLB 是实现逻辑功能的基本单元 它们通常规则 的排列成一个阵列 散布于整个芯片 可编程输入 输出模块 IOB 主要完成 芯片上的逻辑与外部封装脚的接口 它通常排列在芯片的四周 可编程互连资 源包括各种长度的连接线段和一些可编程连接开关 它们将各个 CLB 之间或 CLB IOB 之间以及 IOB 之间连接起来 构成特定功能的电路 2 2 FPGA 编编程原理程原理 硬件设计需要根据各种性能指标 成本 开发周期等因素 确定最佳的实 现方案 画出系统框图 选择芯片 设计 PCB 并最终形成样机 CPLD FPGA 软件设计可分为两大块 编程语言和编程工具 编程语言主要有 VHDL 和 Verilog 两种硬件描述语言 编程工具主要是两大厂家 Altera 和 Xilinx 的集成综合 EDA 软件 如 MAX plusII QuartusII Foundation ISE 以及第三方工具 如 FPGA Express Modelsim Synposys SVS 等 具体的设 计输入方式有以下几种 1 HDL 语言方式 HDL 既可以描述底层设计 也可以描述顶层的设计 但它 不容易做到较高的工作速度和芯片利用率 用这种方式描述的项目最后所能达 到的性能与设计人员的水平 经验以及综合软件有很大的关系 2 图形方式 可以分为电路原理图描述 状态机描述和波形描述 3 种形式 有的软件 3 种输入方法都支持 如 Active HDL MAX plusII 图形输入方式只支 第二章 FPGA 简介 3 持电路原理图描述和波形描述两种 电路原理图方式描述比较直观和高效 对 综合软件的要求不高 一般大都使用成熟的 IP 核和中小规模集成电路所搭成的 现成电路 整体放到一片可编程逻辑器件的内部去 所以硬件工作速度和芯片 利用率很高 但是但项目很大的时候 该方法就显得有些繁琐 状态机描述主 要用来设计基于状态机思想的时序电路 在图形的方式下定义好各个工作状态 然后在各个状态上输入转换条件以及相应的输入输出 最后生成 HDL 语言描述 送去综合软件综合到可编程逻辑器件的内部 由于状态机到 HDL 语言有一种标 准的对应描述方式 所以这种输入方式最后所能达到的工作速度和芯片利用率 主要取决于综合软件 波形描述方式是基于真值表的一种图形输入方式 直接 描述输入与输出的波形关系 这种输入方式最后所能达到的工作速度和芯片利 用率也是主要取决于综合软件 2 3 FPGA 设计设计流程流程 一般说来 一个比较大的完整的项目应该采用层次化的描述方法 分为几 个较大的模块 定义好各功能模块之间的接口 然后各个模块再细分去具体实 现 这就是 TOP DOWN 自顶向下 的设计方法 目前这种高层次的设计方法已 被广泛采用 高层次设计只是定义系统的行为特征 可以不涉及实现工艺 因 此还可以在厂家综合库的支持下 利用综合优化工具将高层次描述转换成针对 某种工艺优化的网络表 使工艺转化变得轻而易举 CPLD FPGA 系统设计的工作 流程如图 2 2 所示 选题背景 4 系统划分 编译器 代码级功能仿真 综合器 适配前时序仿真 适配器 CPLD FPGA实现 适配后仿真模型 适配后时序仿真 适配报告 ASIC 实现 VHDL 代码或图形方式输入 仿真综合库 器件编程文件 图图 2 3 FPGA 设计设计流程流程 第三章 数字闹钟整体方案设计 5 第三章第三章 数字闹钟整体方案设计数字闹钟整体方案设计 3 1 数字数字闹钟闹钟整体整体设计设计 1 各个输入输出端口 1 CLK 为外部时钟信号 RESET 为复位信号 2 KEYPAD 若其中某一位为高电平 则表示用户按下了相应的数 字键 3 当 KEYDOWN 为高电平 表示用户按下某一数字键 4 当 ALAR BUTTON 为高电平时 表示用户按下 ALARM 键 5 当 TIME BUTTON 为高电平时表示用户按下 TIME 键 6 DISPLAY 实际上表示了 4 个 7 段数码管 用于显示时间 7 SOUND ALARM 用于控制扬声器发声 当 SOUND ALARM 1 时 扬声器发出蜂鸣 表示到了设定时间 2 各部分的组成 根据系统的设计要求 整个系统分为 7 个模块 闹钟控制器 译 码器 键盘缓冲器 闹钟寄存器 时间计数器 显示驱动器 分频器 3 1 1 数字数字闹钟闹钟各部分作用各部分作用 1 闹钟控制器 整个系统正常有序工作的核心 按设计要求产生相应的 控制逻辑以控制其他部分工作 2 译码器 可将 KEYPAD 信号转换为 0 9 的整形数 以直观地表示和处理 用户输入的数字 3 键盘缓冲器 是一个移位寄存器 暂存用户键入的数字 并且实现用 户键入数字在显示器上从左到右依次显示 4 分频器 将较高的外部时钟频率分成每分钟一次的时钟频率 以便进 行时钟计数 5 时间计数器 实际上是一个异步复位 异步置数的累加器 通常情况 下进行时钟累加计数 必要时可置入新的时钟值 然后从该值开始新的计数 6 闹钟寄存器 用于保存用户设置的闹钟时间 是一个异步复位寄存器 7 显示驱动器 根据需要显示当前时间 用户设置的闹钟时间或用户通 过键盘输入新的时间 同时判断当前时间是否已到了闹钟时间 实际上是一个 多路选择器加比较器 选题背景 6 3 2 数字数字钟钟的工作原理的工作原理 数字闹钟电路的基本结构由两个 60 进制计数器和一个 24 进制计数器组成 分别对秒 分 小时进行计时 当计时到 23 时 59 分 59 秒时 再来一个计数脉 冲 则计数器清零 重新开始计时 秒计数器的计数时钟 CLK 为 1Hz 的标准信 号 当数字闹钟处于计时状态时 秒计数器的进位输出信号作为分钟计数器的 计数信号 分钟计数器的进位输出信号又作为小时计数器的计数信号时 分 秒的计时结果通过 4 个数码管来动态显示 数字闹钟除了能够正常计时外 还 应能够对时间进行调整 因此 通过模式选择信号 KEY1 KEY2 控制数字钟的工 作状态 即控制数字钟 使其分别工作于正常计时 调整分 时和设定闹钟分 时 5 个状态 当数字闹钟处于计时状态时 3 个计数器允许计数 且秒 分 时 计数器的计数时钟信号分别为 CLK 秒的进位 分的进位 当数字闹钟处于调整时 间状态时 被调的分或时会一秒一秒地增加 当数字钟处于闹钟定时状态时 可以设定小时和分 当计时到所设定的时刻时 speak 将会被赋予梁祝音乐信号 用于驱动扬声器 持续 1 分钟 第四章 模块电路设计 7 第四章第四章 模块电路设计模块电路设计 4 1 模模块电块电路路图设计图设计 图图 4 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 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 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 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 0 signal sec2 std logic vector 3 downto 0 选题背景 8 begin 小时十位 h110 process clk hou2 min1 min2 sec1 sec2 md1 md2 begin if clk event 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 0010 and hou2 0011 and md1 0 and md2 01 then 当时间为 23 点且处于校时状态时 hou1 0000 elsif hou2 1001 and min1 0101 and min2 1001 and sec1 0101 and sec2 1001 or hou2 1001 and 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 clk event 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 elsif hou2 1001 and min1 0101 and min2 1001 and sec1 0101 and sec2 1001 then hou2 0000 elsif hou2 1001 and md1 0 and md2 01 or hou1 0010 and 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 end if end process h220 分钟十位 m110 process clk min2 sec1 sec2 md1 md2 begin if clk event and clk 1 then if min1 0101 and min2 1001 and sec1 0101 and sec2 1001 then min1 0000 elsif min1 0101 and min2 1001 and md1 0 and md2 00 then min1 0000 elsif min2 1001 and sec1 0101 and sec2 1001 or min2 1001 and md1 0 and md2 00 then min1 min1 1 end if end if end if 第四章 模块电路设计 9 end process m110 分钟个位 m220 process clk sec1 sec2 md1 md2 begin if clk event and clk 1 then if min2 1001 and sec1 0101 and sec2 1001 then min2 0000 elsif min2 1001 and md1 0 and md2 00 then min2 0000 else if sec1 0101 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 clk event and clk 1 then if sec1 0101 and sec2 1001 then sec1 0000 else if sec2 1001 then sec1 sec1 1 end if end if end if end process s110 秒个位 s220 process clk begin if clk event 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 clk event and clk 1 then if seth1 0010 and seth2 0011 then seth1 0000 elsif seth2 1001 then seth1 seth1 1 end if end if end process sethour1 sethour2 process clk md1 md2 seth1 begin if clk event and clk 1 then if seth1 0010 and seth2 0011 or seth2 1001 then 选题背景 10 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 clk event and clk 1 then if setm1 0101 and setm2 1001 then setm1 0000 elsif setm2 1001 then setm1 setm1 1 end if end if end process setmin1 setmin2 process clk md1 md2 begin if clk event and clk 1 then if setm2 1001 then setm2 0000 elsif md1 1 and md2 01 then setm2 setm2 1 end if end if end process setmin2 闹铃 speaker process clk hou1 hou2 min1 min2 begin if clk event and clk 1 then 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 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 第四章 模块电路设计 11 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 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 clk EVENT AND clk 1 THEN Count4 Count4 1 END IF END PROCESS GenSpkS PROCESS PreCLK Tone 11 位可预置计数器 VARIABLE Count11 STD LOGIC VECTOR 10 DOWNTO 0 BEGIN IF PreCLK EVENT 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 BEGIN IF FullSpkS EVENT 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 DOWNTO 0 END ARCHITECTURE one OF NoteTabs IS COMPONENT MUSIC 音符数据 ROM PORT address IN STD LOGIC VECTOR 7 DOWNTO 0 选题背景 12 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 THEN Counter 00000000 ELSIF clk EVENT 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 VECTOR 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 all LIBRARY altera mf USE altera mf altera mf components all ENTITY music IS PORT 第四章 模块电路设计 13 address 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 IS SIGNAL sub wire0 STD LOGIC VECTOR 3 DOWNTO 0 COMPONENT altsyncram GENERIC intended device family STRING width a NATURAL widthad a NATURAL numwords a NATURAL operation 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 BEGIN q 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 a address q a sub wire0 END SYN 选题背景 14 第五章第五章 实验结果实验结果 5 1 实验实验概述概述 本实验是以 KEY2 KEY1 为控制整个闹钟的校时 校分 校闹钟时 分 分 别将 KEY2 1 KEY2 0 KEY1 送到实验上的三个键 由这三个键来控制整个校 时 校分 校闹钟时 校闹钟分的过程 加上分别连接的键叫 A B C 键 5 2 实验实验仿真仿真结结果果 则当 A 0 B 1 C 0 时是对时钟进行校时 时个位和时十位会以二十四进制 循环自动增加 仿真波形 图图 5 2 1 当 A 0 B 0 C 0 时是对时钟进行校分 分个位和分十位会以六十进制循环 增加 并且不对时进位 仿真波形 图 5 2 2 当 A 0 B 1 C 1 时是对闹钟进行校分 闹钟时个位和时十位会以二十四进 制循环自动增加 仿真波形 图图 5 2 3 当 A 0 B 0 C 1 时是对闹钟进行校时 闹钟分个位和分十位会以六十进制 循环增加 并且不对时进位 仿真波形 实验结果 15 图图 5 2 4 而当 A 1 B 0 C 0 或者 A 1 B 1 C 0 是正常的计时时间 秒从零开始计 时 每秒加一 当到达五十九在来一个脉冲后 秒十位和秒个位清零 从零开 始直到六十一直循环 并且向分个位清零 分位的原理同秒的一样 而时与秒 分的不同之处是 当时计数到二十三时清零并且不向任何位进位 仿真波形 图图 5 2 5 另外当计数的时 分和闹钟所事先设置时 分相等时 梁祝 这首歌会 响起 作为闹钟并且维持一分钟 一分钟歌曲自动停止 在有条件的情况下 为验证所设计程序是否正确 将程序下载到 FPGA 器件中进行硬件测试 在 Quartus 开发环境中进行管脚锁定 连接好数码管驱动电路 然后将目标文件 下载到器件中 最终可以看到时 分 秒正常显示 选题背景 16 第六章第六章 总结与展望总结与展望 研究研究结论结论 通过本次实验 系统的复习整个 EDA 的知识 并且了解了 CPLD 可编程芯片 的结构和引脚 能够熟练的运用 quartus II 这个软件 尤其可贵的是 学会了 使用这个软件来给程序配置引脚 并且实际的通过实验箱的几个按键就可以控 制整个操作的过程 终于感到自己所学到的知识可以付诸到实践了 在此次的数字钟设计过程中 更进一步地熟悉有关数字电路的知识和具体 应用 学会了利 Max plus 和 QuarterII 软件进行原理图的绘制 硬件描述语言 VHDL 的编写 程序的仿真等工作 并能根据仿真结果分析设计的存在的问题和 缺陷 从而进行程序的调试和完善 在设计电路中 往往是先仿真后连接实物图 但有时候仿真和电路连接并 不是完全一致的 例如在对具体模块的仿真的过程中 往往没有考虑到整体设 计的层面以及与上下模块接口的设计 再加上器件对信号的延时等问题 实际 下载到实验箱上后会出现一系列的问题 因此仿真图和电路连接图还是有一定 区别的 此次的数字钟设计重在于按键的控制和各个模块代码的编写 虽然能把键 盘接口和各个模块的代码编写出来 并能正常显示 但对于各个模块的优化设 计还有一定的缺陷和不足 总的来说 通过这次的设计实验更进一步地增强了 实验的动手能力 对数字钟的工作原理也有了更加透彻的理解 在本设计调试 过程中遇到了一些问题如下 1 当程序下载到实验箱上后 数码管显示全部为零 计数器不工作 经分 析得知程序中的总的清零信号保持有效状态 改动程序后计数器开始计数 2 当秒时钟计数到 59 时变 0 时 分计数模块滞后计数 考虑的器件的延时 将程序中秒的进位信号提前 1 秒 3 在检测按键时 由于有些按键控制是秒时钟同步的 所以控制起来显得梢 慢些 但是工作正常 能满足实际的需要 研究展望研究展望 本设计中虽然有控制键对时钟进行控制 但是用到的按键太多 在实际应 用上存在不足 故提出改进方案为用一个按键控制数码管的片选 再用两个按 键控制计数的加减 这样可以节省按键资源 以供更多的功能的使用 本设计是采用硬件描述语言和 FPGA 芯片相结合进行的数字钟的研究 从中 可以看出 EDA 技术的发展在一定程度上实现了硬件设计的软件化 设计的过程 变的相对简单 容易修改等优点 相信随着电子技术的发展 数字钟的功能会 更加多样化 满足人们的各种需要 展望与总结 17 致致 谢谢 在论文完成之际 我首先向关心帮助和指导我的指导老师许金星表示衷心 的感谢并致以崇高的敬意 在论文工作中 遇到了许多难题 一直得到许金星老师的亲切关怀和悉心 指导 使我不断进步 许金星老师以其渊博的学识 严谨的治学态度 求实的 工作作风和他敏捷的思维给我留下了深刻的印象 我将终生难忘 再一次向他 表示衷心的感谢 感谢他为学生营造的浓郁学术氛围 以及学习 生活上的无 私帮助 值此论文完成之际 谨向许金星老师致以最崇高的谢意 在学校的学习生活即将结束 回顾两年多来的学习经历 面对现在的收获 我感到无限欣慰 为此 我向热心帮助过我的所有老师和同学表示由衷的感谢 特别感谢我的师姐吴谦谦对我的学习和生活所提供的大力支持和关心 还要 感谢一直关心帮助我成长的室友 邓森 王蒙 在我即将完成学业之际 我深深地感谢我的家人给予我的全力支持 最后 衷心地感谢在百忙之中评阅论文和参加答辩的各位专家 教授 致谢 18 参考文献 19 参考文献参考文献 1 张竹生 微分半动力系统的不变集 D 博士学位论文 北京 北京大学数学系 1983 2 刘君 常明 秦娟 基于硬件描述语言 VHDL 的数字时钟设计 天津理 工大学学报 2007 第 23 卷 第 4 期 40 41 3 廖日坤 CPLD FPGA 嵌入式应用开发技术白金手册 中国电力出版社 2003 212 218 4 王开军 姜宇柏 面向 CPLD FPGA 的 VHDL 设计 机械工业出版社 2006 28 65 5 赵保经 中国集成电路大全 国防工业出版社 1985 6 高吉祥 电子技术基础实验与课程设计 电子工业出版社 2002 7 吕思忠 数子电路实验与课程设计 哈尔滨工业大学出版社 2001 8 谢自美 电子线路设计 实验 测试 华中理工大学出版社 2003 8 赵志杰 集成电路应用识图方法 机械工业出版社 2003 35 40 9 张庆双 电子元器件的选用与检测 机械工业出版社 2003 参考文献 20 附录 21 附录附录 1 1 部分模块代码部分模块代码 1 分频器关键代码 entity div22118400 is port clk in std logic f1hz out std logic end div22118400 architecture behave of div22118400 is signal temp integer range 0 to 22118399 begin process clk begin if rising edge clk then temp 22118399 then f1hz 1 else f1hz 0 end if end if end process end behave 2 闹钟模块关键代码 entity alarm set is port rst hz1 in std logic alarm ok in std logic sec tune in std logic min tune in 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 is signal sec temp min temp integer range 0 to 59 signal hour temp integer range 0 to 23 begin tuning process rst hz1 alarm ok begin if rst 1 then sec temp 0 min temp 0 hour temp 0 elsif rising edge hz1 then if alarm 1 and ok 0 then 附 录 22 if 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 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 hour 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 附录 23 signal a hour integer range 0 to 23 begin process stop ok hz1 rst begin if rst 1 then 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 then if a min 59 then a min 0 else a min a min 1 end if end if if hour tune 1 then if a hour 23 then a hour 0 else a hour 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 then if 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 附 录 24 end if else disp 0 end if end if end process stop sec a sec stop min a min stop hour a hour end behave 4 按键消抖 本模块用于当有按键按下时 采用软件消抖的办法去除按键抖动 模块的 实现方法是先判断是否有按键按下 如有按键按下则延时一段时间 待抖动过 去之后再读行线状态 如果仍有低电平行线 则确定有按键按下 然后产生一 个有按键按下的信号 该模块有一个时钟输入端口 输入时钟信号是分频出来 的 1KHZ 的时钟 有一个输入端口与行线相连 用于输入行线状态 一个输出端 口 用于输出有按键按下的信号 该模块的逻辑框图如图 4 6 所示 图 4 6 去抖逻辑框图 该电路的 VHDL 程序如下 library 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 sig2 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 clk1 event and clk1 1 then if tmp1 0 then if sig2 0 then 附录 25 sig2 1 end if end if if sig2 1 then if counter 1111 then sig2 0 counter 0000 else counter counter 1 end if end if end if end process end behav 5 键扫描模块 键扫描模块的框图如图 4 7 所示 图 4 7 按键扫描模块 CLKY 为输入时钟 该时钟是分频模块分出的 4MHZ 的时钟信号 之所以在这 里采用频率高的时钟信号就是因为键扫描是一个快过程 不需要太慢的时钟 Key pre 是由去抖模块输出的有键按下的信号 这个信号引发按键扫描模块内部 信号的变化 在该状态信号的作用下 模块可以键盘扫描 ROW 3 0 是行输入信号 与键盘的行线相连 COM 3 0 是列输出信号 与键盘的列线相连 SCAN CODE 7 0 是扫描的键码输出端口 键扫描的基本方法是将列线逐一置成低电平 然后读行线输入端口 如果 行线中有低电平出现 说明按键已经确定 将行向量和列向量读入键码中即可 键盘扫描程序如下 library ieee use ie

温馨提示

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

评论

0/150

提交评论