ref端口
在一些参数传递时,常常用ref代替input/output,这是因为使用了ref可以直接引用目标参数,而不是选择复制。如此可以提高代码性能。同时,可以让任务或函数实时追踪参数的变化。ref参数只能被用于带automatioc参数的子程序中。注意,一个变量连接到多个ref端口,可能会引起竞争,端口可能同时更新该变量。
task load_array(int len, ref int array[]);
/*如果不希望子程序修改传入的参数,可以多加一个const修饰*/
task load_array(const int len);
automatic参数
在模块或程序块中使用automatic程序可以避免静态存储导致多次调用带来的数据覆盖的问题。
program automatic test;
virtual interface
虚接口其实就是指向接口的指针。因为interface在编译时就已经确定,是静态的,而class是动态的,在class中无法实例化interface,因此需要借用virtual interface生成指向interface的指针,以实现调用接口的目的。
阻塞赋值与非阻塞赋值
阻塞赋值(=)在赋值时只有一个步骤,计算RHS并立即更新LHS,这是在一个事件队列中完成的。
非阻塞赋值(<=)在赋值时有两个步骤,计算RHS,再更新LHS,这不是在一个事件队列中完成的。
当两条阻塞赋值出现时,一定会先完成第一条语句的赋值,然后对第二条进行赋值。所以第二条语句被第一条语句“阻塞”了。
当两条非阻塞赋值出现时,由于不会立即更新LHS,所以两条语句不会冲突,都可以先计算RHS,最后再更新LHS。所以第一条语句不会阻塞第二条语句。