片上系统的UART接口控制器IP设计毕业设计

上传人:仙*** 文档编号:28263085 上传时间:2021-08-24 格式:DOC 页数:59 大小:3.30MB
收藏 版权申诉 举报 下载
片上系统的UART接口控制器IP设计毕业设计_第1页
第1页 / 共59页
片上系统的UART接口控制器IP设计毕业设计_第2页
第2页 / 共59页
片上系统的UART接口控制器IP设计毕业设计_第3页
第3页 / 共59页
资源描述:

《片上系统的UART接口控制器IP设计毕业设计》由会员分享,可在线阅读,更多相关《片上系统的UART接口控制器IP设计毕业设计(59页珍藏版)》请在装配图网上搜索。

1、 毕业设计(论文) 题目: 片上系统的 UART接口控制器 IP设计 姓名 学号 所在单位 指导教师完成日期 片上系统的 UART 接口控制器 IP 设计 摘 要 当代在通信和控制系统中,常使用 UART (通用异步收发器)实 现系统辅助信息的传输。 UART 虽然通信速度不快,但是它具有 电路简单,成本低,性能可靠,特别适合远距离数据传输等优点。 因此,在许多对通信速度要求不高的场合,异步串行口还发挥着很 重要的作用,被广泛的使用。而如今市场上的 UART 功能复杂, 在应用只使用到它的几个基本功能,因而造成资源浪费,为此我们 需要对 UART 的功能进行精简,方便使用,降低 CPU 的工作

2、负担, 提高了系统性能。 关键词: UART 片上系统 通信协议; Abstract Contemporary in communication and control system, often use UART (general asynchronous transceiver) to implement system auxiliary information transmission. UART although communication at a modest pace, but it has a circuit is simple, low cost and reliable p

3、erformance, especially suitable for the remote data transmission, etc. Therefore, in many of the communication speed demand is not high occasions, asynchronous serial mouth still plays a very important role, is widely used. And now the market UART function complex in application to use only a few ba

4、sic function of it and cause the waste of resources, and to do so we need to the function of the UART streamlined, convenient use, reduce work load of the CPU, and improve the system performance. Key Words: UART; SOC; agree on communication 目 录 第一章 绪论 .1 第二章 背景 .2 2.1 知识背景 .2 2.2 本课题的研究内容 .3 2.3 论文结

5、构 .4 第三章 UART 接口协议 .5 3.1 帧格式 .5 3.2 示例 .7 3.3 物理接口 .8 第四章 UART 接口控制器的设计与实现 .11 4.1 UART 接口控制器核(CORE)的设计与实现 .11 4.2 UART 顶层设计 .24 第五章 测试验证 .32 5.1 基于 QUARTUS II 的功能仿真测试 .32 5.2 基于 FPGA 的系统级测试 .34 第六章 总结 .35 致 谢 .37 附 录 .38 片上系统的 UART接口控制器 IP设计 - 1 - 第一章 绪论 当今社会,随着计算机的广泛应用,网络技术的快速发展和数 字通信技术的日益普及,经常会采

6、用串行通信方式来进行数据信息 的交换传输。在串口通信中,数据的串行并行转换工作主要是由 UART 来实现。UART 是当前较广泛使用的串行数据传输协议之一, 它允许在串行链路上进行全双工通信,其应用范围遍及计算机外设、 工业控制等场合。现在专用的 UART 集成电路如 8250、8251 等既 要考虑异步收发功能,又要兼容 RS-232C 接口设计等功能,比较 复杂。而在实际应用中,往往只需要用到 UART 的几个基本功能, 而使用专用芯片势必会造成资源的浪费以及设备成本的提高。所以 我们可以将所需的 UART 功能集成到 SOC 内部,实现与其他 SOC 数字系统的直接通信,从而简化了整个系

7、统电路,使系统更为灵活、 紧凑,性能也更加稳定。UART16550 采用通用的 RS-232C 串行接 口标准,其实现较为简单,最少只需要 2 条导线即可实现基本通信。 片上系统的 UART接口控制器 IP设计 - 2 - 第二章 背景 2.1 知识背景 一、UART 概述及其发展 UART:(Universal Asynchronous Receiver/Transmitter),全称是 通用异步接收/发送装置,UART 是一个并行输入成为串行输出的 芯片,用于控制计算机与串行设备, 是实现设备之间低速数据通信 的标准协议。通常集成在主板上,多数是 16550AFN 芯片。UART 作为一种

8、串口因可靠性高、传输距离远、线路简单、串口通信协议 的简洁而广泛应用于串行数据通信电路。其基本原理是 1 个完整的 数据在数据线上依次按比特位传送,虽然传输速率较低,但由于这 种传输方式需要的数据线较少,只需用两根线就可以完成数据的收 发(一根接收数据,一根发送数据) ,而且成本低廉,因此特别适 合远距离数据传输。 “异步 ”指不需要额外的时钟线进行数据的同步 传输,是一种串行总线接口。常用的标准通信波特率有 9600bps、115200bps 等。 UART 产生于上个世纪 70 年代,是第一块大规模集成电路。 1981 年的推出的 IBM PC 采用了 8250 UART 与外设进行数据通

