使用 SystemVerilog 中的格式字符串对齐负数和正数实数

问题描述 投票:0回答:1

这是将 8x8 数字块转换为字符串矩阵的函数:

 function string float_block_to_string(input float_8x8_block_t float_block);

    string str;
    string fmt;
    real   value;

    str = "";
    // Loop over the array and write 8 values per line
    for (int j=0; j<8; j++) begin
      if (j==0)
        str = "{\n";
      for (int i=0; i<8; i++) begin
        value = float_block[j*8+i];
        str = {str, $sformatf("%8.4f  ", value)};
      end
      if (j<7) begin
        str = {str, "\n"};
      end
      if (j==7) begin
        str = {str, " }; "};
     // str = {str.substr(0, str.len()-3), " }; "};
      end
    end
    return str;
  endfunction

这是输出:

{
-43.4064  424.5029    0.0000  -149.0656   -0.0000   99.6025    0.0000  -84.4389  
112.6610  383.1046    0.0000  -134.5284   -0.0000   89.8890   -0.0000  -76.2042  
  0.0000    0.0000    0.0000   -0.0000   -0.0000   -0.0000    0.0000    0.0000  
-39.5613  -134.5284   -0.0000   47.2401    0.0000  -31.5648    0.0000   26.7594  
 -0.0000   -0.0000   -0.0000    0.0000    0.0000   -0.0000   -0.0000    0.0000  
 26.4340   89.8890    0.0000  -31.5648   -0.0000   21.0909    0.0000  -17.8800  
  0.0000   -0.0000    0.0000    0.0000    0.0000   -0.0000    0.0000    0.0000  
-22.4097  -76.2042   -0.0000   26.7594    0.0000  -17.8800   -0.0000   15.1580   }; FDCT_Cr     0V,    0H;  10,    0,    0, l=1

文字未对齐。尽管使用了格式字符串,但这还是如此。负数的减号是主要问题。解决这个问题的正确方法是什么?

system-verilog
1个回答
0
投票

%w.df

%符号后面出现的

w
数字是格式化相应参数的最小宽度。该数字包括符号和小数点的空间。小数点后的 d 数字是精度修饰符。对于您想要显示的数字,您的 w 需要至少为 9。

© www.soinside.com 2019 - 2024. All rights reserved.