FPGA蓝牙控制电子琴Word下载.docx
- 文档编号:4241269
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:24
- 大小:129.27KB
FPGA蓝牙控制电子琴Word下载.docx
《FPGA蓝牙控制电子琴Word下载.docx》由会员分享,可在线阅读,更多相关《FPGA蓝牙控制电子琴Word下载.docx(24页珍藏版)》请在冰点文库上搜索。
3、A模块(VGA模块由周玲同学编写实现)
4、分频器模块
分频器模块的ASM图--------------------------------------------------------------------------------------------7
5、仿真--------------------------------------------------------------------------------------------------------------------8
6、资源利用以及布局布线后的时序--------------------------------------------------------------------------------9
7、开发板截图-----------------------------------------------------------------------------------------------------------10
8、代码一览-------------------------------------------------------------------------------------------------------------11
波特率设置模块以及检波
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)
else
=cnt+1'
b1;
always@(posedgeclkorposedgerst_n)begin
clk_bps_r<
=1'
b0;
elseif(cnt==2603)
end
assignclk_bps=clk_bps_r;
endmodule
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:
regrs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;
wireneg_rs232_rx;
if(rst_n)begin
rs232_rx0<
=1'
rs232_rx1<
rs232_rx2<
rs232_rx3<
elsebegin
=rs232_rx;
=rs232_rx0;
=rs232_rx1;
=rs232_rx2;
assignneg_rs232_rx=rs232_rx3&
rs232_rx2&
~rs232_rx1&
~rs232_rx0;
regbps_start_r;
reg[3:
0]num;
regrx_int;
bps_start_r<
bz;
rx_int<
elseif(neg_rs232_rx)begin//
elseif(num==4'
d12)begin
assignbps_start=bps_start_r;
reg[7:
0]rx_data_r;
0]rx_temp_data;
rx_temp_data<
=8'
num<
=4'
rx_data_r<
elseif(rx_int)begin
if(clk_bps)begin
=num+1'
case(num)
4'
d1:
rx_temp_data[0]<
d2:
rx_temp_data[1]<
d3:
rx_temp_data[2]<
d4:
rx_temp_data[3]<
d5:
rx_temp_data[4]<
d6:
rx_temp_data[5]<
d7:
rx_temp_data[6]<
d8:
rx_temp_data[7]<
default:
;
endcase
case(rx_temp_data)
led_new<
=rx_temp_data;
d12)begin
//数据接收完毕
rx_data_r<
end
assignrx_data=rx_data_r;
modulesound(clk,rst_n,led_new,sound_out);
inputclk;
input[7:
outputregsound_out;
reg[18:
0]fre;
reg[31:
0]value=0;
always@(posedgeclkorposedgerst_n)
begin
if(rst_n)
value<
else
case(led_new)
8'
fre<
=18'
d18898;
d21212;
d19515;
d25223;
d28315;
d31783;
d35674;
d37796;
d9:
d42424;
d10:
d47588;
d11:
d50451;
d12:
d56608;
d13:
d63566;
d14:
d71348;
d15:
d75592;
d16:
d84843;
d17:
d95177;
d18:
d100846;
d19:
d113259;
d20:
d127130;
d21:
d142680;
default:
d86;
endcase
value<
=value+fre;
end
//--------------------------------------
sound_out<
if(value<
32'
h7FFF_FFFF)
sound_out<
仿真
FPGA开发的布局布线后的时序和资源利用报告
实验成功的开发板截图
最终主模块代码
moduletonetop(clk,clr,rxd,hsync,vsync,rgb_8bits,sound_out);
inputclr;
inputrxd;
outputhsync;
outputvsync;
0]rgb_8bits;
outputsound_out;
wire[7:
wire[9:
0]control;
wire[20:
0]tone;
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),.hsync(hsync),.vsync(vsync),.rgb_8bits(rgb_8bits));
Endmodule
分频器代码
//parameterFREQ_WORD=32'
d44;
//1KHz
蓝牙主模块代码
`timescale1ns/1ps
moduleuart_top(clk,rst_n,rs232_rx,led,led_new);
//时钟信号50M
//复位信号,低有效
//数据输入信号//数据输出信号
wire[7:
wirebps_start1,bps_start2;
wireclk_bps1,clk_bps2;
//接收数据存储器,用来存储接收到的数据,直到下一个数据接收
wirerx_int;
//接收数据中断信号,接收过程中一直为高,
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////子模块端口申明///////////////////////////////////
speed_select_rxspeed_rx(//数据接收波特率选择模块
.clk(clk),
.rst_n(rst_n),
.bps_start(bps_start1),
.clk_bps(clk_bps1)
);
uart_rxuart_rx(//数据接收模块
.clk_bps(clk_bps1),
.rs232_rx(rs232_rx),
.rx_data(rx_data),
.rx_int(rx_int),
.led(led),
.led_new(led_new)
波特率设置以及信号检测代码
//波特率设定
//50M时钟
//复位信号
inputbps_start;
//接收到信号以后,波特率时钟信号置位,当接收到uart_rx传来的信号以后,模块开始运行
//接收数据中间采样点,
//`defineBPS_PARA5207;
//9600波特率分频计数值
//`defineBPS_PARA_22603;
//计数一半时采样
reg[12:
//分频计数器
//波特率时钟寄存器
//波特率选择寄存器
bps_start)//判断计数是否达到1个脉宽
//波特率时钟启动
elseif(cnt==2603)//当波特率计数到一半时,进行采样存储
//将采样数据输出给uart_rx模块
蓝牙数据接收以及编码代码
moduleuart_rx(
clk,
rst_n,
bps_start,
clk_bps,
rs232_rx,
rx_data,
rx_int,
led,
led_new
//时钟
//复位
//接收数据信号
//高电平时为接收信号中间采样点
//接收信号时,波特率时钟信号置位
//接收数据寄存器
//接收数据中断信号,接收过程中为高
//表示数据线接收到下沿
//串口传输线的下沿标志
reg[3:
//移位次数
//接收中断信号
//启动串口,准备接收数据
//接收数据中断使能
d12)begin//接收完有用的信号,
//接收完毕,改变波特率置位,方便下次接收
//接收信号关闭
//串口数据寄存器
//当前数据寄存器
elseif(rx_int)begin//接收数据处理
=rx_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 蓝牙 控制 电子琴