我已经使用VHDL有一段时间了,并且习惯了其中的to_string和integer'image函数。我正在尝试编写一些 SystemVerilog,刚刚意识到字符串连接,尤其是整数到字符串的工作方式不同。
我正在尝试在 SystemVerilog 中为整数编写一个
to_string
函数。它应采用三个参数。第一个是要转换的整数(显然)。第二个是字符串表示必须占据的位置数。这可以是 0 的形式,也可以是空格的形式,因此第三个参数应该是填充字符。
我不确定如何告诉
$sformat
函数填充量应该是可变的,并指定填充字符。编写具有字节级字符串操作的低级函数是执行此操作的唯一方法吗?
Convert 12 to string to fit in 5 places, pad with zeros and not empty space. This gives:
00012
这应该可以帮助您开始。 它利用此技术来构建格式字符串。
module tb;
string str;
function string to_str (int num, width);
string fmt;
// %% is a literal %
// 0 is the pad character
// %0d formats the width as an integer with no padding
// d is for digit
fmt = $sformatf("%%0%0dd", width);
return $sformatf(fmt, num);
endfunction
initial begin
str = to_str(12, 4) ; $display(str);
str = to_str(12, 5) ; $display(str);
str = to_str(12, 6) ; $display(str);
str = to_str(123, 7); $display(str);
str = to_str(123, 8); $display(str);
str = to_str(123, 9); $display(str);
end
endmodule
打印:
0012
00012
000012
0000123
00000123
000000123