FPGA实战篇(二)UART通信

FPGA基础程序学习

第二节 UART通信

串行通信:同步串行通信和异步串行通信。同步串行通信需要双方在同一时钟下,同步传输;异步串行通信指双方用各自的时钟控制数据的发送和接收。
UART 是一种采用异步串行通信方式的通用异步收发传输器,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。UART 串口通信需要两根信号线来实现,一根用于发送,另外一根负责接收。UART 在发送或接收过程中的一帧数据由 4 部分组成,起始位、数据位、奇偶校验位和停止位。其中,起始位标志着一帧开始,停止位标志着一帧结束,数据位是一帧数据中的有效数据。校验位分为奇校验和偶校验,用于检验数据在传输过程中是否出错。奇校验时,发送方应使数据位中 1 的个数与校验位中 1 的个数之和为奇数;接收方在接收数据时,对 1 的个数进行检查,若不为奇数,则说明数据在传输过程中出了差错。同样,偶校验则检查 1 的个数是否为偶数。
在这里插入图片描述

顶层

uart_recv 为串口接收模块,从串口接收口 uart_rxd 接收上位机发送的数据,并在一帧数据接收结束后给出通知信号 uart_done。
uart_send 为串口发送模块, uart_en 为使能信号。uart_en 的上升沿启动一次串口发送,将uart_din 接口上的数据通过串口发送端口 uart_txd 发送出去。
uart_loop 模块负责完成串口数据的环回功能。它在 uart_recv 模块接收完成后,将接收到的数据发送到 uart_send 模块,并通过 send_en 接口给出一个上升沿,以启动发送过程。
在写代码前,首先要确定串口通信的数据格式及波特率。我们选择串口比较常用的一种模式,数据位为 8 位,停止位为 1 位,无校验位,波特率为 115200bps。时钟频率 CLK_FREQ 与串口波特率 UART_BPS,使用时根据系统需求设置。在模块例化时将这个变量传递到串口接收与发送模块中,从而实现不同速率的串口通信。
在这里插入图片描述

接收、发送、回环三大模块顶层

在这里插入图片描述

接收模块

信号定义,写程序要前有清晰的认识,
在这里插入图片描述
理清楚逻辑,分成多段写程序,更加清晰,注意注释的书写。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
//数据接收完毕后给出标志信号并寄存输出接收到的数据
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
uart_data <= 8’d0;
uart_done <= 1’b0;
end
else if(rx_cnt == 4’d9) begin //接收数据计数器计数到停止位时
uart_data <= rxdata; //寄存输出接收到的数据
uart_done <= 1’b1; //并将接收完成标志位拉高
end
else begin
uart_data <= 8’d0;
uart_done <= 1’b0;
end
end


今天放假,文章草率,改日修改,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值