"); //-->
最简单,最常用,并最具代表性的时序电路是D触发器,它是现代数字系统中最基本的时序单元。下面用VHDL语言描述:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DFF1 IS
PORT(CLK:IN STD_LOGIC;
D:IN STD_LOGIC;
Q: OUT STD_LOGIC
);
END DFF1;
ARCHITECTURE behav OF DFF1 IS
SIGNAL Q1:STD_LOGIC;
BEGIN
PROCESS(CLK,Q1)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
Q1<=D;
END IF;
END PROCESS;
Q<=Q1;
END behav;
下面一一分析上面程序的时序:
1.标准逻辑位数类型STD_LOGIC
就数字系统设计来说,类型STD_LOGIC比BIT包含的内容多。
BIT数据类型定义:
TYPE BIT IS('0','1');---只有2种取值
而STD_LOGIC数据类型有:
TYPE STD_LOGIC ('0' '1' 'U' 'X' 'Z' 'W' 'L' 'H' '-') ;九种取值它们的含义分别是:‘U’表示未初始化的;‘X’表示强未知的;‘0’和‘1’表示强逻辑0和强逻辑1;‘Z’表示高阻态;‘W’表示弱未知的;‘L’和‘H’表示弱逻辑0和弱逻辑1;‘-’表示忽略。它们完整的概括了数字系统中所有可能的数据表现形式。在仿真中,将信号或其它数据对象定义为STD_LOGIC是非常有用的,它可以使设计者精确的模拟一些未知的和具有高阻态的线路情况。对于综合器,高阻态‘Z’和‘-’忽略态可用于三态的描述。扯远了,呵呵。。
2.上升沿检测表达式和信号属性函数EVENT
在上面的程序中,我们用CLK'EVENT AND CLK='1'来检测时钟的上升沿,即如果检测到CLK的上升沿,表达式值为TURE。关键字EVENT是信号属性函数,用来获得信号行为信号的函数称为信号属性函数。VHDL通过下面的表达式来测定某信号的跳变情况。
《信号名》’EVENT
短语CLK'EVENT就是对CLK标识符的信号在当前的一个极小的时间段(设为&)内发生事件的情况进行检测。所谓发生事件就是CLK在其数据类型定义的范围内发生变化,从一种值取值转变到另外一种取值。在这里CLK被定义为STD_LOGIC数据类型,则在&时间段内,CLK从其允许的9种值中的任何一个值向另一个值变化,如由‘Z’变为‘0’等等,于是表达式将输出一个布尔值TURE,否则为FALSE。这样很容易理解上面程序的语句:CLK'EVENT AND CLK='1'为什么是上升沿检测了。在一个&时间段CLK的值发生变化,并且之后的值为‘1’,那么这前这个值就一定是‘0’,于是它就成了上升沿检测语句了。
另:检测下降沿的语句:CLK'EVENT='1' AND CLK='0' ;falling_edge()
3.不完整的条件语句和时序电路
下面分析D触发器的功能
首先考查时钟信号CLK的情况(即满足IF语句条件的情况)。当CLK发生变化时,PROCESS语句被启动,IF语句将测定条件表达式CLK'EVENT AND CLK='1'是否满足条件,如果CLK的确出现了上升沿,则满足条件表达式是对上升沿的检测,于是执行Q1<=D,即更新Q1,并结束IF语句,最后将Q1的值向端口信号Q输出。至此,是否可以认为CLK上升沿测定语句“CLK'EVENT AND CLK='1'”就成为综合器构建时序电路的必要条件呢?答案是否定的,哈哈!
那么为什么呢?再进一步分析:如果CLK没有发生变化,或者说没有出现上升沿方式的跳变时IF语句的行为。这时由于IF语句不满足条件,于是跳过赋值表达式Q1<=D,不执行此赋值表达式而结束IF语句。由于此IF语句没有利用通常的ELSE语句明确指出当IF语句不满足条件时作何操作,这是一种不完整的条件语句(即在条件语句中没有将所有可能发生的条件给出对应的处理方式)。对于这种语言现象,VHDL综合器理解为,对于不满足条件,跳过赋值语句Q1<=D,不执行,即意味着保持Q1的原值不变,就意味着使用具有存储功能的元件,就是必须引进时序元件来保存Q1的原值。
显然,时序电路构建的关键在于利用这种不完整的条件语句的描述。然而必须注意,如果用在纯组合电路中,如果没有考虑到电路中所有可能出现的问题,即没有列全所有的条件对应的处理方法,导致不完整条件语句出现,从而综合出设计者不希望看到的结果。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
LabVIEW FPGA 模块简介
石墨栅极增强石墨烯迁移率以匹配半导体异质结构
RTL8029AS_PCI_10M网卡双端口电路图(protel99,orcad格式)
学习如何设置新型单板RIO系统
求助windml
什么是符号间干扰,我为什么要关心它?
禽蛋孵化恒温箱 二
禽蛋自动孵化器 二
德生R9700型高灵敏度收音机电原理图
如何在边缘人工智能计算中利用神经形态设备?
用于量子计算的Sub-1 K冷却:第3部分
运放运算电路
涛涛车业与宇树科技达成战略合作
边缘光子集成电路有哪些应用?
LabVIEW概念演示介绍
知道mocana SSL吗??
汽车或其驾驶员还需要方向盘吗?
禽蛋孵化恒温箱 四
LabVIEW 8.6 新特性
如何使用LabVIEW测试、控制以及嵌入式应用
知道或用过mocana SSL进来看看!
如何在物联网设备中选择和放置天线
RTL8019AS_ISA_10M网卡电路图(pdf,protel99,orcad格式)
定时控制器电路图二
为什么栅极驱动器对于高性能电源开关至关重要?
搞怪声音大比拼 ,UU又有好礼送!
两家半导体公司量子计算机的故事
进口电动剃须刀电路图
间歇通电控制器电路图一
关于ARM网络中断的问题