首页 > 解决方案 > 在VHDL-2008中,如何在c语言中格式化类似于“%f”的“real”,例如:sprintf(str, "%9.6f", myreal)

问题描述

我正在使用 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

解决方案


VHDL 2008 以 3 种方式提供了真实的 to_string:

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;

第一种情况以简单的格式返回实数,第二种返回它,DIGITS 是显示在小数点右侧的位数,第三种接受来自 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;
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.

推荐阅读