VHDL音频项目
我正在尝试在Nexys 4 DDR板上进行一个学校项目。我感兴趣的项目分为两部分:VHDL音频项目,vhdl,fpga,clock,vivado,pwm,Vhdl,Fpga,Clock,Vivado,Pwm,我正在尝试在Nexys 4 DDR板上进行一个学校项目。我感兴趣的项目分为两部分: 使用板上内置的PDM麦克风模拟Vu表(分贝表),并在16个LED上显示。声音越大,LED灯亮的越多 通过将电路板上的15个开关转换为15位二进制数,产生0到32767 Hz的声频(方波)。我计划使用PWM音频输出到扬声器进行演示 电路板上的剩余开关将用于在两种模式之间切换。我试图在网上研究各种各样的项目,但大多数都不是开源的,也没有帮助。我完全不知道如何实现第一部分,对如何实现第二部分有一个粗略的想法 对于第二部
任何形式的帮助都将不胜感激 如果传入的音频是简单的音调,则可以使用音频信号的大小作为响度的度量;如果您有一个由多个频率组成的更复杂的声音,则需要先执行FFT以提取分量波形。从那里,选择你喜欢的频率并使用它 对于PWM,您有两个选项。第一种是使用一些计数器逻辑来创建新的时钟信号。不建议将此方法用于创建用于控制其他逻辑的时钟,因为它可能会造成严重的设置和/或保持冲突。第二种方法是使用PLL/DLL从以前的时钟信号生成新的时钟信号。这将比使用可配置逻辑生成的寄存器更稳定,如果需要,还可用于控制其他寄存器,但其生成的时钟范围有限(通常为~1MHz至1GHz) 第三个(更好)是使用100MHz时钟,但只能在特定时间进行更改;此方法的伪代码可能是:
Every (1MHz) clock cycle, counter = counter + 1
If counter = frequency value/2 (i.e. 50,000,00 for 1MHz, 16,666,666 for 3MHz, etc)
Instead, set counter to 0 and toggle the output signal
如果您可以确定正确的频率值,这将给您一个根据需要变化的信号(即每秒两次以产生1MHz信号:)