1、 课程设计课程设计 设计题目:基于 FPGA 的乐曲演奏电路设计 指导教师: 蒋俊华 学院:物理与电子学院 专业:电子信息科学与技术 姓名: 学号: 实验地点:特种功能实验室(实验室 502) 摘要:摘要:本文根据层次化的设计思路并在 EDA 开发工具 Quartus II 9.0 (32-Bit) 平台上,采用 Verilog 语言、原理图、定制 LPM-ROM 块以 及实例化的设计方法,利用数控分频的原理实现了基于 FPGA 片上系 统(本实验用的是康芯 GW48 系列 EDA 设备)乐曲演奏的设计。 关键词关键词 FPGA,EDA,Verilog,数控分频器 一一. . 概述部分:概述部
2、分: (1) 设计所要实现的功能 放出;演奏发音相对应的简谱码输出显示由在数码管 5 显示;高八度 音指示由发光管 D5 指示 (2) 设计所采用的基本思想 根据层次化的设计思路,可把乐曲硬件演奏电路分为 3 个模块, 音乐 节拍发生模块,音符译码电路模块,数控分频模块。 音乐节拍发生模块的设计:将编辑好的音符填入 MIF 文件中再定制 LPM-ROM块将音符数据加载入 ROM再通过计数器逐步计数 rom块的地 址来提取音符;音符译码电路模块、数控分频模块的设计:都是由 verilog 代码实例化生成 通过输入原理图的方法将各个模块连接起来生成一个 block 块 的.qpf 文件作为最终的顶
3、层文件。 二系统设计部分二系统设计部分 (1) 整个设计的组织结构 (2)各个子单元的设计思路 音乐节拍发生模块的设计: LPM-ROM 块 该模块为音乐曲谱的存放块。其中设置了“梁祝” 乐曲全部音符所对应的分频预置数。 其利用 LPM_ROM 宏模块将共设定 256 个音符, 每个音符宽度为 4 位。 Mif 文件存放乐曲中的音符数据, 它是利用 LPM-ROM 来实现的, 将乐谱中相应的音符放在一个连续的地 址上。它首先是编写音符数据文件, 将乐谱中相应的音符存放在一个 连续的地址上。 因为 1拍的时间定为 1 秒, 提供的是 4Hz 的时钟频率 (即 1/4 拍的整数倍) ,则需将这个音
4、符存储在相应次数的连续几个 地址上。.mif.mif 文件如下: CNT138 块这个计数器的计数频率选为 4Hz, 即每一计数值的停留 时间为 0.25 秒,恰为当全音符设为 1 秒,四四拍的 4 分音符持续时 间。例如,地址发生器在以下的 Verilog 逻辑描述中, “梁祝”乐曲 的第一个音符为“3” ,此音在逻辑中停留了 4 个时钟节拍,即 1秒时 间。 模块程序如下: module cnt138t(clk,cnt); input clk; output 7:0cnt; reg 7:0cnt; always (posedge clk) begin if(cnt=8b10001010)
5、cnt=8b00000000; else cnt=cnt+1; end endmodule 音符译码电路模块的设计: 音符译码电路模块即分频预置数模块是乐曲简谱码对应的分频预置 数查表电路。它提供了每个音符所对应的分频预置数,即给数控分频 模块提供计数初值,这里以“梁祝”乐曲为例,列出了在这个乐曲中 所用到的 13 个音符的分频预置数。在这个模块的 Verilog 逻辑描述 中设置了“梁祝”乐曲中全部音符所对应的分频预置数,共 13 个, 每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的 输入频率决定,在此为 4Hz。这 13 个值的输出由计数模块的 index30确定,而 in
6、dex30的值又由地址发生器模块的输出 q30的输出值和持续时间决定。程序如下: module tonetaba(index,code,high,tone); input 3:0index; output 3:0code; output 10:0tone; output high; reg 3:0code; reg 10:0tone; reg high; always (index) begin case(index) 4b0000: begin tone=11b11111111111; code=4b0000; high=1b0; end 4b0001: begin tone=11b01100000101; code=4b0001; high=1b0; end 4b0010: begin tone=11b01110010000; code=4b0010; high=1b0; end 4b0011: