$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

浙公网安备 33010602011771号