第1页共16页深圳大学考试答题纸(以论文、报告等形式考核专用)二○一四~二○一五学年度第2学期课程编号1302480001,02课程名称数字系统设计主讲教师XXXX评分学号XXXX姓名XXX专业年级XXXXX教师评语:题目:蓝牙控制电子发生器摘要:基于Basys2设计平台而搭建的“谱曲软件在fpga上的实现”的系统,融入了蓝牙传输模块,VGA显示模块,以及安卓手机的app应用软件,完成了对课题的基本功能的实现。谱曲软件由我校陈必红老师编写,通过输入“陈谱”,实现了对钢琴曲以及一般的乐曲的播放,软件界面如下在界面的最下部分编写陈谱,再点击装入,就会出现美妙的乐曲第2页共16页1、系统总流程1.1系统总框图------------------------------------------------------------------------------------------------------31.2系统总框图介绍------------------------------------------------------------------------------------------------31.3设计中遇到的难点、舍弃。---------------------------------------------------------------------------------32、蓝牙模块1.1蓝牙模块波特率设置以及信号检测ASM图-------------------------------------------------------------41.2蓝牙主模块、ASM图---------------------------------------------------------------------------------------5,63、A模块(VGA模块由周玲同学编写实现)4、分频器模块4.1分频器模块的ASM图--------------------------------------------------------------------------------------------75、仿真--------------------------------------------------------------------------------------------------------------------86、资源利用以及布局布线后的时序--------------------------------------------------------------------------------97、开发板截图-----------------------------------------------------------------------------------------------------------108、代码一览-------------------------------------------------------------------------------------------------------------11第3页共16页第4页共16页波特率设置模块以及检波modulespeed_select_rx(clk,rst_n,bps_start,clk_bps);//inputclk;inputrst_n;inputbps_start;outputclk_bps;reg[12:0]cnt;regclk_bps_r;reg[2:0]uart_ctrl;always@(posedgeclkorposedgerst_n)if(rst_n)cnt=13'd0;elseif((cnt==5207)||!bps_start)cnt=13'd0;elsecnt=cnt+1'b1;always@(posedgeclkorposedgerst_n)beginif(rst_n)clk_bps_r=1'b0;elseif(cnt==2603)clk_bps_r=1'b1;elseclk_bps_r=1'b0;endassignclk_bps=clk_bps_r;endmodule分频器开始计数,检测信号是否达到一个脉宽(5207)接收到蓝牙主模块的启动信号是否输出1输出0第5页共16页inputclk;inputrst_n;inputrs232_rx;//inputclk_bps;outputbps_start;output[7:0]rx_data;outputrx_int;output[9:0]led;outputreg[7:0]led_new;reg[9:0]led;regrs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;wireneg_rs232_rx;always@(posedgeclkorposedgerst_n)beginif(rst_n)beginrs232_rx0=1'b0;rs232_rx1=1'b0;rs232_rx2=1'b0;rs232_rx3=1'b0;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_rx0;regbps_start_r;reg[3:0]num;regrx_int;always@(posedgeclkorposedgerst_n)if(rst_n)beginbps_start_r=1'bz;rx_int=1'b0;endelseif(neg_rs232_rx)begin//bps_start_r=1'b1;rx_int=1'b1;endelseif(num==4'd12)beginbps_start_r=1'b0;rx_int=1'b0;endassignbps_start=bps_start_r;reg[7:0]rx_data_r;reg[7:0]rx_temp_data;always@(posedgeclkorposedgerst_n)if(rst_n)beginled=10'b000_0000000;rx_temp_data=8'd0;num=4'd0;rx_data_r=8'd0;endelseif(rx_int)beginif(clk_bps)beginnum=num+1'b1;case(num)4'd1:rx_temp_data[0]=rs232_rx;4'd2:rx_temp_data[1]=rs232_rx;4'd3:rx_temp_data[2]=rs232_rx;4'd4:rx_temp_data[3]=rs232_rx;4'd5:rx_temp_data[4]=rs232_rx;4'd6:rx_temp_data[5]=rs232_rx;4'd7:rx_temp_data[6]=rs232_rx;4'd8:rx_temp_data[7]=rs232_rx;default:;endcasecase(rx_temp_data)8'b00000000:led=10'b000_0000000;8'b00000001:led=10'b001_0000001;8'b00000010:led=10'b001_0000010;8'b00000011:led=10'b001_0000100;8'b00000100:led=10'b001_0001000;8'b00000101:led=10'b001_0010000;8'b00000110:led=10'b001_0100000;8'b00000111:led=10'b001_1000000;8'b00001000:led=10'b010_0000001;从蓝牙模块(硬件)处接收到下沿标志启动信号检测模块(即上一个模块)检测后得到1,0信号分八次检测,分别存入8位的寄存器8次编码(10位):输出到VGA模块不编码:输出到分频模块Vga分频第6页共16页8'b00001001:led=10'b010_0000010;8'b00001010:led=10'b010_0000100;8'b00001011:led=10'b010_0001000;8'b00001100:led=10'b010_0010000;8'b00001101:led=10'b010_0100000;8'b00001110:led=10'b010_1000000;8'b00001111:led=10'b100_0000001;8'b00010000:led=10'b100_0000010;8'b00010001:led=10'b100_0000100;8'b00010010:led=10'b100_0001000;8'b00010011:led=10'b100_0010000;8'b00010100:led=10'b100_0100000;8'b00010101:led=10'b100_1000000;endcaseled_new=rx_temp_data;endelseif(num==4'd12)beginnum=4'd0;//数据接收完毕rx_data_r=rx_temp_data;endendassignrx_data=rx_data_r;endmodule注意:因为调试初期是使用led来进行检测的,某些命名不方便改回来,因此就继续沿用第7页共16页modulesound(clk,rst_n,led_new,sound_out);inputclk;inputrst_n;input[7:0]led_new;outputregsound_out;reg[18:0]fre;reg[31:0]value=0;always@(posedgeclkorposedgerst_n)beginif(rst_n)value=1'b0;elsebegincase(led_new)8'd1:fre=18'd18898;8'd2:fre=18'd21212;8'd3:fre=18'd19515;8'd4:fre=18'd25223;8'd5:fre=18'd28315;8'd6:fre=18'd31783;8'd7:fre=18'd35674;8'd8:fre=18'd37796;8'd9:fre=18'd42424;8'd10:fre=18'd47588;8'd11:fre=18'd50451;8'd12:fre=18'd56608;8'd13:fre=18'd63566;8'd14:fre=18'd71348;8'd15:fre=18'd75592;8'd16:fre=18'd84843;8'd17:fre=18'd95177;8'd18:fre=18'd100846;8'd19:fre=18'd113259;8'd20:fre=18'd127130;8'd21:fre=18'd142680;default:fre=18'd86;endcasevalue=value+fre;endend//--------------------------------------always@(posedgeclkorposedgerst_n)beginif(rst_n)sound_out=1'b0;elsebeginif(value32'h7FFF_FFFF)sound_out=1'b0;elsesound_out=1'b1;en