1、 1 基于 FPGA的数字电子琴设计与实现 草鱼 班 草鱼 草鱼 草鱼 草鱼 级 : pork 草鱼 草鱼 电信 0701 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 姓 草鱼 草鱼 草鱼 草鱼 名 : pork 草鱼 草鱼 林守华 草鱼 草鱼草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 学 草鱼 草鱼 草鱼 草鱼 号 : pork 草鱼 草鱼 200705214137 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草 鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草
2、鱼 草鱼 指导教师 : pork 草鱼 草鱼 王金铭 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 日 草鱼 草鱼 草鱼 草鱼 期 : pork 草鱼 草鱼 2010.05.31 草鱼 摘要 2 草鱼 1. 草鱼 系统设计总述 2 草鱼 1.1 设计要求 2 草鱼 1.2 草鱼 系统组成 2 草鱼 ( 1) 草鱼 音乐 硬件 演奏电路 基本 原理 2 草鱼 ( 2) 草鱼 音符频率的 取得 3 草鱼 ( 3) 草鱼 乐曲节奏的控制 3 草鱼 ( 4) 音乐 硬件 演奏电路 总体设计 流程 3 草鱼 2. 草鱼 总体程序设计 3 草鱼
3、 2.1 草鱼 顶层模块设计流程图 3 草鱼 2.2 草鱼 顶层电路 VHDL程序设计 3 草鱼 3. 草鱼 单元模块程序设计 5 草鱼 3.1 草鱼 音乐节拍和音调发生器电路模块 5 草鱼 音乐节拍和音调发生器模块 5 草鱼 音乐节拍和音调发生器模块 VHDL 程序设计 5 草鱼 3.2 草鱼 音乐谱对应分频预制数查表电路模块 10 草鱼 音乐谱分频预置数模块 10 草鱼 音乐谱对应分频预制数查表电路 VHDL 程序设计 10 草鱼 3.3 音乐符数控 12 分频电路模块 11 草鱼 音乐符数控 12 分频模块 11 草鱼 音乐符数控 12 分频模块电路 VHDL 程序设计 11 草鱼 4.
4、 草鱼 VHDL 音乐硬件演奏电路系统仿真与调试 12 草鱼 4.1 草鱼 Notetabs 音乐节拍和音调发生器模块的仿真 12 草鱼 波形仿真 12 草鱼 4.2 草鱼 Tonetaba 草鱼 分频预置数查表模块的仿真 13 草鱼 波形仿真 13 草鱼 波形仿真 13 草鱼 4.4 草鱼 音乐编码 13 草鱼 2 两只蝴蝶 草鱼 简谱 13 草鱼 草鱼 摘要 草鱼 草鱼 草鱼 草鱼 草鱼 随着电子设计自动化技术和可编程逻辑器件的出现和飞速发展 , 鲤鱼 在设计周期得到大大的缩短的同时系统成本也有了大幅度的降低 , 鲤鱼 显然标准逻辑器件的组装已远不能满足这方面的要求 。 草鱼 而 VHDL
5、 能提供高阶电路描述语言的方式 , 鲤鱼 让复杂的电路可以通过 VHDL 编辑器的电路合成方式 , 鲤鱼 轻易而且快速的达到设计的规格 。 草鱼 由于 VHDL电路描述语言能涵盖的范围相当广 , 鲤鱼 能适用于各种不同阶层的设计工程师的需要 , 鲤鱼所 以 VHDL 电路设计毫无疑问的成为硬件设计工程师的必备工具 。 草鱼 草鱼 根据国家教委与专业教学委员会对教育机构的要求 , 鲤鱼 为培养适应我国 21世纪国民经济发展需要的电子设置人才 ; pork同时基于国家教委面向 21 世纪电工电子课程体系改革和电工电子工科教学基地建设两项教学改革研究成果 。 草鱼 要求高等专科学校学生能够自己动手完
6、成简单数字器件的设计 。 草鱼 这不但反应了我国当前在电子电路的实验教学体系 、 p ork内容和方法上的改革思路和教学水平的提高 , 鲤鱼 更重要的是在加强以传统电子设计方法为基础的工程设计训练的同时 , 鲤鱼 使学生能 够尽快掌握现代电子设计自动化技术的新方法 、 p ork新工具和新手段系统的 、 pork科学的培养了学生的实际动手能力 、 pork理论联系实际的能力 、 p ork工程设计能力 , 鲤鱼 创新能力 , 鲤鱼 提高了学生对基础实验的兴趣 。 草鱼 草鱼 本 次设计 在 QUARTUS 软件 上利用 VHDL 语言设计数控分频器 , 鲤鱼 利用数控分频的原理设计音乐硬件演奏
7、电路 , 鲤鱼 让 “ 两只 蝴蝶 ”乐曲 以 RAM 的形式写入 Notetabs 模块 就达到了以纯硬件的手段来实现乐曲的演奏效果 。 草鱼 草鱼 本设计 使用的是 Altera 公司的 ACEX1k 系列中 的 EP1K30TC144-3和 杭州康芯电子 的实验 箱 。 草鱼草鱼 关键词 : pork 草鱼 FPGA/CPLD, 鲤鱼 音乐硬件演奏电路 , 鲤鱼 VHDL 语言设计 , 鲤鱼 QUARTUS , 鲤鱼 编码 草鱼 草鱼 1. 草鱼 系统设计总述 草鱼 1.1 设计要求 草鱼 能正确演奏乐曲的功能 草鱼 1.2 草鱼系统组成 草鱼 ( 1) 草鱼音乐 硬件 演奏电路 基本
8、原理 草 鱼草鱼 硬件电路的发声原理 , 鲤鱼 声音的频谱范围约在几十到几千赫兹 , 鲤鱼 若能利用程序来控制FPGA 芯片 某个引脚输出一定频率的矩形波 , 鲤鱼 接上扬声器就能发出相应频率的声音 。草鱼 乐曲中的每一音符对应着一个确定的 频率 , 鲤鱼 要想 FPGA 发出不同音符的音调 , 鲤鱼 实际上只要控制它输出相应音符的频率即可 。 草鱼 乐曲都是由一连串的音符组成 , 鲤鱼 因此按照乐曲的乐谱依次输出这些音符所对应的 频率 , 鲤鱼 就可以在扬声器上连续地发出各个音符的音调 。 草鱼 而要准确地演奏出一首乐曲 , 鲤鱼 仅仅让扬声器能够 发声 是不够的 , 鲤鱼 还必须准确地控制
9、乐曲的节奏 , 鲤鱼 即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素 。 草鱼 草鱼 草鱼 3 ( 2) 草鱼音符频率的 取得 草鱼 多个不同频率的信号可通过对某个基准频率进行分频器获得 。 草鱼 在 小的 误差前提下 , 鲤鱼选取合适的基准频率 。 草鱼 本 设计 中选取 1MHz 的基准频率 。 草鱼 本例采用的 时钟信号频率为12MHz。 草鱼 下 表中各音符的分频系数就是从 1MHz 频率基础上 , 鲤鱼 分频器采用 11 位二进制计数器计算得到的 。 草鱼 草鱼 草鱼 ( 3) 草鱼乐曲节奏的控制 草 鱼草鱼 本 设计 中的 两只蝴蝶 乐曲 , 鲤鱼 由 8H
10、Z 的时钟信号输入 , 鲤鱼 经分频后输入至 TONEINDEX改变分频系数控制乐曲的演奏速度 。 草鱼 计数器 时钟信号作为输出音符快慢的控制信号 , 鲤鱼 时钟快时输出节拍速度就快 , 鲤鱼 演奏的速度也就快 , 鲤鱼 时钟慢时输出节拍的速度就慢 , 鲤鱼 演奏的速度自然 就 降低 了 。 草鱼草鱼 草鱼 ( 4) 音乐 硬件 演奏电路 总体设计 流程 草鱼 当一个 8Hz 的时钟脉冲来到时 , 鲤鱼 乐谱发生器模块输出一个音符数据给分频系数模块 , 鲤鱼 分频系数模块输出此音符相应的分频系数 , 鲤鱼 将分频系数送给数控分频器模块 , 鲤鱼当 12MHz 的时钟脉冲来到时 , 鲤鱼 数控
11、分频器就根据分频系数输出相应的频率 (即此音符所对应的发生频率 )给扬声器 , 鲤鱼 扬声器就可发出对应音符的声音来 .连续的 8Hz 的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块 , 鲤鱼 再经过数控分频模块 ,最后扬声器一个接一个的发出音符数据所对应的声音 。 草鱼 乐曲也就连贯了 。 草鱼 草鱼 2. 草鱼 总体 程序设计 草鱼 草鱼 草鱼 草鱼 草鱼 2.1 草鱼顶层模块设计流程图 草 鱼草鱼 草鱼 2.2 草鱼顶层电路 VHDL程序设计 草鱼 音符名 计数初值 中 音 1 773 中 音 2 912 中 音 3 1036 中 音 4 1116 中 音 5
12、1197 中 音 6 1290 中 音 7 1372 高 音 1 1410 4 library 草鱼 ieee;pork草鱼 use 草鱼 ieee.std_logic_1164.all;pork草鱼 entity 草鱼 top 草鱼 is 草鱼 port(clk12mhz:in 草鱼 std_logic;pork草鱼 - index1:in 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);pork草鱼 code1: 草鱼 out 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 15;pork草鱼 high1,spkout:out 草鱼 std_
13、logic;pork草鱼 clk8hz 草鱼 :in 草鱼 std_logic);pork草鱼 end;p ork草鱼 architecture 草鱼 one 草鱼 of 草鱼 top 草鱼 is草鱼 草鱼 component 草鱼 tone 草鱼草鱼 port(index:in 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);pork草鱼 high:out 草鱼 std_logic;pork草鱼 code:out 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 15;pork草鱼 tone:out 草鱼 integer 草鱼 range 草鱼
14、0 草鱼 to 草鱼 16#7ff#草鱼 );p ork草鱼 end 草鱼 component;pork草鱼 草鱼 component 草鱼 speaker 草鱼 port(tone1:in 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 16#7ff#;pork草鱼 clk1:in 草鱼 std_logic;pork草鱼 spks:out 草鱼 std_logic 草鱼 );p ork草鱼 end 草鱼 component;pork草鱼 草鱼 component 草鱼 notetabs 草鱼 PORT 草鱼 ( 草鱼 clk 草鱼 草鱼 草鱼 草鱼 : 草鱼 IN 草鱼
15、STD_LOGIC;pork 草鱼草鱼 ToneIndex 草鱼 : 草鱼 OUT 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0)草鱼 );p ork草鱼 end 草鱼 component;pork草鱼 草鱼 signal 草鱼 tone2:integer 草鱼 range 草鱼 0 草鱼 to 草鱼 16#7ff#;pork草鱼 signal 草鱼 tmpindex:std_logic_vector(7 草鱼 downto 草鱼 0);pork草鱼 草鱼 begin 草鱼 u1:tone 草鱼 port 草鱼 map( index=tmpindex,草鱼 tone
16、=tone2,草鱼 code=code1,high=high1 草鱼 );p ork草鱼 u2:speaker 草鱼 port 草鱼 map( clk1=clk12mhz,草鱼 tone1=tone2,草鱼 5 spks=spkout 草鱼 );p ork草鱼 u3:notetabs 草鱼 port 草鱼 map( ToneIndex=tmpindex,草鱼 clk=clk8hz 草鱼 );p ork草鱼 end;p ork草鱼 3. 草鱼 单元模块程序设计 草鱼草鱼 根据顶层原理图 , 鲤鱼 共分为 3 个模块 : pork音乐节拍和音调发生器模块 , 鲤鱼 分频预置数模块 、p ork数控
17、分频模块 草鱼 3.1 草鱼音乐节拍和音调发生器 电路 模块 草鱼 音乐节拍和音调 发生器模块 草鱼 草鱼 草鱼 草鱼 草鱼音乐节拍和音调发生器模块 VHDL 程序设计 草鱼 草鱼 LIBRARY 草鱼 IEEE;pork草鱼 use 草鱼 IEEE.STD_LOGIC_1164.ALL;pork草鱼 use 草鱼 IEEE.STD_LOGIC_ARITH.ALL;pork草鱼 use 草鱼 IEEE.STD_LOGIC_UNSIGNED.ALL;pork草鱼 ENTITY 草鱼 notetabs 草鱼 IS草鱼 草鱼 草鱼 草鱼 草鱼 PORT 草鱼 ( 草鱼 clk 草鱼 草鱼 草鱼 草鱼
18、 : 草鱼 IN 草鱼 STD_LOGIC;pork 草鱼草鱼 ToneIndex 草鱼 : 草鱼 OUT 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0)草鱼 );p ork草鱼 END;p ork草鱼 ARCHITECTURE 草鱼 one 草鱼 OF 草鱼 NoteTabs 草鱼 IS 草鱼 草鱼 SIGNAL 草鱼 Counter 草鱼 : 草鱼 INTEGER 草鱼 RANGE 草鱼 0 草鱼 TO 草鱼 693;pork 草鱼 草鱼 草鱼草鱼 草鱼 草鱼 SIGNAL 草鱼 clk3:std_logic;pork草鱼 BEGIN 草鱼 草鱼 dividec
19、lk:process 草鱼 (clk)草鱼 variable 草鱼 count:integer 草鱼 range 草鱼 0 草鱼 to 草鱼 7;pork草鱼 begin 草鱼 clk32 草鱼 then 草鱼 clk3 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex
20、草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIn
21、dex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 To
22、neIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草
23、鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex
24、草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 ToneIndex 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼
25、 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草
26、鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneInd
27、ex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 草鱼 ToneIndex 草鱼 = 草鱼 “00000001“;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼
28、草鱼 草鱼 草鱼 END 草鱼 CASE;pork草鱼 草鱼 草鱼 草鱼 草鱼 END 草鱼 PROCESS;pork草鱼 END 草鱼 one;pork 草鱼草鱼 3.2 草鱼音乐谱对应分频预制数查表电路模块 草鱼 音乐谱分频预置数模块 草鱼 草鱼 草鱼 音乐谱对应分频预制数查表电路 VHDL 程序设计 草鱼 分频预置数模块的 VHDL 设计程序如下 : p ork草鱼 library 草鱼 ieee;pork草鱼 use 草鱼 ieee.std_logic_1164.all;pork草鱼 entity 草鱼 tone 草鱼 is草鱼 port(index:in 草鱼 std_logic_vector(7 草鱼 downto 草鱼 0);pork草鱼 high:out 草鱼 std_logic;pork草鱼 code:out 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 15;pork草鱼 tone:out 草鱼 integer 草鱼 range 草鱼 0 草鱼 to 草鱼 16#7ff#草鱼 );p ork草鱼 end;p ork草鱼 architecture 草鱼 one 草鱼 of 草鱼 tone 草鱼 is 草鱼 begin 草鱼