数字时钟设计_第1页
数字时钟设计_第2页
数字时钟设计_第3页
数字时钟设计_第4页
数字时钟设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、何宾EDA原理及应用 本章给出了PLD器件在复杂数字系统的典型应用实例-数字时钟的设计。数字时钟的设计也是PLD在复杂数字系统的经典应用。 该章首先介绍了数字时钟的功能要求和整体结构;随后具体介绍了数字时钟的模块设计,其中包括数字时钟控制信号和控制模块的具体结构。本章最后详细描述了设计的具体实现过程,具体包括数字时钟的计数模块设计、计数时钟及扫描时钟设计和显示控制模块设计。数字时钟设计-本章概要第11章第十一章 数字钟时常见的一种计数装置,数字钟以1Hz的频率工作。该设计完成数字钟的运行和显示。其主要功能有: 数字钟以1Hz的频率工作,其输入频率为1MHz。 数字钟显示时、分、秒信息。这些显示

2、信息在6个7 段数码管上完成。 通过按键设置时、分信息。并且具有对数字钟的复位功能。 复位键将时、分、秒清零,并做好重新计数的准备。 按键具有预置时、分的功能。分别对当前的时和分信息做递增设置和递减设置。第十一章数字时钟设计-数字时钟的功能要求第十一章数字时钟设计-数字时钟的结构第十一章数字时钟设计-数字时钟的结构 图给出了该数字钟的结构图。从图中可以看到,数字钟由: 复位按键reset; 小时递增按键hour_inc; 小时递减按键hour_dec; 分钟递增按键min_inc; 分钟递减按键min_dec; 时钟输入; 7段LED显示LED管选择信号线sel; LED码控制信号线(segm

3、ent) 该数字钟的控制局部由PLD芯片完成。该芯片的输入和输出接口由下面信号组成: 输入信号:复位信号reset时钟输入信号clk小时递增信号hour_inc小时递减信号(hour_dec)分钟递增信号min_inc分钟递减信号min_dec数字时钟设计-数字时钟的信号第十一章输出信号:LED选择信号selLED码显示控制信号(segment)数字时钟设计-数字时钟的信号第十一章 该设计分成下面四个模块:定时时钟模块、扫描时钟模块、按键处理模块、定时计数模块和显示控制模块。图给出了这几个模块之间的信号连接关系。第十一章数字时钟设计-控制模块结构 1、按键处理模块 由于VHDL语言的规那么,将

4、按键的处理和定时模块设计在一起。为了描述清楚,将对按键的处理进行说明。在该设计中,采用异步复位电路方式。当复位信号低有效时,计数器停止计数,时、分、秒清零。 对于小时的递增、递减按键操作,通过一个1Hz的计数时钟采样。图给出了递增、递减的操作时序。第十一章数字时钟设计-控制模块结构第十一章数字时钟设计-控制模块结构 当1Hz的div_clk信号的上升沿到来时,检测hour_inc和hour_dec按键,图中的虚线表示在时钟的上升沿对按键信号进行采样。当hour_inc或hour_dec按键低有效时,对小时进行递加或递减操作。 对于分钟的递加、递减按键操作,也是通过一个1Hz的计数时钟采样。原理

5、同图。数字时钟设计-控制模块结构第十一章 2、定时时钟模块 定时时钟模块其作用就是将外部提供的1MHz的时钟,通过分频器后向模块内的定时计数模块提供1Hz的定时计数时钟。在设计定时时钟模块时,采用同步计数电路。数字时钟设计-控制模块结构第十一章 3、扫描时钟模块 扫描时钟模块的作用就是通过对1MHz的分频处理后,向显示控制模块提供适宜的显示扫描时钟,该时钟必须经过合理的设计,才能保证7段数码显示的稳定。在设计扫描时钟模块时,采用同步计数电路。数字时钟设计-控制模块结构第十一章 4、定时计数模块 定时计数模块是该设计中最重要的一局部,在设计该模块时,为了便于后续显示控制模块的设计,将时、分、秒进

