UART串口收发 Verilog Vivado

名称:UART串口收发 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

这是一个基于Verilog和Vivado的UART串口收发设计,顶层模块为my_uart_top。设计提供RS232串行接收与发送通路,并通过8位并行数据接口连接上层逻辑,适合学习UART收发结构、模块划分及串口回环仿真方法。 工程将波特率时序、接收处理和发送处理拆分为独立模块。发送端接收tx_data及tx_vld控制信号并输出rs232_tx;接收端从rs232_rx获取串行数据,形成8位rx_data输出。顶层统一连接50 MHz时钟、低电平复位及收发信号。 配套仿真以0x45作为发送数据,将tx回接至rx,并检查接收端是否得到相同数据。工程还提供对应的仿真波形与模块说明,便于结合设计结构理解串口数据发送、接收及回环验证流程。

运行环境

硬件描述语言:Verilog 开发软件:Xilinx Vivado 仿真方式:Vivado 行为仿真

设计思路

设计以UART串口收发为核心,采用50 MHz主时钟和低电平复位。顶层模块将波特率时序、串口接收和串口发送分别交由独立模块处理,并通过串行输入、串行输出及8位数据接口连接各部分。 发送侧在发送使能有效时,将输入的8位数据转换为RS232串行信号;接收侧监测串行输入并将接收结果输出到8位数据寄存器。波特率模块提供收发过程使用的位时序节拍,便于发送和采样逻辑按统一节奏工作。 仿真采用串口回环方式:发送数据0x45,将发送端tx信号连接至接收端rx,并观察接收数据是否恢复为0x45。该测试用于检查发送与接收链路的数据传递。

模块结构

工程主要由以下模块组成: - `my_uart_top`:顶层模块,连接波特率、UART发送和UART接收模块,并提供时钟、复位、串行信号及并行数据接口。 - `speed_select`:波特率时序模块,为收发逻辑提供位周期节拍信号。 - `my_uart_tx`:发送模块,根据输入数据和发送使能产生串行发送信号。 - `my_uart_rx`:接收模块,对串行输入进行接收处理并输出8位数据。 - `test_bench`:仿真测试模块,用于串口回环测试。

演示视频

工程配有UART串口收发演示视频,可结合发送、接收信号观察数据传输过程。

仿真图/仿真说明/设计文档图片

设计文档展示了工程文件、程序编译、RTL结构、Testbench及整体仿真波形,并分别给出波特率、发送和接收模块的仿真说明。回环测试将UART发送信号tx连接至接收信号rx,发送0x45后观察接收数据,用于核对收发链路的数据一致性。

UART串口收发 Verilog Vivado 设计文档图片 image1.png

UART串口收发 Verilog Vivado 设计文档图片 image10.png

UART串口收发 Verilog Vivado 设计文档图片 image2.png

UART串口收发 Verilog Vivado 设计文档图片 image3.png

UART串口收发 Verilog Vivado 设计文档图片 image4.png

UART串口收发 Verilog Vivado 设计文档图片 image5.png

UART串口收发 Verilog Vivado 设计文档图片 image6.png

UART串口收发 Verilog Vivado 设计文档图片 image7.png

UART串口收发 Verilog Vivado 设计文档图片 image8.png

UART串口收发 Verilog Vivado 设计文档图片 image9.png

部分代码

以下展示顶层模块 my_uart_top 的部分代码,完整源码请下载压缩包查看。

module my_uart_top(clk,rst_n,rs232_rx,rs232_tx,rx_data,tx_data,tx_vld);

input clk;	// 50MHz主时钟
input rst_n;	//低电平复位信号
input rs232_rx;	// RS232接收数据信号
output rs232_tx;	//	RS232发送数据信号
output [7:0] rx_data;	//接收数据寄存器
input  [7:0] tx_data;	//发送数据寄存器
input  tx_vld;//发送使能

wire bps_start;	//接收到数据后,波特率时钟启动信号置位
wire clk_bps;		// clk_bps的高电平为接收或者发送数据位的中间采样点 

wire rx_int;	//接收数据中断信号,接收到数据期间始终为高电平
//----------------------------------------------------
//波特率模块
speed_select		speed_select(	.clk(clk),	
											.rst_n(rst_n),
											.bps_start(1),
											.clk_bps(clk_bps)
											);
//接收数据模块
my_uart_rx			my_uart_rx(		.clk(clk),	//接收数据模块
											.rst_n(rst_n),
											.rs232_rx(rs232_rx),
											.clk_bps(clk_bps),
											.rx_data(rx_data),
											.rx_int(rx_int)
											);
//发送数据模块
my_uart_tx			my_uart_tx(		.clk(clk),	//发送数据模块
											.rst_n(rst_n),
											.clk_bps(clk_bps),
											.rx_data(tx_data),
											.tx_vld(tx_vld),
											.rs232_tx(rs232_tx)
											);

endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » UART串口收发 Verilog Vivado

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员