9、信, 直到上个世纪末,UART 一直是 PC 中最主要的串行通信接口。随 着高速串行总线 USB 的出现,USB 以其诸多的优点取代了 UART 成为个人电脑中应用最广泛的串行接口。 而在嵌入式领域,由于 UART 具有操作简单、工作可靠、抗 干扰强、传输距离远(组成 485 网络可以传输 1,200 米以上) ,设 计人员普遍认为 UART 是从 CPU 或微控制器向系统的其他部分传 输数据的最佳方式,因此它们被大量地应用在工业、通信和家电控 制等嵌入式领域。通常 MCU/CPU 都会自带一个 UART 串口,但 实际应用中一个串口往往不够用,需要进行 UART 串口扩展。 二、UART 控

10、制器 UART 控制器完成串行通信功能,控制器在内部总线的操作下, 通过对寄存器的读写,完成如波特率设置、串并变换、FIFO 控制、 片上系统的 UART接口控制器 IP设计 - 3 - 流控制及中断控制等,最终将需要发送的并行数据以一定的格式发 送;同时也将外部输入的串口数据流按一定格式进行采集完成数据 的接收。 计算机内部采用并行数据,不能直接把数据发到 Modem,必 须经过 UART 整理才能进行异步传输,其过程为:CPU 先把准备 写入串行设备的数据放到 UART 的寄存器(临时内存块)中,再 通过 FIFO(First Input First Output,先入先出队列)传送到串行

11、设 备,ykl 若是没有 FIFO,信息将变得杂乱无章,不可能传送到 Modem。 三、SOC 的基本概念 SOC (系统级芯片 System onChip),也有称片上系统,狭义的 角度上讲,它是信息系统核心的芯片集成,是将系统关键部位集成 在一块芯片上;从广义角度讲,SOC 是一个小型系统,是一个产 品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软 件的全部内容。SOC 也有译为“系统芯片集成” ,意指它是一种技 术,用以实现从确定系统功能开始,到软硬件划分,并完成设计 的整个过程。 SOC 是在单个芯片上集成一个完整的系统,对所有或部分必 要的电子电路进行包分组的技术。所谓完整

12、的系统一般包括中央处 理器(CPU)、存储器、以及外围电路等。 SoC 是与其它技术并行发 展的,如绝缘硅,它可以提供增强的时钟频率,从而降低微芯片的 功耗。 片上系统技术通常应用于小型的,日益复杂的客户电子设备。 例如,声音检测设备的片上系统是在单个芯片上为所有用户提供包 括音频接收端、模数转换器(ADC) 、微处理器、必要的存储器以 及输入输出逻辑控制等设备。此外系统芯片还应用于单芯片无线产 品,诸如蓝牙设备,支持单芯片 WLAN 和蜂窝电话解决方案。 2.2 本课题的研究内容 本课题内容是设计面向 SOC 的 UART 接口控制器,具体来说 片上系统的 UART接口控制器 IP设计 -

13、4 - 是设计基于 Nios II 处理器系统的 UART 接口控制器并在 DE2 开发 板上进行了验证。 2.3 论文结构 第一章为绪论 第二章介绍了背景,包括 UART、SOC. 第三章介绍 UART 接口协议 第四章为 UART 接口控制器的设计与实现 第五章为测试验证 第六章为总结 片上系统的 UART接口控制器 IP设计 - 5 - 第三章 UART 接口协议 UART 主要由数据总线接口、控制逻辑、波特率发生器、发送 部分和接收部分等组成。UART 内部所实现的功能包括微处理器接 口、发送缓冲器、发送移位寄存器、帧产生、奇偶校验、数据接收 缓冲器、接收移位寄存器等。 3.1 帧格式

14、 UART 一帧由起始位、数据位、校验位和停止位组成。数据逐 位传输,示意图如图 31 所示。异步串口通信协议作为 UART 的 一种,工作原理是将传输数据的每个字符一位接一位地传输。 其 中各位的意义如下: 图31 UART帧格式示意图 一、起始位 UART 空闲时(没有数据传输) ,总线为高电平(逻辑 1) ,当 需要数据传输时,首先发送一个“起始位” ,起始位为一个低电平 “逻辑 0”。 二、数据位(资料位) 如图 3-1 的“2.” 所示,紧挨着“起始位”的是数据位,它可以是 、5、6、7 或 8 位,收/发双方在数据开始传输前,需要对双方数 据位位数作一致的定义,否则会导致数据的传输

15、错误;数据位的发 送采用低位(LSB)先发送。通常采用 ASCII 码。从最低位开始传 送,靠时钟定位。 三、校验位 UART 的校验位紧挨着数据位,采用奇/偶位校验方式,数据 片上系统的 UART接口控制器 IP设计 - 6 - 位加上这一位后,使得“1”的位数应为偶数 (偶校验) 或奇数(奇校验), 以此来校验资料传送的正确性。在实际的应用中,校验位可以是奇 校验或者偶校验,也可以不包括校验位。结束位也不一定是 1 位, 还可以是 15 或者是 2。可有可无,是为了验证数据传输的安全 性而设置的,在收/发双方进行数据传输前要预设好是否需要校验 位,如果需要则是奇校验还是偶校验。如图 2-1

16、 的“3.”所示。 奇偶校验是对数据进行逐位同或异或运算。如公式(1) 和公式(2)所示。 DEVEN D7 D6D5 D4D3D2D1D0 公式 (1) DODD DEVEN 公式(2) 如对 8 位数据 0 x55(01010101b)作偶校验操作,得到的结果 为“0” ;作奇校验得到的结果为 “1”。简单而言,偶校验增加一位 “0”或 “1”,使数据位加上校验位后“1”的个数为偶数;而奇校验则 是使“1” 的个数为奇数。 如图 32 所示为奇偶校验 RTL(寄存器传输级)示意图。使 用移位寄存器进行逐位操作。当“LOAD”为逻辑“1”时,加载移位寄 存器的数据和初始化校验结果寄存器为逻辑

