EDA课程设计--定时器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子课程设计
——定时器
学院:
专业:
姓名:
学号:
指导老师:
2009年12月
目录
一.设计任务与要求 (3)
二.总体框图 (3)
三.功能模块 (4)
四.总体设计电路图 (12)
五.心得体会 (14)
定时器
一、设计任务与要求
1.设计任务与要求:
通过设计,定时器可以整体清零;可以定时最高到99MIN;以秒速度递增至预定时间,以分速度递减至零。
2.设计目的
(1)了解并掌握电路的一般设计方法,具备初步的独立设计能力。 (2)进一步熟悉常用电子模块的设计思路和功能,并掌握合理选用的原则。 (3)提高综合运用所学的理论知识。独立分析和解决问题的能力。 (4)进一步熟悉电子仪器的正确使用方法。
二、总体框图
图1
设计思路:通过记数器控制中心输入秒信号,并输出两个四位的BCD 码,可分别
来表示各位与十位,也可整体复位清零。通过该记数器实现以秒速度
控制计数部分
二选一选择器
分频器
译码器
数码管
时钟信号
递增至清零,该记数器以秒的速度递增至99来实现置位,而以分的速度递减至零以实现定时功能。通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD 码进行七段码编译,然后输出到数码管。
三、功能模块
1、ctrl 记数模块 模块器件图:
ctrl
inst
cn res clk
cout low[3..0]high[3..0]
图2
模块逻辑功能:ctrl 计数模块是该定时器的核心部分.res 为复位端,用来清零,
采用异步复位方式;cn 用于置位,高电平有效。cout 端将在定时结束时产生高电平。Low 和high 为四位BCD 码输出端口,可用于显示。当cn 有效时,clk 脉冲上升沿到来,计数加1;当cn 为低电平时,置位结束,进入计时阶段,每60个时钟周期(相当于一分钟)发出一个脉冲,使输出记数减1,直到记时结束,命名cout 位为高电平为止。该模块的源程序如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all;
ENTITY ctrl IS
PORT
(
cn,res,clk : IN STD_LOGIC;
cout : out STD_LOGIC;
low,high: OUT std_logic_vector(3 downto 0)
);
END ctrl;
ARCHITECTURE rtl OF ctrl IS
SIGNAL displow,disphigh : std_logic_vector(3 downto 0); BEGIN
a:PROCESS (clk,cn,res)
variable cnt: integer range 0 to 59;
BEGIN
IF (res = '0') THEN
displow<="0000";
disphigh<="0000";
cnt:=0;
cout<='0';
ELSIF (clk'EVENT AND clk = '1') THEN
IF cn = '1' THEN
cnt:=0;
if displow<"1001" then
displow<=displow+'1';
ELSE
displow<="0000";
if disphigh<"1001" then
disphigh<=disphigh+'1'; else
disphigh<="0000";
end if;
end if;
ELSE
if cnt<59 then
cnt:=cnt+1;
else
cnt:=0;
if displow>"0000" then
displow<=displow-'1'; --elsif displow=1 then -- displow<="0000";
else displow<="1001";
if disphigh>"0000" then disphigh<=disphigh-'1'; else
displow<="1001";
end if;
end if;
end if;
end if;
end if;
if disphigh="0000" and displow="0000" then
cout<='1';
else cout<='0';
end if;
end process;
high<=disphigh;
low<=displow;
end rtl;
该器件的仿真波形如图3
图3 通过仿真波形可以看出低位和高位都可以从零变到9,可以说明输出可以从0变到99,且低位为9时,下一时刻将变为0,而高位增1,当高位变成9时会自动清零。
2、sel2二选一选择模块
模块器件图:
sel2
inst
d1[3..0]d2[3..0]sel xz[7..0]q[3..0]
图4
模块逻辑功能:二选一选择模块主要是接受由ctrl 输出的四位BCD 码,并通过选择信号sel 进行选择输出。其源程序如下:
library ieee;
use ieee.std_logic_1164.all; entity sel2 is
port(d1,d2: in std_logic_vector(3 downto 0); sel: in std_logic;
xz: out std_logic_vector(7 downto 0); q: out std_logic_vector(3 downto 0)); end sel2;
architecture rtl of sel2 is begin
q<=d1 when sel='0' else d2;
xz<="11111110" when sel='0' else "11111101" ; End rtl;
该器件的波形仿真如图5