1.overview
enumenrated:枚举
Two-state :双状态数据,相对于四状态(0,1,x,z)数据而言的,最简单的双状态类型bit;
strings :字符串
(左上角一个单撇):表示位扩展信号,可以将每一位扩展为指定值;但是注意全1是不能扩展的,必须全部写出来,如上例data= 64
hffffffffffffffff。(verilog语法)
SV里面数据扩展一个单撇就可以。
2.logic
SV里面,logic即可以连续赋值(wire),也可以被模块所驱动(但是不能被多驱动,也即不能同时即做输入又做输出),也可以作为一个门单元,是一个四值逻辑;
可以做矢量、数组等;
3.two state
2值类型不能用于设计;
bit :无符号数
byte,short,int,longint :有符号数
logic [7:0]:四值类型且是无符号数;不同于 byte 。
仿真时,四值逻辑默认x初始,二值类型默认0初始;
四值逻辑赋给二值逻辑时,x和z自动转化为0;
$isunknown :可以用于检查一个表达式里面是否有x或z,返回1代表检测到;
3.Arrays
固定数组
可以使多维的;
超出范围的写会被忽略,读则是x,even for 2-state;
longwrd :32位的;
int array 【0:7】 【0:3】:【0:7】代表行,【0:3】代表列;
unpacked array :按longword存放;
上图:数组赋初值。
上图:for为数组赋初值;
$size :返回数组深度;
for执行语句应该加begin…end 上图掉了;
foreach :简化版的for;
循环变量i会自动声明,可用于循环逻辑;
array operations :只能用 == 或 != 来比较,不能用算数操作;
数组整体赋值的前提是 :位宽,数据类型一致,size最好也一致。
上图:示例
packed array:
unpacked array : 默认32位;
packed arrsy :指定长度;
小端模式:0在低位(最右边),其余类推;
【0:2】表示3行;
【7:0】表示每行每个元素位宽为8;
【3:0】表示每行有4个元素;
【0:7】【0:7】【0:7】分表代表第1维,第2维,第3维
【7:0】表示每行每个元素位宽为8;
【3:0】表示每行有4个元素;