如何在Nexys ddr 4 FPGA上生成音频声音输出

时间:2017-05-27 17:45:40

标签: audio verilog fpga

我想尝试使用Nexys 4来生成汽车声音。我需要将声音存储在ROM中吗?什么是创造声音的步骤。我正在使用verilog。感谢

1 个答案:

答案 0 :(得分:0)

Nexys 4主板不包含音频编解码器,但它包含一个简单的低通(或带通)滤波器,可以从PWM信号中创建声音输出。

您的编程挑战是创建一个PWM信号,其占空比代表声音输出信号的当前电平。

我会考虑以下伪代码(这里是C-like,而不是Verilog):

signed int levelAccu = 0;

on_Every_Clock_Edge()
{
    int level = getCurrentSoundLevel();
    levelAccu += level;
    if(levelAccu > 0)
    {
        setOutputPin(HIGH);
        levelAccu -= MAX_LEVEL;
    }
    else
    {
        setOutputPin(LOW);
        levelAccu -= MIN_LEVEL;
    }
}

虽然:

getSoundLevel()表示当前所需的"等级"声音输出。 (如果使用采样声音,则为当前采样的值。)

MAX_LEVELMIN_LEVEL是"等级"的最大值和最小值。示例:如果要播放存储为8位有符号值的声音,则可以MAX_LEVEL=127MIN_LEVEL=-128

寄存器levelAccu应比level多1或2位。

请注意,时钟边缘必须比音频的采样率快得多。

  

我是否需要将声音存储在ROM中?

取决于您想要创建哪种声音。

如果您想播放录制的声音样本,您必须将它们存储在某些内存中(RAM,ROM ...)。

如果您想以编程方式生成声音(例如正弦波),则无需存储它们。

顺便说一下

您的问题不是Verilog特定的问题,而是与FPGA的共同点以及与FPGA附近的电路有关。

出于这个原因" electronics.stackexchange.com"对于这些问题应该是更好的地方。