new()为一个对象分配空间,初始化变量,并返回保存对象的地址。
new[]设定动态数组的大小。动态数组在最开始是空的,必须通过调用new[]来分配空间,同时在方括号中传递数组宽度;
数组和队列的区别在于,数组的长度一旦确定就不可更改,但是队列不一样,队列的初始长度是0,可以用插入,pop,push等方法向里面塞入数据。调用delete方法删除。
动态数组需要new,队列不需要
uvm_do_on用于显式指定那个sequencer发送此transaction。第一个是transaction 指针,第二个是sequencer 指针
使用uvm_do 时,默认的sequencer 就是此sequence 启动时为其指定的sequencer,sequence 将这个sequencer 的指针放在其成员变量m_sequencer 中。等价于:
modport可以定义不同信号接入接口的方式(input、output、inout、ref),可以为信号指定方向,所以它定义在接口里面;
interface是将多组信号合成一起由一个端口表示,简化模块之间的连接,实现类与模块之间的通信。
automatic是把函数或任务中的变量声明为动态,这样在任务执行完之后,变量就进行销毁,即用即扔;而声明为static,则为静态,生命周期贯穿整个仿真,且全局只有唯一一个该静态变量。
比较TLM端口和mailbox的区别:TLM端口可以自己实现put和get方法,比较灵活;其次,TLM端口用于组件之间的通信,无需通过句柄层层传递,降低了组件之间的耦合性,使得验证环境更加独立。
mailbox本身就是一个原生的轻量级fifo,有get()方法,put()方法。
mailbox #(trans) res;
tans a;
res=new();
res.get(a);res.put(a);
虚函数是sv类中多态性的变现,即可以通过指针指向的对象通过动态查找来决定调用哪个函数,加了之后可以使得父类句柄在指向子类对象的时候可以调用子类方法,没加只能声明子类句柄来调用。
Sv与verilog相比的优点?
答:提供了logic数据类型,避免小白出错。提供了interface,使得硬件和验证环境的连接更加简便。提供了面向对象编程的类,同时类的三要素使得在构建验证环境时候更加简便。提供了多个数据类型,在构建软件验证环境时能更多地做好随机化。
interface是将多组信号合成一起由一个端口表示,简化模块之间的连接,实现类与模块之间的通信。
为什么需要clocking:利用clocking进行采样是为了避免信号竞争问题,它可以定义数据延迟或者提前进行采样,使得采样数据更加稳定。
illegal bin触发会怎样?答:报错、仿真停止。
Rand bit data[100],约束随意一位是0,剩下的为1。
foreach(a[i])
a[i] dist {0:=1,1:=99};
Rand data0~a?
class trans;
int a;
rand int b;
constraint cr {a inside {[0:b]};}endclass