我想尝试使用Nexys 4来生成汽车声音。我需要将声音存储在ROM中吗?什么是创造声音的步骤。我正在使用verilog。感谢
答案 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_LEVEL
和MIN_LEVEL
是"等级"的最大值和最小值。示例:如果要播放存储为8位有符号值的声音,则可以MAX_LEVEL=127
和MIN_LEVEL=-128
。
寄存器levelAccu
应比level
多1或2位。
请注意,时钟边缘必须比音频的采样率快得多。
我是否需要将声音存储在ROM中?
取决于您想要创建哪种声音。
如果您想播放录制的声音样本,您必须将它们存储在某些内存中(RAM,ROM ...)。
如果您想以编程方式生成声音(例如正弦波),则无需存储它们。
顺便说一下
您的问题不是Verilog特定的问题,而是与FPGA的共同点以及与FPGA附近的电路有关。
出于这个原因" electronics.stackexchange.com"对于这些问题应该是更好的地方。