FPGA蓝牙控制电子琴_第1页
FPGA蓝牙控制电子琴_第2页
FPGA蓝牙控制电子琴_第3页
FPGA蓝牙控制电子琴_第4页
FPGA蓝牙控制电子琴_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、深圳大学考试答题纸(以论文、报告等形式考核专用)二。一四二。一五学年度第2学期评分课程编号,02课程名称数字系统设计主讲教师XXXX学号XXXX姓名XXX专业年级XXXXX教师评语:题目:蓝牙控制电子发生器摘要:基于Basys2设计平台而搭建的“谱曲软件在fpga上的实现”的系统,融入了蓝牙传输模块,VGA显示模块,以及安卓手机的app应用软件,完成了对课题的基本功能的实现。谱曲软件由我校陈必红老师编写,通过输入“陈谱”,实现了对钢琴曲以及一般的乐曲的播放,软件界面如下在界面的最下部分编写陈谱,再点击装入,就会出现美妙的乐曲1、系统总流程1.1 系统总框图31.2 系统总框图介绍31.3 设计

2、中遇到的难点、舍弃。32、蓝牙模块1.1 蓝牙模块波特率设置以及信号检测ASM图41.2 蓝牙主模块、ASM图5,63、A模块(VGA模块由周玲同学编写实现)4、分频器模块4.1 分频器模块的ASM图75、仿真86、资源利用以及布局布线后的时序97、开发板截图108、代码一览11过程中遇到的碓点以及舍弃,u不得不说,这个设计只是当初设想的半成品,为什么这么说呢?J陈必红老师所编写的谱曲软件用的是完全模拟钢琴的波形.这就必须要有一个DA转换模块.,而DA转块模块肓两种.一种是以PCF8591芯片为例子的I笛总线控制的,一种是以DAC0632为例子的T型解码网络的。聚者前期使用的是DAC0S32芯

3、片,在开题后的一个星期内,笔者利用单片机开发,经过上几十次的实验,发现DAC琥纪输出效果非常不理相.出现的瑞差非常大,在找资料,验证芯片的时候耗黄了大部分的时间,后来了望者找到了PCTOEnr利用单片机进行测试后,效果基本能够接受,但是.由于I2C总线实现的困难以及时间上的问翘,笔者最终放弃了DA转操,改用最基本的分频器模块,十分遗憾-波特率设置模块以及检波modulespeed_select_rx(clk,rst_n,bps_start,clk_bps);/inputclk;接收到蓝牙主模inputrst_n;块的启动信号inputbps_start;outputclk_bps;reg12:

4、0cnt;regclk_bps_r;reg2:0uart_ctrl;always(posedgeclkorposedgerst_n)if(rst_n)cnt=13d0;elseif(cnt=5207)|!bps_start)cnt=13d0;elsecnt=cnt+1b1;always(posedgeclkorposedgerst_n)beginif(rst_n)clk_bps_r=1b0;elseif(cnt=2603)clk_bps_r=1b1;elseclk_bps_r=1b0;endassignclk_bps=clk_bps_r;endmoduleinputclk;inputrst_n

5、;inputrs232_rx;/inputclk_bps;outputbps_start;output7:0rx_data;outputrx_int;output9:0led;outputreg7:0led_new;reg9:0led;regrs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;wireneg_rs232_rx;always(posedgeclkorposedgerst_n)beginif(rst_n)beginrs232_rx0=1b0;rs232_rx1=1b0;rs232_rx2=1b0;rs232_rx3=1b0;endelsebeginrs2

6、32_rx0=rs232_rx;rs232_rx1=rs232_rx0;rs232_rx2=rs232_rx1;rs232_rx3=rs232_rx2;endendassignneg_rs232_rx=rs232_rx3&rs232_rx2&rs232_rx1&rs232_rx0;regbps_start_r;reg3:0num;regrx_int;always(posedgeclkorposedgerst_n)if(rst_n)beginbps_start_r=1bz;rx_int=1b0;endelseif(neg_rs232_rx)begin/bps_start_r=1b1;._rx_i

7、nt=1b1;分频器开始计数,检测信号是否达到一个脉宽(5207)输出1输出0从蓝牙模块(硬件)处接收到下沿标志启动信号检测模块(即上一个模块)endelseif(num=4d12)beginbps_start_r=1b0;rx_int=1b0;endassignbps_start=bps_start_r;reg7:0rx_data_r;reg7:0rx_temp_data;always(posedgeclkorposedgerst_n)if(rst_n)beginled=10b000_0000000;检测后得到1,0信号分八次检测,分别存入8位的寄存rx_temp_data=8d0;num=