17、“0”;之后在“CLK” 的 每个上升沿进行逐位“ 异或” 运算。 片上系统的 UART接口控制器 IP设计 - 7 - 图3-2 奇偶校验RTL示意图 四、停止位 UART 的帧以停止位作为停止标志,是在数据位(没有校验位) 和校验位(有校验位)之后发送 12 位的逻辑“1”。停止为可以为 1 位、1.5 位和 2 位。当发送完停止位之后,UART 总线进入空闲。 五、空闲位 空闲指 UART 总线上没有数据进行传输,表现为发送方输出 逻辑“1” ,在空闲时,接收方时刻监视 UART 总线上电平变化,当 发现起始化,则进入数据接收状态,直至接收完一帧数据,如果最 后没有检测到停止位,则标志帧

18、错误。 六、波特率(Baudrate) 波特率是衡量资料传送速率的指针,由于 UART 没有同步时 钟线,收/发双方如果需要进行正确的数据传输,则要在收/ 发双方 定义一致的位时钟,位时钟可以理解为 UART 总线一个位所占用 的时间,即“ 波特率” 。在定义上,收 /发双方的波特率可以是随意 的,只需要保持一致,如双方都是 1000bps,但是,这不能兼容现 有常用的设备,兼容性差。所以在工程应用中,常用一些特定的波 特率真,如 4800ps、9600bps 或 115200bps 等。 3.2 示例 因为 UART 的帧格式是可变,以下以几个示例,形象地描述 UART 的不同设置下的帧格式

19、。 一、常用帧格式 如图 3-3 所示为 8 位数据位、无校验位、1 位停止位的帧格式 示意图,一帧共有 10 位。发送的数据为 0 xA5。 片上系统的 UART接口控制器 IP设计 - 8 - 图33 常用帧格式 二、偶校验 如图 34 所示为 8 位数据位、偶校验、1 位停止位的帧格式 示意图。每帧共有 11 位。发送的数据为 0 xA5,则偶校验结果为 “0”。当加个校验位后,可以看出, “1”的个数为偶数。 图34 带偶校验帧格式 三、奇校验 如图 35 所示为 8 位数据位、奇校验、1 位停止位的帧格式 示意图。每帧共有 11 位。发送的数据为 0 xA5,则奇校验结果为 “1”。

20、当加个校验位后,可以看出, “1”的个数为奇数。 图35 带奇校验帧格式 3.3 物理接口 UART 的物理接口可以是 RS-232、RS-485 和 IrDA 红外线等。 片上系统的 UART接口控制器 IP设计 - 9 - 其中 RS-232 是最为大家容易接触的,在 2006 年之前是大部分 PC 机的标准接口,早期电话线上网就是利用 RS-232 连接数 PC 机和 Modem。 一、RS-232 连接器 RS-232 的连接器常用的是 DB-9,其连接器示意图如图 3-6 所 示,为九针连接器。对于常用的简单应用,使用到的有三根线: RxD、 TxD 和 GND。 图36 DB-9连

21、接器示意图 实物图如图 37 所示。 图3-7 DB-9实物图 片上系统的 UART接口控制器 IP设计 - 10 - 二、RS-232 电气特性 RS-232 规定说明了 RS-323C 标准对逻辑电平的定义。对于数 据(信息码):逻辑“1” (传号)的电平低于 -3V,逻辑“0” (空号) 的电平高于+3V;对于控制信号;接通状态( ON)即信号有效的 电平高于+3V ,断开状态(OFF)即信号无效的电平低于-3V,也就是 当传输电平的绝对值大于 3V 时,电路可以有效地检查出来,介于- 3+3V 之间的电压无意义,低于-15V 或高于 +15V 的电压也认为 无意义,因此,实际工作时,应

22、保证电平在(315)V 之间。 在 TxD 和 RxD 上: 逻辑“1”为-3V-15V; 逻辑“0”为+3 15V。 在 RTS、CTS、DSR、DTR 和 DCD 等控制线上: 信号有效(接通,ON 状态,正电压) +3V+15V ; 信号无效(断开,OFF 状态,负电压) -3V-15V 。 三、RS-232 电平转换电路 由于 RS-232 的电气特性和 MCU 等输出的电气特性不一致, 所以对于 TTL 电平的 MCU,使用 RS-232 连接器(如和 PC 机通信) ,需要使用电平转换电路,通常使用集成电路(IC)完成电平转换, 常用的 IC 有 MAX232 等,当然还有其它公司

23、生产的 IC,如 SP232 等,常以 232 作为标识。 如图 38 所示,是使用 MAX232 作为转换 IC 的电路图。 片上系统的 UART接口控制器 IP设计 - 11 - 图38 电平转换电路 四、实际应用 RS-232 RS-232 在实际应用一般用于点对点的数据传输,当然在硬件 和软件上加上一些手段,可以用于多机通信,但应用不多。在通信 速率低于 20kb/s 时,RS-232C 所直接连接的最大物理距离为 15m。 RS-485 RS-485 在工业应用现场应用比较广泛,常使用单工通信组成 一主多从的通信网络,使用双绞线连接多台设备,使用差分信号传 输数据,所以抗共模干扰能力

