ref:http://www.sutherland-hdl.com/papers/2012-DAC_What-is-new-in-SystemVerilog-2012.pdf
(只提取一些目前自己感觉比较实用的地方)
1.构造函数new
从前
想要用一个父类handle指向一个子类的object,需要三步
现在
通过 typed new()可以直接完成:
base_trans t_base = reset_trans::new;
2.class成员可以使用非阻塞赋值
3.soft constraints
从前
所有的constraint都是 “硬约束”,每一条都必须遵守,如果某两条约束之间有冲突,那么随机结束会报错
现在
提供关键字"soft",作为软约束,如果有软约束与其它约束有冲突,该条软约束将被忽略。
4.uniqueness constraints
从前
如果想要几个变量,或一个数组中的所有成员在随机的时候取值相互之间不相等,没有直接的方法可以解决。
现在
通过关键字"unique"实现多个变量取值互不相等的约束:
5.parameterized methods/types
从前
task/function在调用时没办法使用不同的parameter value,从而很多时候需要写很多功能相同的task/funcion,比如处理32、64、128位宽的数据
现在
static class methods能够像module instance一样,传parameter.
有点类似参数化类的方法
6.在let macro中可以显示申明untyped argument
关键字“uptyped”申明untyped 变量, 变量的类型由调用let macro时传进的实参的类型决定
7.在for-loops中使用var type()
从前
在for-loops中的iterator必须给定一个数据类型
现在
iterator的类型可以depends on 其它变量的数据类型
8.ref args可以使用dynamic arrays
从前
task/function 的ref argument如果是数据,则必须是定宽数组
现在
可以指向dynamicall-sized arrays
9.增强系统函数$countbits
从前
$countbits只能计算1了bits数目
现在
$countbits可以yfth0,1,x,z的数目:
$countbits(data, 'x, 'z) ==>计算data中x和z的bit数据
10.在coverage function中Coverpoint的bin可以使用with
bins...with()可能用于去剔除不需要覆盖的数值。类似于ignore_bins的作用,但更为方便
11.增强assertion/sample 的data type
从前
assertion或$sample()都没办法使用real以及动态数据等
现在
支持real, dynamic arrays, static class properties:
12.在即时断言中使用final
从前
即时断言可能受到glitch的干扰,需要想办法在同一时刻因为combinational logic造成的glitch的干扰:如下:
现在
通过加上关键字"final",消除所有的glitch