systemverilog中的几个系统函数收藏

 

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系统函数、任务的话,可以留言哦,会加更。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值