Verilog系列:【22】逻辑强度模型
而strength0和strength1又可更具这些强度的用途分为两类:负荷强度(charge strength)和驱动强度(drive strength).
负荷强度:一般用于trireg声明的线网类型,类似于模拟实际电路电容的大小;
在仿真设计验证的过程中,一般在没有明确限制具体取值范围时,通常使用的"0","1","Z"和"X"的取值范围如下图所示:
【注意】
-
在缺省情况下,线网或者逻辑们的输出具有的强度为St1和St0.但是在具体建模时也可以指定不同逻辑强度,可指定输出逻辑强度的有效逻辑门如下表所示:
- 在strength1中指定highz1,例如逻辑门例化后输出为1时,实际输出为HiZ,在strength0中指定highz0,例如逻辑门例化后输出为0时,实际输出为HiZ,因为高阻态并没有一个确定的逻辑值,所以其输出显示为Z,而不是HiZ0或者HiZ1,所以(high0,high1)或者(high1,high0)的组合是无效的, ,strength1,strength1)或者(strength0,strength0)的组合也是无效的.
-
trireg声明线网的同时可以指定其衰减时间,用以模拟电容中电荷衰减的过程.还需要注意的是,在使用一些特殊的门单元时,线网中传递的数据的强度可以在经过特定逻辑门后强度衰减.常见的信号强度衰减的情况主要有两大类:
-
信号通过非阻抗器件
当supply(Su)强度的信号通过nmos、pmos或者coms时,信号强度将衰减为strong(St);
当supply(Su)强度的信号通过tran、tranif0或者tranif1时,信号强度将衰减为strong(St);
-
信号通过阻抗器件
信号通过rnmos、rpmos、rcoms、rtran、rtranif1、rtranif0等逻辑器件后,信号强度衰减规律如下表所示:
通过对相关线网指定不同强度,可精确的模拟信号在电路中传输时信号状态的变化,为模拟不同强度信号驱动线网提供一个更加准确的描述.因此这里需要注意,一般线网可以指定特定的强度,不同的线网强度相互作用会得到不一样的结果,为了对这种现象进行描述,这里主要从以下几方面来对不同强度信号的连接进行示例说明.
0 信号强度的指定
强度声明指定的方式一般分为两种:
-
线网声明时指定强度,需要注意此时需要同时指定具体数值;
-
线网在过程性赋值时指定;
具体格式如下:
1 信号有确定强度(UAS:unambiguous strength)和数值情况
根据信号的强度、数值以及组合方式等的不同,不同信号的组合结果存在多种情况,以下将分别示例讨论.【示例】
2>sig1和sig2进行线逻辑操作(triand,wand,trior,wor)
【示例】UAS信号sig1和sig2
进行线逻辑操作的信号的最终值由逻辑操作决定,强度由为线逻辑操作指定强度决定.
2 信号的强度不确定的情况(AS:ambiguous strength)
当多个信号进行组合时,因为每个信号的强度和数值一般情况下都是不一样的,所以在不同的配置属性下,其组合后结果的强度往往是一个范围.当然,如果两个信号的强度一样且数值相反,那么其组合后的结果为不定态.对于信号强度不确定的具体情况大致可分为以下几类:1>信号有确定的数值,但属于AS;
2>信号有不定态(不定态的取值范围不定,所以不定态的强度一般有strength1和strength1的一部分共同组成);
3>信号中有低电平范围的值,且低电平范围包含高阻态;
4>信号中有高电平范围的值,且高电平范围包含高阻态;
【示例1】 组合的两个信号强度分别是weak1和weak0,两者组合后的结果为weakX.
3 AS信号与UAS 信号的组合
AS信号与UAS 信号进行组合后的最终信号状态的确定一般依据以下规则:规则一 AS信号的强度高于UAS信号,最终组合的输出信号的强度由AS强度范围决定;
规则二 AS信号的强度小于等于UAS信号,最终组合的输出将不包含AS信号中强度小于等于UAS信号的那部分强度;
规则三 如果按照上两条规则产生的结果强度中存在间隔(指UAS强度范围在AS强度范围中时),那么组合后最终的输出将包含结果中的间隔部分;
【示例1】AS信号的强度小于UAS的强度,那么结果将遵守上述规则二,所以最终的输出结果UAS的部分强度.
【题外话】VHDL逻辑系统
不同的EDA工具开发了不同的逻辑系统,不同的设计团队也可能根据各自需要设计不同的逻辑组合,从而构建特殊的逻辑系统,例如:四值逻辑\七值逻辑\九值逻辑等,这里仅摘要常用的作一介绍.说明:std_logic类型是std_ulogic类型的一个子集,相较std_logic,std_ulogic增加了一个新的逻辑值'U',std_ulogic中没有指定两个std_ulogic信号连接到同一个节点上发生冲突后的逻辑值,因此需要使用该类型时,需要注意两个输出信号直接连接的情况.
std_logic和std_ulogic属于仿真和综合中特别重要的数据类型,通过这两种数据类型可以精确的描述仿真电路状态.但是并不是所有的仿真中可见的数据类型都可以对应到具体的电路中,在九值逻辑中,目前普遍可被大多数EDA工具普遍认可的综合数据类型有"1","0",其他数据类型综合时需要根据特定的使用情况区分对待,所以在进行设计时,最好使用综合前后数据类型一致性较好的数值.