CPLD(Complex Programable Logic Device)是一种复杂的用户可编程逻辑器件。采用连续连接结构,延时可预测,从而使电路仿真更加准确。CPLD是标准的大规模集成电路产品,可用于各种数字逻辑系统的设计。开发工具Quartus II、ISE等功能强大,编程语言灵活多样,使设计开发缩短了周期。
随着嵌入式的发展,对数据的传输和人机交互通信的要求越来越高。而串口通信因其资源消耗少、技术成熟而被广泛应用。系统中上位机与嵌入式芯片之间的交互通信可以通过专用集成芯片作为外设RS-232异步串行接口,如TI、EXAR、EPIC公司的550、452等系列UAWT集成电路,或在拥有 Nios系统的FPGA上可以方便地嵌入UART模块。但是在设计中用户会提出自己的要求,如:数据加密或只使用UART部分功能等,即要求更灵活的 UART.而且有时CPLD资源剩余,出于成本考虑也会要求设计一种模拟的UART.对于上述的两种情况,就可以在CPLD其丰富的资源上制作一款 UART,实现PC机与嵌入式系统之间的数据交换。
1 串口通信协议
1.1 UART简介
通用异步收发器(Universal AsynchrONous Receiver Transmitter,UART)。异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。
异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位。
本设计基于RS-232的数据帧结构,设置数据帧结构如图1所示:1 bit起始位,8 bit数据位,1 bit停止位,无校验位。每帧实质上传送1 Byte数据。
1.2 自定义数据包格式
多个上文所描述的帧就可以组成一个数据包。串口通信是在RS-232数据帧结构的基础上定义的,传输以数据包为单位进行。包结构如图2所示。
本文采用和校验的结构,一个数据包包含15 Byte.其中第1个字节是数据包头即握手字符。第2字节为控制字符,EE代表写命令,DD代表读命令。第3至第14为可利用数据。第15字节作为校验字符,理论上应等于这个数据包中数据字符串之和的后8bit.
2 设计方案
2.1 UART的设计结构
笔者设计采用模块化设计,方案的UART主要由逻辑控制模块、波特率发生模块、发送模块和接收模块等组成。波特率发生模块可以建立精确的时钟,确保数据采样准确、工作时序顺畅。逻辑控制模块、波特率发生模块、发送模块和接收模块完成工作有:确定数据起始位、数据收发,串并转换、建立握手连接、判断命令、数据校验等功能。
2.2 状态图
利用串口通信在数据交互过程中涉及到了多种工作状态,情况比较多样,而利用程序设计中的有限状态机(FSM)理论进行编程设计,这个问题可以迎刃而解。
有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,有限状态机的状态(即由寄存器组各位的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态。
本设计的有限个状态编码使用独热码形式,即寄存器组每一个bit位代表一种状态(如“0100”,“1000”为四态机中的两种状态),这种状态码的好处是避免了状态混乱。状态机采用Mealy型有限状态机,这种状态机的下一个状态不但取决于各个输入值,还取决于当前所在状态,符合UART的工作原理。
逻辑控制模块、数据接收模块和发送模块的设计都使用到了状态机,其中以逻辑状态机为主状态机,其余两个为从状态机。确定各种工作状态和工作流程后便可构建出状态图,方便直观地进行后续设计。
通过状态图可以方便、准确地得到程序设计框图如图4所示。
能得到较好的实验数据。
3.4 发送器
发送器在接收逻辑处理模块给出的命令后发送相应的数据给PC机。发送内容主要包括:数据正确或握手成功信息DD,示意PC机继续下一步操作;数据重发或握手失败CC,示意PC机重新发送数据;以及PC机欲从嵌入式系统中读出的数据。
4 实验验证
工程设计的某嵌入式系统要求PC机向CPLD发送数据。CPLD选用ATREL公司的MAX7000系列芯片EPM7128SLC84-15.芯片拥有2 500个可使用门阵列、128个宏单元、8个逻辑阵列块、84个用户I/O接口。CPLD的IO操作电平是TTL电平,通过MAX232电平转换芯片将 PC机串口电平转换为TTL电平,就建立起了串口通信的电气基础。PC机上拥有VC++编写的数据下载程序,波特率为9600 bit/s,每个数据帧含1位起始位,8位数据位,无校验位,1位停止位。通信数据格式用上文提到的和校验数据格式,以数据包为单位发送,如图6所示。
图6 数据下载
从实验结果可看到PC机每发送一个完整的15 Byte数据包,CPLD回复握手成功和数据校验正确,表明设计可行。
5 结束语
本文从工程设计实际出发,没有选取通用的UART芯片,通过分析异步通信中UART的结构特点,运用CPLD的丰富资源和一些工程技术制作了自定义通信数据包格式的串口通信模块。通过与PC机上数据传输程序联试,实现了信息的传输和人机互动,证明设计方案的正确。如今嵌入式技术应用十分广泛而且市场需求很广阔,PC机与嵌入式系统的通信实现了人机互动使系统功能更加强大。研究对增强嵌入式系统操作性有重要意义。