1 随机化相关函数
1) std::randomize() with
对于随机对象,可以采用object.randomize()的方式进行随机化,但有的时候可以通过更简单的方式,不必定义类和例化对象,甚至变量都不是随机类型,也可以对其进行随机化,这就是系统随机化 函数std::randomize。
initial begin //SV
int value;
std::randomize(value) with {value>=0 && value<=10;};
end
2) srandom() 设置随机钟子
手动设置随机种子,保证每次运行程序的时候随机化的结构一样,方便重现仿真情景。对象的钟子可以在对象上设置或者采用进程的钟子,而进程的种子必须在进程中设置。
class trans;
rand bit[7:0] a;
endclass
module test;
trans tr;
initial begin
tr=new();
tr.srandom(10); // 设置对象的随机种子
repeat(10) begin
tr.randomize();
$display("@ %0t tr : %0d",$time,tr.a);
end
end
initial begin
process::self.srandom(10); // 设置进程的随机钟子
$display("@ %0t : %0d",$time,urandom_range(0,10));
end
endmodule
3)random(int seed)
返回32bit有符号数,seed是可选的
4) urandom(int seed)
无符号
5)urandom_range()
unrandom_range(int unsigned MIN,int unsigned MAX),指定范围内的无符号随机数,MIN可以省略,默认0.
2. IO
1)sformatf格式化字符串
返回一个格式化字符串,使用的格式九个display等输出函数一样,只是它不输出,而是返回字符串。
string msg;
smg=$sformatf("@%0t [%s] %s : %s", $time, r, src, i);
2) sprint()返回字符串
uvm_object默认的函数,print()是打印object的信息,而sprint()将要打印的信息返回成字符串。
`uvm_info("drv",sformatf("send a trans! \n %s",tr.sprint()),UVM_LOW);
3. 输出到文件
integer logf;
logf = $fopen(logname, "a+");
$fwrite(logf, $sformatf("%s\n", msg));
$fclose(logf);
待更新
想要看更多关于systemverilog系统函数、任务的话,可以留言哦,会加更。