




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDLVHDL 数字系统设计与测试大作业数字系统设计与测试大作业 题目 带闹钟功能的计时器题目 带闹钟功能的计时器 学号 学号 1010120979 姓名 陈倩姓名 陈倩 一 系统功能与要求 一 系统功能与要求 1 用 VHDL 完成带闹钟功能的 24 小时计时器的设计及仿真 2 设计计时器的外观由以下几个部分组成 4 个七段数码管组成的显示屏 数字 键 0 9 Time 键 Alarm 键 扬声器 3 该计时器设计完成以下几种功能 1 计时功能 这是本计时器设计的基本功能 每隔一分钟计时一次 并在显示 屏上显示当前时间 2 闹钟功能 如果当前时间与设计的闹钟时间相同 则扬声器发出蜂鸣声 3 设置新的计时器时间 用户用数字键 0 9 键入新的时间 然后按 Time 键确认 4 设置新的闹钟时间 用户用数字键 0 9 键入新的时间 然后按 Alarm 键确认 5 显示所设置的闹钟时间 在正常计时显示状态下 用户直接按下 Alarm 键 则已设置的闹钟时间显示在显示屏上 二 设计思路 二 设计思路 需要一个控制各个部分协同工作的电路 可以通过有限状态机的方式来实现 控制器的功能 根据设计要求需要五种状态 S0 表示电路初态即正常时钟计数状态 完成基本的计时功能 S1 接收键盘输入状态 在状态 S0 时用户按下数字键后进入此状态 在此状 态下 显示屏上显示的是用户键入的数字 S2 设置新的闹钟时间 在状态 S1 时用户按下 Alarm 键后进入此状态 S3 设置新的计时器时间 在状态 S1 时用户按下 Alarm 键后进入此状态 S4 显示闹钟时间 在状态 S0 时用户按下 Alarm 键后进入此状态 在此状态 下 显示屏上显示的是所设置的闹钟时间 经过一段时间后 在返回 S0 显示 计时器时间 三 模块说明及源代码 三 模块说明及源代码 1 闹钟系统控制器 闹钟系统控制器 clk 为外部时钟信号 reset 为复位信号 当 key 1 时 表示用户按下数字键 当 alarm botton 1 时 表示用户按下 Alarm 键 当 time botton 1 时 表示用户按下 Time 键 当 load new a 1 时 控制 闹钟时间寄存器 加载新的闹钟时间值 当 load new c 1 时 控制 时钟计数器 设置新的时间值 当 show new time 1 时 控制 七段数码显示电路 显示新的时间值 当 show new time 0 时 根据 show a 信号的值控制显示闹钟时间或当前时间 此时 当 show a 1 时控制显示闹钟时间 否则显示闹钟时间 代码如下 代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity alarm controller is port key in std logic alarm button in std logic time button in std logic clk in std logic reset in std logic load new a out std logic load new c out std logic show new time out std logic show a out std logic end alarm controller architecture rtl of alarm controller is type type t state is s0 s1 s2 s3 s4 constant time out if clock period is 10 ms the following timeout will be 5 s constant key timeout t short 500 constant show alarm timeout t short 500 inner sigals signal curr state t state signal next state t state signal counter k t short signal enable count k std logic signal count k end std logic signal counter a t short signal enable count a std logic signal count a end std logic begin process clk reset begin if reset 1 then curr state s0 elsif rising edge clk then curr state next state end if end process process key alarm button time button curr state count a end count k end begin initializtion next state curr state load new a 0 load new c 0 show a 0 show new time 0 enable count k 0 enable count a initial state next state if key 1 then next state s1 show new time 1 elsif alarm button 1 then next state s4 show a 1 else next state key has been pressed next state if key 1 then next state s1 elsif alarm button 1 then next state s2 load new a 1 elsif time button 1 then next state s3 load new c 1 else if count k end 1 then time out next state s0 else next state s1 end if enable count k 1 end if show new time load new alarm next state if alarm button 1 then next state s2 load new a 1 else next state load new time next state if time button 1 then next state s3 load new c 1 else next state show alarm next state if key 1 then next state s1 else next state s4 if count a end 1 then next state s0 else next state s4 show a 1 end if enable count a null end case end process counter for incrementing key count key process enable count k clk begin if enable count k 0 then counter k 0 count k end key timeout then time out count k end 1 else counter k counter k 1 end if end if end process counter for incrementing show alarm time count alarm process enable count a clk begin if enable count a 0 then counter a 0 count a end show alarm timeout then time out count a end 1 else counter a counter a 1 end if end if end process end rtl 其中 闹钟系统共享信息所在的包 p alarm 代码如下 library ieee use ieee std logic 1164 all package p alarm is subtype t digital is integer range 0 to 9 subtype t short is integer range 0 to 65535 type t clock time is array 3 downto 0 of t digital type t display is array 3 downto 0 of std logic vector 6 downto 0 type SEG7 is array 0 to 9 of std logic vector 6 downto 0 constant seven seg SEG7 0111111 0000110 1011011 1001111 1100110 1101101 1111101 0000111 1111111 1110011 type keypad9 is array 0 to 9 of std logic vector 9 downto 0 constant keynumber keypad9 0000000001 0 0000000010 1 0000000100 2 0000001000 3 0000010000 4 0000100000 5 0001000000 6 0010000000 7 0100000000 8 1000000000 9 end p alarm 2 闹钟系统的译码器 闹钟系统的译码器 本模块的功能是将每次按下的闹钟系统的数字键盘后产生的一个数字所对应的 十位二进制数据信号 转换为一位十进制整数信号 以作为小时 分钟计数的 4 个 数字之一 代码如下 代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity decoder is port keypad in std logic vector 9 downto 0 value out t digital end decoder architecture rtl of decoder is begin with keypad select value 0 when 0000000001 1 when 0000000010 2 when 0000000100 3 when 0000001000 4 when 0000010000 5 when 0000100000 6 when 0001000000 7 when 0010000000 8 when 0100000000 9 when 1000000000 0 when others end rtl 3 闹钟系统移位寄存器 闹钟系统移位寄存器 本模块的功能是在 clk 端口输入信号的上升沿同步下 将 key 端口的输入信号移入 new time 端口的输出信号的最低位 原有信息依次向左移 最高位丢失 而 reset 端口 的输入信号对 new time 端口的输出信号进行异步清零复位 代码如下 代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity key buffer is port key in t digital clk in std logic reset in std logic new time out t clock time end key buffer architecture rtl of key buffer is signal n t t clock time begin shift process reset clk begin if reset 1 then n t 0 0 0 0 elsif clk event and clk 1 then for i in 3 downto 1 loop n t i n t i 1 end loop n t 0 key end if end process new time n t end rtl 4 闹钟系统的闹钟寄存器 闹钟系统的闹钟寄存器 在时钟上升沿同步下 根据 load new a 的输入信号控制 alarm time 的输出 当 load new a 1 时 把 new alarm time 的输入值输出 而 reset 输入信号对 alarm time 的输出进行异步复位清零 源代码如下 源代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity alarm reg is port new alarm time in t clock time load new a in std logic clk in std logic reset in std logic alarm time out t clock time end alarm reg architecture rtl of alarm reg is begin process clk reset begin if reset 1 then alarm time 0 0 0 0 else if rising edge clk then if load new a 1 then alarm time new alarm time elsif load new a 0 then assert false report Uncertain load new alarm control severity warning end if end if end if end process end rtl 5 闹钟系统的时间计数器 闹钟系统的时间计数器 当 reset 1 时 对 current time 输出清零复位 当 load new c 1 时 将 new current time 的输入给 current time reset 端口的控制优先于 load new c 端口 当 这两个控制信号都无效时 在时钟上升沿同步下 对 current time 端口输出信号累加 1 并根据小时 分钟的规律处理进位 源代码如下 源代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity alarm counter is port new current time in t clock time load new c in std logic clk in std logic reset in std logic current time out t clock time end alarm counter architecture rtl of alarm counter is signal i current time t clock time begin process clk reset load new c variable c t t clock time begin if reset 1 then i current time 0 0 0 0 elsif load new c 1 then i current time new current time elsif rising edge clk then c t i current time if c t 0 9 then c t 0 c t 0 1 else c t 0 0 if c t 1 5 then c t 1 c t 1 1 else c t 1 0 if c t 3 2 then if c t 2 9 then c t 2 c t 2 1 else c t 2 0 c t 3 c t 3 1 end if else if c t 2 3 then c t 2 c t 2 1 else c t 2 0 c t 3 0 end if end if end if end if i current time c t end if end process current time i current time end rtl 6 闹钟系统的显示驱动器 闹钟系统的显示驱动器 当 show new time 1 时 根据 new time 输入信号产生相应的 4 个七段数码显示器 的驱动数据 并在 display 端口输出该数据 当 show new time 0 时 判断 show a 端 口的输入信号 当 show a 1 时 根据 alarm time 端口的输入信号产生相应的 4 个七 段数码显示器的驱动数据 并在 display 端口输出该数据 当 show a 0 时 根据 current time 端口的输入信号 对 display 端口进行驱动 当 alarm time 端口的输入信 号与 current time 端口的输入信号值相同时 sound alarm 端口的输出信号有效 反之 无效 源代码如下 源代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity display driver is port alarm time in t clock time current time in t clock time new time in t clock time show new time in std logic show a in std logic sound alarm out std logic display out t display end display driver architecture rtl of display driver is signal display time t clock time begin output controls ctrl process alarm time current time new time show a show new time begin set alarm sound enable or not sound lp for i in alarm time range loop if not alarm time i current time i then sound alarm 0 exit sound lp else sound alarm 1 end if end loop sound lp select display time if show new time 1 then display time new time elsif show a 1 then display time alarm time elsif show a 0 then display time current time else display time 2 4 0 0 assert false report Uncertain display driver control severity warning end if end process seven segment display disp process display time begin for i in display time range loop display i seven seg display time i end loop end process end rtl 7 闹钟系统的分频器 闹钟系统的分频器 将 clk in 端口输入的时钟信号分频后送给 clk out 端口 当 reset 1 时 clk out 输 出端口清零 源代码如下 源代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity fq divider is port clk in in std logic reset in std logic clk out out std logic end fq divider architecture rtl of fq divider is constant divide period t short 6000 begin divide clk process clk in reset variable cnt t short begin if reset 1 then cnt 0 clk out 0 elsif rising edge clk in then if cnt divide period 2 then clk out 1 cnt cnt 1 elsif cnt divide period 1 then clk out 0 cnt cnt 1 else cnt 0 end if end if end process divide clk end rtl 8 闹钟系统的整机 闹钟系统的整机 前面已经说明了计时器各个组成部分的设计及相关的说明 把这些组成部分组装起 来 形成完整的整体设计 clk 为外部时钟信号 reset 为复位信号 keypad 是一个十位信号 若其中某一位为高电平 则表示用户按下了相应下标的数 字键 keydown 1 表示用户按下某一数字键 当 alarm botton 1 时 表示用户按下 Alarm 键 当 time botton 1 时 表示用户按下 Time 键 display 表示了 4 个七段数码显示管 用于显示时间 sound alarm 用于控制扬声器发声 当 sound alarm 1 时 扬声器发出蜂鸣声 表 示到了设定的时间 源代码如下 源代码如下 library ieee use ieee std logic 1164 all use work p alarm all entity alarm clock is port keypad in std logic vector 9 downto 0 key down in std logic alarm button in std logic time button in std logic clk in std logic reset in std logic display out t display sound alarm out std logic end alarm clock architecture rtl of alarm clock is component decoder port keypad in std logic vector 9 downto 0 value out t digital end component component key buffer port key in t digital clk in std logic reset in std logic new time out t clock time end component component alarm counter port new current time in t clock time load new c in std logic clk in std logic reset in std logic current time out t clock time end component component alarm reg port new alarm time in t clock time load new a in std logic clk in std logic reset in std logic alarm time out t clock time end component component alarm controller port key in std logic alarm button in std logic time button in std logic clk in std logic reset in std logic load new a out std logic load new c out std logic show new time out std logic show a out std logic end component component display driver port alarm time in t clock time current time in t clock time new time in t clock time show new time in std logic show a in std logic sound alarm out std logic display out t display end component component fq divider port clk in in std logic reset in std logic clk out out std logic end component signal inner key t digital signal inner time t clock time signal inner time c t clock time signal inner time a t clock time signal inner l c std logic signal inner l a std logic signal inner s a std logic signal inner s n std logic signal inner sec clk std logic for all decoder use entity work decoder rtl for all key buffer use entity work key buffer rtl for all alarm counter use entity work alarm counter rtl for all alarm reg use entity work alarm reg rt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肿瘤的分期与护理
- 数字化转型下港航人才的技术能力提升策略
- 2025年骨科关节用药项目申请报告
- 隔离患者护理防范措施
- 推进教育类社会组织高质量发展研究
- 陶行知心育思想引领下中小学生健全人格养成路径研究
- 西南医科大学《中国现当代文学上》2023-2024学年第一学期期末试卷
- 贵阳学院《统计》2023-2024学年第一学期期末试卷
- 武汉工程大学《建筑设计理论(四)》2023-2024学年第一学期期末试卷
- 解码2025年健康消费市场新趋势报告-尼尔森iq-202506
- (高清版)DG∕TJ 08-9-2023 建筑抗震设计标准
- DB44-T 2605-2025 生活垃圾焚烧发电设施能源消耗计算与限额
- 代谢相关脂肪性肝病防治指南2024年版解读
- 《心血管病介入治疗新技术》课件
- 风力发电运维值班员(技师)职业技能鉴定考试题(附答案)
- 物业管理定价策略与实施路径
- 基于机器学习的网络攻击行为模式识别-洞察阐释
- 出国培训考试题库及答案
- 《肾动脉解剖》课件
- 2024年湖南益阳事业单位招聘考试真题答案解析
- 国家开放大学《公共部门人力资源管理》形考任务1-4答案
评论
0/150
提交评论