$sformatf() 、$sformat()

1. $sformatf()、$sformat()的含义

string string1;
string string2;
$sformat(string1, "string1_score==%0d", 0);
$display("1.%0s", string1);
jerry2 = $sformatf("string2_score==%0d", 100);
$display("2.%0s", string2);

第一句会打印出:

1.string1_score==0

第二句会打印出:

2.string2_score==100

$sformatf()/$sformat()这两个函数不做打印的事!
这两个函数是整理字符串的格式,按照函数里""中的格式,把相应的变量填进去。

2. $sformatf()、$sformat()的区别

区别就是整理好的字符串往哪里放
1、$sformat()会直接把整理好的字符串放到第一个字符串类型的参数中,如上面代码中的string1。

2、$sformatf()返回的值就是整理好的字符串。如上面代码,通过string2去取这个字符串用。他可以把上面的两行用一行表示:

$display($sformatf("2.jerry_cool_score==%0d", 100));

但是sformat()没办法这样,它必须调用变量。

3. $display

(1)$display可以自己整理格式:

$display("2.jerry_cool_score==%0d", 100);

但是有时候需要提前先整理好字符串,比如UVM常用的uvm_info宏的打印方式:

`uvm_info("my_driver", "this is a string", UVM_LOW)

第二个参数是打印信息,如果需要打印变量值就需要使用他们整理好字符串,比如:

`uvm_info("my_driver", $sformatf("string_score==%0d", 100), UVM_LOW)

(2)循环涉及到字符串的变化时,可使用$sformatf()、$sformat()函数
当传入参数IN_0的时候,in_0的值变为1:

bit in_0=0;
if($test$plusargs("IN_0"))
  in_0=1;

当需要处理多个信号时:

bit in_0=0;
bit in_1=0;
bit in_2=0;
bit in_3=0;
bit in_4=0;
bit in_5=0;
bit in_6=0;
……
bit in_31=0;
if($test$plusargs("IN"))
  in_0=1;
if($test$plusargs("IN_1"))
  in_1=1;
if($test$plusargs("IN_2"))
  in_2=1;
……
if($test$plusargs("IN_31"))
  in_31=1;

此时使用$sformatf()、$sformat()比较简便:

bit in[32];
foreach(in[i]) begin
    if($test$plusargs($sformatf("IN_%0d", i)))
    in[i]=1;
end
posted @ 2023-08-14 21:06  chenlin127  阅读(376)  评论(0)    收藏  举报