繁体   English   中英

在VHDL-2008中,如何用c语言设置类似于“%f”的“真实”格式,例如:sprintf(str,“%9.6f”,myreal)

[英]In VHDL-2008, how to format “real” similar to “%f” in c-language, example: 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 2008提供了三种真实的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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM