6.1 实例十二 UART的发送与接收模块设计
6.1.1. 本章导读
设计目的
(1)学习UART的工作原理,并用verilog设计编写UART的发送/接收模块。
(2)熟练运用Robei软件进行调试模拟仿真。
设计原理
UART的帧格式
异步串行数据的一般格式是:起始位+数据位+结束位,其中起始位是1位,数据位是8位数据或7位数据加1位奇偶校验位,停止位是2位。如图6-1-1所示:
(1)接收原理:
由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,采样模块利用16倍数据波特率的时钟进行采样,假设波特率为115200,则采样时钟为clk16x=115200×16。每个数据占据16个采样时钟周期,1bit起始位+8bit数据位+1bit停止位=10bit,因此一帧共占据16×10=160个采样时钟,考虑到每个数据位可能有1-2个采样时钟周期的偏移,因此将各个数据位的中间时刻作为采样点,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。因此,采样时刻为24(跳过起始位的16个时钟)、40、56、72、88、104、120、136、152(停止位),如下图6-1-2所示:
其中,RX为接收引脚,CNT为对采样时钟进行计数的计数器。
(2)发送原理:
当并行数据准备好后,如果得到发送指令,则将数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位;
由于发送时钟clk16x为波特率的16倍,因此对clk16x计数到16时,发送D0;计数到32时,发送D1……依此类推,如图6-1-3所示;
6.1.2. 设计流程
1. 接收模块的设计
(1)新建一个模型,名为UART,类型为module,具备 3 输入 2 输