【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
    评论
作为硬件工程师入门FPGA,以下是一议和步骤: 1. 学习数字电基础知识:了解数字逻辑、布尔代数、逻辑门、时序等基本概念。 2 学习硬件描述语(HDL):掌握Verilog或VHDL等HDL语言,这是描述和设计FPGA电路的基本工具。 3. 了解FPGA架构:学习不同FPGA系列的架构、资源分配、时序等特性,例如Xilinx的7系列或者Altera的Cyclone系列。 4. 熟悉FPGA开发工具:掌握主流的FPGA开发工具,如Xilinx的Vivado或Altera的Quartus。学习工具的使用方法,包括项目创建、约束设置、综合、实现和下载等。 5. 学习IP核的使用:了解常用的IP核,如时钟管理单元、存储器控制器、串行通信接口等。学会在设计中利用这些IP核提高开发效率。 6. 进行实践项目:通过完成一些小型的FPGA项目来实践所学知识。可以从简单的LED闪烁、数码管显示开始,逐步扩展到更复杂的项目。 7. 深入学习时序分析和布局布线优化:时序分析是确保FPGA设计正确性的重要环节,而布局布线优化可以提高电路性能。 8. 参考文档和资源:阅读FPGA厂商的文档、用户手册和应用笔记,参与在线论坛或社区,获取更多的学习资源和实践经验。 9. 持续学习和实践:FPGA技术在不断发展,新的芯片、工具和技术不断涌现。作为硬件工程师,要保持学习的态度,跟随行业的发展,并持续进行实践项目。 记住,学习FPGA需要一定的时间和耐心。通过不断学习和实践,你将逐渐掌握FPGA设计的基本原理和技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值