【发布时间】:2021-08-15 06:04:46
【问题描述】:
我正在尝试创建用于 $display/$write 的可变格式说明符。我已经尝试了很多东西,但这就是我目前所拥有的。
我想要结束的是:$display(format_var,data_1,data_2),其中格式字符串是使用 $sformatf 或其他预先计算的。
代码:
module test;
function void pprint(input int data_1,input int field_1,input int data_2,input int field_2);
string format;
begin
format = $sformatf("%0d'h%%%0dx,%0d'h%%%0dx",field_1,field_1/4,field_2,field_2/4);
$display("format = %s",format);
$display(format,data_1,data_2);
end
endfunction
initial
begin
pprint(5,8,73737229,128);
$stop;
end
endmodule
我期望的输出是:
format = 8'h%2x,128'h%32x
8'h05,128'h000000000000000000000000465240D
我得到的输出是:
format = 8'h%2x,128'h%32x
8'h%2x,128'h%32x 5 73737229
我需要做什么?模拟器是 Vivado 2020.3
稍后:
尝试更多的东西,下面的功能做我想要的。我的结论是 $display/$write 不能将变量作为格式字符串,但是 $sformatf 可以。
function void pprint(input int data_1,input int field_1,input int data_2,input int field_2);
string format;
string outstr;
begin
format = $sformatf("%0d'h%%%0dx,%0d'h%%%0dx",field_1,field_1/4,field_2,field_2/4);
$display("format = %s",format);
$display("%s",$sformatf(format,data_1,data_2));
end
endfunction
【问题讨论】:
-
在不同模拟器(如 vcs)上的 edaplayground 上尝试您的代码。另见How can I automatically scale a $display column width?
标签: printing format system-verilog display write