基于fpga的电子琴设计fpga实训(编辑修改稿)内容摘要:

o u n t 4 [ 3 . . 0 ]A d d 04 39。 h 1 A d d 11 1 39。 h 0 0 1 C o u n t 1 1 ~[ 1 0 . . 0 ]L e s s T h a n 04 39。 h B 12 相应音符频率的两倍值。 此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个 D 触发器以均衡其占空比 ,这时的频率就变为原来的 1/2,刚好就是相应音符的频率。 数控分频模块中对 Clk 输入信号的分频比由 11 位预置数 tone[10..0]决定。 Fout 的输出频率将决定每一个音符的音调,这样,分频计数器的预置值 tone[10..0]与 Fout 的输出频率就有了对应关系。 例如在分频预置数模块中若取 tone[10..0]=1036,将发出音符为“3” 音的信号频率。 WIDTH = 4。 乐曲演奏数据 DEPTH = 256。 Address_radix = dec。 Data_radix = dec。 CONTENT BEGIN 3 3 3 3 5 5 5 6 8 8 8 9 6 8 5 5 12 12 12 15 13 12 10 12 9 9 9 9 9 9 9 0 9 9 9 10 7 7 6 6 5 5 5 6 8 8 9 9 3 3 8 8 6 5 6 8 5 5 5 5 5 5 5 5 10 10 10 12 7 7 9 9 6 8 5 5 5 5 5 5 3 5 03 3 5 6 7 9 6 6 6 6 6 6 5 6 8 8 8 9 12 12 12 10 9 9 10 9 8 8 6 5 3 3 3 3 8 8 8 8 13 6 8 6 5 3 5 6 8 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 5 1 3 5 1 7 3 5 0 5 0 6 7 1 6 6 5 5 0 0 3 2 1 1 1 3 2 1 1 1 2 3 2 1 1 6 2 3 2 1 6 2 3 2 0 0 0 5 2 6 7 1 2 1 0 0 3 5 3 2 1 5 7 0 0 6 7 1 1 1 2 3 2 0 0 0 5 1 3 5 1 7 3 5 5 6 7 1 6 6 5 5 0 3 2 1 1 1 3 2 1 1 1 2 3 0 2 6 7 1 2 其中 WIDTH=4,表示数据输出为宽为 4; DEPTH=256,表示共有 256 个 4位数据点。 ADDRESSRADIX=DEC,表示地址信号用十进制; DATARADIX=DEC,表示输出数据是十进制数。 形成 ROM 中的配置数据(初始化数据)文件的方法如下:在 QUARTUS||中编辑 .mif 文件。 首先在 File 菜单下的 New 菜单上选择 Text Editor File 命令,进入文本编辑器,然后输入以上格式的数据文件。 文件中的关键词 WIDTH 设置ROM 的数据宽度; DEPTH 设置 ROM 数据的深度,即 4位数据的数量,文件中设置的 256 等效于 8 位地址线宽度; ADDRESSRADIX=DEC 和 DATARADIX=DEC 表示设置地址和数据的表达式格式都是十进制;地址 /数据表以 CONTENT BEGIN 开始,以 END 结束;其中的地址 /数据表达方式是冒号左边写 ROM 地址值,冒号右边写对应此地址放置的十进制数据,如 46: 9,表示 46 为地址, 9 为该地址中的数据。 这样每读到一个地 址,即可输出其相应的数据。 文件编辑好后,保存时取文件名14 为 “” ,存盘的路径为 “g: \music \ singer”。 ROM 文件 : (1) 进入 QUARTUS||,选菜单 TOOLmegawizard plugin manager,选择“creat a new„” ,然后按 “next” 键,选择 LPMROM;最后在 browse 下的栏中键入路径与输出文件名 ,注意后缀 vhd 小写。 (2) 单击 “next” 键,选择 ROM 数据位宽度为 4,地址线 宽为 256,即设置此 ROM 能存储 4位二进制数据共 256 个。 (3) 通过 “browse” 钮,找到 ROM 中的加载文件路径和文件名:注意 ROM元件的 inclock 是地址锁存时钟。 (4) 打开已定制的 ROM 文件 ,将它设置为工程,并确定目标器件,进行测试仿真波形 , 按照定制步骤对音符数据文件进行 ROM 定制。 15 第三章 系统软硬件调试 NoteTabs 音乐节拍和音调发生器模块的仿真 将所编写的音乐节拍和音调模块 NoteTabs 的程序设为工程,选用 Altera公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。 仿真结果如下图: 图 12 音乐节拍和音调模块 NoteTabs 波形仿真 ToneTaba 分频预置数查表模块的仿真 波形仿真 将所编写的分频预置数查表模块 ToneTaba 的程序设为工程,选用 Altera公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。 仿真结果如下图: 16 图 13 分频预置数查表模块 ToneTaba 波形仿真 模块功能分析与调试 ToneTaba 分频预置数 模块的功能是输出各个音符所对应的分频预置数,由上面的仿真波形图可看到若当 index 是 “0000” , tone 输出为 2047,即休止符的分频预置数;当 index 是 “0101” 时 , tone 输出为 1197 即低音 5的分频预置数;当 index 是 “1111” 时, tone 输出为 1728 即高音 1 的分频预置数等等其它状态时, tone 分别输出相应音符的分频预置数,仿真波形图证明了程序实现了模块的功能。 Speakera 音乐符数控分频模块的仿真 将所编写的音乐符数控分频模块 Speakera 的程序设为工 程,选用 Altera公司的 Cyclone 系列中的 EPIC12Q240C8 为目标芯片进行仿真。 仿真结果如下图: 17 图 14 Speakera 音乐符数控分频模块 波形 仿真 模块功能分析与调试 Speakera 音乐符数控分频此模块的功能是根据初始值 Tone 的值,对输入时钟信号 Clk 的频率进行分频,得到想要的音符的发声频率 其时钟( Clk)端输入的是在十六进制模块里对 12MHz 的信号进行 16 分频得到的 750KHz, 750KHz 的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。 此 时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个 D触发器以均衡其占空比,这时的频率就变为原来的 1/2,刚好就是相应音符的频率。 在 clk端输入一具有较高频率的信号(这里是 12MHz)的信号,通过分频后由 cout输出。 这里是对 12MHz的信号进行 16 分频得到 750KHz的信号。 750KHz 的时钟脉冲信号是给数控分频模块提供时钟信号。 数控分频模块中对 Clk 输入信号的分频比由 11 位预置数 tone[10..0]决定。 spkout 的输出频率将决定每一个音符的音调,这样,分频计数器的 预置 tone[10..0]与 Fout的输出频率就有了对应关系。 若在分频预置数模块中若取 tone[10..0]=1036,将发出音符为 “3” 音的信号频率。 在这个仿真波形图中, Tone 的值可设为 6c0(即高音 1 的分频预置数18 1728), Clk 的频率为 750KHz, spkout 输出的脉冲信号的周期为 (即),接近高音 1的发声频率。 由表中可知高音 1 的分频系数为 319,即对输入时钟 Clk 进行 319 次分频就可得高音 1的发声频率,因此这个程序实现了模块的功能。 扩大此音乐 硬件演奏电路的通用性 前面所设计的电路只能演奏 “ 梁祝 ” 曲子,但是在实际应用中 ,若能将电路实用于各种曲子的演奏,它的实用性和应用范围就会扩大许多。 这里主要通过修改分频预置数模块的程序,使其实用于各种曲子的演奏。 另外要使更改乐曲方便,主要通过重新设置音符数据文件,再对其进行 LPMROM 定制。 在前面的 VHDL 设计中,我们只能通过程序输出 “ 梁祝 ” 曲子中的 13个音符的分频预置数(即计数初值),但是在其它的乐曲中可能会用到另外的那些音符,因此对程序进行修改完善它的功能,使其能输出另外那些音符的分频预置数。 把修改的程 序代替原来此模块的程序连入顶层文件后,要使所设计的音乐硬件演奏电路可随意更改曲子,只要修改音符数据文件,在那些连续的地址上存储曲子中相应的音符,再对音符数据文件进行 ROM 定制,最后连接到整个电路中即可实现。 程序修改如下: Library ieee。 Use。 Entity toaba is Port( index : in std_logic_vector(4 downto 0)。 5 位预制数查表码。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。