UART IP设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UART IP设计文档

1,主要特征;

UART采用的是一种起止式异步协议,特点是一个字符一个字符地传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。一个字符传送完成后,奇偶校验位之后的停止位和空闲位都规定为高电平,而起始位为低电平,这样就保证起始位开始处一定有个下降沿,这个下降沿用来界定一个字符传输的开始,它的到来就表示下面是数据位,要准备接收;而停止位标志一个字符的结束,它的出现表示一个字符传送完毕,这样就为通信双方提供了何时开始收发和何时结束的标志。

2,整体框图

图2.1 UART IP整体框图

UART IP的整体框图如图2.1所示。它有控制电路模块、发送控制模块和接收控制模块三部分组成。CPU通过对控制电路模块中的寄存器进行设置达到对内部电路的控制和管理,从而实现UART和CPU以及其它UART模块间的数据收发功能。3,整个模块的外部接口

图3.1 UART IP外部接口

4,子模块说明

(一)控制电路模块

该模块的主要功能为:a、与CPU接口,将CPU对内部控制寄存器的写操作转化

为对发送控制器和接收控制器的控制信号;b、将CPU写入到内部数据发送寄存器的数据进行锁存并提供给发送控制器;c、将接收控制器接收的数据提交给CPU,同时提交接收数据的状态信息;d、对收、发控制器的中断进行管理。对于中断寄存器的读操作同时对寄存器清零,以避免重复产生中断,这需要专门的电路进行维护和管理。

(二)发送控制模块

该模块的主要功能为:a、根据clk_div_ctl给出的时钟分频比将xmt_data上的数据按照从低位到高位的顺序依次发出。在数据发送过程中需要根据规范插入起始位、奇偶校验位和停止位。b、发送控制器在xmt_en为高电平时开始向线路方向发送数据。完成当前字节发送后通过xmt_over通知控制电路当前发送完成,由控制电路负责产生中断和进行中断管理。

发送控制模块的仿真波形如下:

图4.1发送控制模块仿真波形

a.当发送状态机处于idle状态时,如果xmt _en有效则产生一个clk_cnt_clr 信号,用于对时钟计数器清零,同时进入start状态,见图4.1中“1”处。

b.在start状态下,如果sample有效则输出起始位,同时进入data状态,见图

4.1中“2”处。

c.在data状态下,在sample有效时连续输出8位数据。最后一个比特开始输出后进入parity状态,准备输出奇偶校验位,,见图4.1中“3”处。

d.在parity状态下,如果出现sample则进入stop状态,在stop状态下如果sample有效则输出截止位,并进入waiting状态,见图4.1中“4”处。

e.在waiting状态下,截止位保持有效,并在sample有效时进入idle状态,sdout 持续为1,见图4.1中“5”处。

f在由waiting进入idle状态时,输出xmt_over信号,通知控制电路当前数据发送完成。注意这里的xmt_over信号只是在一个时钟周期内保持有效,见图4.1中“6”处.

(三)接收控制模块

该模块的主要功能为:a、检测接收数据中的起始位,并完整地接收数据。b、根

据接收数据进行奇偶校验,判断数据是否正确接收,并产生接收数据状态(rcv_status),接收控制器通过rcv_ready通知控制电路当前rcv_data上的数据是当前接收的有效数据。由控制电路锁存该数据并产生中断,通知CPU存在需要处理的接收数据。

接收控制模块的仿真波形如下:

图4.2接收控制模块仿真波形

a.当接收状态机处于idle状态时,如果sof有效则时钟计数器将被清零,同时进入start状态,见图4.2中“1”处。

b.在start状态下,如果sample有效则进入data状态,见图4.2中“2”处。

c.在data状态下,在sample有效时连续接收8个输入数据。最后一个比特开始输出后进入parity状态,见图4.2中“3”处。

d.在parity状态下,如果出现sample则进入stop状态,同时将前面接收的8个比特位异或得到的当前数据偶校验值和当前收到的sdin进行比较,如果两者相同则将rcv_error置1,否则置0,见图4.2中“4”处。.

e在stop状态下,sample有效时sdin应该为1,表明是截止位,此后进入idle 状态,见图4.2中“5”处。

5,系统仿真

对于整个UART来说,进行尽量接近实际应用情况的仿真是保证电路可靠性的根本手段。下面使用将sdin与sdout在电路模块之外直接连接的方法进行测试,如果接收到的数据与发送的数据相同,则表明电路可以正常工作。

为了对整个电路工作过程进行完整模拟,需要建立模拟CPU读写操作的读写任务,然后将这些任务组合起来与被测电路一起模拟整个电路的工作特性。

下面是系统仿真波形;

a.第一次调用CPU写任务操作的波形,该操作将数据7写入地址0,根据代码可知这会对UART的发送控制器、接收控制器和控制电路中的状态机都进行复位操作,使它们进入初始工作状态,见图5.1中“1”处。

b.第二次调用CPU写任务操作的波形,该操作将数据0写入地址0,用于清除UART发送控制器、接收控制器和控制电路中对状态机复位操作,使它们进入正常工作状态,见图5.1中“2”处。

C.第三次调用CPU写任务操作的波形,该操作将数据8写入地址1,用于设置UART内部计数器的时钟分频比,见图5.1中“3”处。

d.第四次调用CPU写任务操作的波形,该操作将数据8’hc9写入地址2,这是后面需要发送的数据,见图5.1中“4”处。

图5.1系统仿真波形(a)

图5.2系统仿真波形(b)

e.第五次调用CPU写任务操作的波形,他是一个对地址3的写操作,对具体写入的数据不关心,用于产生使能数据发送的控制信号,见图5.1中“5”处。

f.由于进行的是环回测试,也就是说,将sdout和sdin进行连接,当前发送的信号经过延迟后直接送到本端UART的接收电路中,所以在发送过程中同时在进行数据接收操作。串行数据发送和接收完成后分别产生了两个中断,对地址6的读操作可以读取发送中断寄存器,同时对其清零;对地址5的读操作可以读

相关文档
最新文档