过程块
SV中要清楚哪些程序对应硬件,哪些程序对应软件
module endmodule, interface/endinterface被视为硬件世界
program/endprogram, class/endclass被视为软件世界
所有测试语句放在一个initial,用begin/end包住
函数function
定义一个变量double,输入是a,返回值是2a
function int double(input a);
return 2*a;
endfunction
initial begin
$display("double of %0d is %0d", 10, double(10));
end
默认的数据类型是logic
数组可以作为形式参数传递
可以return返回,也可以void functino()不返回
只有数据变量可以在形式参数列表中被声明为ref,而net类型不能被声明为ref
使用ref时可以用const限定ref声明的参数,保护数据对线只读不写
声明参数时可以给如默认数值,input [7:0] addr=0
任务task
无法通过return返回结果,只能通过output,input,ref返回
可以置入耗时语句,比如@event, wait event, #delay。function不能
建议:
需要耗时语句用task,否则用function,只做纯粹的数字或逻辑运算
用task调用task,调用function两种都可以用
typedef struct{
bit [1: