【问题标题】:How to add a LUT in VHDL to generate a sine如何在 VHDL 中添加 LUT 以生成正弦波
【发布时间】:2019-06-12 10:12:18
【问题描述】:

我已经制作了一个 I2S 发射器,可以从我的 FPGA 中生成“声音”。我想做的下一步是创建一个正弦。我在 LUT 中制作了 16 个样本。我的问题是如何在 VHDL 中实现这样的东西。以及如何按顺序加载样本。谁已经尝试过,并且可以分享他的知识?

我制作了一个包含 16 个样本的查找表:

0               0π
0,382683432     1/16π
0,707106781     1/8π
0,923879533     3/16π
1               1/4π
0,923879533     5/16π
0,707106781     3/8π
0,382683432     7/16π
3,23114E-15     1π
-0,382683432    1 1/16π
-0,707106781    1 1/8π
-0,923879533    1 3/16π
-1              1 1/4π
-0,923879533    1 5/16π
-0,707106781    1 3/8π
-0,382683432    1 7/16π
-6,46228E-15    2π

【问题讨论】:

    标签: vhdl trigonometry fpga


    【解决方案1】:

    最简单的解决方案是制作一个只是一个大case语句的ROM。

    FPGA 综合工具会将其映射到更多 LUT 上。

    请注意,对于较大的表,只有 1/4 的波形被存储,其他值是派生的。


    我想发送一个 24 位样本,您是否也知道如何处理这些数据(二进制!)?

    24 位(有符号)意味着您必须将浮点值转换为 -8388608..8388607 范围内的整数值。 (出于对称原因,您将使用 -8388608..8388607)

    因此将正弦值(您知道在 -1..1 范围内)乘以 8388607。

    正弦波的频率取决于您发送的速度(每秒多少个样本)。

    【讨论】:

    • 感谢您的回复。我想发送一个 24 位样本,您是否也知道如何处理这些数据(二进制!)?
    • 感谢您提供更多信息。我很高兴论坛上有人对 VHDL 了如指掌 ;-)。
    • 我对VHDL知之甚少。我对 Verilog 了解得更多,但两者都需要通用 HDL 编码、二进制数、转换以及更多此类知识:-)。
    • 如果您了解 Verilog 的基础,我认为 VHDL 并不难。但事实上,我必须了解有关二进制数、转换等的知识。有时,如果有人把你推向正确的方向,这很容易/很好,特别是如果你还在接受培训/教育;-)
    • 只有一个问题。 FPGA如何看出它是一个负二进制数(2个补码)?正如您可能已经读到的,我正在研究 I2S 接口。这里我加载 24/32 位(二进制样本)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2018-10-26
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2023-03-22
    相关资源
    最近更新 更多