UART即通用异步收发器,是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收。
废话少说,本模块通过Verilog实现UART_TX,UART_RX单元,其RX主要信号如下:
uart_rx #(
parameter CYCLE = 234, //CYCLE = CLK_FRE * 1000000 / BAUD_RATE;
parameter FRAME_INTERVAL= 2700, //接受一帧停顿时钟数,超过此数代表一帧结束
parameter PARITY_CHECK = 2'b10, //2'b10,2'b11无效验,2'b00奇效验,2'b01偶效验
parameter STOP_BIT = 2'b00 //2'b00,2'b11 1位停止位,2'b01 1.5位停止位,2'b10 2位停止位
)
(
input clk, //clock input
input rst_n, //asynchronous reset input, low active
output reg [7:0] rx_data, //received data
output reg rx_data_valid, //received data is valid
output reg frame_end, //End of one frame of received data
output reg error_parity, //0效验通过,1效验出错
input rx_data_ready, //data receiver ready,一般FPGA并行处理特性,这里可设置位1
input rx_pin //uart_rx input
);
其TX主要信号如下:
uart_tx
#(
parameter CYCLE = 234, //CYCLE = CLK_FRE * 1000000 / BAUD_RATE;
parameter PARITY_CHECK = 2’b10, //2’b10,2’b11无效验,2’b00奇效验,2’b01偶效验
parameter BYTE_WAIT = 15, //发送一个byte等待时钟数,才能发送下次数据
parameter STOP_BIT = 2’b00 //2’b00,2’b11 1位停止位,2’b01 1.5位停止位,2’b10 2位停止位
)
(
input clk, //clock input
input rst_n, //asynchronous reset input, low active
input[7:0] tx_data, //data to send
input tx_data_valid, //data to be sent is valid
output reg tx_data_ready, //send ready
output tx_pin //uart_tx output
);
本模块可实现rx接受可变长度的帧格式,即一帧数据长度不固定,提供测试实例。测试实例接受7byte和10byte可变数据帧,接受一帧是7时,将前6位异或代替第7位数据通过TX返还上位机如下:
接受一帧是10时,将前9位相加(取低8位)代替第10位数据通过TX返还上位机如下:
需要程序源代码可加V,rxrx0510