24、比 RS-232 强,共通信距离可以超过 1Km。 第四章 UART 接口控制器的设计与实现 4.1 UART 接口控制器核(Core)的设计与实现 UART 采用模块化、层次化的设计思想,全部设计都采用 Verilog HDL 来实现,其组成框图如图 4 1 所示。整个 UART 由 串行数据发送模块、串行数据接收模块、接收和发送 FIFO、总线 接口逻辑、寄存器和控制逻辑构成。串行发送模块的接收完成并 串及串并的转换;发送和接收 FIFO 用于缓存发送和接收的数据; 总线逻辑用于连接 UART IP 内部总线和 LPC 模块接口;寄存器和 控制逻辑实现 UART 内部所有数据的收发、控制和

25、状态寄存器、 内部中断的控制及波特率信号的产生等。总线接口单元主要完成寄 存器访问。因为总线是由 LPC 总线模块产生。在这里需要为 LPC 总线模块产生 lpc ack 信号。因为内部寄存器操作相当快,我们可 以让 lpc ack 在读写信号有效后下一时钟周期就有效,这样可以简 化设计。在 UART 中用到两个 FIFO,一个发送 FIFO,一个接收 FIFO,均为 16 个字节深度,8 位宽。 片上系统的 UART接口控制器 IP设计 - 12 - 图41 UART的模块功能框图 异步传输方式指收发两端各自有相互独立的定位时钟,收方利 用数据本身来进行同步的传输方式。数据流按照一定的帧格式

26、串行 发送,一个完整的数据帧由起始位、数据位、校验位、结束位构成, 完成一个字节(8 位) 数据的传输。 片上系统的 UART接口控制器 IP设计 - 13 - 图42 UART顶层框图 设计采用经典的自上以下的分层次结构 由图 42 UART 的顶层框图获知,本设计的 UART 分为以 下三个模块(module): 一、波特率发生器 divider 这个模块用于为 UART 的收/发器提供时钟,这个时钟为 UART 的波特率的 16 倍频,即如果波特率要求为 9600bps 时,该 模块输出的时钟为 9600Hz16=153600Hz。输出时钟需要可配置 (UBRRH、UBRRL) 。波特率

27、的产生由一个 16 位的计数器来产生, 计数器的初值由波特率设置寄存器的值来决定,当计数器计数到 0 时产生一个 enable 信号,该信号的产生频率为波特率的 16 倍。 enable 信号被用来控制接收和发送模块状态机的运行。从而达到控 制发流数据位时间的目的。波特率发生器实现波特率的变换。利用 片上系统的 UART接口控制器 IP设计 - 14 - 外部时钟信号产生一个所需波特率 l6 倍的波特率时钟,用来控制 UART 的接收与发送。接收模块是用于接收串行信号,并将其转化 为并行数据;而发送模块则将准备输出的并行数据按照 UART 的 帧格式转化为串行数据输出。 波特率发生器实际上是一

28、个分频器。主要是产生和RS-232 通信所采用的波特率同步的时钟。由于串行数据帧与接收数据时钟 是异步的,所以在 UART 的接收端在什么时刻将数据移入寄存 器怎样选择可靠的采样点是非常关键的。一般采用高速时钟对串 行数据采样是非常有效的方法。在实际设计中,一般最大选择 16 倍于波特率的时钟频率。实现波特率时钟的基本思路就是设计一个 计数器,该计数器工作在速度很高的系统时钟下,通过总线写入不 同的数值到波特率发生器保持寄存器中,然后用计数器的方式生成 所需要的各种波特率就能得到所需的波特率时钟. , clk rst_n f actor12-1.0 enable tick_out div id

29、er inst2 图43 波特率发生器模块图 片上系统的 UART接口控制器 IP设计 - 15 - +A12.0B12.0 ADER =A11.0B11.0 EQUAL D QPRE ENA CLR D ENA QPRE CLR 0 1 0SELDATA DATAB OUT0 MUX21 SELDATA DATAB OUT0 MUX21 Equal0 12 h000 - rCnt11.0 rPlsTick0 rCnt11.0 rCnt23.12 clk rst_n tick_out enable factor11.0 Add0 1 h1 - 13 h1FFD - rPlsTick 图44 波

30、特率发生器电路图 波特率发生器代码 a l w a y s ( p o s e d g e c l k o r n e g e d g e r s t _ n ) b e g i n : D I V _ C N T i f ( r s t _ n ) b e g i n r C n t = C N T _ W I D T H h 0 ; r P l s T i c k = 1 b 0 ; e n d e l s e i f ( e n a b l e ) b e g i n r C n t = r C n t - C N T _ W I D T H h 1 ; i f ( r C n t =

31、= C N T _ W I D T H h 0 ) b e g i n r P l s T i c k = 1 b 1 ; r C n t = f a c t o r ; e n d e l s e b e g i n r P l s T i c k = 1 b 0 ; e n d e n d e l s e b e g i n r P l s T i c k = 1 b 0 ; r C n t = f a c t o r ; e n d e n d 二、接收器 rxd 接收模块是整个 UART 的设计的重点,其主要功能是检测数 据的起始位,并对接收的数据进行串并转换,并将接收好的数据储 片上

32、系统的 UART接口控制器 IP设计 - 16 - 存等待微机处理。由于串行数据帧与接收数据时钟是异步的,接收 功能实现的关键是接收器与每个接收字符同步。要保证异步通信的 双方准确无误地交换信息,必须有效控制采集通信线路上的电平信 号的时机。由异步串行通信的特点可知,接收同步是通过低电平起 始位实现的。而为了保证采样的正确性,采样在数据位的中间进行,并 且接收单元采样数据的频率与发送单元发送数据的频率相同,是波 特率时钟周期的 l6 倍,这样可以有效地降低由于时钟不匹配而导 致的误采样。接收模块的设计主要由状态机实现其核心功能,采用 独热编码方式,虽然独热编码多用了两个触发器,但所用组合电路

