verilog实现UART通信,工程实用--FPGA

    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
在这里插入图片描述

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA之鸟飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值