在VHDL-2008中,如何格式化与c语言中的“%f”类似的“real”,例如:sprintf(str,“%9.6f”,myreal)

在VHDL-2008中,如何格式化与c语言中的“%f”类似的“real”,例如:sprintf(str,“%9.6f”,myreal),vhdl,Vhdl,我使用的是VHDL-2008,我想很好地将实数格式化为类似于此c语言函数的字符串: sprintf(str, "%9.6f", myreal); 目前,我正在按以下方式格式化我的实数: architecture sim of testbench is constant myreal :real := 3343.2342; begin process begin report real'image(real_number); wait; end process e

我使用的是VHDL-2008,我想很好地将实数格式化为类似于此c语言函数的字符串:

    sprintf(str, "%9.6f", myreal);
目前,我正在按以下方式格式化我的实数:

architecture sim of testbench is
    constant myreal :real := 3343.2342;
begin

process
begin
   report real'image(real_number);
   wait;
end process

end architecture;
这不允许对VHDL中实数的格式进行足够的控制。我想要的是对vhdl格式化的控制,更像是c语言%n.mf格式化程序


基本上,GHDL模拟器中的VHDL定义总是以科学记数法打印实数,小数点后还有一位数字、一个分数和一个指数,这很烦人。

VHDL 2008提供了三种风格的实数字符串:

function TO_STRING (VALUE: REAL) return STRING;
function TO_STRING (VALUE: REAL; DIGITS: NATURAL) return STRING;
function TO_STRING (VALUE: REAL; FORMAT: STRING) return STRING;
第一种情况以简单格式返回实数,第二种情况以小数点右侧显示的位数返回实数,第三种情况接受C中的sprintf格式字符串:

entity real_test is
end entity real_test;

architecture test of real_test is
begin

  process
    variable r : real;
  begin
    r := 3.25432;

    report to_string(r);
    report to_string(r, 3);
    report to_string(r, "%.2f");
    wait;
  end process;

end architecture;

TEXTIO的写入过程自VHDL 1993年起就支持DIGITS选项。对十六进制格式A | A的支持由实现定义-2008 5.2.5浮点类型符合IEEE标准754-1985或IEEE标准854-1987 64位。在C语言中实现VHDL工具存在偏见。为什么要重新发明轮子?
EXECUTION:: NOTE   : 3.25432
EXECUTION:: Time: 0 ps,  Iteration: 0,  Instance: /real_test,  Process: line__7.
EXECUTION:: NOTE   : 3.254
EXECUTION:: Time: 0 ps,  Iteration: 0,  Instance: /real_test,  Process: line__7.
EXECUTION:: NOTE   : 3.25
EXECUTION:: Time: 0 ps,  Iteration: 0,  Instance: /real_test,  Process: line__7.