33、可节省一些使电路的速度和可靠性有显著提高 161。控制接收器 的起始停止位检测,接收数据的计数,移位寄存的功能。 接收器时刻监视 UART 总线的 RXD 线的电平,当检测到起始 位,接收器启动接收状态机,根据寄存器(UCSRB、UCSRC)的 设定,解析 RXD 线的电平,当完成一个字节接收,输出接收到的 数据和线状态。 接收器的设计主要是围绕“有限状态机” 而进行。 clk rst_n clk_en rxd_xi ctrl_i2.0 frame_bits_i3.0 enable data_o7.0 stat_o3.0 debug_o7.0 rxd inst RX_IDLE 0000001U

34、nsigned Binary RX_SYNC 0000010Unsigned Binary RX_DATA 0000100Unsigned Binary RX_PARITY0001000Unsigned Binary RX_STOP 0010000Unsigned Binary RX_ENDING0100000Unsigned Binary RX_DONE 1000000Unsigned Binary Parameter Value Type 图4-5 接收器模块图 片上系统的 UART接口控制器 IP设计 - 17 - 图4-6 接收器模块电路图 接收器部分代码 a l w a y s (

35、p o s e d g e c l k o r n e g e d g e r s t _ n ) b e g i n : R X D _ V A L _ R E A D i n t e g e r i ; i f ( r s t _ n ) b e g i n f o r ( i = 0 ; i 3 ; i = i + 1 ) r R x d V a l i = 0 ; e n d e l s e b e g i n c a s e ( r R x C l k C n t ) / / 根据当前的 U A R T 时钟 , 读取 R X D 线上的电平 4 h 7 : r R x d V a

36、l 0 = r x d _ x i ; 4 h 8 : r R x d V a l 1 = r x d _ x i ; 4 h 9 : r R x d V a l 2 = r x d _ x i ; e n d c a s e e n d e n d a s s i g n w R x d V a l = ( r R x d V a l 0 片上系统的 UART接口控制器 IP设计 - 18 - 串行数据接收器用于检测串行数据的开始位,并在特定的时刻 将串行总线上的串行数据进行采样,同时对数据流的帧格式进行检 查,最后将转换的并行数据输出。 因为输入的串行数据信号与内部时钟是异步的,因此,串行

37、信 号实际是一个跨时钟域的信号,为了保证信号被可靠的采样并避免 亚稳态情况,我们采用了比较稳妥的处理方法,那就是对输入的外 部串行数据信号进行了两次采样。 采用以下 verilog 描述可以实现对输入信号的两次采样。 always(posedge clk) begin sig_stagel:=siga; sig_out :sig_stagel ; end 同串行发送模块一样,我们采用有限状态机来描述整个串行数 据的接收过程。 按照接收串行数据的顺序,整个过程分为空闲状态(idle)、接 收开始位状态(recstart) 、接收准备状态(rec-prepare) 、接收数据状 态(rec bit

38、)、接收数据完毕状态(rec end)、接收核验位状 (rec_parity)、校验位计算状态(calc_parity)、校验位检查状态 (check_parity)、等待(wait) 、接收停止位状态 (rec_stop)、保存数据 状态(push)。整个状态转移见下图。 片上系统的 UART接口控制器 IP设计 - 19 - p u s h E n d _ b i t R e c _ p a r i t y i d l e R e c _ s t o p C a l _ p s r i t y C h e c k _ p a r i t y w a i t R e c _ b i t R

39、e c _ p r e p a r e R e c _ s t a r t r e s e t 图47 串行数据接收状态转移 外部复位使状态从idle开始。 空闲状态(idle):在此状态,不断检测 UART 使能和串行输入 信号的状态。 如果串行输入信号出现由高到低的电平变化并且 UART 使能 有效,则将采样计数器置为 14,并进入下一状态(rex _start)。 接收开始位状态(rex_start):在此状态,状态机等待 7 个时钟 周期( 也就是半个波特率的时间),然后重新对串行输入信号进行采 样,如果仍为低,则认为收到的开始位有效,马上进入接收准备状 态(rex) ;否则认为数据总

40、线上先前检测到的低电平为干扰,开始 位无效,重新返回到空闲状态。 接收准备状态(rex_prepare):在此状态中,根据 LCR 寄存器中 的值算出即将接收的数据帧中数据位的个数,然后等待采样计数器 被减至 0,随即转入接收数据状态(rex_bit),同时将采样计数器再 次置为 14。 接收数据状态(rec_bit):当采样计数器计到 7 时,接收串行数 片上系统的 UART接口控制器 IP设计 - 20 - 据线上的数据位,并放入移位寄存器中,并将数据位个数计数器减 1。当采样计数器计到 0 时,立刻转入接收数据完毕状态(rex_end)。 接收数据完毕状态(rex_end):在此状态中,

41、如果判断到数据位 数计数器已经为 0,表明数据字已经接收完毕,这时要判断帧中是 否有校验位,如果没有校验位,那么接下来将会是停止位的接收 (rex _stop);如果有核验位的话,下一状态将会是接收核验位状态 (rex parity)。而如果发现数据位还没有接收完时,将会回到接收数 据状态(rex bit) 继续进行数据位的获取。 接收校验位状态(rex_parity) :在采样计数器计到 7 时开始对校 验位进行获取。随后进入校验位计算状态(calc_parity)。 校验位计算状态(calc):在该状态,将根据接收的数及检验位 一起 parity) 进行检验各计算。随后进入校验位检查状态(

42、check_parity)。 校验位检查状态(check_parity):根据寄存器的核验位设置及接 收数据的校 验和来判断是否出现校验错。随后进入等待(wait)状态。 等待(wait):等待采样计数器被减到 0。此时可以进入接收停止 位状态(rec_stop)。 接收停止位状态(rex_stop):仍然是在第 7 个采样时钟位置,对 串行数据采样获得停止位,如果发现串行输入数据为 0,那么停止 位不正常,将把 frame error 信号置为有效。在采样时钟计为 0 时进 入保存数据状态(push)。 保存数据状态(push):在此状态中,将 push 信号置为有效, 同时将接收到的数据及

