FPGA上板项目(五)——UART测试,串口发送

发布于:2024-12-18 ⋅ 阅读:(64) ⋅ 点赞:(0)


实验内容

  • 每隔1s,串口发送一次 “HELLO!”

UART 相关的原理 野火FPGA跟练(四)——串口RS232、亚稳态、串口RS485 中做过阐述,本篇文章将在此基础上优化,并进行上板验证。

串口发送模块

模块框图

在这里插入图片描述

引脚 方向 位宽 说明
clk in 1 时钟
rst_n in 1 同步低复位
tx_data in 8 发送数据
tx_valid in 1 发送数据有效标志位
tx_pin out 1 发送端引脚
tx_ready out 1 发送端准备标志位
  • tx_valid:表征 tx_data 的有效性,tx_valid 为高时表示 tx_data 可用,可以进行后续的并串转换。

  • tx_ready:tx_ready 为高时表示发送缓冲区为空, tx_data 已经并串转换为 tx_pin,一帧数据转换已结束,发送端已准备好发送下一帧数据。

时序波形

在这里插入图片描述

状态变量分析:

  • IDLE:空闲状态,此时 TX_PIN 为高,TX_READY 为高。
  • START:发送起始位(TX_PIN 为低)
  • DATA:发送数据位,此时 BIT_CNT 开始计数,从 0-7。
  • STOP:发送停止位(TX_PIN 为高)

仿真结果

对编写的 HDL 代码进行仿真,仿真时序图如下。逐个信号进行比对后,可以看出,仿真结果与预想的时序波形相同。

在这里插入图片描述

下面检验比特信息是否正确,对上面的波形图进行比特位截取。此时,这一帧要发送的数据为11,即 0000 1011,低位先发则顺序调整为 1101 0000,可以从图中看出,比特信息发送正确。

在这里插入图片描述

顶层模块设计

实验内容回顾:每隔一秒,串口发送一次“HELLO!”

时序波形

在这里插入图片描述

  • 1s_CNT 计数达 MAX 后,TX_VALID 拉高,开始发送数据
  • 每发送完一个字符(即 TX_READY 为高,TX_READY_2 为低时),TX_CNT 计数加一
  • TX_DATA 依据 TX_CNT 的数值变化而更新
  • 当 TX_CNT 不为零且 TX_READY_2 为高的时候(即 TX_DATA 更新的时候),TX_VALID 再次将自己拉高

仿真结果

对编写的 HDL 代码进行仿真,仿真时序图如下。逐个信号进行比对后,可以看出,仿真结果与预想的时序波形相同。

在这里插入图片描述

  • one_sec_cnt 达到 MAX 后,tx_valid 被拉高,开始发送数据

在这里插入图片描述在这里插入图片描述

  • 发送完一个字符后,tx_valid 被重新拉高。
  • 发送完最后一个字符后,tx_valid 保持为低,等待下一个 one_sec_cnt 计数结束

上板验证

在这里插入图片描述

  • 通过串口助手可以看到,每隔1s,串口发送了一次“HELLO!”

网站公告

今日签到

点亮在社区的每一天
去签到