systemverilog中sformat和sformatf的用法有哪些?
1.基本使用方法
首先查看一下這兩個函數什么含義。看下這段代碼:
string inside_string;
string outside_string;
$sformat(inside_string, “1.value==%0d” , 100);
$display(“1.%0s”, inside_string);
outside_string=$sformatf(“2.value==%0d” , 100);
$display(“2.%0s”, outside_string);
上面的兩個$display打印出來的結果如下所示:
1.value==100
2.value==100
首先sformatf() / sformat()這兩個函數是不做打印的事兒的,不要以為這兩個函數是做打印的!
原來這兩個函數就是整理字符串的格式啊!按照函數里“ ”中的格式,把相應的變量填進去。
那sformatf() / sformat()什么區別?
說白了,區別就是整理好的字符串往哪里放的問題!
sformat()比sformatf()多了第一個參數,這個第一個參數就是放最終整理好的字符串的容器。
sformat()會直接把整理好的字符串放到第一個字符串類型的參數中。
sformatf()返回的值就是整理好的字符串。
sformatf()也可以這樣寫:
$display($sformatf(“1.value==%0d” , 100));
sformat()必須調用變量。
$display(“2.value==%0d” , 100);
比如我們在UVM驗證平台常用的uvm_info宏的打印方式:
`uvm_info(“inside_string”,”1.value=100”,UVM_LOW)`
第二個參數是打印信息,我們如果需要打印變量值就需要使用他們整理好字符串,比如:
`uvm_info(“outside_string”,$sformatf(“2.value==%0d” , 100),UVM_LOW)`
2.巧妙的使用方法
bit num_in[32];
foreach(num_in[i])
begin
if($test$plusargs($sformatf(“num_%0d”,i)))
$dispaly("num_in[%d]=1", i);
end
結果如下
+num_0
num_in[0]=1