EDA课程设计--定时器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档