SOPCEDA综合课程设计乐曲硬件演奏.pdf
SOPC EDA 综合课程设计乐曲硬件演奏 2 作者:日期:个人收集整理 勿做商业用途 0 目录 第一章 EDA 技术综合应用设计的主要软件及设备.错误!未定义书签。1。1 主要软件、设备及作用:.错误!未定义书签。1。2 实验电路结构图.。错误!未定义书签。第二章 乐曲硬件演奏电路设计的原理.错误!未定义书签。第三章 乐曲硬件演奏电路 VHDL 程序设计.错误!未定义书签。3。1音乐节拍和音调发生器模块PUTTAB 错误!未定义书签。3.1。1 PUTTAB 模块原理图.错误!未定义书签。3。1.2 puttab 模块时序仿真图.错误!未定义书签。3。2 音乐谱对应分频预制数查表电路模块 ONTAB.错误!未定义书签。3。2。1 ONTAB 模块原理图.错误!未定义书签。3。2。2 ONTAB 模块时序仿真图.错误!未定义书签。3.3 音乐符数控 11 分频电路模块 OUTSPEKER.错误!未定义书签。3.3。1 OUTSPEAKER 模块原理图.错误!未定义书签。3。3。2 OUTSPEAKER 模块时序仿真图.错误!未定义书签。3.4 乐曲演奏音符数据文件(梁祝、自选曲).错误!未定义书签。3。4 引脚绑定.错误!未定义书签。第四章 顶层程序的时序仿真图.错误!未定义书签。第五章 课程设计心得体会.错误!未定义书签。参考文献。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.错误!未定义书签。个人收集整理 勿做商业用途 1 第一章 EDA 技术综合应用设计的主要软件及设备 1.1 主要软件、设备及作用:EDA 技术的综合应用设计与开发可能用到的主要开发设计软件、设备及其作用如下:(1)EDA 的工具软件:目前比较流行的、主流厂家的 EDA 的软件工具有 Altera 的 MAX+plus、Quartus,Lattice 的 ispDesignExpERT,Xilinx 的Foundation Series、ISE/ISE-WebPACK Series。(2)计算机辅助分析软件:MATLAB 用于复杂系统的系统级仿真,DSP的系统建模,有关数据的计算和分析等.(3)印刷电路板 PCB 的设计软件:主要有 PROTEL、ORCAD 等,用于设计系统的外围部件或外围电路的 PCB 图。(4)EDA 实验开发系统/片上系统(SOPC)/嵌入式系统:用于 EDA 实验与开发的硬件的编程下载及硬件验证。(5)单片机仿真器及仿真头:用于单片机程序的调试与硬件的验证。(6)印刷电路板 PCB 的制作设备:用于系统外围部件或外围电路的 PCB的制作。(7)信号源、示波器、频率计、无线电综合测试仪等其它相关设备。1。2 实验电路结构图 个人收集整理 勿做商业用途 2 图错误!未定义书签。-1 实验电路结构图 NO。1 第二章 乐曲硬件演奏电路设计的原理 与利用微处理器来实现乐曲演奏相比,一纯硬件完成乐曲演奏电路的逻辑要复杂的多,如果不借助于功能强大的EDA 工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现.本文通过利用硬件乐曲演奏电路的设计实例,使读者初步了解 VHDL 硬件描述语言和 Quartus II 开发环境。设计并调试好一个能产生梁祝曲子的音乐发生器,并利用 EDA 实验开发系统(本设计是在 Altera 的 FPGA 芯片CycloneEP1C6 和杭州康芯电子有限公司生产的 GW48 系列 EDA)的基础上完成硬件测试。根据系统提供的时钟源引入一个 12MHZ时钟的基准频率,对其进行各种分频系数的分频,产生符合某一音乐的频率,然后再引入 8HZ 的时钟为音乐的节拍控制,最后通过扬声器放出来.个人收集整理 勿做商业用途 3 图 11 音乐产生器原理框图 乐曲时由每个音符的发音频率值及其持续的时间是乐曲能连续演奏的两个基本要素,在下面的电路就是来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值来实现所希望乐曲的演奏效果。模块 PUTTAB 类似于弹琴人的手指;模块 ONTAB 类似于琴键;模块 OUTSPEKER 类似于琴弦或音调发生器。乐曲硬件演奏电路设计的原理:(1)音符的频率可以由图中的 OUTSPEKER 获得,这是一个数控分频器.由其 CLK 端输入一具有较高频率(这里是 12MHZ)的信号,通过 OUTSPEKER 分频后又 SPKOUT 输出,由于直接从数控分频器中出来的输出信号时脉宽及其狭窄的脉冲式信号,为了有利于驱动扬声器,需另加一个 D 触发器一均衡其占空比,但这是的频率将是原来的一半。OUTSPEKER 对 CLK 输入信号的分频比又 11 位的预置数 TONE10.。0决定。SPKOUT 的输出频率将决定每一音符的音调,这样,分频计数器的预置数 TONE10.0与 SPKOUT 的输出频率就有了对应关系。例如在 ONTAB 模块中若去 TONE10.。0=1036,将发音符为“3音的信号频率。(3)3.22 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图 8-6 中模块 ONTAB 的功能首先是为 SPEAKRA 提供决定所发音符的分频预置数,而此数在SPEAKRA输入口停留的时间即为此音符的节拍值.模块ONTAB是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共 13 个,每一音符的停留时间由音乐节拍和音调发生器模块 PUTTAB的 clk 的输入频率决定,在此为 4HZ。这 13 个值的输出由对应于 ONTAB 的 4 位输入值 Index【3.。0】确定,而 Index【3.。0】最多有 16 种可选值。输向 ONTAB中 Index【3。0】的值 ToneIndex【3.。0】的输出值与持续的时间由模块 NOTERABS决定.预置初始十六音名扬声数码12M8H乐谱个人收集整理 勿做商业用途 4(3)3.23 在 PUTTAB 中设置了一个 8 位二进制计数器(计数最大值为137),作为音符数据ROM 的地址发生器。这个计数器的计数频率选为 4HZ,即每一计数值的停留时间为0.25秒,恰为当全音符设为1 秒时,四四拍的4 分音符持续时间。例如,PUTTAB在以下的 VHDL 逻辑描述中,“梁祝乐曲的第一个音符为“3”,此音在逻辑中停留了 4 个时钟节拍,即 1 秒时间,相应的,所对应的“3”音符分频预置值为 1036,在 OUTSPEKERA的输入端停留了1 秒.随着 PUTTAB中的计数器按 4HZ 的时钟速率作加法计数时,即随地址值递增时,音符数据 ROM 中的音符数据将从 ROM 中通过 ToneIndex【3。.0】端口输向 ONTAB 模块,“梁祝”乐曲就开始连续自然的演奏起来了。图 2-2 顶层模块设计原理图 第三章 乐曲硬件演奏电路 VHDL 程序设计 根据顶层模块设计原理图,共分为music 模块、地址发生器模块、分频预置数模块这 3 个模块。music 模块存放乐曲中的音符数据,地址发生器模块作为music 模块中所定制的音符数据 ROM 的地址发生器,分频预置数模块提供分频预置数即给数控分频模块提供计数初值,十六进制模块对 12MHz 的时钟脉冲进行16 分频,得到 750KHz 的频率,给数控分频模块提供时钟脉冲。数控分频模块根据分频预置数输出各个音符所对应的频率。3.1 音乐节拍和音调发生器模块 PUTTAB 乐曲演奏电路的 VHDL 逻辑描述如下:library ieee;-音乐节拍和音调发生器模块 个人收集整理 勿做商业用途 6 3。1.2 puttab 模块时序仿真图 将所编写的音乐节拍和音调模块 PUTTAB 的程序设为工程,选用 Altera 公司的 Cyclone 系列中的 EP1C3TC144 为目标芯片进行仿真.图 3-2 puttab 模块时序仿真图 由上图可以看出,该模块音乐节拍和音调发生器模块,当 CLK 给出上升沿输出时,给出音符节拍,当 RST 复位时音符从头给出 3 5 8 等音乐节拍,当 SEL为低电平时,自动切换到下一首歌曲。满足要求.3.2 音乐谱对应分频预制数查表电路模块 ONTAB library ieee;use ieee。std_logic_1164。all;entity ONTAB is port(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0);HIGH:OUT std_logic;CODE:out std_logic_vector(3 downto 0));end;architecture one of ONTAB is begin search:process(index)begin CASE Index IS 译码电路,查表方式,控制音调的预置数 WHEN 0000=Tone=”11111111111”;CODE=”0000;HIGH Tone=”01100000101”;CODE=0001;HIGH=0;773;WHEN 0010=Tone Tone=10000001100;CODE Tone=10010101101”;CODE=”0101”;HIGH Tone=”10101011100”;CODE=”0111;HIGH Tone=”10110000010”;CODE=”0001”;HIGH=1;1410;WHEN 1001”=Tone=10111001000;CODE Tone=11000000110;CODE=”0011”;HIGH=1;-1542;WHEN 1100”=Tone=”11001010110;CODE=0101;HIGH Tone=11010000100”;CODE=”0110;HIGH=1;-1668;WHEN 1111”=Tone=11011000000;CODE=0001”;HIGH=1;1728;when others=null;end case;end process;end;3。2.1 ONTAB 模块原理图 图 33 ONTAB 模块原理图 3。2。2 ONTAB 模块时序仿真图 波形仿真 将所编写的分频预置数查表模块ONTAB的程序设为工程,选用Altera公司的个人收集整理 勿做商业用途 8 Cyclone 系列中的 EP1C3TC1448 为目标芯片进行仿真。仿真结果如下图:图 34 模块 ONTAB 的波形仿真 由上图可以看出,该模块为音乐谱对应分频预制数查表电路模块,当 code为休止符 0000 时,输出端 tone 给出的分频预置数为 2047,当 code 为 0001 时输出端 tone 给出的分频预置数为 773,满足程序要求。3.3 音乐符数控 11 分频电路模块 OUTSPEKER 音符的频率由数控分频模块获得,这是一个数控分频电路.它是由一个初值可变的加法计数器构成.该计数器的模为 2047,当计数器记满时,计数器产生一个溢出信号 FULL,此溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表 1 中的计数初值,就可得到不同音符的发音频率信号。它计满时所需要的计数初值可由下式来表示。分频系数=基准频率/音符的发生频率 计数初值(Tone)=2047-分频系数 低音时 Tone 值小,分频系数大,溢出信号周期长,扬声器发出的声音低,Tone随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与音调 Tone 成正比.这就是利用数控分频器自动演奏音乐的原理.个人收集整理 勿做商业用途 9 library ieee;use ieee.std_logic_1164.all;use ieee。std_logic_unsigned.all;entity OUTSPEKER is port(clk:in std_logic;tone:in std_logic_vector(10 downto 0);spks:out std_logic);end entity OUTSPEKER;architecture one of OUTSPEKER is signal preclk,fullspks:std_logic;begin divideclk:process(clk)variable count4:std_logic_vector(3 downto 0);begin preclk=0;-将 CLK 进行 16 分频,PreCLK 为 CLK 的 16 分频 if count411 then preclk=1;count4:=0000”;elsif clkevent and clk=1 then count4:=count4+1;end if;end process divideclk;genspks:process(preclk,tone)-11 位可预置计数器 variable count11:std_logic_vector(10 downto 0);begin if preclkevent and preclk=1 then if count11=16#7ff then count11:=tone;fullspks=1;else count11:=count11+1;fullspks=0;end if;end if;end process;delayspks:process(fullspks)-将输出再 2 分频,展宽脉冲,使扬声器有足够功率发音 variable count2:std_logic;begin if fullspksevent and fullspks=1 then count2:=not count2;个人收集整理 勿做商业用途 10 if count2=1 then spks=1;else spks=0;end if;end if;end process;end;3.3.1 OUTSPEAKER 模块原理图 图 3-5 OUTSPEAKER 模块原理图 3.3.2 OUTSPEAKER 模块时序仿真图 波形仿真 将所编写的音乐符数控分频模块 OUTSPEKER 的程序设为工程,选用 Altera公司的 Cyclone 系列中的 EP1C3TC144 为目标芯片进行仿真.仿真结果如下图:图 3-2 模块 OUTSPEKER 的波形仿真图 由上图可以看出,此图为音乐符数控 11 分频电路模块,tone 为 11001010110时,给出的分频预置数为 1686,这样,与 SPKS 的输出频率就有了对应关系.满足程序要求。个人收集整理 勿做商业用途 11 3.4 乐曲演奏音符数据文件(梁祝、自选曲)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 3 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 6 8 6 5 3 5 6 8 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 1 2 3 3 5 5 6 7 7 6 5 6 3 2 1 1 1 2 3 2 5 6 7 8 9 8 7 6 5 2 3 2 3 3 3 3 5 5 5 5 0 0 0 0 0 0 0 0 其中 WIDTH=4,表示数据输出为宽为 4;DEPTH=256,表示共有 256 个 4 位数据点;ADDRESS-RADIX=DEC,表示地址信号用十进制;DATARADIX=DEC,表示输出数据是十进制数。形成 ROM 中的配置数据(初始化数据)文件的方法如下:在 QUARTUS中编辑.mif 文件。首先在 File 菜单下的 New 菜单上选择 Text Editor File 命令,进入文本编辑器,然后输入以上格式的数据文件。文件中的关键词 WIDTH 设置ROM 的数据宽度;DEPTH 设置 ROM 数据的深度,即 4 位数据的数量,文件中设置的个人收集整理 勿做商业用途 12 256 等效于 8 位地址线宽度;ADDRESSRADIX=DEC 和 DATARADIX=DEC 表示设置地址和数据的表达式格式都是十进制;地址/数据表以 CONTENT BEGIN 开始,以END 结束;其中的地址/数据表达方式是冒号左边写 ROM 地址值,冒号右边写对应此地址放置的十进制数据。3.4 引脚绑定 为了能对此电路进行硬件测试,应将其输入信号锁定在芯片确定的引脚上,编译后下载。当硬件测试完成后,还必须对配置芯片进行编程,完成 FPGA 的最终开发.确定引脚分别为 CLK8HZ 接第 128 脚,CLK12MHZ 接在第 123 引脚上,复位 RST 接在第 106 引脚上,选择键 SEL 接在第 107 引脚上;CODE【3。0】分别接在第 42 到 39 引脚上,high 接在第 73 引脚上,输出 SPKOUT 接在第 129引脚上。确定了锁定引脚编号后就可以完成以下引脚锁定操作了,选择ASSSIGNMENT-PINS 命令,将弹出目标器件的引脚编辑窗口,将信号名拖入引脚上,最后储存这些引脚锁定的信息后,再编译一次,才能将引脚锁定信息编译进编程下载文件中.图 3-错误!未定义书签。整个设计电路的引脚绑定图 个人收集整理 勿做商业用途 13 第四章 顶层程序的时序仿真图 图 4-1 顶层程序的时序仿真 已经实现乐曲的演奏。SEL 为低电平时切换第二首乐曲播放,RST 为低电平时从第一首乐曲开始重新播放.达到了设计要求 个人收集整理 勿做商业用途 14 第五章 课程设计心得体会 这次 EDA 课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对 EDA 的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心.但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示。后来,在数十次的调试之后就可以观察到完整的仿真结果。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次设计的乐曲硬件演奏电路还是比较成功的,在设计中遇个人收集整理 勿做商业用途 15 到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢 参考文献 1 潘松 黄继业 编著。EDA 技术与 VHDL(第二版).清华大学出版社。2007 2 刘江海 EDA 技术课程设计。华中科技大学出版社。2008 3 潘松编著EDA 技术实用教程北京:科学教育出版社.2006 4 Quartus Semiconductor data booksQuartus Semiconductor Corporation。2001 5 杭州康芯电子有限公司 GW48PK3 实验系统说明书。杭州康芯电子有限公司.2006