【问题标题】:VHDL: how to represent signed/unsigned as integer string when >32 bitsVHDL:当> 32位时如何将有符号/无符号表示为整数字符串
【发布时间】:2019-10-09 01:15:08
【问题描述】:

我正在做一堆 DSP 验证并在断言失败时进行打印,我为有符号和无符号类型编写了这些函数:

    function to_string(arg : integer) return string is
    begin
        return integer'image(arg);
    end function;

    function to_string(arg : signed) return string is
    begin
        return to_string(to_integer(arg));
    end function;

    function to_string(arg : unsigned) return string is
    begin
        return to_string(to_integer(arg));
    end function;

但是,由于我的一些结果大于 32 位宽,所以它们就坏了。当有符号和无符号类型大于 32 位宽时,VHDL 中有没有办法提供整数字符串表示?如果没有,有人可以提供一个函数来提供这些数字的十六进制表示,以减少打印到控制台的大小吗?

【问题讨论】:

  • 也许你可以从real 类型中受益,因为它总是double precision,因此有更多位来表示整数部分。
  • @MortenZilmer 那会很好,但是在处理有符号/无符号类型时,这是不可能的,因为我必须先转换为整数。我的用例是我正在验证宽度 > 31 位的有符号/无符号结果。检查值时我没问题,因为我使用相同的数据类型。但是,我想以可读的方式将预期/观察到的打印到屏幕上,以便用户查看差异。

标签: vhdl


【解决方案1】:

通过 to_hstring 函数在 VHDL 2008 中的 numeric_std 包中免费提供十六进制表示。还提供了 to_string 和 to_ostring。

这些函数在其原生包中提供给所有基于位的类型。还提供了 write、owrite 和 hwrite 用于写入一行。

【讨论】:

  • 酷,看起来我至少会为我的所有测试平台切换到 '08,因为看起来我使用的所有模拟器都支持我需要的东西。感谢您指出这一点,我没有意识到他们添加了这个,因为我们一直停留在 02 年。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2011-01-31
  • 2015-12-18
相关资源
最近更新 更多