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

下载本文档

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

文档简介

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

2、.3 设 计 中 遇 到 的 难 点 、 舍32、蓝牙模块ASM 图1.1 蓝 牙 模 块 波 特 率 设 置 以 及 信 号 检 测41.2 蓝 牙 主 模 块 、 ASM5,63、A模块(VGA莫块由周玲同学编写实现)4、分频器模块4.1分 频 器 模 块 的ASM75、仿资 源 利 用 以 及 布 局 布 线 后 的 时 序-97、开发板截图810、代码一一一览11迁穆中遇到的范点以及舍异:亠不得不说这个设计貝是半的设想的半或品T为什么这2说呢?陈亞红老师所黨耳的谡曲较件用的是完全腹拟轲琴的波那,这就必須要有一吓转換橫块,* 丽DA嵯葩愼堤宵两种.一幷是匕PCFE皱1芯片为侧子的】2C兌

3、线控剖的,一种是以DAC0S32为 恫子的T臺薜码网洛的*笔者芾朋便用的超DACC豁】芯片在幵越后的一呼星咫陶.笔音机用舉片机幵伐*豎过上几十次 的卖船,MH DAC0A32输出效栗非常不埋他.出现的傑差菲常大,在找资料,肇证芯片的时候耗 费了大部分的时间*后来了笔者找列了 PCF喝2制甲呈片机遴行漕试后,栽果皐本能聊接受*但 是,由于12C鱼线宾现的围奄以层时同上的问迦笔看金誓痕弃了 3A转换,改用最基本的分坝参 橙燥,十分逵轉H +波特率设置模块以及检波cn t=13d0;elsecn t=c nt+1b1;always (posedge elk or posedge rst_ n) be

