1. function和task的区别?
(1) 函数能调用另一个函数,但不能调用任务,任务能调用另一个任务,也能调用另一个函数
(2) 函数总是在仿真时刻0就开始执行,任务可以在非零时刻执行
(3) 函数一定不能包含任何延迟、事件或者时序控制声明语句,任务可以包含延迟、事件或者时序控制声明语句
(4) 函数至少有一个输入变量,任务可以没有或者多个输入(input)、输出(output)和双向(inout)变量
(5) 函数只能返回一个值,函数不能有输出(output)或者双向(inout)变量,任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值
2. task中如何返回一个数组?
(1) 定义一个数组类型的变量,当作output/inout参数的类型
(2) 将参数方向定义为ref
(3) 将数组包含在类中
3. ref和output有何区别?
output类型的参数在进去子程序时,会将变量值复制一份,执行完毕后返回,因此返回的是对复制后的变量进行操作的;
而ref是直接对原变量进行引用,类似于直接拿到句柄,因此对ref进行修饰的变量进行的任何修改都会改变原来的变量值
4. 静态变量与动态变量/全局变量与局部变量
在SV中,将数据的生命周期分为动态(automatic)和静态(static)。
(1) 动态变量
1)动态变量的生命周期同其所在域共存亡ÿ