基于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 位预制数查表码。基于fpga的电子琴设计fpga实训(编辑修改稿)
相关推荐
基于 FPGA的电子钟的设计 第 14 页 共 56 页 图 38 时间计数模块电路图 该模块逻辑框图如图 39 所示。 仿真波形图如图 310 所示。 图 39 时间计数模块逻辑框图 图 310 时间计数模块仿真波形图 秒计数 子 模块逻辑框图如图 311所示。 图 311 秒计数子模块框图 EN 是时间显示信号,当 Timepiece_En=1 时有效; clk 是秒脉冲输入端口
入式开发软件、可编程逻辑设计于一体,是一种综合性的开发平台。 使用 Quartus II 的设计过程包括以下几步,若任一步出错或未达到设计要求则应修改设计,然后重复以后各步, Quartus II 的设计流程如图 11 所示。 图 11 Quartus II 的设计流程。 逻辑设计的输入方法有原理图形输入、文本输入、波形输入及第三方 EDA 工具生成的设计网表文件输入等。 输入方法不同
这里只需了解系统的轮廓即可,后面会详细介绍各模块的设计与实现。 河南理工大学毕业设计(论文)说明书 15 3 模块设计与实现 如前面所述,顶层实体由 3个模块构成: 微控制器接口模块、相位累加器模块及双端口 RAM 模块。 由 8 个比例乘法器级联组成的分频器模块以端口定义的形式例化在微控制器模块中,属于后者的子模块,但是由于比例乘法器的本设计中所发挥的作用很大,加之相关资料少之又少
器、 8 位 D/A 转换电路及转换控制电路构成。 它因为 价格低廉、接口简单、转换控制容易等优点, 而 得到 了 广泛的应用 [7]。 DAC0832 的主要参数有: 8位。 1us。 177。 1LSB。 10~+10V。 +5~+15V。 输入与 TTL 兼容。 它的内部逻辑结构如图 所示: 图 DAC0832 内部逻辑结构 DAC0832 引脚排列如图 所示: 基于 FPGA
( 5)底层嵌入功能单元 ( 6)内嵌专用硬核 与“底层嵌入单元”是有区别的,这里指的硬核主要是那些通用性相对较弱,不是所有 FPGA 器件都包含硬核。 目前绝大部分 FPGA 都采用查找表( Look Up Table, LUT)技术,如 Altera 的 ACEX、 APEX、 Cyclone、 Stratix 系列, Xilinx 的 Spartan、 Virtex 系列等。 FPGA
层次显示窗口或将其带至前台。 :打开平面图编辑器或将其带至前台。 :打开编译器窗口或将其带至前台。 :打开仿真器窗口或将其带至前台。 :打开时序分析器窗口或将其带至前台。 :打开编程器窗口或将其带至前台。 :指定工程名。 :将工程名设置为和当前文件名一样。 :打开当前工程的顶层设计文件或将其带至前台。 :保存所有打开的编译器输入文件