- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验三EDA技术设计性试验-数字钟的设计
15 电本 3151004147 林培欢
实验三 EDA 技术设计性实验-数字钟的设计
本次的实验是设计一个数字钟,时钟具有时,分,秒计数显示功能,并且能够调
节小时、分钟。时钟以24小时循环计时,能够整点报时。
实验设计流程:将时钟分为秒、分、时、警报显示四个模块,分别设计他们的顶
层文件,最后建立原理图文件工程和仿真。
一、秒计时模块的代码:
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY secondIS
PORT(clk,reset,setmin:STD_LOGIC;
enmin:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6DOWNTO0));
END ENTITY second;
ARCHITECTURE fun OF secondIS
SIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenmin_1,enmin_2:STD_LOGIC;
BEGIN
daout count;
enmin_2 (setmin andclk);
enmin (enmin_1or enmin_2);
PROCESS(clk,reset,setmin)
BEGIN
IF(reset 0)THEN count 0000000;--若reset 为0,则异步清零
ELSIF(clk event andclk 1)then --否则,若clk 上升沿到
IF(count(3downto0) 1001)then --若个位计时恰好到1001即9
IF(count16#60#)then --又若count 小于16#60#,即60H
IF(count 1011001)then --又若已到59D
enmin_1 1;count 0000000;--则置进位为1及count 复0
ELSE --未到59D
count count+7;--则加7,而+7 +1+6,即作加6校正
END IF;
ELSE --若count 不小于16#60# (即count 等于或大于16#60#)
count 0000000;--count 复0
END IF;--END IF (count16#60#)
ELSIF(count16#60#)then --若个位计数未到1001则转此句再判
count count+1;--若count16#60#则count 加1
enmin_1 0after 100ns;--没有发生进位
ELSE --否则,若count 不小于16#60#
count 0000000;--则count 复0
END IF;--END IF (count (3DOWNTO0) 1001)
END IF;--END IF (reset 0)
END PROCESS;
END fun;
秒计时模块的顶层文件:
设计思路:在上次实验的0 到59轮换显示的基础上进行改进,满足满59清零并且分计数器
进一。给定两个信号,enmin_1,enmin_2。其中,enmin_1为59秒时的进位信号,满足59
秒后就完成进位的工作,而enmin_2 是Setmin 与clk 共同决定的,且setmin 在clk 为高电平
时有效,实现时间调整的功能。Setmin 为手动调分控制信号,enmin 为向分进位信号。16#60#
表示的是16进制的60,当count 小于60 的时候count 加1,当count 到59 时候,完成进位
并且清零的工作。由于使用的是8421BCD 码,所以低四位向高四位进位时,需要进行加6
校正。
二、分计时模块代码:
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(clk,clk1,reset,sethour:IN STD_LOGIC;
enhour:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6DOWNTO0));
END ENTITYminute;
ARCHITECTURE fun OFminuteIS
SIGNALcount :STD_LOGIC_VECTOR (6DOWNTO0);
SIGNALenhour_1,enhour_2:STD_LOGIC;--enmin_1为59 分时的进位信号
原创力文档


文档评论(0)