EDA课程设计电子时钟.doc_第1页
EDA课程设计电子时钟.doc_第2页
EDA课程设计电子时钟.doc_第3页
EDA课程设计电子时钟.doc_第4页
EDA课程设计电子时钟.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1 EDAEDA 技术课程设计技术课程设计 课题: 电子时钟 系 别: 电气与电子工程系 专 业: 电子信息工程 姓 名: 学 号: 指导教师: 河南城建学院 2012 年 6 月 日 2 成绩评定 一、指导教师评语一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合 评定) 。 二、课程设计评分二、课程设计评分 成绩:成绩: 20122012 年年 6 6 月月 日日 3 目 录 一、设计目的.1 二、设计要求.1 三、总体设计方案要求.1 1、设计的总体原理.1 2、设计内容.1 四、EDA 设计与仿真.2 1、秒计时器模块.2 2、分计数器模块.4 3、时计数器模块.6 4、分频器模块.8 5、扫描电路模块.9 6、译码显示器模块.11 7、系统设计.13 五、硬件实现.16 1、硬件实现步骤.16 2、硬件实现结果.16 六、设计总结.18 七、参考文献.18 八、设计生成的电路总图.18 4 一、设计目的一、设计目的 这次课程设计主要是培养我们的实际动手能力及对 EDA 这门课程的深入的 理解,增强我们对 EDA 程序设计流程的掌握。这个课题还要求我们掌握计数器 的设计,六十进制计数器和二十四进制计数器的设计方法,以及各个进制之间 的连接关系。 二、设计要求二、设计要求 1、具有时、分、秒,计数显示功能,以二十四时制循环计; 2、设置启动、暂停开关,以满足启动计时和停止计时的功能; 3、要求计时精度为 0.01 秒,最长时间为 24H。 4、具有时间设置(清零、调节小时和分功能)和闹钟功能;(扩展功能选 作) 5、整点报时,整点报时的同时,LED 灯花样显示或者给段动听音乐; (扩展功能选作) 三、总体设计方案要求三、总体设计方案要求 1.设计的总体原理设计的总体原理 要实现一个数字时钟系统,整个系统由主要模块电路模块和外部输入输出以 及显示模块组成。首先分别实现单个模块的功能,然后再通过级联组合的方式 实现对整个系统的设计。原理框图如下: 图 3-1.总体设计框图 2.2.设计内容设计内容 电子时钟主要模块有四个,它包括脉冲信号产生模块(即分频电路) 、计数 模块(计数模块又分为秒计数模块、分计数模块和时计数模块) 、码显示模块、 5 复位模块。各个模块先用 EDA 技术中的 VHDL 语言编程仿真,再生成各个小模块 的模拟元件,再元件例化,根据设计连接电路实现数字电子钟系统。 四、四、EDA 设计及仿真(各个模块设计程序、原理框图及仿真波形图)设计及仿真(各个模块设计程序、原理框图及仿真波形图) 1.秒计时器(秒计时器(second) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity second is port(clk,reset:in std_logic; sec1,sec2:out std_logic_vector(3 downto 0); -秒计数器的两个输出; cin:out std_logic); end second; architecture second1 of second is signal sec1_t,sec2_t:std_logic_vector(3 downto 0); -秒计数器的中间信号; begin process(clk,reset) begin if reset=1then sec1_t=“0000“; -复位信号为 1 时秒信号复位; sec2_t=“0000“; elsif clkevent and clk=1then if sec1_t=“1001“then sec1_t=“0000“; -秒计数器的个位为 9 时变为 0; if sec2_t=“0101“then sec2_t=“0000“; -秒计数器的十位为 5 时变为 0; else sec2_t=sec2_t+1; -秒计数器的十位不为 5 时加 1; end if; else 6 sec1_t=sec1_t+1; -秒计数器的个位不为 9 时加 1; end if; if sec1_t=“1001“ and sec2_t=“0101“then -当计数器数值为 59 时向分 为进 1; cin=1; -向分进 1,作为分的时钟信号; else cin=0; end if; end if; end process; sec1=sec1_t; sec2=sec2_t; end second1; second inst clkclk resetreset sec130sec130 sec230sec230 cincin 图 4-1 秒计数器框图 图 4-2 秒计数器时序仿真图 秒计数器的波形分析:由程序及仿真波形图可以看出该计数器是 59 进制计数器, 当 sec1 计数到 9 是 sec2 增加 1,而 sec1 变为 0,当 sec2 增加到 5,而且 sec1 7 为 9 时,sec1,sec2 变为 0,cin1 增加 1 向分计数器进位,提供一个分计数器的 时钟信号。 2.2. 分计数器(分计数器(minute) 分同秒计时器一样 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity minute is port(clk,reset:in std_logic; min1,min2:out std_logic_vector(3 downto 0); -秒计数器的两个输出; cin1:out std_logic); end minute; architecture minute1 of minute is signal min1_t, min2_t:std_logic_vector(3 downto 0); begin process(clk,reset) begin if reset=1then min1_t=“0000“; -复位信号为 1 是分的信号复位为 0; min2_t=“0000“; elsif clkevent and clk=1then if min1_t=“1001“then min1_t=“0000“; -分计数器的个位为 9 时变为 0; if min2_t=“0101“then min2_t=“0000“; -分计数器的个位为 5 时变为 0; else min2_t= min2_t+1; -分计数器的十位不为 5 时加 1; end if; else min1_t= min1_t+1; -分计数器的个位不为 9 时加 1; 8 end if; if min1_t=“1001“ and min2_t=“0101“then -计数器的值到 59 是向时进 1; cin1=1; -向时的进位,相当于时的时钟信号; else cin1=0; end if; end if; end process; min1=min1_t; -把中间信号的值付给分信号; min2=min2_t; end minute1; minute inst clkclk resetreset min130min130 min230min230 cin1cin1 图 4-3 分计数器的原理框图 图 4-4 分计数器的时序仿真波形图 图 4-5 分计数器程序错误显示图 9 分计数器波形分析:在刚开始的仿真时,程序出现了一点的错误,引起错 误的原因是 min 1,min 2 这两个信号的声明是错误的,正确的声明方法是 min1,min2。经过改正后程序是正确的,正确的波形显示该计数器和秒计数器 是 59 进制计数器,当 min1 计数到 9 是 min2 增加 1,而 min1 变为 0,当 min2 增加到 5,且 min1 增加到 9 时,min1,min2 变为 0,cin2 增加 1 向时计数器进 位,提供一个时计数器的时钟信号。 3.3. 时计时器(时计时器(hour) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hour is port (clk,reset:in std_logic; hour1,hour2:out std_logic_vector(3 downto 0); -时计数器的两个输出信号 end hour; architecture hour1 of hour is signal hour1_t,hour2_t:std_logic_vector(3 downto 0); begin process(clk,reset) begin if reset=1then hour1_t=“0000“; hour2_t=“0000“; elsif clkevent and clk=1then if hour1_t=“0011“ and hour2_t=“0010“then hour1_t=“0000“; -当时计数器的值达到 23 是,当分秒 计数器都到 59 时时计数器变为 0; hour2_t=“0000“; else 10 if hour1_t=“0011“then hour1_t=“0000“; -当时计数器的个位为 3 时值变为 0; if hour2_t=“0010“then hour2_t=“0000“; -当时计数器的个位变 2 时值变为 0; else hour2_t=hour2_t+1; -当时计数器的十位不为 2 时值加 1; end if; else hour1_t=hour1_t+1; -当时计数器的个位不为 3 时值加 1; end if; end if; end if; end process; hour1=hour1_t; hour2=hour2_t; end hour1; hour inst clkclk resetreset hour130hour130 hour230hour230 图 4-6 时计数器原理框图 图 4-7 时计数器时序仿真波形图 时波形图分析:由程序及时序仿真波形图可以知道该时计数器是二十四进制计 11 数器,当 hour1 计数到 3 是 hour2 增加 1,而 hour1 变为 0,当 hour2 增加到 2, 且 hour1 增加到 3 时,hour2 变为 0,hour1 也变为 0。 4.4. 分频器(分频器(freq_divider) library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity freq_divider is port (reset,clk : in STD_LOGIC; Q: out STD_LOGIC); end freq_divider; architecture freq_divider1 of freq_divider is signal count50 : integer range 0 to 49; signal out1:std_logic; begin process (reset,clk) begin if reset=1 then count50=0; elsif clkevent and clk=1then count50= count50 + 1 ; -当时钟周期小于 50 是信号来时加 1; out1= out1; if count50=49 then count50=0;-50 个时钟周期后计数器清零; out1=not out1; -当时钟周期达到 50 是输出信号反相,即有高电 平变低电平或有低电平变高电平; end if ; end if; Q= out1; -把中间信号的值赋给总输出; end process; end freq_divider1; 12 freq_divider inst resetreset clkclk Q Q 图 4-8 分频器的原理框图 图 4-9 分频器的时序仿真波形图 图 4-10 分频器程序错误显示图 分频器波形分析:在第一次仿真是显示程序是错误的,进过更改及调试程序正 确了,由程序及时序仿真图可以知道该分频器是 100 倍分频,由于该设计的目 的是设计一个数字电子钟,可知时钟需要一个 1s 的时钟信号,必须用到分频器, 该分频器的时钟信号的周期是 100ns,经过三次次 100 倍分频,可以得到 1s 的 时钟信号。也就是说在这个程序中要用到三个这样的分频器。 5 5、扫描模块源程序、扫描模块源程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; 13 entity mux6 is port(clkscan,reset:in std_logic; in1,in2,in3,in4,in5,in6:in std_logic_vector(3 downto 0); BT:out std_logic_vector(7 downto 0);-显示控制信号输出 A:out std_logic_vector(3 downto 0);-数码管显示数值 输出 end mux6; architecture mux60 of mux6 is signal cnt8:std_logic_vector(2 downto 0); begin process(clkscan,reset) begin if reset=1then cnt8=“000“;-异步复位 elsif clkscanevent and clkscan=1then-检测时钟上 升沿 if cnt8=“111“then cnt8=“000“; else cnt8 BT = “00000001“ ; A BT = “00000010“ ; A BT = “00000100“ ; A BT = “00001000“ ; A BT = “00010000“ ; A BT = “00100000“ ; A BT = “01000000“;A BT = “10000000“;A LED7 LED7 LED7 LED7 LED7 LED7 LED7 LED7 LED7 LED7 LED7=“0000000“; end case; end process; end behav; yima inst BT30BT30LED760LED760 图 4-13 译码显示电路的原理框图 16 图 4-16 译码显示电路的时序仿真波形图 7、系统设计、系统设计 将上述 5 个程序作为底层文件,存放在同一个文件夹中,然后按下面的图将 这几个文件连接起来,并用元件例化语句编写顶层文件的程序, 如下:总程序(前面的分模块程序省略,下面只写了原件例化得程序) -my_components.vhd(package)- library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; - package my_components is - component second is port(clk,reset:in std_logic; sec1,sec2:out std_logic_vector(3 downto 0); cin:out std_logic); end component; - component minute is port(clk,reset:in std_logic; min1,min2:out std_logic_vector(3 downto 0); cin1:out std_logic); 17 end component; - component hour is port (clk,reset:in std_logic; hour1,hour2:out std_logic_vector(3 downto 0); end component; - component freq_divider is port (reset,clk : in STD_LOGIC; Q: out STD_LOGIC); end component; - component mux6 is port(clkscan,reset:in std_logic; in1,in2,in3,in4,in5,in6:in std_logic_vector(3 downto 0); BT:out std_logic_vector(7 downto 0); A:out std_logic_vector(3 downto 0); end component; - component yima is port(BT1:in std_logic_vector(3 downto 0); LED7:out std_logic_vector(6 downto 0); end component; - end my_components; - -time- library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; 18 use IEEE.std_logic_unsigned.all; use work.my_components.all; - entity time is port(clk,clkscan,reset:in std_logic; LED7:out std_logic_vector(6 downto 0); BT:out std_logic_vector(7 downto 0); end time; - architecture structural of time is signal x3,x4,x5:std_logic; signal x6,x7,x8,x9,x10,x11,x12:std_logic_vector(3 downto 0); begin u1:component second port map (x3,reset,x6,x7,x4); u2:component minute port map (x4,reset,x8,x9,x5); u3:component hour port map(x5,reset,x10,x11); u4:component freq_divider port map(clk,reset,x3); u5:component mux6 port map(clkscan,reset,x6,x7,x8,x9,x10,x11,BT,x12); u6:component yima port map(x12,LED7); end structural; - 图 4-17 总程序的时序仿真波形图 程序仿真波形图分析:在这个程序中两个时钟信号 clk,clkscan 是不同频率的, 19 clk 时钟信号控制秒计数器,它的周期是 100ns,而 clkscan 控制着整个程序, 它的频率可以是任意设定的。 五、硬件实现五、硬件实现 1 1、给出硬件实现、给出硬件实现 实验步骤: 打开 Quartus9.0 软件,建立进程,进程的名字和程序的名字相同; 打开新建选择 VHDL File,然后把程序输入进去; 保存文件点击软件页面上方的编译按键进行编译; 编译成功后,进行

温馨提示

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

评论

0/150

提交评论