触发器、计数器、数字钟设计.ppt
文本预览下载声明
触发器、计数器、数字钟设计
一、触发器设计
触发器触发方式的描述
触发器要在时钟信号的驱动下,才可以改变其输出。触发器的驱动方式有:
电平触发,包括:高电平触发和低电平触发;
边沿触发,包括:上升沿触发和下降沿触发。
利用进程语句描述触发器的驱动方式:
1) 电平驱动:
PROCESS( d )
. . .
BEGIN
IF clk=‘1’ THEN
. . .
时钟信号clk和输入d作为进程的敏感信号,clk或d发生变化时都会使进程语句执行。
当clk为高电平时,才会执行条件句内的功能语句。
...
PROCESS (CLK,D)
BEGIN
IF CLK = ‘1’
THEN Q= D ;
END IF;
END PROCESS ;
P119【例4-14】
2) 边沿触发
PROCESS(clk)
. . .
BEGIN
IF clk=‘1’ THEN
. . .
PROCESS
. . .
BEGIN
WAIT UNTIL clk=‘1’;
. . .
使用了等待语句wait until就不能使用敏感信号表。
等待语句放在顺序语句的开头或结尾处。
当clk变化且变化后为‘1’ 时,wait until语句才结束等待,程序继续执行后面的语句。
PROCESS(clk)
. . .
BEGIN
IF clk=‘1’ THEN
. . .
PROCESS
. . .
BEGIN
WAIT UNTIL clk=‘1’;
. . .
...
PROCESS (CLK)
BEGIN
IF CLK = 1
THEN Q = D;
END IF;
END PROCESS
...
PROCESS
BEGIN
wait until CLK = 1;
Q = D ;
END PROCESS;
P118【例4-13】
P118【例4-12】
利用LAST_VALUE属性表示CLK跳变前的值;CLK跳变前为0时,则发生了一次由’0’到’1’的上升沿变化。
...
PROCESS (CLK)
BEGIN
IF CLKEVENT AND (CLK=1) AND(CLKLAST_VALUE=0)
THEN Q = D ;
END IF;
END PROCESS ;
P117【例4-9】
...
PROCESS (CLK)
BEGIN
IF CLK=1 AND CLKLAST_VALUE=0
THEN Q = D ;
END IF;
END PROCESS ;
P117【例4-10】
PROCESS(clk, d)
. . .
BEGIN
IF clk’EVENT and clk=‘1’ THEN
. . .
LIBRARY IEEE;
USE STD_LOGIC_1164.ALL;
. . .
PORT( clk: IN STD_LOGIC;
. . .);
. . .
PROCESS(clk, d)
. . .
BEGIN
IF rising_edge (clk) THEN
. . .
clk’EVENT and clk=‘1’: 当clk发生变化(clk’EVENT),且clk为高电平,则条件为真,执行条件句内的功能语句。
可用rising_edge( )函数检测信号是否有上升沿变化,若有则条件为真。若检测下降沿则falling_edge( )函数。
只有标准逻辑类型的信号(STD_LOGIC、STD_LOGIC_VECTOR)可使用边沿检测函数。
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DFF3 IS
PORT (CLK,D : IN STD_LOGIC ;
Q : OUT STD_LOGIC );
END ;
ARCHITECTURE bhv OF DFF3 IS
SIGNAL Q1 : STD_LOGIC;
BEGIN
PROCESS (CLK)
BEGIN
IF rising_edge(CLK)
THEN Q1 = D ;
END IF;
END PROCESS ;
Q = Q1 ;
END ;
P117【例4-11】
利用条件语句的门闩控制方式来描述触发器功能:
时钟信号到来?
把输入信号d送到输出端Q
结束
TRUE
FALSE
IF . . . THEN
Q=d;
END IF;
当时钟信号到来,条件成立,输入端d的数据会
显示全部