UART 串口收发控制 Verilog Quartus

名称:UART 串口收发控制 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

该设计实现了基于 Verilog 的 UART 串行收发顶层,包含波特率节拍生成、串口接收、串口发送和按键消抖。接口提供 RS232 接收输入 `rs232_rx`、发送输出 `rs232_tx`、8 位接收数据 `rx_data`,以及时钟、复位和按键输入。 接收通路由 `my_uart_rx` 完成串行数据接收,并将结果送至 `rx_data`。发送通路由 `my_uart_tx` 完成串行输出,发送使能来自消抖按键的下降沿;顶层发送数据固定连接为 `8'h45`。工程适合用于了解 UART 收发模块的顶层集成,以及波特率节拍和按键控制信号之间的连接关系。

运行环境

硬件描述语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA 开发板

设计思路

顶层以 50 MHz 时钟和低电平复位为基础,围绕 RS232 串行收发组织数据通路。接收端将 `rs232_rx` 输入交给 `my_uart_rx`,并由 `clk_bps` 提供位中间采样节拍,接收结果输出到 8 位 `rx_data`;发送端由 `my_uart_tx` 驱动 `rs232_tx`,同样使用该波特率节拍完成串行发送。 `speed_select` 负责产生波特率时钟,顶层将其启动输入保持有效。按键输入先经过 `key_jitter` 消抖,消抖后的下降沿连接到发送使能 `tx_vld`,用于触发发送过程。顶层当前将固定数据 `8'h45` 接入发送模块,因此该设计展示了按键触发、串口接收和串口发送模块的组合方式。

模块结构

顶层模块为 `my_uart_top`,主要由以下子模块组成: - `speed_select`:根据时钟、复位和启动信号生成 `clk_bps` 波特率节拍。 - `my_uart_rx`:接收 `rs232_rx` 串行信号,并输出 8 位 `rx_data` 与接收状态信号。 - `my_uart_tx`:根据发送使能和波特率节拍输出 `rs232_tx`,顶层发送数据连接为 `8'h45`。 - `key_jitter`:对按键输入进行消抖,下降沿信号用于触发发送。

开发板验证

工程包含 Cyclone IV FPGA 开发板的管脚分配约束,可用于对应开发板的引脚配置与硬件验证。

部分代码

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

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

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  key_in;//按键输入
wire  tx_vld;//发送使能

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

wire rx_int;	//接收数据中断信号,接收到数据期间始终为高电平
//----------------------------------------------------

key_jitter i_key_jitter(
     . clkin(clk),
     
     . key_in(key_in),//输入
	  . key_posedge(),//消抖后按键上升沿
	  . key_negedge(tx_vld),//消抖后按键下降沿
     . key_value()	//消抖后按键
);

//波特率模块
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(8'h45),
											.tx_vld(tx_vld),
											.rs232_tx(rs232_tx)
											);

endmodule

代码文件(付费下载)

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

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

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