如何将定点VHDL类型转换回浮点?

如何将定点VHDL类型转换回浮点?,vhdl,fixed-point,Vhdl,Fixed Point,我正在使用VHDL中的IEEE定点软件包 它工作得很好,但我现在面临一个关于它们在测试台上的字符串表示的问题:我想将它们转储到一个文本文件中 我发现确实可以使用以下方法直接编写ufixed或sfixed: write(buf, to_string(x)); --where x is either sfixed or ufixed (and buf : line) 但我得到的值类似于11110001.10101(对于SFixedQ8.5表示) 所以我的问题是:如何将这些定点数转换回实数(然后转换

我正在使用VHDL中的IEEE定点软件包

它工作得很好,但我现在面临一个关于它们在测试台上的字符串表示的问题:我想将它们转储到一个文本文件中

我发现确实可以使用以下方法直接编写ufixed或sfixed:

write(buf, to_string(x)); --where x is either sfixed or ufixed (and buf : line)
但我得到的值类似于11110001.10101(对于SFixedQ8.5表示)


所以我的问题是:如何将这些定点数转换回实数(然后转换成字符串)?

变量需要分成两个std逻辑向量部分,整数部分可以使用标准转换转换成字符串,但对于分数部分,字符串转换有点不同。对于整数部分,您需要使用循环并除以10,然后将模余数转换为ascii字符,从低位向高位递增。对于分数部分,它也需要一个循环,但需要乘以10。首先,将这个数字分离出来,得到相应的字符,然后将该整数减去分数,等等。这是一个概念,在MATLAB中进行测试,并制作一个vhdl版本,我将很快与大家分享。我很惊讶在任何地方都找不到这样有用的函数。当然,定点格式可以不同,Q(N,M)N和M可以有各种各样的值,而对于浮点,它是标准化的。

因此,在上面的示例中,您希望将11110001.10101作为241.6563写入文本文件?从谷歌搜索来看,似乎有一个to_real()函数可以使用。您是否尝试过类似的方法:write(buf,to_string(to_real((x)));是的,我已经尝试过了。在GHDL上,我得到:“前缀既不是函数名,也不能对其进行切片或索引”固定通用包(fixed_generic_pkg.vhdl,fixed_generic_pkg-body.vhdl)可从IEEE补充资料页获得(zip文件)。此软件包包含sfixed和ufixed的引用到_real函数。您可能会或可能不会遇到ghdl的依赖项生成,也应该参考ghdl用户手册。软件包正文中的两个函数可用于启发本地转换。