SystemVerilog中$sformat和$formatf的用法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM