来自小白的学习和总结,肯定会有许多不正确的地方,若有幸被各位前辈大佬看到,内容错漏请指出,谢谢。
第一章 数据类型和数组
sv引进了一些新的数据类型:
(1)双状态数据类型:即0、1,属于软件世界,常用在验证过程中,因为其状态更少,有更低的内存消耗。可以仿真和综合,但是与实际的电路会有出入,更严重的是综合出来的电路有失真的可能;比如竞争,亚稳态,没有驱动等这些电路是没办法进行表征。这将导致电路的一些意外没有办法发现。RTL中,使用4值逻辑数据。
(2)队列、动态和关联数组:减少内存消耗,自带搜索和分类功能。
(3)类和结构:支持抽象数据结构。
(4)联合和合并结构:允许对同一数据有多种视图。
(5)字符串:支持内建的字符序列。
(6)枚举类型:方便代码编写,增加可读性【1】。
以上数据类型,会在后面具体分类中,详细介绍。上述内容有时可做笔试选择题中出现,提问sv相对v引入的新型数据类型,可稍作留意。
下面正式开始记录sv中的数据类型。
1.1 内建数据类型
v主要有两种基本的数据类型,变量和线网(net),各自可取四种状态:0、1、Z、X。
(1)Z为高阻态:High impedance,在三态逻辑、上拉电阻中有所涉及表示电路中的某个节点具有相对电路中其他点相对更高的阻抗,可做开路理解。你可以把它看作输出(输入)电阻非常大,它的极限状态可以认为悬空。
当门电路的输出上拉管导通而下拉管截止时,输出为高电平;反之就是低电平;如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制 。
实例1:在总线连接的结构上。总线上挂有多个设备,设备与总线以高阻的形式连接。这样在设备不占用总线时自动释放总线,以方便其他设备获得总线的使用权。
实例2:大部分单片机I/O使用时都可以设置为高阻输入,如凌阳,AVR等等。高阻输入可以认为输入电阻是无穷大的,认为I/O对前级影响极小,而且不产生电流(不衰减),而且在一定程度上也增加了芯片的抗电压冲击能力【2】。
(2)X为不定态。
常用于判断条件,只在告诉综合工具设计者不关心它的电平是多少,是0是1都可以。
仿真的过程中有些信号产生了不定态,设计者需要判定这个不定态是不是合理的。如果真的不关心是0还是1,可以不解决。信号在未传入数据之前,大多处于不定态的状态,即在波形图上呈现出红色。
RTL使用变量来存放组合和时序值,变量可以是单比特或者多比特。所有的储存都是静态(static)的,意味着在整个仿真过程中都存活着(涉及静态变量、动态变量知识,后面补上)。线网(net)用来链接设计当中的不同部分,如门和模块实例。
参考内容:
【1】systemverilog ,绿皮书,作者:克里斯+斯皮尔