基于FPGA音乐硬件演奏电路设计_第1页
基于FPGA音乐硬件演奏电路设计_第2页
基于FPGA音乐硬件演奏电路设计_第3页
基于FPGA音乐硬件演奏电路设计_第4页
基于FPGA音乐硬件演奏电路设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA 技术实用教程课程设计题目:基于 FPGA 音乐硬件演奏电路设计摘 要根据国家教委与专业教学委员会对教育机构的要求,为培养适应我国 21 世纪国民经济发展需要的电子设置人才;同时基于国家教委面向 21 世纪电工电子课程体系改革和电工电子工科教学基地建设两项教学改革研究成果。要求高等专科学校学生能够自己动手完成简单数字器件的设计。这不但反应了我国当前在电子电路的实验教学体系、内容和方法上的改革思路和教学水平的提高,更重要的是在加强以传统电子设计方法为基础的工程设计训练的同时,使学生能够尽快掌握现代电子设计自动化技术的新方法、新工具和新手段系统的、科学的培养了学生的实际动手能力、理论联系实际的能力、工程设计能力,创新能力,提高了学生对基础实验的兴趣。本次设计在 EDA 开发平台 QUARTUS|6.0 上利用 VHDL 语言设计数控分频器电路,利用数控分频的原理设计音乐硬件演奏电路,并定制 LPM-ROM 存储音乐数据,以“梁祝”和“月亮代表我的心”两首乐曲为例,将音乐数据存储到 LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改 LPM-ROM 所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制 LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。本设计采用的是杭州康芯电子有限公司生产的 GW48-CK 实验系统,FPGA 目标芯片型号为 Altera 公司的 Cyclone 系列中的 EPFl0K10LC84。芯片配置成功后即可进行硬件测试:选择实验电路结构图 NO1,使 CLK 6MH2 与 C10ck9 相接(接受 6MHz 时钟频率), CLK 4Hz 与 CLOCK2 相接(接受 4Hz 时钟频率),发音输出接 SPEAK,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏,按下SEL 键时播放第二首歌,按下 RST 键时从头开始播放歌曲。关键词: FPGA/CPLD,音乐硬件演奏电路,VHDL 语言设计,QUARTUS|6.0目 录摘要 -11. 系统设计总述1.1 设计要求-21.2 系统组成 -32. 总体程序设计 2.1 顶层模块设计流程图 - 42.2 顶层电路 VHDL 程序设计-53. 单元模块程序设计 3.1 音乐节拍和音调发生器模块 -63.2 音乐谱对应分频预制数查表-83.3 音乐符数控 11 分频电路模块 -103.4 乐曲演奏音符数据文件-123.5 定制音符数据的 ROM 文件-144. VHDL 音乐硬件演奏电路系统仿真与调试4.1 NoteTabs 音乐节拍和音调发生器模块的仿 -16 4.2 ToneTaba 分频预置数查表模块的仿真 -164.3 Speakera 音乐符数控分频模块的仿真 -174.1 扩大此音乐硬件演奏电路的通用性 -19 5. 心得体会 -216. 参考文献 -211. 系统设计总述1.1 设计要求(1)顺序播放乐曲功能(2)具有通过按键任意切换乐曲功能1.2 系统组成(1) 音乐硬件演奏电路基本原理 硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA 芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想 FPGA 发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。(2) 音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取 750KHz 的基准频率。由于现有的高频时钟脉冲信号的频率为 12MHz,故需先对其进行 16 分频,才能获得 750KHz 的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的 1/2。下表中各音符的分频系数就是从 750KHz 的基准频率二分频得到的 375KHz 频率基础上计算得到的。由于最大分频系数是 1274,故分频器采用 11 位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为 0,即初始值=211-1=2047,此时扬声器不会发声。音符名 频 率(Hz) 分频系数 计数初值 音符名 频 率(Hz) 分频系数 计数初值休止符 375000 0 2047 中音 4 796.178 468 1579低音 1 294.349 1274 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 1799RSTSELclkToneIndex3.0 Index3.0HIGHCODE3.0Tone10.0clkTone10.0 SpkSCODE13.0SPKOUTCLK12MHZSELRSTNoteTabs:u1CLK8HZToneTaba:u2 Speakera:u3HIGH1各个音符的频率及其对应的分频系数(基准频率 375KHz)(3) 乐曲节奏的控制 本设计中的梁祝和月亮代表我的心的乐曲,最小的节拍为 1/4 拍,若将 1 拍的时间定为 1 秒,则只需要提供一个 4Hz 的时钟频率即可产生 1/4 拍的时长(0.25秒),对于其它占用时间较长的节拍(必为 1/4 拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。(4) 乐谱发生器本文将乐谱中的音符数据存储在 LPM-ROM 中,如“梁祝”乐曲中的第一个音符为“3”,此音在逻辑中停留了 4 个时钟节拍,即 1 秒的时间,相应地,音符“3”就要在 LPM-ROM 中连续的四个地址上都存储。当一个 4Hz 的时钟来时,相应地就从LPM-ROM 中输出一个音符数据。(5)音乐硬件演奏电路总体设计流程当一个 4Hz 的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当 12MHz 的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的 4Hz 的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏,按下 SEL 键时播放第二首歌,按下 RST 键时从头开始播放歌曲。音乐硬件演奏电路主要是用 VHDL 语言来设计,并利用 Quartus6.0 软件工具来编译、测试和仿真,音乐硬件演奏电路设计总体设计方框图如下图所示2. 总体程序设计 低音 7 555.56 675 1372 高音 4 1609.442 233 1814中音 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 1882RSTSELclkToneIndex3.0 Index3.0HIGHCODE3.0Tone10.0clkTone10.0 SpkSCODE13.0SPKOUTCLK12MHZSELRSTNoteTabs:u1CLK8HZToneTaba:u2 Speakera:u3HIGH12.1 顶层模块设计流程图 2.2 顶层电路 VHDL 程序设计LIBRARY IEEE; - 硬件演奏电路顶层设计USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT ( CLK12MHZ : IN STD_LOGIC; -音调频率信号CLK8HZ : IN STD_LOGIC; -节拍频率用于控制音长(节拍)的时钟频率;SEL : IN STD_LOGIC;-音乐选择键RST : IN STD_LOGIC;-复位键CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 简谱码输出显示HIGH1 : OUT STD_LOGIC; -高 8 度指示SPKOUT : OUT STD_LOGIC );-声音输出END;ARCHITECTURE one OF Songer ISCOMPONENT NoteTabs-元件 U1 例换化PORT ( clk : IN STD_LOGIC;SEL : IN STD_LOGIC;RST : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;COMPONENT ToneTaba-元件 U2 例换化PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );N o t e T a b sin s tc lkS E LR S TT o n e I n d e x 3 . . 0 clockadress7.0 q3.0A7.0B7.0 OUT7.0ADDERD QPREENACLRSELDATADATABOUT0MUX21SELDATADATABOUT0MUX21music:u1Add08 h01 -clkSELRSTToneIndex3.0comb7.0comb15.8Counter7.0END COMPONENT;COMPONENT Speakera-元件 U3 例换化PORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC );END COMPONENT;SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINu1 : NoteTabs PORT MAP (clk=CLK8HZ,RST=RST,SEL=SEL, ToneIndex=ToneIndex);-参数传递映射语句u2 : ToneTaba PORT MAP(Index=ToneIndex,Tone=Tone,CODE=CODE1,HIGH=HIGH1);u3 : Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT);END;3. 单元模块程序设计 根据顶层原理图,共分为 music 模块、地址发生器模块、分频预置数模块、十六进制模块、数控分频模块这五个模块。music 模块存放乐曲中的音符数据,地址发生器模块作为 music 模块中所定制的音符数据 ROM 的地址发生器,分频预置数模块提供分频预置数即给数控分频模块提供计数初值,十六进制模块对 12MHz 的时钟脉冲进行 16 分频,得到 750KHz 的频率,给数控分频模块提供时钟脉冲。数控分频模块根据分频预置数输出各个音符所对应的频率。3.1 音乐节拍和音调发生器模块(1) 音乐节拍和音调发生器模块 RTL 电路图(2) 音乐节拍和音调发生器模块 VHDL 程序设计LIBRARY IEEE;-音乐节拍和音调发生器模块USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC;-音乐节拍时钟 4HZSEL : IN STD_LOGIC;-音乐选择键RST : IN STD_LOGIC;-复位键ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT music -音符数据 ROM1PORT( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);-8 位二进制计数器BEGINCNT8 : PROCESS(clk, Counter,sel,rst)BEGINIF (clkEVENT AND clk = 1) and (Counter=256 or rst=0) then T o n e T a b ain s tI n d e x 3 . . 0 C O D E 3 . . 0 H I G HT o n e 1 0 . . 0 Counter Counter , q=ToneIndex,clock=clk);END;(2) 地址发生器模块地址发生器模块设置了一个 8 位二进制计数器(计数最大值为 256),作为音符数据 ROM 的地址发生器。每来一个时钟脉冲信号(Clk),8 位二进制计数器就计数一次,ROM 文件中的地址也就随着递增,音符数据 ROM 中的音符也就一个接一个连续的取出来了。在地址发生器的 VHDL 设计中,这个计数器的计数频率选为 4Hz,即每一计数值的停留时间为 0.25 秒,恰为当全音符设为 1 秒,四四拍的 4 分音符持续时间。例如,地址发生器在以下的 VHDL 逻辑描述中, “梁祝”乐曲的第一个音符为“3” ,此音在逻辑中停留了 4 个时钟节拍,即 1 秒时间。那么相应随着程序4中的计数器按 4Hz 的时钟频率作加法计数时,即随地址递增时,将从音符数据 ROM 中将连续取出 4 个音符“3”通过 toneindex3.0端口输向分频预置数模块。这样梁祝乐曲中的音符就一个接一个的通过 toneindex3.0端口输向分频预置数模块。3.2 音乐谱对应分频预制数查表电路模块(1) 音乐谱分频预置数模块(2) 音乐谱对应分频预制数查表电路 VHDL 程序设计音乐谱分频预置数模块是乐曲简谱码对应的分频预置数查表电路。它提供了每个音符所对应的分频预置数,即给数控分频模块提供计数初值,这里以“梁祝”乐曲为例,列出了在这个乐曲中所用到的 13 个音符的分频预置数。在这个模块的 VHDL 逻辑描述中设置了四四拍乐曲中全部音符所对应的分频预置数,共 13 个,每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的输入频率决定,在此为 4Hz。这 13 个值的输出由程序3的 4 位输入值index3.0确定。输向程序4中 index3.0的值又由地址发生器模块的输出toneindex3.0的输出值和持续时间决定。模块的功能是输出各个音符所对应的分频预置数,即当 index 是“0000” ,tone 输出为 2047,即休止符的分频预置数;当 index 是“0101”时, tone 输出为 1197 即低音 5 的分频预置数;当 index 是“1111”时, tone 输出为 1728 即高音 1 的分频预置数等等其它状态时,tone 分别输出相应音符的分频预置数。分频预置数模块的 VHDL 设计程序如下:LIBRARY IEEE;-音乐谱对应分频预制数查表电路模块USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;-4 位预制数查表CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;HIGH : OUT STD_LOGIC;-音乐高 8 度指示Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );-音乐符对应分频 11 位END;ARCHITECTURE one OF ToneTaba ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS - 译码电路,查表方式,控制音调的预置数 13 组频率WHEN 0000 = Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone NULL;END CASE;END PROCESS;END;3.3 音乐符数控 11 分频电路模块(1) 音乐符数控 11 分频电路模块(2) 音乐符数控 11 分频电路模块 RTL 电路图DENAQPRECLRA3.0B3.0 OUT3.0ADDERA10.0B10.0 OUT10.0ADDERA11.0B11.0OUTEQUALDENAQPRECLRA3.0B3.0 OUTLESS_THANDENAQPRECLRD QPREENACLRD QPREENACLRSELDATAADATAB OUT0MUX21DelaySpkS:Count2 SpkSreg0clkSpkSTone10.0FullSpkSGenSpkS:Count1110.0Equal01 h0 -12 h7FF -DivideCLK:Count43.0Add04 h1 -Add111 h001 -Count1110.0LessThan04 hB -(3) 音乐符数控 11 分频模块电路 VHDL 程序设计音符的频率由数控分频模块获得,这是一个数控分频电路。它是由一个初值可变的加法计数器构成。该计数器的模为 2047,当计数器记满时,计数器产生一个溢出信号 FULL,此溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表 1 中的计数初值,就可得到不同音符的发音频率信号。它计满时所需要的计数初值可由下式来表示。计数初值(Tone)=2047-分频系数而分频系数又可有下式来求:分频系数=基准频率/音符的发生频率低音时 Tone 值小,分频系数大,溢出信号周期长,扬声器发出的声音低,Tone 随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与音调 Tone 成正比。这就是利用数控分频器自动演奏音乐的原理。时钟(Clk)端输入的是在十六进制模块里对 12MHz 的信号进行 16 分频得到的750KHz,750KHz 的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个 D 触发器以均衡其占空比,这时的频率就变为原来的 1/2,刚好就是相应音符的频率。数控分频模块中对 Clk 输入信号的分频比由 11 位预置数 tone10.0决定。Fout 的输出频率将决定每一个音符的音调,这样,分频计数器的预置值 tone10.0与 Fout 的输出频率就有了对应关系。例如在分频预置数模块中若取 tone10.0=1036,将发出音符为“3”音的信号频率。音符的频率由数控分频模块 VHDL 程序如下:LIBRARY IEEE;-音乐符数控分频电路模块USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;-音调频率信号 12MHZTone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);-音乐符对应分频 11 位SpkS : OUT STD_LOGIC );-声音输出END;ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGINPreCLK 11 THEN PreCLK megawizard plug-in manager,选择“creat a new”,然后按“next”键,选择 LPM-ROM;最后在 browse 下的栏中键入路径与输出文件名,注意后缀 vhd 小写。(2) 单击“next”键, ,选择 ROM 数据位宽度为 4,地址线宽为 256,即设置此 ROM能存储 4 位二进制数据共 256 个。(3) 通过“browse” 钮,找到 ROM 中的加载文件路径和文件名:注意 ROM 元件的inclock 是地址锁存时钟。(4) 打开已定制的 ROM 文件,将它设置为工程,并确定目标器件,进行测试仿真波形,按照定制步骤对音符数据文件进行 ROM 定制。定制好的 ROM 文件 VHDL 程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY music ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT lpm_romGENERIC (lpm_width : NATURAL;lpm_widthad : NATURAL;lpm_address_control : STRING;lpm_outdata : STRING;lpm_file : STRING);PORT (address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq 4,LPM_WIDTHAD = 8,LPM_ADDRESS_CONTROL = REGISTERED,LPM_OUTDATA = UNREGISTERED,LPM_FILE = G:/MUSIC/SINGER/SINGER.mif)PORT MAP (address = address,inclock = inclock,q = sub_wire0);END SYN;4. VHDL 音乐硬件演奏电路系统仿真与调试4.1 NoteTabs 音乐节拍和音调发生器模块的仿真(1) 波形仿真将所编写的音乐节拍和音调模块 NoteTabs 的程序设为工程,选用 Altera 公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。仿真结果如下图:4.2 ToneTaba 分频预置数查表模块的仿真(1) 波形仿真将所编写的分频预置数查表模块 ToneTaba 的程序设为工程,选用 Altera 公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。仿真结果如下图:(2) 模块功能分析与调试ToneTaba 分频预置数模块的功能是输出各个音符所对应的分频预置数,由上面的仿真波形图可看到若当 index 是“0000”,tone 输出为 2047,即休止符的分频预置数;当 index 是“0101”时, tone 输出为 1197 即低音 5 的分频预置数;当 index 是“1111”时, tone 输出为 1728 即高音 1 的分频预置数等等其它状态时,tone 分别输出相应音符的分频预置数,仿真波形图证明了程序实现了模块的功能。 4.3 Speakera 音乐符数控分频模块的仿真(1) 波形仿真将所编写的音乐符数控分频模块 Speakera 的程序设为工程,选用 Altera 公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。仿真结果如下图:(2) 模块功能分析与调试Speakera 音乐符数控分频此模块的功能是根据初始值 Tone 的值,对输入时钟信号 Clk 的频率进行分频,得到想要的音符的发声频率其时钟(Clk)端输入的是在十六进制模块里对 12MHz 的信号进行 16 分频得到的 750KHz,750KHz 的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个 D 触发器以均衡其占空比,这时的频率就变为原来的 1/2,刚好就是相应音符的频率。在 clk 端输入一具有较高频率的信号(这里是 12MHz)的信号,通过分频后由 cout 输出。这里是对 12MHz 的信号进行 16 分频得到 750KHz 的信号。750KHz 的时钟脉冲信号是给数控分频模块提供时钟信号。数控分频模块中对 Clk输入信号的分频比由 11 位预置数 tone10.0决定。spkout 的输出频率将决定每一个音符的音调,这样,分频计数器的预置 tone10.0与 Fout 的输出频率就有了对应关系。若在分频预置数模块中若取 tone10.0=1036,将发出音符为“3”音的信号频率。在这个仿真波形图中,Tone 的值可设为 6c0(即高音 1 的分频预置数1728) ,Clk 的频率为 750KHz,spkout 输出的脉冲信号的周期为 849.9291us(即1176.568Hz) ,接近高音 1 的发声频率。由表中可知高音 1 的分频系数为 319,即对输入时钟 Clk 进行 319 次分频就可得高音 1 的发声频率,因此这个程序实现了模块的功能。4.4 扩大此音乐硬件演奏电路的通用性前面所设计的电路只能演奏“梁祝”曲子,但是在实际应用中,若能将电路实用于各种曲子的演奏,它的实用性和应用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论