logo资料库

EDA课程设计报告-自动电子钟设计.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
E D A 课程设计报告 -----自动电子钟设计 实验分工 本次实验,我负责在图书馆翻阅书籍查找,王东则在网 上查找。资料收集好后,我们一起讨论设计方案,得出可行 的设计方案之后是进行上机程序的调试。我负责程序的输 入,然后我们一起调试程序。仿真出每一个模块的功能波形。 准确无误后,再进行顶层设计, 一.设计要求 1.用 24 小时制进行时间显示; 2.能够显示小时、分钟; 3.每秒钟要有秒闪烁指示; 4.上电后从“00:00”开始显示。 二.设计目的 1. 掌握多位计数器相连的设计方法。 2. 掌握十六进制,二十四进制,六十进制计数器的设计方法。 3. 掌握 CPLD 技术的层次化设计方法。 4. 了解软件的元件管理含义以及模块元件之间的连接概念。 5. 掌握电子电路一般的设计方法,并了解电子产品的研制开发过 程,基本掌握电子电路安装和调试的方法。 6. 培养独立分析问题,解决问题的能力。
三.设计原理 电子钟是一个将“时”“分”显示于人的视觉器官的计时装置。它 的计时周期为 24 小时;显示满刻度为 23 时 59 分 59 秒,秒由一个灯 显示,将标准秒信号送入“秒计数器”,“秒计数器”采用 60 进制 计数器,每累加 60 秒发送一个“分脉冲”信号,该信号将被送到“时 计数器”。“时计数器”采用 24 进制计数器,可实现对一天 24 小时 的累计。译码显示电路将“时”“分”计数器的输出状态四段显示译 码器译码。通过六位LED七段显示器显示出来。秒就由灯的闪烁来 表示。 1.电子钟计数采用层次化设计,将设计任务分成若干个模块。规定 每一模块的功能和各模块之间的接口。 (1)second(秒) 60进制计数 (2)minute(分) 60进制计数 (3)hour(时) 24进制计数 (4)fp 百分频器 (5)6 选 1 扫描显示 (6) 7 段数码显示器 同时整个计数器有清零 2.端口引脚名称 输入 clk,reset clkscan 输出 light,sel, 7seg 四、设计过程
1、设计实验原理图(顶层设计) 通过上面的分频器,两个 60 进制的计数器,一个 24 进制的计数 器,6 选 1 扫描器,7 段数码显示器,设计如图所示的顶层。 设计思想,利用脉冲时钟产生一个 1Hz 的信号来实现一秒钟的控 制,要产生 1Hz 的信号就要用到分频器,实验中用三个百分频器把 1MHz 的信号变成 1Hz。然后信号进入控制秒的计数器,当第 60 个脉 冲时钟到来时,产生一个进位信号,送到控制分的计数器,同理,当 第 60 个脉冲时钟到来时,产生一个进位信号,送到控制小时的计数 器。当小时计数器计数到 24 时,完成一个周期,跳转到零。输出是
由 7 段数码显示器和 6 选 1 扫描器来完成的。扫描器时钟取至前面分 频未结束时的一个 100Hz 的信号。这样就能够在 7 段数码显示管上, 以 100Hz 的频率扫描显示出时钟的数字变化。 2、各模块的说明: (1) 百分频器模块 百分频模块图 程序如下 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity fp is port (rst,clk : in STD_LOGIC; what: out STD_LOGIC); end fp; architecture a of fp is signal count100 : integer range 0 to 99; signal tt:std_logic; begin process (rst,clk) begin if rst='1' then count100<=0; elsif rising_edge(clk) then count100<= count100 + 1 ;tt<=tt; if count100=99 then count100<=0;tt<=not tt; end if ; end if; what<=tt; end process; end a; 仿真波形
仿真波形分析:由仿真波形图可知,当 clk 为上升沿,what 为下降 沿时,count100 输出由 99 变为 0,并且 count100 都是由 0 到 99 循 环,所以,这是一个 100 分频模块 (2)60 进制计数器 控制秒模块 秒模块图 程序如下 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); carry:out std_logic); end second; architecture rt1 of second is signal sec1_t,sec2_t:std_logic_vector(3 downto 0); begin process(clk,reset) begin if reset='1'then sec1_t<="0000"; sec2_t<="0000";
elsif clk'event and clk='1'then if sec1_t="1001"then sec1_t<="0000"; if sec2_t="0101"then sec2_t<="0000"; else sec2_t<=sec2_t+1; end if; else sec1_t<=sec1_t+1; end if; if sec1_t="1001" and sec2_t="0101"then carry<='1'; else carry<='0'; end if; end if; end process; sec1<=sec1_t; sec2<=sec2_t; end rt1; 仿真波形 仿真波形分析:由仿真波形图可知,当 clk 和 carry 为上升沿时,sec1 输出由 9 变为 0,并且 sec1 都是由 0 到 9 循环,sec2 输出由 5 变为 0,并且 sec2 都是由 0 到 5 循环,所以,这是一个 60 进制的秒控制
模块 (3)60 进制计数器 控制分钟模块 分模块图 程序如下: 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); carry:out std_logic); end minute; architecture rt1 of minute is signal min1_t,min2_t:std_logic_vector(3 downto 0); begin process(clk,reset) begin if reset='1'then min1_t<="0000"; min2_t<="0000"; elsif clk'event and clk='1'then if min1_t="1001"then min1_t<="0000"; if min2_t="0101"then min2_t<="0000"; else min2_t<=min2_t+1; end if; else
min1_t<=min1_t+1; end if; if min1_t="1001" and min2_t="0101"then carry<='1'; else carry<='0'; end if; end if; end process; min1<=min1_t; min2<=min2_t; end rt1; 仿真波形 仿真波形分析:由仿真波形图可知,当 clk 和 carry 为上升沿时,min1 输出由 9 变为 0,并且 min1 都是由 0 到 9 循环,min2 输出由 5 变为 0,并且 min2 都是由 0 到 5 循环,所以,这是一个 60 进制的分控制 模块 (4)24 进制计数器 控制小时模块 时模块图
分享到:
收藏