43、状态位压入 FIFO 中。不过如果发现检测到 是 break 状态,那么压入的数据将会是 0。状态然后将再次回到空 闲(idle) 状态。完成一次数据帧的接收。 三、发送器 txd 发送模块的设计相对简单。其功能是将要发送的并行数据转换 片上系统的 UART接口控制器 IP设计 - 21 - 成串行数据并且在输出的串行数据流中加入起始位和停止位。发 送器首先将要发送的 8 位数据寄存,并在最低位后添加起始 O在最高位前添加停止位l ,组成 10 位要发送的数据然 后根据 UART 内核模块的计数值将相应的数据送人移位寄存器输 入端。UART 内核模块输出的计数值是从 0 依次计到 9。即先将要

44、 发送数据的最低位送人移位寄存器。 发送器是监视 EBI 总线,当检测需要发送一个字节时,发送器 启动发送状态机,同样时,发送器会根据寄存器 (UCSRB、 UCSRC)的设定,逐位往 UART 总线的 TXD 线发送 数据。当发送完成一个字节,发送器输出发送状态。和接收器相似 地,发送器的设计也是围绕“有限状态机” 而进行。 clk rst_n clk_en data_i7.0 enable ctrl_i4.0 frame_bits_i3.0 txd_xo stat_o1.0 busy_o txd inst3 TX_IDLE 00000001 Unsigned Binary TX_READY

45、 00000010 Unsigned Binary TX_START 00000100 Unsigned Binary TX_DATA 00001000 Unsigned Binary TX_PARITY 00010000 Unsigned Binary TX_STOP1 00100000 Unsigned Binary TX_STOP2 01000000 Unsigned Binary TX_DONE 10000000 Unsigned Binary Parameter Value Type 图4-8 发送模块图 片上系统的 UART接口控制器 IP设计 - 22 - 图4-9 发送模块电路

