前言:再次回顾这个小项目已是几个月后了,在后续的学习中,新的老师在不断强调,实际工作中尽量少用状态机,整理文章时忘了当时他咋说的了。所以我试着自己重新写一下UART,整理一个不带状态机的版本。
这里有几个基础的逻辑点要再次回顾一下:
1)完整的一帧数据格式包含:起始位,有效数据位,校验位,停止位;
2)计算单bit数据的传输时间:利用baoud(波特率)和clk(系统时钟),波特率单位bit per second,时钟Hz单位time per second ,所以时钟除以波特率得到的就是time per bit,即每bit对应多少个时钟周期;
3)参考信号:传输信号baoud_cnt_half,每bit计数到一半的时候,传递数据;切换计数信号baoud_cnt_end,每bit计数完的时候,进入下一轮计数周期;位计数bit_cnt,计算一帧数据中传递到第几位了;传输过程标志信号start_flag,贯穿每一次的数据传输。
上代码:
//date:2022.6.30
//edgar.yao
//uart_tx block
module uart_tx(
input clk,
input rst_n,
input[7:0] cmd_data,
input data_valid,
output tx,
output tx_ready
);
parameter CHECK_MODE = 2;
paramet
UART TX模块设计:无状态机实现
本文介绍了UART传输模块的设计,特别是TX部分,强调了在实际工作中避免使用状态机的方法。文中回顾了一帧数据的完整格式,包括起始位、数据位、校验位和停止位,并详细阐述了如何计算单bit数据的传输时间,以及利用baud率和系统时钟的关系。此外,还提出了参考信号的概念,如baoud_cnt_half、baoud_cnt_end和bit_cnt,以及传输过程中的标志信号start_flag。最后,作者提供了代码供读者参考,并邀请读者提问交流。
订阅专栏 解锁全文
1647





