电子琴音乐播放 FPGA 设计 VHDL Quartus
名称:电子琴音乐播放 FPGA 设计 VHDL Quartus
软件:Quartus
语言:VHDL
功能介绍
本设计实现一个基于 FPGA 的电子琴音乐播放系统,使用 50MHz 时钟作为系统输入,通过按键输入选择不同音符,并由音乐输出端产生对应的声音信号。顶层接口包含 8 位键盘输入、复位、模式选择以及音乐输出,适合用于学习 FPGA 音频方波发生、按键控制和简单数字音乐播放的完整流程。 系统支持电子琴手动弹奏与预置音乐播放相关功能。按键输入用于选择音调,模式选择信号用于在不同音乐输出路径之间切换,最终通过输出端驱动外部蜂鸣器或音频输出电路,实现可听的电子琴演示效果。 工程结构较完整,包含顶层控制、音调查表、分频、预置音乐 ROM、二选一选择模块以及 testbench。对于课程设计、实验报告、FPGA 入门项目和音乐类数字系统设计,该工程具有较好的参考价值。
运行环境
开发语言:VHDL 开发软件:Quartus 仿真环境:ModelSim 相关仿真目录与 testbench 工程文件包含 Quartus 项目文件、管脚约束文件、编译输出文件以及 SOF 配置文件,可用于综合、编译、时序分析和下载验证。
设计思路
设计采用模块化结构完成电子琴功能。系统以 50MHz 时钟作为统一时钟源,分频模块根据目标音调产生不同频率基准,使输出端能够形成对应音高的方波信号。按键输入作为音符选择信号,控制模块根据当前按键状态选择音调参数,从而实现电子琴按键发声。 在音乐播放部分,工程加入预置音乐数据 ROM 模块,用于保存固定旋律数据。系统可根据模式选择信号在手动按键演奏和预置音乐播放之间切换,二选一模块负责选择最终输出路径,使整体功能既能用于按键演示,也能用于固定旋律播放演示。 顶层模块负责连接时钟、复位、按键、模式选择和音乐输出,并将分频、音调表、电子琴控制、预置音乐数据和选择模块组合起来。这样的结构便于单独理解每个功能模块,也便于在实验中替换音调表、修改预置旋律或扩展更多按键音阶。
模块结构
主要模块包括: 1. electronic_organ_top:顶层模块,连接 50MHz 时钟、复位、键盘输入、模式选择和音乐输出。 2. electronic_organ:电子琴控制模块,处理按键输入与音调控制逻辑。 3. div:分频模块,用于从系统时钟生成发声所需的分频信号。 4. ToneTaba:音调查表模块,为不同按键或音符提供对应音调参数。 5. chuanqi:预置音乐数据 ROM 相关模块,用于固定旋律播放。 6. mux2_1:二选一模块,用于在不同声音输出来源之间进行选择。 7. tb_electronic_organ:仿真测试模块,用于配合 ModelSim 观察整体逻辑行为。
开发板验证
工程提供 Quartus 管脚约束/分配文件,可用于开发板下载验证。顶层信号包括 50MHz 时钟输入、低电平复位、8 位按键输入、模式选择输入和音乐输出,便于连接开发板按键、拨码开关及时钟资源,并将 o_music 输出到蜂鸣器或音频接口进行实际演示。
演示视频
配套演示视频展示电子琴工程的实际运行效果,可用于直观看到按键输入、模式选择和音乐输出的演示过程。
演示视频请关注公众号后获取对应资料查看。
仿真图/仿真说明/设计文档图片
设计文档包含工程文件、程序文件、程序编译、RTL 图、testbench、整体仿真图、分频模块、电子琴控制模块、预置音乐数据 ROM 和二选一模块等内容。仿真部分适合用于理解模块连接关系、验证顶层逻辑流程,并辅助撰写课程设计或实验报告。
部分代码
以下展示顶层模块electronic_organ_top的部分代码,完整代码可关注下方公众号卡片获取。
entity electronic_organ_top is port ( iclk_50 : in std_logic; -- 50MHz 输入时钟 rst : in std_logic; -- 低电平复位 keyin : in std_logic_vector(7 downto 0); -- 键盘输入 s : in std_logic; -- 模式选择 o_music : out std_logic -- 音乐输出 ); end entity electronic_organ_top;
代码获取:点击下方公众号卡片