46、图 发送器部分代码 片上系统的 UART接口控制器 IP设计 - 23 - b e g i n : T X _ N E X T _ S T A T _ J U D G E c a s e ( r S t a t T x C u r ) / / 根据当前状态机的状态 , 判断输入信号 , 得 / / 到发送器状态机的下一个状态 T X _ I D L E : b e g i n i f ( w F l g T x S t a r t e l s e r S t a t T x N e x t = T X _ I D L E ; e n d T X _ R E A D Y : b e g i n

47、i f ( c l k _ e n ) b e g i n / / 同步 U A R T 时钟 r S t a t T x N e x t = T X _ S T A R T ; / / 进入发送器状态机的发送起始位状态 e n d e l s e b e g i n r S t a t T x N e x t = T X _ R E A D Y ; e n d e n d T X _ S T A R T : b e g i n i f ( r P l s B a u d T i c k ) / / 持续一个波特位 , 进入帧的数据位状态 r S t a t T x N e x t = T X

48、 _ D A T A ; e l s e r S t a t T x N e x t = T X _ S T A R T ; e n d T X _ D A T A : b e g i n i f ( ( r T x B i t C n t = = w D a t W i d ) / / 如果使能校验位 , 则进入校验状态 e l s e r S t a t T x N e x t = T X _ S T O P 1 ; / / 否则进入停止位状态 e n d e l s e b e g i n r S t a t T x N e x t = T X _ D A T A ; e n d e n

49、 d T X _ P A R I T Y : b e g i n i f ( r P l s B a u d T i c k ) r S t a t T x N e x t = T X _ S T O P 1 ; / / 持续一个波特位后 , 进入停止位状态 e l s e r S t a t T x N e x t = T X _ P A R I T Y ; e n d T X _ S T O P 1 : b e g i n i f ( r P l s B a u d T i c k ) b e g i n i f ( w S t o p B i t s ) / / 如果设置了 2 个停止位

50、 , 则再进入停止位 r S t a t T x N e x t = T X _ S T O P 2 ; e l s e r S t a t T x N e x t = T X _ D O N E ; e n d e l s e b e g i n r S t a t T x N e x t = T X _ S T O P 1 ; e n d e n d T X _ S T O P 2 : b e g i n i f ( r P l s B a u d T i c k ) r S t a t T x N e x t = T X _ D O N E ; e l s e r S t a t T x

51、 N e x t = T X _ S T O P 2 ; e n d T X _ D O N E : b e g i n r S t a t T x N e x t = T X _ I D L E ; / / 再次进入空闲状态 e n d d e f a u l t : b e g i n r S t a t T x N e x t = T X _ I D L E ; e n d e n d c a s e e n d 片上系统的 UART接口控制器 IP设计 - 24 - 串行数据发送模块将数据由并行数据按照一定的数据格式转换 为串行数据流,并从串行总线输出。该部分设计采用有限状态机实 现,

52、分为空闲状态(idle)、取数据(pop_byte)、发送开始位(send_start)、 发送数据(Send_byte)、发送核验位 (Send_parity)、发送停止位 (Send_stop)这六个状态。 S E N D _ B Y T E I D L E S E N D _ S T A R T P O P _ B Y T E S E N D _ P A R I T Y S E N D _ S T O P R E S E T 图410 发送状态迁移图 串行发送状态转移 空闲状态(idle):当所有数据(包括 FIFO)都发送完毕后,状态 进入该状态。在此状态中,一直检查发送 FIFO 中

53、的数据个数,一 旦 FIFO 中有数据后,马上进入下一状态 pop 。 取数据(pop_byte):在此状态中,首先将发送 FIFO 的 pop 信号 有效从 FIFO 中取出数据,同时根据 LCR1:0 的值来得到发送的 数据位数。分别算出数据的奇偶校验值,然后转入下一状态 (Send_start)。 发送开始位(send_start):输入 0 并保持 16 个 elk。 发送数据(Send ):将数据每隔 16 个 cll 逐位发送到。发送过程 片上系统的 UART接口控制器 IP设计 - 25 - 中 byte)TX 还将根据 LCR 寄存器的值来得到将要发送的校验位。 如果设置为不发

54、送校验位,状态直接跳转到发送停止位(send_stop)。 发送核验位(Send_parity) :输出校验位并保持 16 个 clk。 发送停止位(Send_stop):根据 LCR 的值得到发送停止位的长 度,输出 1。该状态执行完成后,跳转到空闲状态开始下一个数据 字符的发送。 最后要说明的是,当 LCR 寄存器的 break 信号被置为有效后, 所有的数据不应该被输出。 4.2 UART 顶层设计 UART 的顶层设计是使用和整合以上三个模块,以寄存器的方 式接到 EBI,控制收/发器模块。 to p in s t c lk rs t_ n a d d r7 .0 w r_ n rd

55、_ n a le rx d tx d in t_ o u a rt_ c lk a d 7 .0 图4-11 UART顶层设计框图 片上系统的 UART接口控制器 IP设计 - 26 - 图412 UART电路图 顶层主要是完成寄存器的实现,使 FPGA 配置的 UART 可以 以外设方式接受单片机的监控。 一、奇偶校验位设计 如前面的文字可以了解到,奇偶校验是对数据进行逐位同或 异或运算。可以概括成如公式(1)和公式(2)所示。 DEVEN D7 D6D5 D4D3D2D1D0 公式 (1) DODD DEVEN 公式(2) 对于串行 UART,数据是逐位传输,奇偶检验显得很简单,如 图 4

56、-13 所示为串行数据奇偶校验示意图,可以看出,只需要一个 异或门和一个 D 触发器,D 触发器用于寄存当前异结果,异或门 监视串行数据,检测到下一个串行数据到来时,把这位的串行数据 和 D 触发器寄存的结果作异或运算,D 触发器再把这个异或结果 寄存起来。 片上系统的 UART接口控制器 IP设计 - 27 - 图4-13 串行数据奇偶校验 UART 收/发器分别包含一个奇偶校验,发送器的奇偶校验用 于对将要发送的数据产生检验值,发送到 TXD 线上;接收器的奇 偶校验用于对接收的数据产生校验值,再和从 RXD 线上接收到的 校验值比较,产生校验结果。 代码实现请见源低码。 二、有限状态机设

57、计 有限状态机Finite State Machine(FSM)的设计在 FPGA 设计中很经常用到,在本设计状态机也是采用常用的三步式结 构更新状态机当前状态、判断状态机下一个状态和根据状态机 当前状态决定输出。 如程序清单 2.3(见附录)_为 FMS 三步式结构伪代码,本设计 UART 的接收器和发送器的状态机是按照这种代码结构编写。 首先,先定义状态机的状态值和编码方式(如 Gray、One-Hot 等编码) ,按规范编写的状态机可以被综合器发现,可以在综合器 选项中选择状态机的编码方式,所以代码中状态机的状态值设定不 是太关键,综合器是会自动分配的 状态机部分代码 片上系统的 UAR

58、T接口控制器 IP设计 - 28 - a l w a y s ( r S t a t C u r o r . . . o r ) b e g i n c a s e ( r S t a t C u r ) S T A T _ I D L R : b e g i n i f ( . . . ) r S t a t N e x t = S T A T _ O N E ; e l s e r S t a t N e x t = S T A T _ I D L E ; e n d S T A T _ O N E : b e g i n . . . ; e n d S T A T _ T W O : b

59、 e g i n . . . ; e n d S T A T _ T H R E E : b e g i n . . . ; e n d d e f a u l t : b e g i n r S t a t N e x t = S T A T _ I D L E ; e n d e n d c a s e e n d 三、UART 接收器设计 UART 接收器的框图如图 4-14 所示。由框图看出,UART 接 收器的设计主要是围绕“ 接收状态机” 进行。 RXD 线需经滤波器处 理再进入状态机处理,同步时钟是有用于使 UART 接收器的波特 率时钟和发送器同步,波特率计数器产生波特率,控制

60、状态机的数 据接收。 整个接收器的工作由 RXD 线上的有效起始位启动。 片上系统的 UART接口控制器 IP设计 - 29 - 图414 UART接收器框图 (1)总线电平滤波采样 由于使用环境的干扰等,RXD 线可能出现毛刺,所示需要 RXD 的输入需经滤波处理,处理方法是在一位数据中间取三个点 的电平值,少于 2 个点为电平“1”,则把该位判为电平 “0”,否则判 为电平“1”,这种方法称为 “多数表决法”。 如图 4-15 所求为这种方法的原理和实现示意图,表 4.1 所示 为对应的真值表。 片上系统的 UART接口控制器 IP设计 - 30 - 图4-15 RXD滤波(多数表决) 表

61、41 RXD滤波真值表 RXD线 D8 D9 D10 输出 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 对 RXD 线上的滤波适用于起始位的检测、数据位接收、校验 位接收和停止位的判别。 (2)同步时钟 由于 UART 的收/发两个设备的时钟可以存在差异,如果接收 器在接收时和发送器的时钟不同步,增加了传输错误的机率,所以, 接收器需要在检测到起始位的起始边沿时,同步自身的时钟,这样 将减小因双方时钟上的差异而导致数据传输错误的机率。 该功能的实现是在接收器空闲时,当检测到 RXD 线的电平从 高到低的变化时,

62、复位接收器的滤特率计数器,即滤特率计数器在 检测到以上条件时才开始计数。 片上系统的 UART接口控制器 IP设计 - 31 - (3)停止位处理 停止位是发送器明确告诉接收器一帧的结束,发送器发送完停 止位后可以立即发送下一帧数据的起始位。 如上小节所述,检测一位的电平是取中间三点电平作多数表决 运算,这个法规同样对停止位的接收有效。如果多数表决为“0”电 平,则置位“ 帧错误” 标志位。 但有别于其它位的接收,如图 4-16 所示,完成停止位的接收 不是在一个波特位结束处,而是在取完三点电平作多数表决运算后 立取结束停止位的接收,之后接收器马上重新监视 RXD 线电平的 下降沿,开始检测下

63、一帧的起始位。 图416 接收器停止位处理 停止位处理可以降低 UART 收/发两个设备因时钟的不一致而 导致的传输失败率。 (4)奇偶校验处理 奇偶校验是用于标记状态寄存器的“校验错误” 标志位。如 4.2.1 小节所述的奇偶校验设计,无论是否使能奇偶校验,接收器每接收 到一个数据位就运算一次校验,完成数据位的接收后得到刚接收到 数据的校验值,如果禁止了奇偶校验,这个校验值被放弃;如果使 能了校验,这个校验值会和接发到的校验位作比较,根据比较结果 标志相关的状态位。 片上系统的 UART接口控制器 IP设计 - 32 - (5)接收器状态机 图 4-17 所示为接收器状态机的状态图,状态机的

64、设计在 4.2.2 小节已有所述,本模块的状态机是按照其结构编写。 状态机在空闲状态时,RXD 为高电平时,由状态图看出,空 闲状态下,RXD 的下降沿将启动状态机,这个下降沿是 UART 通 信协议的起始位。 使用状态机处理接收,可以使设计思路清晰,有利于设计的维 护和升级。 图4-17 接收器状态机 (6)模块接口 接收器模块的接口定义如程序清单 4.2 所示 四、UART 发送器设计 发送器的设计相对接收器简单很多,因为发送器只需根据控制 输入,往 TXD 逐位输出数据,在这里省去了发送器的设计过程, 请自行参考源代码,代码设计和接收器相似。 如程序清单 2.5 所示为发送器模块接口。

65、片上系统的 UART接口控制器 IP设计 - 33 - 第五章 测试验证 5.1 基于 quartus II 的功能仿真测试 一、发送数据测试 (一)往数据寄存器(UDR)写输入数据 0 xA5 根据接口设计,数据寄存器 UDR 的内部地址是 0,故操作时序 为:内部寄存器地址 address = 0;写请求置高,即 write_req = 1, 数据线 Write_data = A5,如下图所示。 图5-1 (二)发送数据线 TX 电平情况 根据测试,当往数据寄存器定入数据后,如果控制器处于空闲 状态,将立即发送该数据。数据是逐 bit 发送的,低位先发送 (LSB ) ,前一步中写入的数据

66、是 0 xA5=0b10100101,故发送时比 特流应为 0b10100101,加上起始位(低电平)和停止位(高电平) , 共 10 位,最终比特流程为 0b0101001011。下图为写入数据后的发 送数据线 txd_xo 的波形仿真截图,从图中可以看到,UART 控制 器数据发送功能正确。 片上系统的 UART接口控制器 IP设计 - 34 - 图5-2 二、接收数据测试 (1)数据线 RX 接收比特流 0b0101011111 在仿真波形文件上编辑数据线 rxd_xi 的电平值,包括 1 个起始 位,8 个数据位和 1 个停止位,如下图所示。 图5-3 (2)读取数据寄存器(UDR) 当数据寄存器 UDR 接收到一帧数据后,中断线 int_o 将置高, 以通知微控制器中断服务程序读取数据寄存器中的数据。UDR 内 片上系统的 UART接口控制器 IP设计 - 35 - 部地址为 0,故读取时序为:内部寄存器地址 address = 0;写请求置 高,即 Read_req = 1。结果数据线 read_data 上给出了数据 0 xF5, 如下图所示。 图5-4 分析,数据线 r

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!