8、4d0;rx_data_r=8d0;endelseif(rx_int)beginif(clk_bps)beginnum=num+1b1;case(num)4d1:rx_temp_data04d2:rx_temp_data14d3:rx_temp_data24d4:rx_temp_data34d5:rx_temp_data44d6:rx_temp_data54d7:rx_temp_data64d8:rx_temp_data7default:;endcasecase(rx_temp_data)=rs232_rx;rs232_rx;rs232_rx;rs232_rx;rs232_rx;rs232_r

9、x;rs232_rx;rs232_rx;编码(10位):输出至fjVGA不编码:输出模块到分频模块Vga8b00000000:led=10b000_0000000;8b00000001:led=10b001_0000001;8b000000108b000000118b000001008b000001018b000001108b000001118b000010008b000010018b000010108b000010118b000011008b000011018b000011108b000011118b000100008b000100018b000100108b000100118b000101

10、008b00010101led=10b001_0000010led=10b001_0000100led=10b001_0001000led=10b001_0010000led=10b001_0100000led=10b001_1000000led=10b010_0000001led=10b010_0000010led=10b010_0000100led=10b010_0001000led=10b010_0010000led=10b010_0100000led=10b010_1000000led=10b100_0000001led=10b100_0000010led=10b100_0000100

11、led=10b100_0001000led=10b100_0010000led=10b100_0100000led=10b1001000000endcaseled_new=rx_temp_data;endelseif(num=4d12)beginnum=4d0;/数据接收完毕rx_data_r=rx_temp_data;endendassignrx_data=rx_data_r;endmodulemodulesound(clk,rst_n,led_new,sound_out);inputclk;i唯ttst_nBI为调试初期是使用led来进行检测的,某些命名不方便改回来,input7:0led

12、_new;o“utregsound_out;reg18:0fre;reg31:0value=0;always(posedgeclkorposedgerst_n)beginif(rst_n)value=1b0;elsebegincase(led_new)8d1:fre=18d18898;8d2:fre=18d21212;8d3:fre=18d19515;8d4:fre=18d25223;8d5:fre=18d28315;8d6:fre=18d31783;8d7:fre=18d35674;因此就继续沿8d8:fre=18d37796;8d9:fre=18d42424;8d10:fre=18d475

13、88;8d11:fre=18d50451;8d12:fre=18d56608;8d13:fre=18d63566;8d14:fre=18d71348;8d15:fre=18d75592;8d16:fre=18d84843;8d17:fre=18d95177;8d18:fre=18d100846;8d19:fre=18d113259;8d20:fre=18d127130;8d21:fre=18d142680;default:fre=18d86;endcasevalue=value+fre;endend接收到蓝牙主模块发送过来的8位信号,并进行累加-always(posedgeclkorposed

14、gerst_n)beginif(rst_n)sound_out=1b0;elsebeginif(value32h7FFF_FFFF)sound_out=1b0;else记满了便进行输出sound_out=1b1;endendendmodule仿真FPGA开发的布局布线后的时序和资源利用报告实验成功的开发板截图最终主模块代码moduletonetop(clk,clr,rxd,hsync,vsync,rgb_8bits,sound_out);inputclk;inputclr;inputrxd;outputhsync;outputvsync;output7:0rgb_8bits;outputsou

