SV——系统函数

1 随机化相关函数

1) std::randomize() with

对于随机对象,可以采用object.randomize()的方式进行随机化,但有的时候可以通过更简单的方式,不必定义类和例化对象,甚至变量都不是随机类型,也可以对其进行随机化,这就是系统随机化 函数std::randomize。

1
2
3
4
initial begin //SV
int value;
std::randomize(value) with {value>=0 && value<=10;};
end

2) srandom() 设置随机钟子

手动设置随机种子,保证每次运行程序的时候随机化的结构一样,方便重现仿真情景。对象的钟子可以在对象上设置或者采用进程的钟子,而进程的种子必须在进程中设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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等输出函数一样,只是它不输出,而是返回字符串。

1
2
string msg;
smg=$sformatf("@%0t [%s] %s : %s", $time, r, src, i);

2) sprint()返回字符串

uvm_object默认的函数,print()是打印object的信息,而sprint()将要打印的信息返回成字符串。

1
`uvm_info("drv",sformatf("send a trans! \n %s",tr.sprint()),UVM_LOW);

3. 输出到文件

1
2
3
4
integer logf;
logf = $fopen(logname, "a+");
$fwrite(logf, $sformatf("%s\n", msg));
$fclose(logf);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!