6、行别离,即小时分成了小时的十位和个位分别处理,分钟分成了分钟的十位和个位分别处理。秒分成了秒的十位和个位分别处理。在该设计中,采用24小时计数模式。 例如:13:28:57。13为小时的表示,1为小时的十位,3为小时的个位;28为分钟的表示,2为分钟的十位,8为分钟的个位;57为秒的表示,5为秒的十位,7为秒的个位。数字时钟设计-控制模块结构第十一章 秒的个位计数从0-9,即十进制计数。当秒的个位计数到9后,准备向秒的十位进位。秒的十位计数从0-5,即六进制计数。当秒的十位计数到5后,准备向分的个位进位。 分钟的个位计数从0-9,即十进制计数。当分钟的个位计数到9后,准备向分钟的十位进位。分钟

7、的十位计数从0-5,即六进制计数。当分钟的十位计数到5后,准备向小时的个位进位。 对于小时的处理比较复杂,小时的十位和个位之间存在下面的关系: 当小时的十位为0或1时,小时的个位可以计数范围为0-9,即十进制计数; 当小时的十位为2时,小时的各位可以计数的范围为0-3,即四进制计数;数字时钟设计-控制模块结构第十一章数字时钟设计-控制模块结构第十一章 5、显示控制模块 显示控制模块主要作用是在7段数码管上正确的显示0-9的数字。sel三位LED选择线和3-8译码器相连数字时钟设计-控制模块结构第十一章整个工程窗口:含设计时钟源文件、仿真测试文件、用户约束文件第十一章数字时钟设计-控制模块结构数

8、字时钟设计-行为仿真结果第十一章数字时钟设计-布局布线仿真结果第十一章 选择“project-new source; 设置实现约束文件类型Implementation Constraints File,文件名clock; 单击“下一步,选中与“clock关联; 单击“下一步,单击“完成; 选中“文件,在Process view窗口双击“Assign package pins,出现Xinlinx PACE窗口界面;数字时钟设计-用户约束文件设置第十一章数字时钟设计- Xinlinx PACE窗口界面第十一章6. 单击Design Object List-IO Pins窗口中每一信号后的Loc,可

9、以输入对应的FPGA引脚,形式如P78。设置完成,保存文件,退出Xilinx PACE窗口,完成引脚分配。数字时钟设计-用户约束文件设置第十一章数字时钟设计-引脚分配文件第十一章 1.首先选中“Generate Programming File ,右键单击,单击“Properties; 2.选中“Process Properties窗口下的“Startup options标签,设置“FPGA start-up clock为JTAG,单击“确定;数字时钟设计-编程下载验证第十一章数字时钟设计-编程下载验证第十一章 3.在如以下图所示的“Process for source:clock-behav

10、ioral中,双击Configure Device (iMPACT).数字时钟设计-编程下载验证第十一章 4.系统自动进行综合、实现过程,假设没有错误,将出现如下窗口,单击“下一步,单击“完成;数字时钟设计-编程下载验证第十一章 5.出现一个确认窗口,告知检测到一个器件,单击“确定按钮; 6.选择刚刚生成的bit文件,单击“翻开; 7.可能会出现警告,单击“确定; 8.此时界面中JTAG链上只有一个器件,型号为 XC3S400,单击鼠标右键,单击“Program,完成对器件编程,进行实际验证。数字时钟设计-编程下载验证第十一章library IEEE;use IEEE.STD_LOGIC_11

