【FPGA练习】(一): UART串口通信实验

本文档详细记录了一次基于FPGA的UART串口通信实验,包括UART串口通信介绍、回环测试及字符检测实验。实验中,FPGA实现了串口接收和发送模块,对上位机发送的数据进行回环测试和特定字符检测,当检测到'Hello Word'时,回应'ni hao'并点亮LED,否则回应'no'并熄灭LED。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于之前学习FPGA的过程中,没有做一个良好的记录,以及已学知识的扩展,所以从今天开始每一个实验例程和扩展应用,都要做文档记录。本实验,是基于正点原子达芬奇xc7a35tfgg484-2开发板。开发板时钟为50Mhz,采用RS232的通信协议。

1.UART串口通信简介

        串口数据的发送与接收都是基于帧结构的,即一帧一帧的发送与接收数据。每一帧除了中间包含8bit有效数据外,还在每一帧的开头都必须要有一个起始位,且固定为0;在每一帧的结束时,也必须要有一个停止位,且固定为1,即最基本的帧结构(不包括校验等)有10bit。在不发送或不接收数据的情况下,rx和tx处于空闲状态,此时rx和tx都保持高电平。

        后续则在上述实验原理的基础下,完成以下两个实验。

2.实验一:回环测试

        输入回环测试,即输入即输出。当上位机通过串口调试工具发送数据给FPGA,FPGA再通过串口接收数据并将接收到的数据返送给上位机,完成串口数据回环。

2.1.串口接收模块

        串口发送模块将输入的8位并行数据进行串行输出。串口发送模块uart_rx代码如下:

module uart_rx
#(
	parameter	UART_BPS		=	'd19200,
	parameter	CLK_FREQ		=	'd50_000_000
)
(
	input	wire				sys_clk,
	input	wire				sys_rst_n,
	input	wire				rx,
	
	output	reg		[7:0]		Po_data,
	output	reg					Po_flag
);
	parameter		BAUD_CNT_MAX = CLK_FREQ/UART_BPS ;

	reg					rx_reg1;
	reg					rx_reg2;
	reg					rx_reg3;
				
	reg					start_nedge;
	reg					work_en;
	reg		[15:0]		baud_cnt;
	reg					bit_flag;
				
	reg		[3:0]		bit_cnt;
	reg		[7:0]		rx_data;
	reg					rx_flag;
	
	//插入两级寄存器进行数据同步,用来消除亚稳态
	always@(posedge sys_clk or negedge sys_rst_n)begin
		if(sys_rst_n == 1'b0)
			rx_reg1	<=	1'b1;
		else
			rx_reg1 <=	rx;
	end
	
	always@(posedge	sys_clk	or negedge	sys_rst_n)begin
		if(sys_rst_n == 1'b0)
			rx_reg2 <= 	1'b1;
		else
			rx_reg2	<=	rx_reg1;
	end
	
	always@(posedge sys_clk or negedge sys_rst_n)begin
		if(sys_rst_n == 1'b0)
			rx_reg3	<=	1'b1;
		else
			rx_reg3 <=	rx_reg2;
	end
	
	always@(posedge 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值