用FPGA实现ATM适配层中拆分和重组子层的方法 (一)技术领域:
本发明属于通信系统,具体涉及在异步传输模式(ATM)中用现场可编程门阵列(FPGA)来实现适配层中拆装子层(SAR)的方法。(二)背景技术:
异步传输模式是一项国际标准的电信传输技术。它构成了许多宽带网络的基础,ATM使用多路复用技术、交换技术以及分段/重组操作来支持高速传输网络。它的用途是提供高速率、低时延的多路复用交换网络,以支持各种类型的用户话务,如语音、数据或视频应用等。ATM用来简化许多业务在硬件中的实现。这样可以通过交换机和网络快速处理业务,减少延迟。ATM还允许用户获得可升级的带宽和按需带宽。
ATM在电信业引起了相当多的注意。宽带码分多址(WCDMA),即第三代移动通信标准化组织(3rd Generation Partnership Project(3GPP))提出的无线传输技术,就利用ATM作传输承载。
ATM在ATM适配层(AAL)为面向连接的和无连接的可变比特率(VBR)应用提供会聚功能。它以恒定比特率(CBR)支持同步应用(语音、视频)。AAL分为两个子层,拆装子层(SAR)和会聚子层(CS)。SAR子层负责处理不同长度地协议数据单元(PDU),在发送端把它们化为ATM信元,并在接收端把这些信元重新装配成用户格式的PDU。CS子层的功能取决于由AAL处理的业务类型,如语音、视频和数据。
为了支持不同类型的用户话务,提供不同的服务种类,AAL使用多种协议类型,每一种类型支持一种或多种用户应用,如话音、数据等。每种类型由一特定的SAR和CS组成。不同的AAL协议类型的PDU格式会有所不同。
通常,在实际的应用系统中,拆装子层的功能由专用芯片来实现。专用芯片通常完成某一特定AAL协议类型的SAR功能,功能固定,灵活性比较差。如果用户需要完成某些特定的功能,有一些在特定应用场合下的需求,就需要和芯片供应商联系制定符合用户要求的芯片,这样势必会增加成本,增大开销。另外,如果需要完成自定义的协议类型的SAR功能,也可以通过软件来完成这部分功能。利用软件的灵活性极好,但这样必然会占用有限的微处理器(CPU)资源,在实时应用的情况下,对系统的实时性造成一定的影响。(三)发明内容:
本发明的目的就是针对上述现有技术的不足,提出一种利用FPGA完成AAL层SAR功能的方法,来增加灵活性。考虑到通常情况下,硬件板上会有一定数量的FPGA完成一些针对特定应用的功能,利用板上的FPGA完成用户期望的AAL拆装子层的功能还可以减少一些芯片数量,同时降低成本。
本发明的方法是按以下方案实现的:
SAR层将会聚子层交给它的数据单元PDU分割成48字节的载体,然后加上头和尾从而构成信元有效载荷。接着,这些载荷被交给ATM层进行传送。ATM层只能处理53字节的信息单位,其中含有48个字节的载体部分。在接收端,SAR子层将信元重组为报文。SAR子层基本上只涉及信元,而不与报文打交道。
SAR与ATM层之间的接口即用户-网络接口(UNI),该接口名为UTOPIA(Universal test&operations PHY interface for ATM)接口。UTOPIA接口主要包括以下信号:
发送、接收参考时钟(RFCLK,TFCLK),8bits接收数据线(RDAT),8bits发送数据线(TDAT),一位接收校验(RXPRTY),一位发送校验(TXPRTY),接收读使能(RRDENB),发送写使能(TWRENB),接收信元buffer写允许(RCA),发送信元buffer写允许(TCA),接收信元开始(RSOC),发送信元开始(TSOC)。
FPGA完成的工作包括对UTOPIA总线的读写时序控制,完成对信元的拆装和重组。具体就是:
1.接收从CS子层接收的PDU包,将数据拆成协议类型定义的有效载荷后,打成53字节的信元格式,发送给ATM层,然后通过光纤传送。并由FPGA提供发送时序逻辑控制。
2.提供接收数据逻辑控制,从ATM层接收53字节的信元,由ATM信元头的PT域指示数据包的开始、中间和结束,将接收到的数据组成数据包后发送给CS子层。
FPGA内数据拆分过程的流程如下:
图中左半部分是数据拆分过程的示意图。数据拆分的过程为:FPGA在内部存储单元可写的情况下将它的可写标识置为可写。上层在有PDU包需要发送的情况下,查询该可写标记。如果可写,则把需要传送的PDU包发送到FPGA的内部存储单元,FPGA接收上层数据。把数据存入FPGA这部分工作的具体操作流程可以根据实际情况进行调整。
FPGA在接收到上层数据后,首先读出总的协议数据包的长度以及这个PDU包的虚通路标识符(VPI)和虚通道标识符(VCI)。然后判断该长度的PDU包是否大于一个信元的数据长度,如果读出的PDU包的长度小于48字节,即一个信元的长度,则取出所有剩余的数据,然后补(48-剩余字节数)个全0字节,补足48个字节的信元数据长度。然后用这48个字节加上其他的控制位组成一个完整的信元发送给UNI接口。此时PT标识应该置为1,标识这是本PDU包的末信元。其他控制位包括通用流量控制(GFC)、信元丢弃优先权(CLP)标识,这些根据已知的数据填入。信头错误校验(HEC)部分填入一个字节的0即可。UNI接口芯片会自动根据信头内容计算正确的HEC值取代这个字节的内容。
如果大于一个信元的长度,则取出48(可根据AAL层协议指定的长度作调整)字节的数据。末信元标识PT置为0。其他控制位的内容和末信元情况下填入的方式相同。然后可以根据信元格式组成一个信元,由FPGA根据UTOPIA总线的时序送出该信元即可。然后再重复读取PDU包剩余长度、读取一个信元的数据、构成53字节可传输信元的工作,直至本PDU包的拆分工作完成为止。
组成最后一个信元后,FPGA内部存储单元的数据已全部取出,此时可以把存储器的可写标记设为1,即可写。此时一个完整的PDU包拆成信元的工作已完成,可以开始对下一个PDU包进行拆分。
PDU包的剩余长度由专用的寄存器来指示。初始值为读取的PDU包长,读出VPI、VCI后减三,以后每取出48个字节减48。每次读取数据前都需要判断剩余的数据是否大于一个信元的长度(48字节),用来确定该信元的末信元标识。
FPGA内数据重组过程的流程如下
图1的右半部分是数据包重组过程的示意图。设定PDU长度寄存器的初始值为3,然后从UNI接口接收信元。
FPGA读取信元的VPI、VCI,存入协议数据单元的相应位置。
读取PT标识,由该标识判断这个信元是否末信元。如果不是末信元,则PDU长度寄存器累加48,之后把48字节的信元有效载荷存入FPGA内协议数据单元相应的存储位置。完成后可以对下一个信元进行相同的操作。
如果由PT标识得知信元是该PDU包的末信元,则从协议规定的位置读取该信元的有效字节数。PDU长度寄存器累加本信元有效字节数,计算出的PDU长度是本PDU包的最终有效的长度。将PDU包的长度存入协议数据包存储单元的相应位置。读取有效字节数指示长度个字节的数据,存入存储器。这样,一个PDU包组包工作就完成了。
完成后,把PDU长度寄存器设定为3,开始下一个数据包的组包工作。
以上所描述的方法是一个通用的对用户-网络接口上的PDU包拆分和重组的过程。具体的流程见图1。针对不同的ATM适配层协议,具体的实现可以作必要的调整。不过基本的流程都同图1所示的一样。
以下说明FPGA对UTOPIA总线数据控制部分的设计:
UTOPIA总线在数据接收过程中用到的信号是:RFCLK,RRDENB,RSOC,RCA。
接收时,FPGA读出PM5350的RCA有效,表明信元已经存于UNI芯片的接收FIFO中可以接收。此时,FPGA产生RRDENB接收使能信号,UNI接口芯片在RRNENB有效后,会把数据送到UTOPIA的数据总线上,此时FPGA可以接收CELL,把数据存入FPGA中的存储单元中。
FPGA内ATM控制逻辑单元负责查询UNI接口芯片内接收FIFO和FPGA内的接收存储单元。如果FPGA内的接收存储单元未满,UNI接口芯片内的接收FIFO有信元,则开始接收UNI接口芯片内的信元。
UTOPIA总线在数据发送过程中用到的信号是:TFCLK,TWRENB,TSOC,TCA。
发送时,FPGA测试到PM5350的TCA有效,表明可以发送。由它产生TWRENB发送使能信号,在发送第一个字节时产生TSOC信号。
本发明同时考虑到提供CS子层功能的芯片或接口所提供的数据线的宽度不一定和UTOPIA总线定义的16位数据宽度相同,因此FPGA还完成将宽度的数据总线进行转换的功能。即:当CS子层接口提供的数据总线宽度为16位时,FPGA在发送端完成16位至8位的数据转换;接收端FPGA则负责把接收到的8位数据转换成16位的宽度。总线宽度的转换工作由FPGA对内部存储器的读写来实现。即:将FPGA内部的存储器设计成双端口的,输入、输出端口的数据宽度与需要转换的数据宽度一致,这样就可以通过相互独立的写入、读出过程完成对数据总线宽度的转换。
对于每一种特定的应用,可以利用FPGA的可编程特性对具体实现细节作相应的调整。这里不再赘述。
本发明有益效果:本发明提供的利用FPGA完成ATM适配层中拆分和重组子层的方法有效的利用了可编程逻辑芯片所固有的灵活性,降低成本,减少电路板上芯片数量,另外由于没有使用专用芯片,可以减少软件员一定的编写驱动程序的工作。由于灵活性高,可以针对不同的AAL协议类型、数据总线宽度和数据速率进行调整和改变。(四)附图说明:
图1为FPGA实现拆装子层功能的流程图;
图2为针对自定义的ALL0的SAR功能模块与其他芯片的主要接口信号;
图3为ATM信元净荷格式;
图4为数据格式;
图5为应用和自定义AAL0 SAR的接收部分的逻辑框图;
图6为应用和自定义的AAL0 SAR的发送部分的逻辑框图;(五)具体实施方式:
以下结合附图说明具体实施方式:
图2中MPC860提供CS子层接口。PM5350提供ATM层接口。
本设计实例是按照C3G总体组定义的简化Iub的AAL0的承载规范实现的。一个SDU(高层的业务数据单元)可以占用连续几个ATM信元,但一个ATM信元不支持多个SDU。每个ATM净荷的前两个字节为长度字节指示。它对于首包、中间和末包的定义不完全相同。具体的ATM信元净荷格式如图3所示。
LI:2字节,对首包指示的是业务数据单元的总字节数(即LI-SDU);对于末包,指示本信元净荷中DATA BODY字节数;对于中间包LI无意义(数据体占46字节),但为了区别于首包,要求LI置全0。
DATA BODY:SDU的一部分或全部。
发送和接收信元的格式为:接收信元的前5个字节是信元头,后面的48个字节是有效载荷。信元头的第一个字节高4位是通用流量控制(GFC);低4位及第二个字节的高4位是虚通路标识符(VPI);第二个字节的低4位、第三个字节和第四个字节的高4位是虚通道标识符(VCI,VCI长度是两个字节);第四个字节的低4位包括有效载荷类型(PTI)和信元丢弃优先权(CLP),其中CLP是最低的一位,另外3位是PTI(PTI的最低位是AUU);第5个字节是HEC。
发送的数据:860每次送一个PDU到FPGA的内部存储器,头两个字节标识本PDU的长度,后续的若干字节是该PDU的内容。具体的格式见图4。
图4中图a)为从PM5350接收到的信元格式,图b)为FPGA组成的数据包以及860分送给FPGA的数据包的格式。
FPGA与860接口的内部的存储单元数据宽度是16位,其中发送存储器是一个容量为4K Bytes的双端口RAM,接收存储器是一个容量为8K Bytes的FIFO。
16位接收FIFO给MPC860提供存储字节数,这样860在读出PDU包的长度(PDU_length)后可以判断FIFO中所存储的数据是否包含一个完整的PDU。
16位发送存储RAM的存储内容:地址为0的16BIT存储内容的高字节是可读标记,具体就是:高字节数据的最低一个BIT为0,不可读;为1,可读。低字节的最低一个BIT为可写标记,为0,不可写;为1,可写。860每次写入数据前先查询可写标记,在可写的情况下,先把可写置为0,写动作完成后再把可读置为1。FPGA查询到可读的情况下,开始发送信元给PM5350。完成后将可读标记置为0,可写置为1。
860对FPGA每次只写入一个PDU,从RAM的地址1开始写,完成后再开始查询可写标记。
FPGA内部的逻辑负责将PDU拆成信元的格式发送给RNC,对一个PDU处理完成后将可写标记置回1。
本功能模块的主要功能可以分成两部分:接收数据,打成指定的格式后存储在内部存储单元中,当MPC860读取指定的地址时,将数据送到860的数据总线上。
这部分逻辑的框图如图5所示。
发送数据部分:MPC860把需要发送给高层的数据放入FPGA的内部存储单元中,FPGA读出相应的Pdu_length,VPI,VCI,把数据拆成53字节的信元格式,同时提供PM5350所需的发送控制信号,把信元发送到PM5350的UTOPIA总线上,由PM5350把数据送到RNC。图6是这部分逻辑的原理框图。