《电子设计自动化EDA》TIMER状态机设计.doc
文本预览下载声明
设计举例:8位计时器Timer
计时器Timer的框图
ring
reset
(1)reset:异步清零信号,
clock
低电平有效,
start
Timer
具有最高的优先级。
Reset = ‘0’使输出信号ring = ‘0’。
(2) data_in:数据输入。
(3)clock:同步时钟,正跳变触发。
(4)start:计时器启动信号。
(5)ring:控制铃响的输出信号,高电平有效。
data_in(7..0)
? ring =
1的持续期为8,超过此持续期后自动归 0。
计时器Timer的时序关系
reset = 0 进
入初始状态
接收数据
减计数
ring = 1
reset
start
start = 1 时,计时器
start = 0 时,计时器
接受来自 data_in 的数据
开始‘减’计数
ring =
1的持
续期为 8,超过
计时器的
值达到零
此持续期后自动
归 0。
Timer目标电路的分解
ring
counter 输出值
reset
clock
start
●
控制器
●
st0
st1
st2
st3
减 1 计数器
counter
data_in(0 .. 7)
Timer的ASM图
st0
rin g ? 0
cou nter ? 00 00 00 00
否
start = 1?
st1
是
初始状态
接收数据
co un ter ? d ata_in
s t2
否
s tart = 1?
是
否
c o u n te r 减 1
co un ter = 1 ?
是
co u n te r? 0 0 0 0 1 0 0 0
st3
rin g ? 1
rin g = 1 持 续 期
减计数
是
cou nter 减 1
cou nter = 1?
否set
set
VHDL代码
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY timer IS
-- 打开 IEEE 库
-- 打开 IEEE 库中的程序包 std_logic_1164
-- 打开此程序包后,可以对 std_logic_vector
-- 类型的对象执行加 /减运算
-- ENTITY 用于定义端口
PORT ( data_in: IN std_logic_vector( 7 DOWNTO 0 ); -- 输入端口
reset, clock, start :
IN
std_logic;
-- 输入端口
END timer;
……
……
ring : OUT std_logic );
-- 输出端口
VHDL代码(续)
ARCHITECTURE behav OF timer IS
BEGIN
PROCESS( reset, clock )
VARIABLE counter: std_logic_vector( 7
DOWNTO 0 );
VARIABLE state : integer RANGE 0 TO 3;
BEGIN
IF reset = 0 THEN
ring = 0;
state := 0;
ELSIF clockevent AND clock = 1 THEN
CASE state IS
……
……
END CASE;
END IF;
功能模拟波形图
Counter 计数
00
ring = 1 的
reset = 0 ,进
入初始状态。
clock 检测到
start = 1 ,进
入状态 1。
counter 接收来自
data_in 的数据
clock 检测到
start = 0 ,进
入状态 2。
进入状态 3
持续期为 8
显示全部