目录
实验内容
- 每隔1s,串口发送一次 “HELLO!”
UART 相关的原理 野火FPGA跟练(四)——串口RS232、亚稳态、串口RS485 中做过阐述,本篇文章将在此基础上优化,并进行上板验证。
串口发送模块
模块框图
引脚方向位宽说明clkin1时钟rst_nin1同步低复位tx_datain8发送数据tx_validin1发送数据有效标志位tx_pinout1发送端引脚tx_readyout1发送端准备标志位
- 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!”
版权归原作者 _做个辣妹 所有, 如有侵权,请联系我们删除。