VHDL:转换数字?真实到std_logic_vector

时间:2013-04-12 04:33:08

标签: floating-point vhdl stdvector

我当前的项目涉及一个地址计数器实体,它输出一个7位向量,输出(m)进入一个正弦查找表实体。所以基本上,我希望m是x,而正弦实体的输出是y。但我的问题在于查找表的条目。如何将实际实际值转换为std_logic_vectors?

例如,条目的正弦值为34.1326。 那怎么会变成一个载体?

2 个答案:

答案 0 :(得分:4)

虽然baldyHDL的答案可行,但您现在可以使用(现在标准的和可合成的)定点类型来节省大量的手动工作。

您可以选择二进制点左右两侧的位数。有一些函数可以直接将实数转换为定点。

您可以在http://www.vhdl.org/fphdl/

找到该库

例如:

signal a : sfixed (7 downto -6);

这有7位左边的点(范围为-64到+63)和6位右边的点,每个值2 ^ -6 = 0.015625。

然后你可以这样做:

s <= to_sfixed(34.1326);

您将获得您所要求的表格中可以表示的最接近的数字。鉴于输入的分辨率,这可能不够接近,所以将-6更改为更负面的东西以获得更高的分辨率。

答案 1 :(得分:0)

将您的输入乘以值2 ^ n并舍入结果。结果可以表示为std_logic_vector,请记住这有逗号后的“n”位。在某种程度上选择“n”,四舍五入后的量化就足够了!

示例:

  1. 您的价值:34.1326
  2. 目标帖子逗号:8位
  3. 新值:34.1326 * 256 = 8737.946
  4. 将它翻到8737
  5. 作为14位的std_logic_vector,这是“10001000100010”
  6. 请记住,这基本上是“100010”。“00100010”= 34.132813
  7. 警告:仔细选择矢量大小并注意SIGNS