欢迎来到天天文库
浏览记录
ID:41676144
大小:276.26 KB
页数:10页
时间:2019-08-29
《数字系统设计大作业报告A6》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数字系统设计大作业报告基于FPGA的带指示功能的简易电子琴学院电子与信息学院专业学生姓名一、题目要求(一)制作一个有16个琴键的简易电子琴。(二)音符从低音fa到高音suoo(三)由开关控制用LED指示演示一首歌曲的弹奏方法。如《一闪一闪亮晶晶》其简谱如下图所示:11
2、55
3、66
4、5-
5、44
6、33
7、22
8、1-155
9、44
10、33
11、2-
12、55
13、44
14、33
15、2-
16、11
17、55
18、66
19、5-
20、44
21、33
22、22
23、1-1二、系统框图三、系统设计(-)模块关系图(-)底层模块介绍1.键盘编码模块输入:键盘信号。输出:分频比,为受控分频模块提供的复位信号。设计思路:该模块为纯组合逻辑,将键盘输入信
24、号编码为受控分频模块的分频比和复位信号。在没有键按下或无法编码的按键情况时,输出有效的复位信号(高电平);按下某个键时,输出相应的分频比,同时清除复位信号(低电平)。2.受控分频模块输入:分频比、系统时钟、复位信号。输出:音频信号。设计思路:该模块为受控分频器,用来输出相应的音频波。分频输出的频率受输入分频比的控制。分频器用计数器实现,计数器复位,用键盘编码模块产生的复位信号,溢出判断量是键盘编码模块输出的分频比。该模块输出为占空比50%的方波,以此来驱动功放或扬声器发声。3.固定分频模块输入:系统时钟、复位信号输出:5Hz时钟信号。设计思路:该模块为固定频率的分频器,用来输出
25、约5Hz的信号,为LED驱动波形产生模块提供基准频率。分频器用计数器实现,计数器时钟和复位信号由外部提供,固定溢出量,产生占空比50%的方波以此为LED驱动波形产生模块提供基准频率。1.LED驱动波形产生模块输入:5Hz时钟信号、音乐指示开关信号。输出:LED驱动信号。功能:产生驱动乐曲指示灯的信号。设计思路:该模块为一个进位计数器,最小计数变量在停止标记无效(高电平)的情况下在低频时钟上升沿计数,每计数5次进位一次。对应一个音符中4次LED流水和一次停顿。最小音符单元在最小计数变量进位时自增一次,该演示曲每句6个时值为1的音,一个时值为2的音,因此最小音符单元计数满8时进位一
26、次。最小音符单元用来指示这是每句中的第几个音。句子变量在最小音符单元进位时自增一次,该演示曲共六句,计数满后所有变量恢复初始状态,停止标记变为有效(低电平),使演示只进行一遍。同时流水灯“行”驱动波形产生进程中在每句前6个时值为1的每个音符弹奏时间内产生较短的4次LED流水信号,在每句后1个时值为2的每个音符弹奏时间内产生较长的4次LED流水信号。流水灯''列”驱动波形产生进程中根据句子变量和最小音符单元的值,产生音符选择信号(流水灯“列”驱动信号)。(三)模块连接图1.键盘与发音部分pk_tKBD为键盘编码模块ccd为受控分频模块2.弹奏指示部分LC2:UIc2LC2为固定分
27、频模块LC1为LED驱动波形产生模块1.顶层设计TDisp:UdisT3..0]L0]TDisp为弹奏指示部分tomp为键盘与发音部分(四)关键代码1.琴键编码器if(KB(15)=0)thenrst_ag<=,0,;ds_ag<=xH117A8H;-_4■…0elsif(KB(14)二'0')thenrst_ag<=,0,;ds_ag<=x"0F920";—_5-…1elsif(KB(13)=0*)thenrst_ag<='0,;ds_ag<=x,,0DDF2,,;-_6—-2clsif(KB(12)=0)thenrst_ag<=,0,;ds_ag<=xM0C5BAn;-_7
28、■…3-低音elsif(KB(O)='O')thenrst_ag<='0';ds_ag<=x"03E48M5.——15-高音elserst_ag<=,r;endif;未按键这部分代码釆用if-elsif-else语句,构成16路优先编码器,将按键情况编码为分频比。1.受控分频器elsif(rising_edge(clk))thenif(cnt29、键盘编码器控制,因此产生的方波频率受到键盘控制,以便产生不同音调的琴声。2.固定分频器if(rst_i='O,)thencnt<=0;div_in<=,0';elsif(rising_edge(clk))thenif(cnt<4999900)then—4个9ent<=ent+1;elsedivin<=notdivin;cnt<=0;endif;endif;这部分代码是用讦语句构成的计数器,计数溢出值固定,用以生成驱动LED的基本低频时钟信号。3.LED驱动器if(rst_i=,O,)then
29、键盘编码器控制,因此产生的方波频率受到键盘控制,以便产生不同音调的琴声。2.固定分频器if(rst_i='O,)thencnt<=0;div_in<=,0';elsif(rising_edge(clk))thenif(cnt<4999900)then—4个9ent<=ent+1;elsedivin<=notdivin;cnt<=0;endif;endif;这部分代码是用讦语句构成的计数器,计数溢出值固定,用以生成驱动LED的基本低频时钟信号。3.LED驱动器if(rst_i=,O,)then
此文档下载收益归作者所有