11、64.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-实体定义局部entity clock is port(clk : in std_logic;rst : in std_logic;inc_min : in std_logic;sub_min : in std_logic;inc_hour : in std_logic;sub_hour : in std_logic;sel : out std_logic_vector(2 downto 0);q : out std_logic_vector(7 downto

12、 0); end clock;数字时钟设计-主程序第十一章-信号定义: architecture Behavioral of clock is signal sec_counter1:std_logic_vector(3 downto 0); signal sec_counter2:std_logic_vector(3 downto 0); signal min_counter1:std_logic_vector(3 downto 0); signal min_counter2:std_logic_vector(3 downto 0); signal hour_counter1:std_log

13、ic_vector(3 downto 0); signal hour_counter2:std_logic_vector(3 downto 0); signal divcounter : std_logic_vector(3 downto 0); signal div_clk : std_logic; signal scancounter : std_logic_vector(1 downto 0); signal scan_clk : std_logic; signal scan_out : std_logic_vector(2 downto 0); signal secseg1,secse

14、g2,minseg1,minseg2,hourseg1,hourseg2:std_logic_vector(7downto 0); begin数字时钟设计-主程序第十一章-计数时钟,对外部输入时钟分频,此处只适用于仿真,实际进行时间计数时,分频后时钟应该满足1HZ。process(rst,clk) begin if(rst=0)thendivcounter=0000;div_clk=0;elsif(rising_edge(clk)thenif(divcounter=1111) then divcounter=0000;div_clk=not div_clk; else divcounter=d

15、ivcounter+1; end if;end if; end process;数字时钟设计-主程序第十一章-仿真时数码管扫描时钟,实际中需根据具体情况进行调解时钟频率process(rst,clk) beginif(rst=0)then scancounter=00; scan_clk=0; elsif(rising_edge(clk)then if(scancounter=11) then scancounter=00; scan_clk=not scan_clk; else scancounter=scancounter+1; end if; end if; end process;数字

16、时钟设计-主程序第十一章-时钟计数局部主进程 -时钟复位clock:process(div_clk,rst) begin if(rst=0)thensec_counter1=X0;sec_counter2=X0;min_counter1=X0;min_counter2=X0;hour_counter1=X0;hour_counter2=X0;数字时钟设计-主程序第十一章 -手动调分,递增elsif(rising_edge(div_clk)then if(inc_min=0) then if(min_counter1=X9) then min_counter1=X5) then min_coun

17、ter2=X0; else min_counter2=min_counter2+1; end if; else min_counter1=min_counter1+1; end if;数字时钟设计-主程序第十一章-手动调分,递减elsif(sub_min=0) then if(min_counter1=X0) then min_counter1=X9; if(min_counter2=X0)then min_counter2=X5; else min_counter2=min_counter2-1; end if; else min_counter1=min_counter1-1;end if

18、;数字时钟设计-主程序第十一章-手动调时,增时elsif(inc_hour=0) then if(hour_counter2=X2)then if(hour_counter1=X3)then hour_counter1=X0; hour_counter2=X0; else hour_counter1=hour_counter1+1; end if; else if(hour_counter1=X9) then hour_counter1=X0; hour_counter2=hour_counter2+1; else hour_counter1=hour_counter1+1; end if;

19、end if;数字时钟设计-主程序第十一章-手动调时,减时elsif(sub_hour=0) then if(hour_counter1=X0)then if(hour_counter2=X0)then hour_counter1=X3; hour_counter2=X2;else hour_counter2=hour_counter2-1; hour_counter1=X9; end if; else hour_counter1=X9) then sec_counter1=X5) then sec_counter2=X9) then min_counter1=X5) then min_cou

20、nter2=X0; if(hour_counter2=X2) then if(hour_counter1=X3) then hour_counter1=X0; hour_counter2=X0;数字时钟设计-主程序第十一章 else hour_counter1=hour_counter1+1; end if; else if(hour_counter1=X9) then hour_counter1=X0; hour_counter2=hour_counter2+1; else hour_counter1=hour_counter1+1; end if; end if; else min_cou

21、nter2=min_counter2+1; end if;数字时钟设计-主程序第十一章 else min_counter1=min_counter1+1; end if; else sec_counter2=sec_counter2+1; end if; else sec_counter1=sec_counter1+1; end if; end if; end if; end process clock;数字时钟设计-主程序第十一章-生成扫描时钟process(rst,scan_clk)begin if (rst=0) then scan_out=000; elsif(rising_edge(

22、scan_clk) then if(scan_out=101)then scan_out=000; else scan_out q=secseg1; sel q=secseg2; sel q=minseg1; sel q=minseg2; sel q=hourseg1; sel q=hourseg2; sel q=11111111;sel secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg1 secseg2 secseg2 secseg2 secseg2 secseg2 secseg2 secseg2 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg1 minseg2 minseg2 minseg

温馨提示

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

评论

0/150

提交评论