15、nd_out;wire7:0led_new;wire9:0control;wire20:0tone;sounds(.clk(clk),.rst_n(clr),.led_new(led_new),.sound_out(sound_out);uart_topuut4(.clk(clk),.rst_n(clr),.rs232_rx(rxd),.led(control),.led_new(led_new);keynauut1(.clr(clr),.clk(clk),.control(control),.tone(tone);vgauut2(.clk(clk),.clr(clr),.tone(tone)

16、,.hsync(hsync),.vsync(vsync),.rgb_8bits(rgb_8bits);Endmodule分频器代码modulesound(clk,rst_n,led_new,sound_out);inputclk;inputrst_n;input7:0led_new;outputregsound_out;reg18:0fre;/parameterFREQ_WORD=32d44;/1KHzreg31:0value=0;always(posedgeclkorposedgerst_n)beginif(rst_n)value=1b0;elsebegincase(led_new)8d1:

17、fre=18d18898;8d2:fre=18d21212;8d3:fre=18d19515;8d4:fre=18d25223;8d5:fre=18d28315;8d6:fre=18d31783;8d7:fre=18d35674;8d8:fre=18d37796;8d9:fre=18d42424;8d10:fre=18d47588;8d11:fre=18d50451;8d12:fre=18d56608;8d13:fre=18d63566;8d14:fre=18d71348;8d15:fre=18d75592;8d16:fre=18d84843;8d17:fre=18d95177;8d18:fr

18、e=18d100846;8d19:fre=18d113259;8d20:fre=18d127130;8d21:fre=18d142680;default:fre=18d86;endcasevalue=value+fre;endend/always(posedgeclkorposedgerst_n)beginif(rst_n)sound_out=1b0;elsebeginif(value32h7FFF_FFFF)sound_out=1b0;elsesound_out=1b1;endendendmodule蓝牙主模块代码timescale1ns/1psmoduleuart_top(clk,rst_

19、n,rs232_rx,led,led_new);inputclk;/时钟信号50Minputrst_n;/复位信号,低有效inputrs232_rx;/数据输入信号/数据输出信号output9:0led;output7:0led_new;wire7:0led_new;wirebps_start1,bps_start2;/wireclk_bps1,clk_bps2;wire7:0rx_data;/接收数据存储器,用来存储接收到的数据,直到下一个数据接收wirerx_int;/接收数据中断信号,接收过程中一直为高,/子模块端口申明/speed_select_rxspeed_rx(/数据接收波特率选

20、择模块.clk(clk),.rst_n(rst_n),.bps_start(bps_start1),.clk_bps(clk_bps1);uart_rxuart_rx(/数据接收模块.clk(clk),.rst_n(rst_n),.bps_start(bps_start1),.clk_bps(clk_bps1),.rs232_rx(rs232_rx),.rx_data(rx_data),.rx_int(rx_int),.led(led),.led_new(led_new);Endmodule波特率设置以及信号检测代码modulespeed_select_rx(clk,rst_n,bps_sta

21、rt,clk_bps);/皮特率设定inputclk;/50M时钟inputrst_n;/复位信号inputbps_start;/接收到信号以后,波特率时钟信号置位,当接收到uart_rx传来的信号以后,模块开始运行outputclk_bps;/接收数据中间采样点,/defineBPS_PARA5207;/9600波特率分频计数值/defineBPS_PARA_22603;/计数一半时采样reg12:0cnt;/分频计数器regclk_bps_r;/波特率时钟寄存器reg2:0uart_ctrl;/波特率选择寄存器always(posedgeclkorposedgerst_n)if(rst_n

22、)cnt=13d0;elseif(cnt=5207)|!bps_start)/判断计数是否达到1个脉宽cnt=13d0;elsecnt=cnt+1b1;/波特率时钟启动always(posedgeclkorposedgerst_n)beginif(rst_n)clk_bps_r=1b0;elseif(cnt=2603)/当波特率计数到一半时,进行采样存储clk_bps_r=1b1;elseclk_bps_r=1b0;endassignclk_bps=clk_bps_r;/将采样数据输出给uart_rx模块endmodule蓝牙数据接收以及编码代码moduleuart_rx(clk,rst_n,

23、bps_start,clk_bps,rs232_rx,rx_data,rx_int,led,led_new);inputclk;/时钟inputrst_n;/复位inputrs232_rx;/接收数据信号inputclk_bps;/高电平时为接收信号中间采样点outputbps_start;/接收信号时,波特率时钟信号置位output7:0rx_data;/接收数据寄存器outputrx_int;/接收数据中断信号,接收过程中为高output9:0led;outputreg7:0led_new;reg9:0led;regrs232_rx0,rs232_rx1,rs232_rx2,rs232_r

24、x3;/接收数据寄存器wireneg_rs232_rx;/表示数据线接收到下沿always(posedgeclkorposedgerst_n)beginif(rst_n)beginrs232_rx0=1b0;rs232_rx1=1b0;rs232_rx2=1b0;rs232_rx3=1b0;endelsebeginrs232_rx0=rs232_rx;rs232_rx1=rs232_rx0;rs232_rx2=rs232_rx1;rs232_rx3=rs232_rx2;endendassignneg_rs232_rx=rs232_rx3&rs232_rx2&rs232_rx1&rs232_rx

25、0;/串口传输线的下沿标志regbps_start_r;reg3:0num;/移位次数regrx_int;/接收中断信号always(posedgeclkorposedgerst_n)if(rst_n)beginbps_start_r=1bz;rx_int=1b0;endelseif(neg_rs232_rx)begin/bps_start_r=1b1;/启动串口,准备接收数据rx_int=1b1;/接收数据中断使能endelseif(num=4d12)begin/接收完有用的信号,bps_start_r=1b0;/接收完毕,改变波特率置位,方便下次接收rx_int=1b0;/接收信号关闭en

26、dassignbps_start=bps_start_r;reg7:0rx_data_r;/串口数据寄存器reg7:0rx_temp_data;/当前数据寄存器always(posedgeclkorposedgerst_n)if(rst_n)beginled=10b000_0000000;rx_temp_data=8d0;num=4d0;rx_data_r=8d0;endelseif(rx_int)begin/接收数据处理if(clk_bps)beginnum=num+1b1;case(num)4d1:rx_temp_data0=rs232_rx;4d2:rx_temp_data1=rs232

27、_rx;4d3:rx_temp_data2=rs232_rx;4d4:rx_temp_data3=rs232_rx;4d5:rx_temp_data4=rs232_rx;4d6:rx_temp_data5=rs232_rx;4d7:rx_temp_data6=rs232_rx;4d8:rx_temp_data7=rs232_rx;default:;endcasecase(rx_temp_data)8b00000000:led=10b000_0000000;8b00000001:led=10b001_0000001;8b00000010:led=10b001_0000010;8b00000011

28、:led=10b001_0000100;8b00000100:led=10b001_0001000;8b00000101:led=10b001_0010000;8b00000110:led=10b001_0100000;8b00000111:led=10b001_1000000;8b00001000:led=10b010_0000001;8b00001001:led=10b010_0000010;8b00001010:led=10b010_0000100;8b00001011:led=10b010_0001000;8b00001100:led=10b010_0010000;8b00001101

29、:led=10b010_0100000;8b00001110:led=10b010_1000000;8b00001111:led=10b100_0000001;8b00010000:led=10b100_0000010;8b00010001:led=10b100_0000100;8b00010010:led=10b100_0001000;8b00010011:led=10b100_0010000;8b00010100:led=10b100_0100000;8b00010101:led=10b100_1000000;endcaseled_new=rx_temp_data;endelseif(nu

30、m=4d12)beginnum=4d0;/数据接收完毕rx_data_r=rx_temp_data;endendassignrx_data=rx_data_r;endmoduleVGA数据接收以及编码代码modulekeyna(control,clr,clk,tone);input9:0control;inputclk;inputclr;outputreg20:0tone;always(posedgeclkorposedgeclr)if(clr=1b1)tone=21d0;elsebegincase(control9:7)3b100:begincase(control6:0)7b1000000

31、:tone=21b1_0000_0000_0000_0000_0000;7b0100000:tone=21b0_1000_0000_0000_0000_0000;7b0010000:tone=21b0_0100_0000_0000_0000_0000;7b0001000:tone=21b0_0010_0000_0000_0000_0000;7b0000100:tone=21b0_0001_0000_0000_0000_0000;7b0000010:tone=21b0_0000_1000_0000_0000_0000;7b0000001:tone=21b0_0000_0100_0000_0000

32、_0000;endcaseend3b010:begincase(control6:0)7b1000000:tone=21b0_0000_0010_0000_0000_0000;7b0100000:tone=21b0_0000_0001_0000_0000_0000;7b0010000:tone=21b0_0000_0000_1000_0000_0000;7b0001000:tone=21b0_0000_0000_0100_0000_0000;7b0000100:tone=21b0_0000_0000_0010_0000_0000;7b0000010:tone=21b0_0000_0000_00

33、01_0000_0000;7b0000001:tone=21b0_0000_0000_0000_1000_0000;endcaseend3b001:begincase(control6:0)7b1000000:tone=21b0_0000_0000_0000_0100_0000;7b0100000:tone=21b0_0000_0000_0000_0010_0000;7b0010000:tone=21b0_0000_0000_0000_0001_0000;7b0001000:tone=21b0_0000_0000_0000_0000_1000;7b0000100:tone=21b0_0000_

34、0000_0000_0000_0100;7b0000010:tone=21b0_0000_0000_0000_0000_0010;7b0000001:tone=21b0_0000_0000_0000_0000_0001;endcaseenddefault:tone=21d0;endcaseendendmoduleVGA数据输出代码modulevga(clk,clr,hsync,vsync,rgb_8bits,tone);input20:0tone;inputclk;inputclr;outputwirehsync;outputwirevsync;outputrgb_8bits;reg7:0rg

35、b_8bits;reg10:0cnt_h;reg9:0cnt_v;wire10:0count_h;wire9:0count_v;assigncount_h=cnt_h-150;assigncount_v=cnt_v;always(posedgeclkorposedgeclr)beginif(clr)cnt_h=11d0;elseif(cnt_h=11d1056)cnt_h=11d0;elsecnt_h=cnt_h+1;endalways(posedgeclkorposedgeclr)if(clr)cnt_v=10d0;elseif(cnt_v=10d625)cnt_v=10d0;elseif(

36、cnt_h=11d1056)cnt_v=cnt_v+1;/*/assignhsync=(cnt_h=11d80)?1b0:1b1;assignvsync=(cnt_v=100&count_h=100&count_v=100&count_h350&count_v=140&count_h=150&count_v=100&count_v=131&count_h350&assigna3=(count_h=170&count_h=189&count_v=100&count_v=161&count_h350&assigna4=(count_h=191&count_h=210&count_v=100&count_v=191&count_h350&assigna5=(count_h=230&count_h=240&count_v=100&count_v=221&count_h350&assigna6=(count_h=260&count_h=270&count_v=100&count_v=251&count_h350&assigna7=(

温馨提示

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

评论

0/150

提交评论