非压缩尺寸在压缩尺寸之前引用,这就允许将整个压缩数组作为一个单一的元素进行引用。在上面的例子中,d[1]引用非压缩数组的一个单一元素,这个元素是一个包含4个字节的数组。
10. 在为命名的块中声明
Verilog允许变量在一个命名的begin-end或fork-join语句组中声明。相对于语句组来说,这些变量是本地的,但它们可以被层次化地引用。在SystemVerilog中,既可以在命名的块中也可以在未命名的块中声明。在未命名的块中,不能够使用层次名来访问变量。所有的变量类型,包括用户定义的类型、枚举类型、结构体和联合体都可以在begin-end或fork-join语句组中声明。
11. 常量
在Verilog中有三种特性类型的常量:parameter、specparam和localparam。而在SystemVerilog中,允许使用const关键字声明常量。例如:
12. 可重定义的数据类型
SystemVerilog扩展了Verilog的parameter,使其可以包含类型。这个强大的功能使得一个模块中的数据类型在模块的每一个实例中重新定义。例如:
modulefoo;
# (parameter typeVAR_TYPE =shortint;)
(input logic[7:0] i,output logic[7:0] o);
VAR_TYPE j = 0; // 如果不重新定义,j的数据类型为shortint
…
endmodule
modulebar;
logic[3:0] i, o;
foo#(.VAR_TYPE(int)) u1 (i, o); // 重新将VAR_TYPE定义成int类型
endmodule
13. 模块端口连接
在Verilog中,可以连接到模块端口的数据类型被限制为线网类型以及变量类型中的reg、integer和time。而在SystemVerilog中则去除了这种限制,任何数据类型都可以通过端口传递,包括实数、数组和结构体。
14. 字母值
在Verilog中,当指定或赋值字母值的时候存在一些限制。而SystemVerilog则为字母值如何指定作了下面的增强:
l一个字母值的所有位均可以使用`0、`1、`z或`x作相同的填充。这就允许填充一个任意宽度的向量,而无需显式地指定向量的宽度,例如:
l一个字符串可以赋值成一个字符数组,象C语言一样加入一个空结束符。如果尺寸不同,它象C中一样进行左调整,例如:
l加入了几个特殊的串字符:
v:垂直TAB
f:换页
a:响铃
x02:用十六进制数来表示一个ASCII字符
l数组可以使用类似于C初始化的语法赋值成字符值,但它还允许复制操作符。括号的嵌套必须精确地匹配数组的维数(这一点与C不同),例如:
15. 强制类型转换
Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用<type>’操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:
一个值还可以通过在强制转换操作符前指定一个10进制数来转换成不同的向量宽度,例如:
也可以将结果转换成有符号值,例如:
16. 操作符
Verilog没有C语言的递增(++)和递减(--)操作符。而SystemVerilog加入了几个新的操作符:
l++和--:递增和递减操作符;
l+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=赋值操作符;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-87180-4.html
坚决击沉
鼓励那些国家和中国对着干