




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要摘要 数字钟学习的目的是掌握各类计数器及它们相连的设计方法 掌握多个数码管显示的 原理与方法 掌握模块化设计方式 掌握用 VHDL 语言的设计思想以及整个数字系统的设 计 此数字钟具有时 分 秒计数显示功能 以 24 小时为计数循环 能实现清零 调时 调分以及整点报时等功能 本设计是一个显示时 2 位 分 2 位 秒 2 位 共六个数字 的多功能电子钟 信号发生器输出的 40Mhz 作为系统频率 时钟 因此将其分频得 1Hz 的秒钟信号 秒计满 60 即得 1 分钟 分满 60 即得 1 小时信号 小时满 24 即得一天 关键词关键词 数字钟 计数器 数码管 模块化设计 VHDL 一 设计分析 1 1 设计要求设计要求 1 具有时 分 秒计数显示功能 以 24 小时循环计时 2 时钟计数显示时有 LED 灯的花样显示 3 具有调节小时 分钟及清零的功能 4 具有整点报时功能 1 2 性能指标及功能设计性能指标及功能设计 1 时钟计数 完成时 分 秒的正确计时并且显示所计的数字 对秒 分 60 进制计数 即从 0 到 59 循环计数 时钟 24 进制计数 即从 0 到 23 循环计数 并且在数码管上显示数值 2 时间设置 手动调节分钟 小时 可以对所设计的时钟任意调时间 这 样使数字钟真正具有使用功能 我们可以通过实验板上的键 7 和键 4 进行任意 的调整 因为我们用的时钟信号均是 1HZ 的 所以每 LED 灯变化一次就来一 个脉冲 即计数一次 3 清零功能 reset 为复位键 低电平时实现清零功能 高电平时正常计数 可以根据我们自己任意时间的复位 4 蜂鸣器在整点时有报时信号产生 蜂鸣器报警 产生 滴答 滴答 的报 警声音 5 LED 灯在时钟显示时有花样显示信号产生 即根据进位情况 LED 不 停的闪烁 从而产生 花样 信号 1 3 系统方框图系统方框图 数字时钟 控制单元 时调整 分调整 使能端信号 CLK 信号 时显示 分显示 秒显示 24 进制 60 进制 60 进制 LED 显示 整点报时花样显示 二 设计方案 本设计采用自顶向下的设计方法和模块化设计方式 它由秒计数模块 分计数模块 小时计数模块 报警模块 秒分时设置模块和译码模块 程序包 entity 模块 顶层模块 八部分组成 优点 设计简单方便 层次清晰 工程的建立方便 无需单独设计各个组件模块产生 原理图文件后再进行电路连接设计 三 设计原理和过程 3 1 硬件设计硬件设计 本设计使用 VHDL 硬件开发板 可编程逻辑器件 EMP1270T144C5 系列 设计过程中 用到的外围电路的设计如下 3 1 1 电源部分 3 1 2 可编程器件 EMP1270T144C5 3 1 3 CPLD JTAG 接口 3 1 4 晶振和蜂鸣器 3 1 4 LED 数码管显示 3 1 5 DIP 开关与按键输入 具体电路见附录 3 2 软件设计软件设计 3 2 1 程序包 my pkg 的设计说明 为了简化程序设计增加可读性 系统采用模块化的设计方法 重复使用的组件以元件 component 的形式存在 以便相关块的调用 主程序内用不同的功能模块构成一完整的 结构 下面列出 my pkg 组件包的代码 自定义的包集合 用到的几个模块元件声明 library ieee use ieee std logic 1164 all package my pkg is component div40M 元器件 1 Port clk in std logic f1hz out std logic end component component count60 元器件 2 Port clr clk in std logic one buffer std logic vector 3 downto 0 ten buffer std logic vector 3 downto 0 full out std logic dout buffer std logic vector 7 downto 0 end component component count24 元器件 3 Port clr clk in std logic one buffer std logic vector 3 downto 0 ten buffer std logic vector 3 downto 0 full out std logic end component component scan6 元器件 4 port clr clk in STD LOGIC h ten h one m ten m one s ten s one in STD LOGIC vector 3 downto 0 cs out STD LOGIC vector 5 downto 0 mux out out STD LOGIC vector 3 downto 0 end component component bin2led 元器件 5 port bin in std logic vector 3 downto 0 led out std logic vector 7 downto 0 end component component sh1k 元器件 6 Port clk in std logic from system clock 40MHz f1hz out std logic 1Hz output signal end component component alarm set 元器件 7 Port rst hz1 in std logic system clock 1Hz alarm ok in std logic keep pushing to declare alarm set sec tune in std logic sec one sec ten out std logic vector 3 downto 0 end component end my pkg 3 2 2 count60 组件 由此提供分 秒 计数值 当分计数器计数到 59 再来一个脉冲信号秒计数器清零从新 开始计数 而进位则作为小时计数器的计数脉冲 使小时计数器计数加 1 同时分计数器 在分设置时钟信号的响应下设置分计数器的数值 在 count60 组件中 个位 one 和十位 ten 分别计数 都设为二进制四位矢量形式 当个位从 0 计到 9 时 在下一个 clk 上升 沿来临后 十位进 1 个位变 0 十位从 0 到 5 计数 在十位为 5 个位 9 的时候 下一个 上升沿来临后 十位个位都变 0 进位 full 加 1 因此在程序设计中需要两个进程 process 来分别完成计数 秒计数以 1Hz 的输入为触发信号 分计数以秒的 full 信号为触发信号 具体的 count60 的组件代码如下 60 进制计数模块 Library ieee Use ieee std logic 1164 all Use ieee std logic unsigned all Entity count60 is Port clr clk in std logic one buffer std logic vector 3 downto 0 ten buffer std logic vector 3 downto 0 full out std logic dout buffer std logic vector 7 downto 0 end count60 architecture behav of count60 is begin process clr clk begin if clr 0 then one 0000 elsif rising edge clk then if one 1001 then one 0000 else one one 1 end if end if end process process clr clk begin if clr 0 then ten 0000 elsif rising edge clk then if one 1001 then if ten 0101 then ten 0000 else ten ten 1 end if end if end if end process dout ten process clk 满 59 进位 置 full 值 begin if rising edge clk then if ten 0101 then if one 1001 then full 1 else full 0 end if else full 0 end if end if end process end behav 设定 clk 与 clr 两个系统的输入后 课观察到 one 和 ten 的波形 在计数值达到 59 后 即 ten 为 0101 one 为 1001 以后 即进位到 0000 0000 full 进 1 波形如下 3 2 3 count24 组件 由此提供时计数值 当时计数器计数到 23 再来一个脉冲信号秒计数器清零从新开始 计数 而进位则作为小时计数器的计数脉冲 使小时计数器计数加 1 同时分计数器在分 设置时钟信号的响应下设置时计数器的数值 在 count24 组件中 个位 one 和十位 ten 分别计数 都设为二进制四位矢量形式 在 ten 小于 2 的时候 个位从 0 计到 9 时 满 9ten 加 1 在 ten 为 2 的时候 one 从 0 到 3 计数 one 为 3 时候 在下一个 clk 上升沿来临 后 ten 与 one 都变 0 进位 full 加 1 因此在程序设计中需要多个个进程 process 来分别完 成计数 时计数以分的 full 的输入为触发信号 分计数以秒的 full 信号为触发信号 具体 的 count24 的组件代码如下 24 进制计数 Library ieee Use ieee std logic 1164 all Use ieee std logic unsigned all Entity count24 is Port clr clk in std logic one buffer std logic vector 3 downto 0 ten buffer std logic vector 3 downto 0 full out std logic end count24 architecture behav of count24 is begin process clr clk 计数 0 到 23 begin if clr 0 then ten 0000 one 0000 elsif rising edge clk then if ten 0010 then if one 1001 then one one 0001 end if if one 1001 then one 0000 ten ten 0001 end if end if if ten 0010 then if one 0011 then one one 0001 end if if one 0011 then one 0000 ten 0000 end if end if end if end process process clk 满 23 进位 begin if rising edge clk then if ten 0010 then if one 0011 then full 1 else full 0 end if else full 0 end if end if end process end behav 小时计数模块图形分析 用来对时进行计数 当记到计数器的低四位小于 2 时 one 从 0 到 9 计数 ten 为 2 时 one 从 0 到 3 计数 所以完成了 24 进制的计数 clk 为系统时钟信号 具体波形如下 3 2 4 div40M 分频组件 为了便于时钟计数 需要 1Hz 的时钟信号 为了节省电力耗电 输出采用 7 段 LED 数码管来显示 要提供秒钟的源信号 以便正常的计数 另外 6 个 led 数码管要都显示 利用人眼的视觉暂留效应 需要 1000hZ 的时钟扫描信号 在本系统中 时钟信号发生器 的信号频率为 40MHz 因此要将其进行分频 产生 1HZ 和 1KHz 的信号 代码如下 系统 40MHz 分频 产生 1HZ 1 秒 的时钟信号 提供秒计数 Library IEEE Use IEEE std logic 1164 all Use ieee std logic unsigned all Use IEEE std logic arith all Entity div40M is Port clk in std logic from system clock 40MHz f1hz out std logic 1Hz output signal end div40M architecture arch of div40M is signal count integer range 0 to 19999999 begin process clk begin if rising edge clk then count 10000000 then f1hz 1 else f1hz 0 end if end if end process end arch 本模块将 40MHZ 分频 分成 1000HZ 提供扫描 片选 的时间 Library IEEE Use IEEE std logic 1164 all Use ieee std logic unsigned all Use IEEE std logic arith all Entity sh1k is Port clk in std logic f1hz out std logic end sh1k architecture arch of sh1k is signal count integer range 0 to 39999 begin process clk begin if rising edge clk then count 20000 then f1hz 1 else f1hz 0 end if end if end process end arch 波形分析 具体的分频波形如下 由于这里的 40MHZ 太大 仿真时不便观察这里我们以 40KHZ 来分 频 效果如下 3 2 5 scan6 扫描组件 由于 LED 使用动态显示 因此要采用扫描的方式来点亮各个 LED 管 人眼的视觉延 迟 1 32 秒 在本模块中 时 分 秒的每一位数都作为输入 同时提供一个片选 6 位 每来一个 clk 进行一次选位循环 即依次点亮 6 个 LED 灯管 在点亮的对应管上将该位的 数字送给一个输出端口 max out 送到显示模块显示 具体的代码如下 扫描片选模块 library IEEE use IEEE std logic 1164 all use IEEE std logic arith all use IEEE std logic unsigned all entity scan6 is port clr clk in STD LOGIC h ten h one m ten m one s ten s one in STD LOGIC vector 3 downto 0 输入 的 4 位时钟 cs out STD LOGIC vector 5 downto 0 片选 mux out out STD LOGIC vector 3 downto 0 要显示的那一个时钟位 end scan6 architecture arch of scan6 is signal sel std logic vector 2 downto 0 begin process clr clk h ten h one m ten m one s ten s one begin if clr 0 then sel 000 elsif rising edge clk then sel mux out s one cs mux out s ten cs mux out m one cs mux out m ten cs mux out h one cs mux out h ten cs mux out ledledledledledledledledledledNULL END CASE END PROCESS end arch 仿真波形如下 3 2 7 alarm set 组件 为了设定闹钟 我们设计一个目标调整程序 以 1Hz 的显示速率来调整时分秒的显 示 这里的 alarm 为指拨开关 当为 on 时 六个数字即显示 00 00 00 以等待输入 当持 续按键后 秒从 0 到 59 依次增加 再返回 0 任何时刻松开按键 即为要显示的值 调分 键和调时键的动作原理相同 此时 OK 指拨开关的然在 off 状态 代码如下 library IEEE use IEEE std logic 1164 all use IEEE std logic arith all use IEEE std logic unsigned all Entity alarm set is Port rst hz1 in std logic system clock 1Hz alarm ok in std logic keep pushing to declare alarm set sec tune in std logic sec one sec ten out std logic vector 3 downto 0 End define the signal structure and flow of the device architecture arch of alarm set is signal sec one tmp std logic vector 3 downto 0 signal sec ten tmp std logic vector 3 downto 0 begin tuning process rst hz1 alarm ok begin if rst 1 then sec one tmp 0000 sec ten tmp 0000 elsif rising edge hz1 then if alarm 0 and ok 1 then if sec tune 1 then if sec one tmp 1001 then sec one tmp 0000 if sec ten tmp 0101 then sec ten tmp sec ten tmp 0001 else sec ten tmp 0000 end if else sec one tmp sec one tmp 0001 end if end if else null end if end if end process tuning sec one sec one tmp sec tenclk f1hz hz1 元件的调用 u1 count60 port map clr clr clk hz1 one sec one ten sec ten full full sec u2 count60 port map clr clr clk full sec one min one ten min ten full full min u3 count24 port map clr clr clk full min one hour one ten hour ten full full hour end block normal counting scantime block 扫描时间的设定 这里为 1 毫秒 1000Hz begin u4 sh1k port map clk clk f1hz hz1k end block scantime scan display block 将 4 位二进制的时间转为 BCD 码 显示 begin u7 alarm set port map rst clr hz1 hz1 alarm alarm ok ok sec tune sec button sec one a sec one sec ten a sec ten u5 scan6 port map clr clr clk hz1k s one a s ten b m one c m ten d h one e h ten f mux out time bin cs cs u6 bin2led port map bin time bin led dout 送到端口显示 end block scan display beep process hz1 clr begin if rising edge hz1 then
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年聚氨基双马来酰胺合作协议书
- 2025年烟度计合作协议书
- 会计师审计工作经历证明书(7篇)
- 农业生物技术运用与知识产权分享合同
- 软件服务业软件测试与质量管理优化方案研究
- 农业经济管理协作计划合同书
- 房地产行业销售佣金及奖金收入证明(6篇)
- 行政管理知识梳理试题及答案
- 广告代理发布合同协议书要求与
- 创业投资企业投资金额及权益证明书(8篇)
- 移动通信基站电磁辐射环境监测方法考题附答案
- 重力坝毕业设计-水电站混凝土重力坝工程设计
- DB32T 4353-2022 房屋建筑和市政基础设施工程档案资料管理规程
- 工程投标密封条
- 浅圆仓仓顶钢桁架结构监理实施细则
- 新建铁路晋豫段站前工程设计技术交底材料(站场)
- 人教版三年级下册数学面积应用题基础篇【含答案】
- 深圳某旅游口岸施工组织设计
- GB∕T 25684.6-2021 土方机械 安全 第6部分:自卸车的要求
- 物料管理入门练习作业答案
- 学生活动场地借用流程
评论
0/150
提交评论