【FPGA入门十】串口通信

一.串口通信

什么是串口?
在这里插入图片描述
在这里插入图片描述
LSB:低位 MSB:高位

二.串口发送模块

①文件方式保存常量

常用波特率新建一个文件保存
uart_parameter.v

`define CLOCK 50_000_000
`define BAUD_9600 `CLOCK/9600 - 1 //发送1比特的时间
`define BAUD_19200 `CLOCK/19200 - 1
`define BAUD_38400 `CLOCK/38400 - 1
`define BAUD_57600 `CLOCK/57600 - 1
`define BAUD_115200 `CLOCK/115200 - 1

②串口发送模块

该模块实现接收8位并行数据处理后串行输出。
该模块使用了uart_parameter.v文件的内容,使用语句`include "XXX.v"引用。
uart_tx.v

`include "uart_parameter.v"
module uart_tx(
	input  wire 		clk     ,//时钟信号
	input  wire 		rst_n   ,//复位信号
	input  wire [2:0] baud_set,//波特率选择
	input  wire [7:0] data_in ,//接收的并行数据
	input  wire 		rx_done ,//接收方,信息处理完毕信号
	
	output reg 			data_tx  //将并行数据处理为串行并输出
);

reg [12:0] 	baud_rate;//波特率
reg [12:0]	cnt_baud ;//波特率计数寄存器
reg [3 :0] 	cnt_bit  ;//比特计数寄存器 一帧有10bit,1位起始位,8位数据位,1位结束位
reg 			work_en  ;//工作使能 1:工作状态 0:非工作状态
reg 			bit_flag ;//数据采集信号 1:采集 0:不采集

wire bit_done;//10bit数据采集结束
wire end_bit;//bit结束
wire start_bit;//bit开始

//波特率设置
always@(*)begin
	case(baud_set)
		3'd0   :	baud_rate = `BAUD_9600;
		3'd1   :	baud_rate = `BAUD_19200;
		3'd2   :	baud_rate = `BAUD_38400;
		3'd3   :	baud_rate = `BAUD_57600;
		3'd4   :	baud_rate = `BAUD_115200;
		default:	baud_rate = `BAUD_9600;
	endcase
end

//工作使能信号处理
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		work_en <= 1'b0;
	end
	else if(bit_done)begin//10bit数据采集结束,工作使能设置为非工作状态
		work_en <= 1'b0;
	end
	else if(rx_done)begin//接收方信息处理完毕,工作使能设置为工作状态,继续发送数据
		work_en <= 1'b1;
	end
	else begin
		work_en <= work_en;
	end
end

assign bit_done = cnt_bit == 4'd9 && cnt_baud == 13'd1;//当比特计数从0达到9 且波特率计数器数到1 最后一个bit数据采集完毕

//波特率计数器
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		cnt_baud <= 13'd0;
	end
	else if(cnt_baud == baud_rate || work_en == 1'b0)begin//当波特率计数器数到波特率最大值,或非工作状态 波特率计数器清零
		cnt_baud <= 13'd0;
	end
	else if(work_en == 1'b1)begin//处于工作状态,波特率计数器累加1
		cnt_baud <= cnt_baud + 1'd1
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值