2017-05-27 134 views
0

我想尝试使用Nexys 4生成汽车声音。我是否需要将声音存储在ROM中?创建声音的步骤是什么?我正在使用verilog。谢谢如何在Nexys ddr 4 FPGA上生成音频声音输出

+1

我投票结束这个问题作为题外话,因为它属于https://electronics.stackexchange.com/questions/tagged/verilog –

+0

@ dave_59不幸的是Verilog是一个主题,它都出现在“stackoverflow”。 com“和”electronics.stackexchange.com“。在这两个网站上讨论了相同的主题。 –

+0

@MartinRosenau关键在于人们使用编程语言的编码混淆了设计FPGA的概念。堆栈溢出是针对代码和语言问题的。电子产品用于硬件问题。 Verilog跨越了两者,因为它是描述硬件的语言。这个问题与代码本身无关 –

回答

0

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

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

我会考虑以下伪代码(这里的类C,不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”应该真的是这样的问题更好的地方。

+0

非常感谢你。我会尽力让它工作! –