资源描述:
《基于FPGA与PC串口自收发通信-Verilog.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.FPGA与PC串口自收发通信实现的功能如题,就是FPGA里实现从PC接收数据,然后把接收到的数据发回去。使用的是串口UART协议进行收发数据。上位机用的是通用的串口调试助手。发送数据的波特率可选9600bps,19200bps,38400bps,57600bps,115200bps等,是可调的。发送格式为:1bit起始位,8bit数据,1bit停止位,无校验位。以下的代码有比较详细的注释,经过下载验证,存在误码率(<5%),仅供学习!代码如下:(顶层模块):modulemy_uart_top(clk,rst_n,rs232_rx,rs2
2、32_tx);inputclk;//50MHz主时钟inputrst_n;//低电平复位信号inputrs232_rx;//RS232接收数据信号outputrs232_tx;//RS232发送数据信号wirebps_start;//接收到数据后,波特率时钟启动信号置位wireclk_bps;//clk_bps的高电平为接收或者发送数据位的中间采样点wire[7:0]rx_data;//接收数据寄存器,保存直至下一个数据来到wirerx_int;//接收数据中断信号,接收到数据期间始终为高电平//---------------------
3、-------------------------------speed_select教育资料.speed_select(.clk(clk),//波特率选择模块,接收和发送模块复用,不支持全双工通信.rst_n(rst_n),.bps_start(bps_start),.clk_bps(clk_bps));my_uart_rxmy_uart_rx(.clk(clk),//接收数据模块.rst_n(rst_n),.rs232_rx(rs232_rx),.clk_bps(clk_bps),.bps_start(bps_start),.rx_d
4、ata(rx_data),.rx_int(rx_int)教育资料.);my_uart_txmy_uart_tx(.clk(clk),//发送数据模块.rst_n(rst_n),.clk_bps(clk_bps),.rx_data(rx_data),.rx_int(rx_int),.rs232_tx(rs232_tx),.bps_start(bps_start));endmodulemodulespeed_select(clk,rst_n,bps_start,clk_bps);inputclk;//50MHz主时钟inputrst_n;教育
5、资料.//低电平复位信号inputbps_start;//接收到数据后,波特率时钟启动信号置位outputclk_bps;//clk_bps的高电平为接收或者发送数据位的中间采样点parameterbps9600=5207,//波特率为9600bpsbps19200=2603,//波特率为19200bpsbps38400=1301,//波特率为38400bpsbps57600=867,//波特率为57600bpsbps115200=433;//波特率为115200bps教育资料.parameterbps9600_2=2603,bps192
6、00_2=1301,bps38400_2=650,bps57600_2=433,bps115200_2=216;reg[12:0]bps_para;//分频计数最大值reg[12:0]bps_para_2;//分频计数的一半reg[12:0]cnt;//分频计数regclk_bps_r;//波特率时钟寄存器//----------------------------------------------------------reg[2:0]uart_ctrl;//uart波特率选择寄存器//------------------------
7、----------------------------------教育资料.always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginuart_ctrl<=3'd0;//默认波特率为9600bpsendelsebegincase(uart_ctrl)//波特率设置3'd0:beginbps_para<=bps9600;bps_para_2<=bps9600_2;end3'd1:beginbps_para<=bps19200;教育资料.bps_para_2<=bps19200_2;end3'
8、d2:beginbps_para<=bps38400;bps_para_2<=bps38400_2;end3'd3:beginbps_para<=bps57600;bps_para_2<=bp