4、g inf(rs5|输出1|else if(cn t= 2603)clk_bps_r=1b1;elseclk_bps_r=1b0;endassig n clk_bps = clk_bps_r;en dmodulein put clk;in put rst_ n;in put rs232_rx; /in put clk_bps;output bps_start;output 7:0 rx_data;output rx_int; output 9:0 led;output reg7:0 led _new;reg 9:0 led;reg rs232_rx0,rs232_rx1,rs232_rx2,r

5、s232_rx3;wire neg_rs232_rx;always (posedge clk or posedge rst_n) beginif(rst_n) beginrs232_rx0 = 1b0;rs232_rx1 = 1b0;rs232_rx2 = 1b0;rs232_rx3 = 1b0;endelse beginrs232_rx0 = rs232_rx;rs232_rx1 = rs232_rx0;rs232_rx2 = rs232_rx1;rs232_rx3 = rs232_rx2;endendassign neg_rs232_rx = rs232_rx3 & rs232_rx2 &

6、 rs232_rx1 & rs232_rx0; reg bps_start_r;reg 3:0 num;启动信号检测模块(即上一个模块检测后得到 1,0信bps_start_r =1bz;rx_int = 1b0;endelse if(neg_rs232_rx) begin/匸二_bps_start_r = 1b1;rx_int = 1b1;end else if(num=4d12) begi n bps_start_r =1b0; rx_int = 1b0;endassig n bps_start = bps_start_r;reg 7:0 rx_data_r;分八次检测,分别存入8位的re

7、g 7:0 rx_temp_data;口-口 奇存器不编码:输always (posedge elk or posedge rst_ n)if(rst_n) beg inled=10b000_0000000;rx_temp_data = 8d0;num = 4d0;rx_data_r = 8d0;endelse if(rx_i nt) beg inif(clk_bps) begi nnum = nu m+1b1;case( num)4d1: rx_temp_data0 = rs232_rX;4d2: rx_temp_data11=rs232_rx;4d3: rx_temp_data2 = rs

8、232_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:led=10b0

9、01_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:led=10b0

10、10_0100000;8b00001110:led=10b010_1000000;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;endelse if(num=4d12) beg innum = 4d0; /数据接收完毕rx_d

11、ata_r=rx_temp_data;endendassig n rx_data = rx_data_r;en dmodule注意:因为调试初期是使用led来进行检测的,某些命名不方便改回来, module soun d(clk,rst_ n,l ed_ new,so un d_out);因此就继续沿用in put clk;in put rst_ n;in put 7:0 led_ new;output reg soun d_out;reg 18:0 fre;reg 31:0 value=0;always(posedge clk or posedge rst_ n) begi n if(rst

12、_n) value= 1b0;else begi n case(led_ new) 8d1:fre=18d18898;根据各种音调的频率来定义每次计数的基8d2:fre=18d21212;8d3:fre=18d19515;8d7:fre=18d35674;8d8:fre=18d37796;8d9:fre=18d42424;8d10:fre=18d47588;8d11:fre=18d50451;8d12:fre=18d56608;8d18:fre=18d100846;8d19:fre=18d113259;8d20:fre=18d127130;8d21:fre=18d142680;default:

13、fre=18d86;endcasevalue = value +fre;endend记满了便讲行输出/if(rst_n)soun d_out= 1bO;elsebegi nif(value 32h7FFF_FFFF)soun d_out = 1b0;elsesoun d_out = 1b1;endenden dmodule仿真FPG/开发的布局布线后的时序和资源利用报告实验成功的开发板截图最终主模块代码module tonetop(clk,clr,rxd,hsync,vsync,rgb_8bits,sound_out);input clk;input clr;input rxd;output

14、hsync;output vsync;output 7:0 rgb_8bits;output sound_out;wire 7:0 led_new;wire9:0 control;wire 20:0 tone;sound s(.clk(clk),.rst_n(clr),.led_new(led_new),.sound_out(sound_out);uart_top uut4(.clk(clk),.rst_n(clr),.rs232_rx(rxd),.led(control),.led_new(led_new);keyna uut1(.clr(clr),.clk(clk),.control(co

15、ntrol),.tone(tone);vga uut2(.clk(clk),.clr(clr),.tone(tone),.hsync(hsync),.vsync(vsync),.rgb_8bits(rg b_8bits);Endmodule分频器代码module sound(clk,rst_n,led_new,sound_out); input clk;input rst_n;input 7:0 led_new;output reg sound_out;reg 18:0 fre;/parameter FREQ_WORD = 32d44; /1KHz reg 31:0 value=0;alway

16、s(posedge clk or posedge rst_n) beginif(rst_n)value= 1b0;elsebegin case(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=18d47588;8d11:fre=18d50451;8d12:fre=18d56608;8d13:fre=18d6

17、3566;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/always(posedge clk or posedge rst_n) beginif(rst_n)sound_out= 1b0;elsebeginif(value 32h7FFF_FFFF

18、)sound_out = 1b0;elsesound_out = 1b1;endend endmodule蓝牙主模块代码timescale 1n s/1psmodule uart_top(clk,rst_n,rs232_rx,led,led_new);input clk; / 时钟信号 50Minput rst_n; / 复位信号, 低有效input rs232_rx; / 数据输入信号 / 数据输出信号output 9:0 led;output 7:0 led_new;wire 7:0 led_new;wire bps_start1,bps_start2;/wire clk_bps1,clk

19、_bps2;wire 7:0 rx_data; / 接收数据存储器 , 用来存储接收到的数据 , 直到下一个数据接收wire rx_int; /接收数据中断信号 , 接收过程中一直为高 ,/ 子 模 块 端 口 申 明 /speed_select_rx speed_rx( /数据接收波特率选择模块.clk(clk),.rst_n(rst_n),.bps_start(bps_start1),.clk_bps(clk_bps1);uart_rx uart_rx( / 数据接收模块.clk(clk),.rst_n(rst_n),.bps_start(bps_start1),.clk_bps(clk_

20、bps1),.rs232_rx(rs232_rx),.rx_data(rx_data),.rx_int(rx_int),.led(led),.led_new(led_new);Endmodule波特率设置以及信号检测代码波特率设定module speed_select_rx(clk,rst_n,bps_start,clk_bps);/input clk; /50M时钟input rst_n; /复位信号input bps_start; / 接收到信号以后 , 波特率时钟信号置位 , 当接收到 uart_rx 传来的信 号以后, 模块开始运行output clk_bps; / 接收数据中间采样点

21、 ,/ defi ne BPS_PARA 5207;/9600 波特率分频计数值/ defi ne BPS_PARA_2 2603;/计数一半时采样reg12:0 cnt;/分频计数器reg clk_bps_r;/波特率时钟寄存器reg2:0 uart_ctrl;/ 波特率选择寄存器always (posedge clk or posedge rst_n)if(rst_n)cnt=13d0;else if(cnt=5207)| !bps_start)/判断计数是否达到 1 个脉宽cnt=13d0;elsecnt=cnt+1b1;/ 波特率时钟启动always (posedge clk or p

22、osedge rst_n) beginif(rst_n)clk_bps_r=1b0;else if(cnt= 2603)/ 当波特率计数到一半时 ,进行采样存储clk_bps_r=1b1;elseclk_bps_r=1b0;endassign clk_bps = clk_bps_r;/将采样数据输出给 uart_rx 模块endmodule蓝牙数据接收以及编码代码module uart_rx(clk,rst_n,bps_start,clk_bps,rs232_rx,rx_data,rx_int,led,led_new);input clk; /时钟input rst_n; /复位input r

23、s232_rx; / 接收数据信号input clk_bps; / 高电平时为接收信号中间采样点output bps_start; /接收信号时 , 波特率时钟信号置位output 7:0 rx_data;/ 接收数据寄存器output rx_int; / 接收数据中断信号 , 接收过程中为高output 9:0 led;output reg7:0 led_new;reg 9:0 led;reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;/ 接收数据寄存器wire neg_rs232_rx;/ 表示数据线接收到下沿always (posedge clk o

24、r posedge rst_n) beginif(rst_n) beginrs232_rx0 = 1b0;rs232_rx1 = 1b0;rs232_rx2 = 1b0;rs232_rx3 = 1b0;endelse beginrs232_rx0 = rs232_rx;rs232_rx1 = rs232_rx0;rs232_rx2 = rs232_rx1;rs232_rx3 = rs232_rx2;endend串口传assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & rs232_rx1 & rs232_rx0;/ 输线的下沿标志reg bps_start

25、_r;reg 3:0 num;/移位次数reg rx_int; /接收中断信号always (posedge clk or posedge rst_n)if(rst_n) beginbps_start_r =1bz;rx_int = 1b0;endelse if(neg_rs232_rx) begin/bps_start_r = 1b1; / 启动串口 , 准备接收数据rx_int = 1b1; / 接收数据中断使能endbps_start_r =1b0; /接收完毕 , 改变波特率置位 , 方便下次接收rx_int = 1b0; / 接收信号关闭endassign bps_start = b

26、ps_start_r;reg 7:0 rx_data_r;/ 串口数据寄存器reg 7:0 rx_temp_data;/ 当前数据寄存器always (posedge clk or posedge rst_n)if(rst_n) beginled=10b000_0000000;rx_temp_data = 8d0;num = 4d0;rx_data_r = 8d0;endelse if(rx_int) begin /接收数据处理if(clk_bps) beginnum = num+1b1;case(num)4d1: rx_temp_data0 = rs232_rx;4d2: rx_temp_d

27、ata1 = rs232_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;8b000000

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

29、01: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;endelse if

30、(num=4d12) beginnum = 4d0; / 数据接收完毕rx_data_r=rx_temp_data;endendassign rx_data = rx_data_r;endmoduleVGA数据接收以及编码代码module keyna(control,clr,clk,tone);input 9:0 control;input clk;input clr;output reg 20:0 tone;always (posedge clk or posedge clr)if(clr=1b1)tone=21d0;elsebegincase(control9:7)3b100:begin7

31、b1000000: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_0

32、000_0000_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

33、_0000_0001_0000_0000;endcase end3b001: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_0000_0000_0000_0100;7b0000010:tone=2

34、1b0_0000_0000_0000_0000_0010;7b0000001:tone=21b0_0000_0000_0000_0000_0001;endcaseenddefault:tone=21d0;endcaseendendmoduleVGA数据输出代码module vga(clk,clr,hsync,vsync,rgb_8bits,tone);input 20:0 tone;input clk;input clr;output wire hsync;output wire vsync;output rgb_8bits;reg 7:0 rgb_8bits;reg 10:0 cnt_h;r

35、eg 9:0 cnt_v;wire 10:0 count_h;wire 9:0 count_v;assign count_h = cnt_h-150;assign count_v = cnt_v;always(posedge clk or posedge clr)beginif(clr)cnt_h = 11d0;else if(cnt_h = 11d1056)cnt_h = 11d0;elsecnt_h = cnt_h + 1;endalways(posedge clk or posedge clr)if(clr)cnt_v = 10d0;else if (cnt_v = 10d625)cnt_v = 10d0;else if (cnt_h = 11d1056)cnt_v = cnt_v +1;/*/assign hsync = (cnt_h=11d80) ? 1b0 : 1b1;assign vsync = (cnt_v=100 &count_h=100&count_v=100 &count_h350&count_v=140 &count_h=100&count_v=131 & count_v=170&count_v=161

温馨提示

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

评论

0/150

提交评论