异步串行通信接口的IP核设计
摘要:异步串行通信接口(SCI)因其结构简洁、使用方便,因而在各类MCU、DSP和MPU芯片设计中获得广泛的应用。本文给出一种以状态机为控制核心、以数据流为执行中心的异步串行通信接口IP核结构设计的通用方法。此方法已在笔者所设计的DSP芯片中得到验证。
关键词:SCI IP核设计 状态机 数据流
引言
目前,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权(IP,Intellectual Property)核的片上系统(SoC,System on Chip)技术发展。另外,IC设计在国内的发展很快,各种规模的IC设计中心和公司不断出现。因此,IP核的设计已开始逐渐成为国内微电子系统设计的一项支撑技术。从应用功能角度划分IP核有两大类:微处理器IP核(如8位8051核、32位ARM核等)和各种接口IP核(如LCD控制器、各种串行总线接口IP核等)。本文以异步串行通信接口(SCI,Serial Communication Interface)接口IP核结构设计为例,说明SCI、UART、SPI、USB等接口IP核的设计方法。
SCI的通信方式采用标准NRZ格式来进行外设间的异步数字通信。因其结构简法,通常嵌入到DSP、MCU和MPU或外设控制芯片内部,作为芯片的一个接口功能模块。SCI通常由三个功能单元构成:波特率脉冲产生单元、发送单元和接收单元。其结构如图1所示。在SCI数据收发中,数据帧的数据格式要比地址帧的数据格式复杂得多。在不同的通信方式下,数据帧的格式是不同 的。为此在发送器和接收器中各引入了与数据帧格式相对应的状态机来实现数据流的控制。本文所介绍的就是基于这种设计思想的一种通用设计方法。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 SCI数据发送单元
数据发送单元主要功能是完成数据的并/串转换及发送,同时产生发送标志位。其结构如图2所示,字符发送状态机如图3所示。下面简要介绍发送单元各功能模块及其状态转换。
(1)TXD时钟八分频器
对基于波特率时钟进行八分频,并输出两个基本脉冲—TXD_CLK_WORK(用于计数、移位等)和TXD_CLK_END(用于标志位的生成和数据流输出)。
(2)TXD状态寄存器
通过此状态寄存器设置通信控制寄存器2的两个控制位—TXEMPTY和TXRDY位,以表示数据写入SCI_TXBUF和启动发送过程。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(3)发送字符计数器
当字符状态机的输出状态为允许字符计数时,其开始对发送的字符计数。当计数器值等于编程的字符数时,输出TX_CHAP_REACH信号作为字符状态机激励,使之进入非字符输出状态。
(4)发送空闲线计数器
当字符状态机进入发送空闲线数据状态时,开始工作。当计数到一定值时,输出信号TX_IDLECOUT_REACH作为字符状态机激励,使之进入非空闲线数据计数状态。
(5)发送数据流的形成
在TXBUF2SHIFT的高电平脉冲作用下,在SCI_TXBUF中待发送数据,经过选择器选择指定位数的数据送入SCI_TXSHIFT低位,不足的高位清“0”。与此同时,TXWAKE数据也送到WUT寄存器,在地址位模式情况下,由ADDR_IDLE控制在WUT中形成地址位;并由SCI_TXSHIFT数据位、地址位和奇偶方式位三者逻辑或形成奇偶校验位。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(6)当前发送字符状态机
在启动、控制位、计数器溢出等激励作用下,实现发送字符状态的输出和转换。发送字符状态机的激励有:TXEMPTY(为“0”时启动TXD发送)、ADDR_IDLE(地址/空闲线模式选择位)、PARENA(奇偶校验使能位)、STOPBIT(选择1或2个停止位)、WUT(发送空闲位数据允许位)、TX_CHARCOUT_REACH(发送字符数目已够位)、TX_IDLECOUT_REACH(发送空闲数目已够位)。发送字符状态机(见图3)的状态有:1为帧停止位(1位),3为帧第1停止位(2位),5为帧第2停止位(2位),8位帧起始位,9为待机状态,A为帧数据位,B为空闲线模式起始位,C为帧地址位,E为帧奇偶校验位,F为空闲线模式停止位,D为空闲线模式计数0~7。
2 SCI数据接收单元
数据接收单元的功能是完成串行数据接收及接收标志位的生成。其结构如图4所示,接收起始位检测和接收字符状态机如图5、图6所示。
接收单元各功能模块及状态转换说明如下。
(1)RXD时钟八分频器
对波特率时钟进行八分频,并保持其与所接收串行数据流的字符同步。其输出两个时钟脉冲:RXD_CLK_WORK,用于计数、移位等;RXD_CLK_END,为数据流各种方式的停止位前一个字节时间段内提供脉冲。
图4 SCI数字接收单元
(2)起始位检测模块
是一种三位四状态机。其激励有两个:RXD_1_VALUE—接收的串行数据流激励;RXD_END_CHK—一次接收完毕的脉冲激励。其状态有如下几种(见图5):0(待机状态)、1(空状态)、2(空状态)、3(发现“1”到“0”的跳变状态)、4(输出时钟同步信号)、5(字符接收过程中输出RXD_CLK_AYN和RXD_START_DRV)。
(3)字符检测模块
主要功能是接收数据流。其在采样时钟驱动下数据流通过三个寄存器,随后在RXD_CLK_WORK脉冲作用下,三个寄存器的数据通过表决电路,把数据送到接收数据缓冲器RXD_VALUE中,为把数据送到移位寄存器RX_SHIFT做准备。
(4)当前接收字符状态机
用来标识当前所接收的数据是哪一种字符,以及在下一个RXD_CLK_WORK字符周期将转换到哪一种状态,并且根据当前接收字符的状态,驱动其它部件进行合适的操作。其激励有:RXD_START_DRV(RXD起始位有效激励)、RX_CHAR_REACH(RXD字符接收数目已够)、CCR3_ADDR_IDLE(地址/空闲线模式选择)、CCR5_PARENA(奇偶校验使能)。其状态(见图6)有:0(待机状态)、1(帧数据位)、2(帧起始位)、3(帧地址位)、4(帧奇偶校验位)、5(空状态)、6(帧停止位)。
(5)接收字符计数器
当接收字符状态机处于帧数据位阶段时,其开始计数;当与可编程的数据相同时,输出RX_CHAR_REACH给接收字符状态机。
(6)接收空闲线计数器javascript:window.open(this.src);" style="cursor:pointer;"/>
当处于待机状态时,开始计数器,当计数到一定时,输出一个脉冲,将RXSP1_RXWAKE置位为1;在下一个字符即将接收、读取SCI_RXBUF寄存器或SCI复位的情况下,RXST1_RXWAKE被复位为0。
(7)接收数据移位寄存器(SCI_RXSHIFT)
根据接收字符状态机的状态接收与检测的串行数据流,将所接收的正确数据送入SCI_RXBUF并置相应的标志,否则置出错标志。
(8)BRKDT间断检测计数器
当产生RXST4_FE帧错误时,开始工作。当RXD_VALUE为“1”时,其被复位;当RXD_VALUE为“0”时,表示没有数据接收,开始计数;当计到一定值时,输出计数满信号,此时间断检测标志RXST5_BRKDT被置位。
结语
综上所述,在各种串行接口IP核设计中,可将其内部单元结构划分为控制和执行两大部分。其中,控制逻辑的设计采用以单极或多级状态机为核心,并配合其各种激励单元的结构设计,可以做到结构清晰,并可实现较复杂的逻辑;执行机构的设计采用以控制逻辑输出的状态为中心,来设计数据选择器或数据分配器,可实现数据流的复杂流向(请见网络补充版:www.dpj.com.cn)。