1、基于 FPGA 音乐硬件演奏电路设计 目 草鱼 草鱼 草鱼 录 草鱼 摘 草鱼 要 I 草鱼 1 草鱼 系统设计总述 1 草鱼 1.1 草鱼 设计要求 1 草鱼 1.2 草鱼 系统组成 1 草鱼 2 草鱼 总体程序设计 5 草鱼 2.1 草鱼 顶层模块设计流程图 5 草鱼 2.2 草鱼 顶层电路 VHDL 程序设计 5 草鱼 3 草鱼 单元模块程序设计 7 草鱼 3.1 草鱼 音乐节拍和音调发生器模块 7 草鱼 3.2 草鱼 音乐谱对应分频预置数查表电路模块 8 草鱼 3.3 草鱼 音乐谱对应分频预置数查表电路模块 10 草鱼 3.4 草鱼 乐曲演奏音符数据文件( 妈妈的吻 ) 12 草鱼 3
2、.5 草鱼 定制音符数据的 ROM 文件 13 草鱼 4 草鱼 VHDL 音乐硬件演奏电路系统仿真与调试 15 草鱼 4.1 草鱼 NoteTabs 音乐节拍和音调发 生器模块的仿真 15 草鱼 4.2 草鱼 ToneTaba 分频预置数查表模块的仿真 15 草鱼 4.3 草鱼 Speakera 音乐符数控分频模块的仿真 16 草鱼 4.4 草鱼 扩大此音乐硬件演奏电路的通用性 17 草鱼 5 草鱼 心得体会 20 草鱼 参考文献 21 草鱼 基于 FPGA 音乐硬件演奏电路设计 I 摘 草鱼要 草鱼 根据国家教委与专业教学委员会对教育机构的要求 , 鲤鱼 为培养适应我国 21 世纪国民经济发
3、展需要的电子设置人才 ; pork同时基于国家教委面向 21 世纪电工电子课程体系改革和电工电子工科教学基地建设两项教学改革研究成果 。 草鱼 要求高等专科学校学生能够自己动手完成简单数字器件的设计 。 草鱼 这不但反应了我国当前在电子电路的实验教学体系 、 pork内容和方法上的改革思路和教学水平的提高 , 鲤鱼 更重要的是在加强以传统电子设计方法为基础的工程设计训练的同时 , 鲤鱼 使学生能够尽快掌握现代电子设计自动化技术的新方法 、 pork新工具和新手段系统的 、 pork科学的培养了学生的实际动手能力 、 pork理论联系实际的能力 、 pork工程设计能力 , 鲤鱼 创新能力 ,鲤
4、鱼 提高了学生对基础实验的兴趣 。 草鱼 草鱼 本 次设计 在 EDA 开发平台 QUARTUS 草鱼 II 草鱼 6.0 上利用 VHDL 语言设计数控分频器电路 , 鲤鱼利用数控分频的原理设计音乐硬件演奏电路 , 鲤鱼 并定制 LPM-ROM 存储音乐数据 , 鲤鱼 以 “梁祝 ”和 “月亮代表我的心 ”两首 乐曲为例 , 鲤鱼 将音乐数据存储到 LPM-ROM, 鲤鱼 就达到了以纯硬件的手段来实现乐曲的演奏效果 。 草鱼 只要修改 LPM-ROM 所存储的音乐数据 , 鲤鱼 将其换成其他乐曲的音乐数据 , 鲤鱼 再重新定制 LPM-ROM, 鲤鱼 连接到程序中就可以实现其它乐曲的演奏 。
5、 草鱼 草鱼 本设计采用的是 武汉理工大学 的 开放设计 实验 箱 , 鲤鱼 FPGA 目标芯片型号为 Altera 公司的Cyclone 系列中 的 EP1C3T144C8N。 草鱼 芯片配置成功后即可进行硬件测试 : pork选择实验电路结构图 , 鲤鱼 发音输出接 SPEAKER, 鲤鱼 当乐曲一遍演奏完成后 , 鲤鱼 乐曲发生器能自动从头开始循环演奏 。 草鱼草鱼 关键词 : pork 草鱼 FPGA/CPLD, 鲤鱼 音乐硬件演奏电路 , 鲤鱼 VHDL 语言设计 , 鲤鱼 QUARTUS 草鱼 II 草鱼 6.0 草鱼 基于 FPGA 音乐硬件演奏电路设计 1 1 草鱼 系统 设计
6、总述 草鱼 1.1 草鱼 设计要求 草鱼 这是一种运用纯硬件实现乐曲播放的电路 , 鲤鱼 比运用微处理器实现乐曲播放 更加复杂 。 草鱼 它运用 了 强大功能的 EDA 工具 开放设计试验箱和硬件描述语言 VHDL。 草鱼 本课题以歌曲妈妈的吻来实现乐曲播放电路的功能 。 草鱼草鱼 ( 1)顺序播放乐曲 功能 : p ork当电路开始工作时 , 鲤鱼 如果 存储器中有多首乐曲 , 鲤鱼 那么 演奏电路将从头到尾顺序播放这些乐曲 。 草鱼草鱼 ( 2) 循环播放乐曲功能 : p ork当演奏完后一首乐曲时 , 鲤鱼 将自动返回到第一首歌曲开始播放 , 鲤鱼反复不止 , 鲤鱼 直到关闭电源电路 停
7、止工作为止 。 草鱼草鱼 ( 3) 乐曲简谱显示功能 : p ork当演奏电路播放乐曲时 , 鲤鱼 能够将当前播放的音符 通过一列发光二极管 以 二进制的形式予以显示 。 草鱼草鱼 ( 4) 乐曲高音显示功能 : p ork如果电路正在播放 高音音符 , 鲤鱼 那么将有一个发光二极管点亮来显示 。 草鱼草鱼 ( 5) 音量大小可调功能 : pork运 用 EDA 实验箱上的数字功率放大器 LM386N, 鲤鱼 对 数控分频器输出的 音频 信号予以处理 , 鲤鱼 输出大小连续可调的 音频信号到扬声器 。 草鱼 草鱼 1.2 草鱼 系统组成 草鱼 ( 1) 音乐 硬件 演奏电路 基本 原理 草鱼草
8、鱼 硬件电路的发声 原理 , 鲤鱼 声音的频谱范围约在几十到几千赫兹 , 鲤鱼 若能利用程序来控制 FPGA芯片 某个引脚输出一定频率的矩形波 , 鲤鱼 接上扬声器就能发出相应频率的声音 。 草鱼 乐曲中的每一音符对应着一个确定的频率 , 鲤鱼 要想 FPGA 发出不同音符的音调 , 鲤鱼 实际上只要控制它输出相应音符的频率即可 。 草鱼 乐曲都是由一连串的音符组成 , 鲤鱼 因此按照乐曲的乐谱依次输出这些音符所对应的频 , 鲤鱼 就可以在扬声器上连续地发出各个音符的音调 。 草鱼 而要准确地演奏出一首乐曲 , 鲤鱼 仅仅让扬声器能够发生是不够的 , 鲤鱼 还必须准确地控制乐曲的节奏 , 鲤鱼
9、 即乐曲中每个音符 的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素 。 草鱼 草鱼 ( 2) 音符频率的获得 草鱼 多个不同频率的信号可通过对某个基准频率进行分频器获得 。 草鱼 由于各个音符的频率多为非整数 , 鲤鱼 而分频系数又不能为小数 , 鲤鱼 故必须将计算机得到的分频系数四舍五入取整 。 草鱼 若基准频率过低 , 鲤鱼 则分频系数过小 , 鲤鱼 四舍五入取整后的误差较大 。 草鱼 若基准频率过高 , 鲤鱼 虽然可以减少频率的相对误差 , 鲤鱼 但分频结构将变大 。 草鱼 实际上应该综合考虑这两个方面的因素 , 鲤鱼 在尽量基于 FPGA 音乐硬件演奏电路设计 2 减少误差的前
10、提下 , 鲤鱼 选取合适的基准频率 。 草鱼 本 设计 中选取 750KHz 的基准频率 。 草鱼 由于现有的高频时钟脉冲信号的频率为 12MHz, 鲤鱼 故需先对其进行 16 分频 , 鲤鱼 才能获得 750KHz 的基准频率 。 草鱼 对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比 =1/分频系数) 。 草鱼 为提高输出信号的驱动能力 , 鲤鱼 以使扬声器有足够的功率发音 , 鲤鱼 需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比 =1/2) , 鲤鱼 但这时的频率将是原来的1/2。 草鱼 下 表中各音符的分频系数就是从 750KHz 的基准频率二分频得到的
11、 375KHz 频率基础上计算得到的 。 草鱼 由于最大分频系数 是 1274, 鲤鱼 故分频器采用 11 位二进制计数器能满足要求 ,鲤鱼 乐曲中的休止符 , 鲤鱼 只要将分频系数设为 0, 鲤鱼 即初始值 =211-1=2047, 鲤鱼 此时扬声器不会发声 。 草鱼 草鱼 基于 FPGA 音乐硬件演奏电路设计 3 表 1 草鱼 各个音符的频率及其对应的分频系数(基准频率 375KHz) 音符名 频 草鱼 率 (Hz) 分频系数 计数初值 音符名 频率 (Hz) 分频系数 计数初值 休止符 375000 0 2047 中音 4 796.178 468 1579 低音 1 294.349 12
12、74 773 中音 5 882.353 425 1622 低音 2 330.396 1135 912 中音 6 989.446 379 1668 低音 3 370.92 1011 1036 中音 7 1136.363 330 1717 低音 4 386.598 970 1077 高音 1 1175.549 319 1728 低音 5 394.737 950 1197 高音 2 1353.790 277 1770 低音 6 495.376 757 1290 高音 3 1512.097 248 1799 低音 7 555.56 675 1372 高音 4 1609.442 233 1814 中音
13、1 588.697 637 1410 高音 5 1802.884 208 1839 中音 2 638.84 587 1480 高音 6 2027.027 185 1862 中音 3 742.574 505 1542 高音 7 2272.727 165 1882 草鱼 ( 3) 乐曲节奏的控制 草鱼草鱼 本 设计 中的梁祝 和月亮代表我的心的 乐曲 , 鲤鱼 最小的节拍为 1/4 拍 , 鲤鱼 若将 1 拍的时间定为 1秒 , 鲤鱼 则只需要提供一个 4Hz 的时钟频率即可产生 1/4 拍的时长( 0.25 秒) , 鲤鱼 对于其它占用时间较长的节拍(必为 1/4 拍 的整数倍)则只需要将该音符
14、连续输出相应的次数即可 。 草鱼 草鱼 计数时钟信号作为输出音符快慢的控制信号 , 鲤鱼 时钟快时输出节拍速度就快 , 鲤鱼 演奏的速度也就快 , 鲤鱼 时钟慢时输出节拍的速度就慢 , 鲤鱼 演奏的速度自然降低 。 草鱼 草鱼 ( 4) 乐谱发生器 草鱼 本文将乐谱中的音符数据存储在 LPM-ROM 中 , 鲤鱼 如 “梁祝 ”乐曲中的第一个音符为 “3”, 鲤鱼 此音在逻辑中停留了 4 个时钟节拍 , 鲤鱼 即 1 秒的时间 , 鲤鱼 相应地 , 鲤鱼 音符 “3”就要在 LPM-ROM 中连续的四个地址上都存储 。 草鱼 当一个 4Hz 的时钟来时 , 鲤鱼 相应地就从 LPM-ROM 中
15、 输出一个音符数据 。 草鱼 草鱼 ( 5) 音乐 硬件 演奏电路 总体设计流程 草鱼 当一个 4Hz 的时钟脉冲来到时 , 鲤鱼 乐谱发生器模块输出一个音符数据给分频系数模块 , 鲤鱼 分频系数模块输出此音符相应的分频系数 , 鲤鱼 将分频系数送给数控分频器模块 , 鲤鱼 当 12MHz 的时钟脉冲来到时 , 鲤鱼 数控分频器就根据分频系数输出相应的频率 (即此音符所对应的发生频率 )给扬声器 , 鲤鱼 扬声器就可发出对应音符的声音来 .连续的 4Hz 的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块 , 鲤鱼 再经过数控分频模块 ,最后扬声器一个接一个的发出音 符数
16、据所对应的声音来 。 草鱼 曲子也就流畅的播放出来了 , 鲤鱼 当乐曲一遍演奏完成后 , 鲤鱼 乐曲发生器能自动从头开始循环演奏 , 鲤鱼 按下 SEL 键时播放第二首歌 , 鲤鱼 按下 RST 键时从头开始播放歌曲 。 草鱼 草鱼 音乐硬件演奏电路主要是用 VHDL 语言来设计 , 鲤鱼 并利用 Quartus6.0 软件工具来编译 、 pork测试和仿真 , 鲤鱼 音乐 硬件 演奏电路 设计总体设计方框图如下图所示 。 草鱼 草鱼 草鱼 基于 FPGA 音乐硬件演奏电路设计 4 R S TSELcl kT o n e I n d e x 3 . . 0 I n d e x 3 . . 0
17、H I G HC O D E 3 . . 0 T o n e 1 0 . . 0 cl kT o n e 1 0 . . 0 S p k SC O D E1 3 . . 0 SPK O U TC L K1 2 M H ZSELR STN o t e T a b s : u 1C L K8 H ZT o n e T a b a : u 2 Sp e a ke ra : u 3H I G H 1草鱼 图 1.1 草鱼 音乐 硬件 演奏电路 设计总体设计方框图 草鱼 草鱼 草鱼 草鱼 基于 FPGA 音乐硬件演奏电路设计 5 2 草鱼总体程序设计 草鱼 2.1 草鱼 顶层模块设计流程图 草鱼 R S
18、 TSELcl kT o n e I n d e x 3 . . 0 I n d e x 3 . . 0 H I G HC O D E 3 . . 0 T o n e 1 0 . . 0 cl kT o n e 1 0 . . 0 S p k SC O D E1 3 . . 0 SPK O U TC L K1 2 M H ZSELR STN o t e T a b s : u 1C L K8 H ZT o n e T a b a : u 2 Sp e a ke ra : u 3H I G H 1草鱼 图 2.1 草鱼 顶层模块设计流程图 草鱼 2.2 草鱼 顶层电路 VHDL 程序设计 草鱼
19、LIBRARY 草鱼 IEEE;por k 草鱼 - 草鱼 硬件演奏电路顶层设计 草鱼 USE 草鱼 IEEE.STD_LOGIC_1164.ALL;por k草鱼 ENTITY 草鱼 Songer 草鱼 IS 草鱼 PORT 草鱼 ( 草鱼 CLK12MHZ 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;por k 草鱼 -音调频率信号 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 CLK8HZ 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;por k 草鱼 -节拍频率 用于控制音长(节拍)的时钟频率 ; pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼
20、草鱼 草鱼 草鱼 草鱼 SEL 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;pork-音乐选择键 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 RST 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;pork-复位键 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 CODE1 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (3 草鱼 DOWNTO 草鱼 0);pork- 草鱼 简谱码输出显示 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 HIGH1 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC;po
21、r k 草鱼 -高 8 度指示 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 SPKOUT 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC 草鱼 );pork-声音输出 草鱼 END;por k草鱼 ARCHITECTURE 草鱼 one 草鱼 OF 草鱼 Songer 草鱼 IS 草鱼 COMPONENT 草鱼 NoteTabs-元件 U1 例换化 草鱼 草鱼 草鱼 草鱼 PORT 草鱼 ( 草鱼 草鱼 clk 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;por k草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 SEL 草鱼 : 草鱼 IN 草鱼 STD
22、_LOGIC;por k草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 RST 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;pork 草鱼 草鱼 草鱼 草鱼草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 ToneIndex 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (3 草鱼 DOWNTO 草鱼 0) 草鱼 );pork草鱼 END 草鱼 COMPONENT;pork草鱼 COMPONENT 草鱼 ToneTaba-元件 U2 例换化 草鱼 草鱼 草鱼 PORT 草鱼 ( 草鱼 Index 草鱼 : 草鱼 IN 草鱼 STD_LOGIC_VECTOR
23、 草鱼 (3 草鱼 DOWNTO 草鱼 0) 草鱼 ;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 CODE 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (3 草鱼 DOWNTO 草鱼 0) 草鱼 ;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 HIGH 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC;por k草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 Tone 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (10 草鱼 DOWNTO 草鱼 0) 草鱼 );pork草鱼 END 草鱼 COMPONE
24、NT;pork草鱼 COMPONENT 草鱼 Speakera-元件 U3 例换化 草鱼 草鱼 草鱼 PORT 草鱼 ( 草鱼 clk 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;por k草鱼 草鱼 草鱼 草 鱼 草鱼 草鱼 草鱼 Tone 草鱼 : 草鱼 IN 草鱼 STD_LOGIC_VECTOR 草鱼 (10 草鱼 DOWNTO 草鱼 0);pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 SpkS 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC 草鱼 );pork草鱼 基于 FPGA 音乐硬件演奏电路设计 6 END 草鱼 COMPONENT;pork草鱼 SIGNAL 草鱼
25、Tone 草鱼 : 草鱼 STD_LOGIC_VECTOR 草鱼 (10 草鱼 DOWNTO 草鱼 0);pork草鱼 SIGNAL 草鱼 ToneIndex 草鱼 : 草鱼 STD_LOGIC_VECTOR 草 鱼 (3 草鱼 DOWNTO 草鱼 0);pork草鱼 BEGIN 草鱼 u1 草鱼 : 草鱼 NoteTabs 草鱼 PORT 草鱼 MAP 草鱼 (clk=CLK8HZ,RST=RST,SEL=SEL, 草鱼ToneIndex=ToneIndex);por k-参数传递映射语句 草鱼 u2 草鱼 : 草鱼 ToneTaba 草鱼 PORT 草鱼MAP(Index=ToneInde
26、x,Tone=Tone,CODE=CODE1,HIGH=HIGH1);por k草鱼 u3 草鱼 : 草鱼 Speakera 草鱼 PORT 草 鱼MAP(clk=CLK12MHZ,Tone=Tone, 草鱼 SpkS=SPKOUT);pork草鱼 END;por k草鱼 基于 FPGA 音乐硬件演奏电路设计 7 3 草鱼单元模块程序设计 草鱼 根据顶层原理图 , 鲤鱼 共分为 music 模块 、 por k地址发生器模块 、 pork分频预置数模块 、 pork十六进制模块 、pork数控分频模块这五个模块 。 草鱼 music 模块存放乐曲中的音符数据 , 鲤鱼 地址发生器模块作为 mu
27、sic模块中所定制的音符数据 ROM 的地址发生器 , 鲤鱼 分频预置数模块提供分频预置数即给数控分频模块提供计数初值 , 鲤鱼 十六进制模块对 12MHz 的 时钟脉冲进行 16 分频 , 鲤鱼 得到 750KHz的频率 , 鲤鱼 给数控分频模块提供时钟脉冲 。 草鱼 数控分频模块根据分频预置数输出各个音符所对应的频率 。 草鱼 草鱼 3.1 草鱼 音乐节拍和音调发生器模块 草鱼 N ot eT absins tc lkSELR STT oneI ndex 3. . 0草鱼 图 3.1 草鱼 音乐节拍和音调发生器模块 草鱼 (1) 草鱼 音乐节拍和音调发生器模块 RTL 电路图 草鱼 cl
28、o cka d d r e ss 7 . . 0 q 3 . . 0 A 7 . . 0 B 7 . . 0 O U T 7 . . 0 A D D E RD QP R EE N AC L RSELD A T A AD A T A BO U T 0M U X 2 1SELD A T A AD A T A BO U T 0M U X 2 1m u s i c: u 1A d d 08 h 0 1 - -cl kSELR S TT o n e I n d e x 3 . . 0 co m b 7 . . 0 co m b 1 5 . . 8 C o u n t e r 7 . . 0 草鱼 图 3
29、.2 草鱼 音乐节拍和音调发生器模块 RTL 电路图 草鱼 草鱼 (2) 草鱼 音乐节拍和音调发生器模块 VHDL 程序设计 草鱼 LIBRARY 草鱼 IEEE;por k-音乐节拍和音调发生器模块 草鱼 USE 草鱼 IEEE.STD_LOGIC_1164.ALL;por k草鱼 USE 草鱼 IEEE.STD_LOGIC_UNSIGNED.ALL;por k草鱼 ENTITY 草鱼 NoteTabs 草鱼 IS 草鱼 PORT 草鱼 ( 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 clk 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;por k-音乐节拍时钟 4HZ 草鱼 草
30、鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 SEL 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;pork-音乐选择键 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 RST 草鱼 : 草鱼 IN 草鱼 STD_LOGIC;pork-复位键 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 ToneIndex 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (3 草鱼 DOWNTO 草鱼 0) 草鱼 );pork草鱼 END;por
31、k草鱼 ARCHITECTURE 草鱼 one 草鱼 OF 草鱼 NoteTabs 草鱼 IS 草鱼 COMPONENT 草鱼 music 草鱼 草鱼 草鱼 -音符数据 ROM1 草鱼 PORT( 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 address 草鱼 : 草鱼 IN 草鱼 STD_LOGIC_VECTOR 草鱼 (7 草鱼 DOWNTO 草鱼 0);pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 clock 草鱼 : 草鱼 IN 草鱼 STD_LOGIC 草鱼 ;pork草鱼 基于 FPGA 音乐硬件演奏电路设计 8 草鱼
32、 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草 鱼 草鱼 草鱼 q 草鱼 : 草鱼 OUT 草鱼 STD_LOGIC_VECTOR 草鱼 (3 草鱼 DOWNTO 草鱼 0);pork草鱼 END 草鱼 COMPONENT;pork草鱼 SIGNAL 草鱼 Counter 草鱼 : 草鱼 STD_LOGIC_VECTOR 草鱼 (7 草鱼 DOWNTO 草鱼 0);pork-8 位二进制计数器 草鱼 BEGIN 草鱼 CNT8 草鱼 : 草鱼 PROCESS(clk, 草鱼 Counter,sel,rst)草鱼 BEGIN 草鱼 IF 草鱼 (c
33、lkEVENT 草鱼 AND 草鱼 clk 草鱼 = 草鱼 1) 草鱼 and 草鱼 (Counter=256 草鱼 or 草鱼 rst=0) 草鱼 then 草鱼 草鱼 Counter 草鱼 Counter 草鱼 , 草鱼 q=ToneIndex,clock=clk);por k草鱼 END;por k草鱼 (2) 草鱼 地址发生器模块 草鱼 地址发生器模块设置了一个 8 位二进制计数器 (计数最大值为 256), 鲤鱼 作为音符数据 ROM 的地址发生器 。 草鱼 每来一个时钟脉冲信号 (Clk), 鲤鱼 8 位二进制计数器就计数一次 , 鲤鱼 ROM 文件中 的地址也就随着递增 , 鲤鱼
34、 音符数据 ROM 中的音符也就一个接一个连续的取出来了 。 草鱼 草鱼 在地址发生器的 VHDL 设计中 , 鲤鱼 这个计数器的计数频率选为 4Hz, 鲤鱼 即每一计数值的停留时间为 0.25 秒 , 鲤鱼 恰为当全音符设为 1 秒 , 鲤鱼 四四拍的 4 分音符持续时间 。 草鱼 例如 , 鲤鱼 地址发生器在以下的 VHDL 逻辑描述中 , 鲤鱼 “梁祝 ”乐曲的第一个音符为 “3”, 鲤鱼 此音在逻辑中停留了 4 个时钟节拍 , 鲤鱼 即 1 秒时间 。 草鱼 那么相应随着程序 4中的计数器按 4Hz 的时钟频率作加法计数时 ,鲤鱼 即随地址递增时 , 鲤鱼 将从音符数据 ROM 中将连
35、续取出 4 个音符 “3”通过 toneindex3.0端口输向分频预置数模块 。 草鱼 这样梁祝乐曲中的音符就一个接一个的通过 toneindex3.0端口输向分频预置数模块 。 草鱼 草鱼 3.2 草鱼 音乐谱对应分频预置数查表电路模块 草鱼 (1) 草鱼 音乐谱分频预置数模块 草鱼 T on eT ab ain s tInd ex 3. .0 C O D E 3. .0H IG HT on e 10 .0草鱼 图 3.3 草鱼 音乐谱分频预置数模块 草鱼 草鱼 (2) 草鱼 音乐谱对应分频预制数查表电路 VHDL 程序设计 草鱼 音乐谱分频预置数模块是乐曲简谱码对应的分频预置数查表电路 。 草鱼 它提供了每个音符所对应的分频预置数 , 鲤鱼 即给数控分频模块提供计数初值 , 鲤鱼 这里以 “梁祝 ”乐曲为例 , 鲤鱼 列出了在这个乐曲中所用到的 13 个音符的分频预置数 。 草鱼草鱼 在这个模块的 VHDL 逻辑描述中设置了四四拍乐曲中全部音符所对应的分频预置数 , 鲤鱼 共