- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用VHDL语言实现数字钟的设计方案
课程设计目的
VHDL程序设计、输入——在ise平台上用VHDL描述系统的功能
(2) 逻辑综合——将源程序编译后,为设计系统选择一个电路实现方案,按照这个方案进行逻辑综合和优化,生成1个电路网表文件
功能仿真——检查自己的设计是否达到和完成要求的逻辑功能
设计实现——布局、布线及配置,最后生成可以写到芯片中的目标文件
(5)时序仿真——是适配到选定的芯片后进行的仿真,它模拟芯片的实际动作,仿真时间模型严格将门级延时计算在内,可以分析出竞争与冒险,时序仿真验证过的电路与实际电路基本上已致。
2 、课程设计内容及要求
2.1 设计任务
设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。tn为高电平时,setup有脉冲到达时,预置位加1.否则减1。
2.2提高的内容及要求
(1)可以采用与教材上不同的设计方法完成以上基本内容。
(2)可以在基本内容的基础上增加其它功能。
3、VHDL程序设计
3.1设计方案
VHDL数字钟的设计可采用多种设计方法,各个设计方法各有其优缺点。
采用一个结构体,多个进程的设计方法。其优点是速度快,但是一个结构体,各个进程的逻辑关系比较复杂,而且代码的可读性,可移植性较差。
状态机的设计方法,状态机结构简单,当各个状态之间的转换不易处理。
元件例化的设计方法,元件例化使各个模块之间分得更加有层次,易于 读,缺点有可能使各个模块之间存在逻辑关系的冲突。
本课程设计,主要采用了元件例化的设计方法实现。
3.1.1分频模块
直接将实验箱的频率用于数字钟的计数,可能会导致错误,实验箱直接给出的1hz频率可能不够稳定,故需要将1khz的频率输出进行1000分频。本模块直接采用单进程实现设计,本模块还包括一个置数脉冲的设置upd0,upd0按下一次lock加1,lock为000时显示时分秒,为001时显示年月日,为010对年进行置数,为011对月进行置数,为100对日进行置数,为101对时进行置数,为110对分进行置数,为111对秒进行置数,lock,也连接着后面四个计数,置数,模块的lock,以进行模块显示的选择。fclk设置的周期为5ns,在2.5us处实现1000分频,1000分频后的f_clk连接时分秒,年月日计数模块的计数时钟,置数时钟则直接输入,连接两个置数模块。
以下程序是实体部分
entity fenpin is
port(upd0 : in std_logic;
clk : in std_logic;
f_clk : out std_logic;
lock : out std_logic_vector(2 downto 0)
);
end fenpin;
RTL图如下:
3.1.2时分秒计数模块
时分秒可选用多进程或者单进程的方法,多进程速度快,但是结构复杂。故本设计选用单进程方法。当秒计数到59时向分进位,分计到59且秒为59时向时进位,当计到23时59分59秒时向天进位,同时对时分秒进行清零。程序中主要使用了if elsif end if;的语句。最后验证表明此设计方法可实现题目要求的功能。以下是程序的实体部分
entity s_m_hour is
port(
clk0: in std_logic; --clk0工作时钟,clk1预置脉冲
lock : in std_logic_vector(2 downto 0); --工作模式选择
s0,s1: out std_logic_vector(3 downto 0);
m0,m1: out std_logic_vector(3 downto 0);
h0,h1: out std_logic_vector(3 downto 0);
co: out std_logic;--_vector(2 downto 0); --hour产生进位
en : in std_logic;
co1 : out std_logic----整小时b报时输出
);
end s_m_hour;
RTL图如下:
3.1.3时分秒置数模块
时分秒置数模块不同于计数模块,置数模块我选用了另一个置数时钟,也可以说是置数脉冲。时分秒置数有使能端口en
文档评论(0)