首页> 中国专利> POS-PHY总线与PCI总线间的数据包转发的装置和方法

POS-PHY总线与PCI总线间的数据包转发的装置和方法

摘要

本发明的一种POS-PHY总线与PCI总线间的数据包转发的装置和方法,该装置为一桥接转换装置,其包括以下子模块:PCI总线接口模块、PCI主设备控制模块、PCI从设备控制模块、收发仲裁模块、PCI配置寄存器、PCI空间寄存器、数据接收模块、数据发送模块、POS-PHY接口模块;所述PCI总线接口模块外部连接PCI总线,所述POS-PHY接口模块外部连接POS-PHY总线。本发明的装置和方法完成数据包在POS-PHY总线和PCI总线之间进行转发,提出了一种数据包在PCI总线上高效传输的方法,并且在传输中数据包不容易丢失。

著录项

  • 公开/公告号CN1556642A

    专利类型发明专利

  • 公开/公告日2004-12-22

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200310117666.7

  • 发明设计人 王志忠;刘衡祁;易湘嵘;刘启明;

    申请日2003-12-31

  • 分类号H04L29/10;H04L29/08;H04L12/56;

  • 代理机构11219 中原信达知识产权代理有限责任公司;

  • 代理人张天舒

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦A座6层

  • 入库时间 2023-12-17 15:43:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-21

    未缴年费专利权终止 IPC(主分类):H04L29/10 授权公告日:20080312 终止日期:20171231 申请日:20031231

    专利权的终止

  • 2008-03-12

    授权

    授权

  • 2005-02-23

    实质审查的生效

    实质审查的生效

  • 2004-12-22

    公开

    公开

说明书

技术领域

本发明涉及一种总线转换的方法,尤其涉及数据包在POS-PHY总线与PCI总线之间转发的方法与装置。

背景技术

随着城域网(MAN)的快速发展,同步光网(SONET)/同步数字分级结构(SDH,来自于Synchronous Digital Hierarchy)技术成为一种广泛使用的传输技术,它能提供低延迟恢复和弹性功能,并且利用分组传输技术提供宽带多工功能。很多网络设备都提供各种速率的SDH上的分组协议POS(Packet Over SDH)接口,在线路侧利用一片物理层(PHY)芯片完成三层以下处理功能,之后将数据包送到CPU或网络处理器进行三层以上的数据包处理。

目前只有一些专用CPU或网络处理器能够通过POS-PHY总线(PacketOver SONET PHYsical)直接与POS二层芯片接口,大多数的通用CPU(如motolora公司的MPC8240)和网络处理器(如intel公司的IXP1200)并不提供这样的接口,所以有必要将数据包从POS-PHY总线转换到PCI总线,以供CPU处理。

在PCI总线应用中,数据的传输性能是必须认真考虑的,不同的数据处理方式将对数据的传输性能产生很大的影响,DMA(Direct MemoryAccess直接存储器存取)方式是目前比较有效的传输方式,在这种方式下,CPU不需要主动发起数据存取的操作,只要作一些简单的控制即可,这样CPU的占用很少,提高了数据处理的速度。但是在高速的数据包传输系统中,如何充分利用DMA操作以及如何将CPU的占用降到最少,还有待研究。

在现有的数据包收发装置设计中,由于系统侧和线路侧的数据传输速率不一致,很容易在传输中出现上溢或下溢的情况,这样数据包在传输的过程中就会丢失,现有技术的方法很难将系统侧和线路侧的数据传输进行有效的协调,因此现有技术存在明显技术缺陷,而有待改进和发展。

发明内容

本发明的目的在于提供一种POS-PHY总线与PCI总线间的数据包转发的装置和方法,完成数据包在POS-PHY总线和PCI总线之间进行转发,完成数据包在二层处理模块与进行三层处理的CPU或网络处理器之间的转发,并提出一种数据包在PCI总线上高效传输的方法,有效解决现存方案中数据包容易丢失的问题。

本发明的技术方案如下:

一种POS-PHY总线与PCI总线间的数据包转发的装置,为一桥接转换装置,其包括以下子模块:PCI总线接口模块、PCI主设备控制模块、PCI从设备控制模块、收发仲裁模块、PCI配置寄存器、PCI空间寄存器、数据接收模块、数据发送模块、POS-PHY接口模块;所述PCI总线接口模块外部连接PCI总线,所述POS-PHY接口模块外部连接POS-PHY总线;以及

所述PCI主设备控制模块与所述PCI总线接口模块以及所述收发仲裁模块通讯连接,完成数据包的主动接收和发送,并通过直接存储器存取方式直接从内存中取包或收包;

所述PCI从设备控制模块与所述PCI总线接口模块以及分别与所述PCI配置寄存器和所述PCI空间寄存器通讯连接,完成所述CPU对该桥接转发装置的配置及控制;

所述收发仲裁模块还与所述数据接收模块和所述数据发送模块分别通讯连接,完成接收和发送两个操作的仲裁;

所述数据接收模块还与所述POS-PHY接口模块通讯连接,完成对POS_PHY的数据接收,并向PCI主设备控制模块发出接收数据请求;

所述数据发送模块还与所述POS-PHY接口模块通讯连接,从所述PCI总线接收数据,并将数据发送到所述POS-PHY总线;

所述PCI总线接口模块完成对所述PCI总线的地址数据线及控制线的处理,在地址期完成所述PCI总线的地址译码并作为相应的响应,在数据期将数据包按突发传输方式接收或发送数据包;

所述POS-PHY接口模块完成对POS-PHY数据和控制总线的处理,产生对物理层的控制信号;

所述从设备控制模块在PCI配置期,所述CPU对配置寄存器进行初始化,完成对PCI设备状态的识别;并对基地址寄存器进行初始化,完成PCI设备在内存中的地址映射,同时还通过PCI配置空间中的总线控制状态寄存器获取该桥接转发装置所支持的操作。

所述的装置,其中,所述桥接转换装置由一片现场可编程逻辑门阵列实现,其把一个带有POS-PHY总线的二层处理模块与三层处理模块连接起来,以实现数据包在这两个模块之间的双向转发。

所述的装置,其中,所述数据接收模块包括一个预定字节空间的上行异步FIFO,一上行读写控制逻辑包括上行FIFO输入控制和上行FIFO输出控制,一上行缓存描述符表处理模块四个子模块,该异步FIFO完成了数据包在两个时钟域的转换。

所述的装置,其中,所述数据发送模块包括一个预定字节空间的下行异步FIFO,一下行读写控制逻辑包括下行FIFO输入控制和下行FIFO输出控制,以及一下行缓存描述符表处理模块四个子模块,所述预定字节空间的异步FIFO完成数据包在两个时钟域的转换。

所述的方法,其中,所述预定字节空间大小为2K。    

一种POS-PHY总线与PCI总线间的数据包转发的方法,该方法设置有上行及下行缓存描述链表,每一链表皆由缓存描述表构成环形链表,其包括对数据包的上行和下行处理:

所述对数据包的上行处理包括:

所述现场可编程逻辑门阵列收到64字节或一个小包,查询内存中上行缓存描述链表中第一个缓存描述表的内容,如果内存为空,则获取相应空闲内存的地址,并将数据包传到此内存中;

当完成一个整包的传送后,将所述缓存描述表置为有包状态,同时填入长度信息,上报有包中断即发起中断通知软件处理;同时缓存描述表地址加l,指向下一张缓存描述表;

如果所述现场可编程逻辑门阵列仍然有包就重复上述流程;如果发现内存已经用尽,则上报数据满的中断;

所述对数据包的下行处理包括:

当软件向所述内存中写一个数据包后,更新下行缓存描述链表,设置有包标志,填入数据包的地址,同时将所述现场可编程逻辑门阵列的下行启动寄存器写1;

所述现场可编程逻辑门阵列开始后,检查所述下行启动寄存器,一旦不为0,就开始读取下行缓存描述链表,如果该下行缓存描述链表的缓存描述表指示有包,就根据该缓存描述表中的包长度,启动直接存储器存取,开始收该内存中的整个数据包;

完毕后,将该缓存描述表的相应表项标志置空;接着对缓存描述表地址加1,检查下一张缓存描述表是否为空,如果不为空,即重复上述流程,如果为空,则依据下行启动寄存器是否大于0来决定是否收包;

下行数据包的处理采取整包模式,即所述现场可编程逻辑门阵列收到一个完整的包以后才会启动下行FIFO输出控制状态机。

所述的方法,其中,所述内存用尽时为防止不停地上报FIFO满中断,所述现场可编程逻辑门阵列停止查询所述缓存描述表,等待软件处理或者改为每隔256个时钟周期查询一次情况;一旦软件处理完内存的数据包,则由软件启动所述现场可编程逻辑门阵列上行端继续工作。

所述的方法,其中,所述下行启动寄存器为一个8位双向下行包计数器,当软件写一次,下行包计数器加1;当所述现场可编程逻辑门阵列完成一次收包后,包计数器减1。

本发明所提供的一种POS-PHY总线与PCI总线间的数据包转发的装置和方法,由于采用了缓存描述表实现CPU与总线转换器的通信,缓存描述表中描述了数据存放的地址、长度、数据包内容正确与否以及内存的占用情况等信息,而由缓存描述表组成的缓存描述链表存放于内存中,减少了CPU访问PCI总线的次数,而且减少了对FPGA资源的占用。

本发明的数据包的收发由总线转换器主动发起,总线转换器作为PCI传输的主设备,利用了内存作为缓存,使得软件有足够的时间来完成数据处理;上行数据包按分片的突发传输burst方式传送,即无须收到完整的数据包即可以向PCI总线发出数据,这样可以在PCI总线带宽下完全避免上溢错误的产生;而下行采用整包方式传送,可通过限制包的大小来避免传输中下溢错误的出现。

本发明合理地划分数据通道,在PCI主设备端分为地址通道和数据通道,在PCI从设备端分为PCI配置寄存器和PCI空间寄存器。所有数据及地址线的输出只经过一级多路选择开关及D触发器输出,降低信号的输出延迟及抖动。采用带循环优先的两级仲裁机制,分别对PCI主从设备操作、数据包上下行操作进行仲裁,保证数据包的上行和下行有相同的机会使用PCI总线。

附图说明

附图中,

图1为本发明的POS-PHY总线与PCI总线间的数据包转发的装置的总体结构框图;

图2示出的是本发明的POS-PHY总线与PCI总线间的数据包转发的装置中的所述数据接收模块的内部结构及外部连接;

图3示出的是本发明的POS-PHY总线与PCI总线间的数据包转发的装置中的所述数据发送模块的内部结构及外部连接;

图4A为本发明的POS-PHY总线与PCI总线间的数据包转发的方法中的上行现场可编程逻辑门阵列FPGA内部数据处理流程图;

图4B为本发明的POS-PHY总线与PCI总线间的数据包转发的方法中的上行现场可编程逻辑门阵列FPGA的驱动软件流程图;

图5A为本发明的POS-PHY总线与PCI总线间的数据包转发的方法中的下行现场可编程逻辑门阵列FPGA内部数据处理流程图;

图5B为本发明的POS-PHY总线与PCI总线间的数据包转发的方法中的下行现场可编程逻辑门阵列FPGA的驱动软件流程图;

图6为本发明的POS-PHY总线与PCI总线间的数据包转发的装置和方法中的缓存描述符表BD链表的结构示意图。

具体实施方式

以下通过对本发明的具体较佳实施例的详细描述,将使本发明的技术方案及其有益效果显而易见。

本发明的POS-PHY总线与PCI总线间的数据包转发的装置和方法,是通过一种总线间的桥接转发装置,亦可称为“总线转换器”,来完成数据包在POS-PHY总线和PCI总线间的双向转发,该装置由一片现场可编程逻辑门阵列FPGA实现,FPGA是一种大规模可编程器件。

本发明装置和方法中所有数据包的传输都通过DMA方式完成,这样CPU的利用较少,降低了系统的负担,提高了数据传输的速度。对于数据的上行和下行采用不同的突发传输(burst)方式。在上行方向,每收到64字节或一个小包(小于64字节的包定义为小包,下同)即发起一次burst传输,将数据写入内存;在下行方向,burst长度可以由软件配置,数据包可以只用一次burst完成整个包的传输,也可以分几次burst传输。

本发明装置和方法利用了一种缓存描述符表(Buffer Descriptor Table,通常简称为“BD表”)实现CPU与总线转换器的通信,缓存描述表中描述了数据存放的地址、长度、数据包内容正确与否以及内存的占用情况等信息。上行和下行各有一个包含有128个表项的缓存描述链表(BD Ring),缓存描述链表存放于内存中,总线转换器中只包含当前缓存描述表的相关信息,这样做减少了CPU访问PCI总线的次数,而且减少了对FPGA资源的占用。

数据包的收发都由总线转换器主动发起,总线转换器作为PCI传输的主设备,利用了内存作为缓存,使得软件有足够的时间来完成数据处理。上行数据包按分片的突发传输burst方式传送,即无须收到完整的数据包即可以向PCI总线发出数据,这样可以在PCI总线带宽下完全避免上溢错误的产生;而下行采用整包方式传送,可通过限制包的大小来避免传输中下溢错误的出现。

合理地划分数据通道,在PCI主设备端分为地址通道和数据通道,在PCI从设备端分为PCI配置寄存器和PCI空间寄存器。所有数据及地址线的输出只经过一级多路选择开关及D触发器输出,降低信号的输出延迟及抖动。只经过一级多路选择开关,可以减少信号在FPGA内部门电路之间的异步延迟,通过D触发器输出可以使所有同一时钟域的信号保持同步。

采用带循环优先的两级仲裁机制,分别对PCI主从设备操作、数据包上下行操作进行仲裁,保证数据包的上行和下行有相同的机会使用PCI总线。由于本发明装置与外部系统只有一套PCI总线,所以各个操作占用PCI总线之前必须经过仲裁,以获取对PCI总线的控制权,各种操作,包括PCI主设备操作、从设备操作,其中所述PCI主设备操作又包括数据包的上行和下行两种操作方式,各种操作以均等的机会占用PCI总线,这种仲裁方式称为循环优先的乒乓调度方法。

本发明中的总线桥接转换装置,即所述总线转换器,其总体结构框图如图1所示,共分为以下9个子模块:PCI总线接口模块101、PCI主设备控制模块102、PCI从设备控制模块103、收发仲裁模块104、PCI配置寄存器105、PCI空间寄存器106、数据接收模块107、数据发送模块108、POS-PHY接口模块109。整个装置由一片FPGA实现,其外部连接分别通过对应接口模块的是PCI总线和POS-PHY总线,该桥接转发装置可以把一个带有POS-PHY总线的二层处理模块与三层处理模块连接起来,实现数据包在这两个模块之间的双向转发。

所述PCI总线接口模块101主要完成对所述PCI总线的地址数据线及控制线的处理,在地址期完成所述PCI总线的地址译码并作为相应的响应,在数据期将数据包按burst方式接收或发送数据包。该模块同时还完成对所述PCI总线的进行奇偶校验并给出相应的信息。该模块以循环优先方式完成PCI_MASTER和PCI_SLAVE主从两种PCI操作的仲裁。

所述PCI主设备控制模块102主要完成数据包的接收和发送,所述数据包的接收和发送都是由本发明中的桥接转发装置主动发起的,通过DMA方式直接从内存中取包或收包。

所述PCI从设备控制模块103主要完成CPU对该桥接转发装置的配置及控制。在PCI配置期,CPU对配置寄存器进行初始化,完成对PCI设备状态的识别,由于所述配置寄存器还包括基地址寄存器和总线控制状态寄存器,所述CPU并对所述基地址寄存器进行初始化,完成PCI设备在内存中的地址映射,同时还通过PCI配置空间中的所述总线控制状态寄存器获取该桥接转发装置所支持的操作。除了完成PCI配置期间的操作,所述从设备控制模块103还接收该CPU发包的启动命令,该命令通过所述CPU发起的PCI memory写完成,并将此命令传送通知软件处理到PCI主设备控制模块102。

所述收发仲裁模块104完成接收和发送两个操作的仲裁。该仲裁模块采取乒乓调试算法,使得数据包的上行和下行均有相同的机会获得PCI总线,同时将PCI_MASTER成功与否的指示分别反馈给上、下行的请求。如果PCI操作失败,仍然给原申请方占用PCI_MASTER的机会,直到成功切换到另一方。

所述数据接收模块107完成POS_PHY的数据接收,并向PCI_MASTER模块发出接收数据请求。所述数据接收模块107的内部结构及外部连接如附图2所示,该数据接收模块107包括一个2K字节空间的上行异步FIFO201(first in first out,先进先出),一上行读写控制逻辑即上行FIFO输入控制202和上行FIFO输出控制203,一上行缓存描述表处理模块204四个子模块。该2K字节的异步FIFO完成了数据包在两个时钟域的转换。

须注意的是,在通常的包传输系统中,往往定义最大传输单元为2K字节,本发明的模块中的上行及下行FIFO都设为2K,是为了可以用来存放一个最大为2K字节的包。

所述数据发送模块108从所述PCI总线接收数据,根据FIFO的状态发送FIFO_RDY准备好的信号,并将FIFO中的数据发送到POS-PHY总线。数据发送模块的内部结构及外部连接如图3所示,其包括一个2K字节空间的下行异步FIFO 301,一下行读写控制逻辑即下行FIFO输入控制303和下行FIFO输出控制302,以及一下行缓存描述表处理模块304四个子模块。所述2K字节的异步FIFO完成了数据包在两个时钟域的转换。

以下为图2和图3中所示各接口的含义:

RENB:receive enable,接收使能;

RVAL:receive data valid,接收数据有效;

RPA:receive packet available,接收数据包有效;

RSOP:receive start of packet,接收侧包头;

REOP:receive end of packet,接收侧包尾;

RERR:receive error,接收错误;

POS_RDATA:pos_phy总线接收侧数据信号,接收FIFO的输入数据;

FIFO_DATA:接收FIFO的输出数据;

RxREQ:receive request接收请求;

RxGND:receive grant接收响应;

RxBD_data:接收BD表数据;

RxBD_addr:接收BD表地址;

RxPacket_addr:接收包地址;

RxBD_content:接收BD表内容;

TENB:transmit enable,发送使能;

TVAL:transmit data valid,发送数据有效;

TPA:transmit packet available,发送数据包有效;

TSOP:transmit start of packet,发送侧包头;

TEOP:transmit end ofpacket,发送侧包尾;

TERR:transmit error,发送错误;

POS_TDATA:pos_phy总线发送侧数据信号,发送FIFO的输出数据;

FIFO_DATA:发送FIFO的输入数据;

TxREQ;transmit request接收请求;

TxGND:transmit grant接收响应;

TxBD_data:发送BD表数据;

TxBD_addr:发送BD表地址;

TxPacket_addr:发送包地址;

TxBD_content:发送BD表内容;

FIFO_RDY:FIFO ready:表示FIFO准备好,可以用来存放数据;

RX_FIFO:接收FIFO,用来存放数据,相对应有TX_FIFO。

所述POS-PHY接口模块109完成对POS-PHY数据和控制总线的处理,产生对PHY的控制信号。

所述FPGA和软件通过缓存描述表(buffer descriptor)实现交互的收发包操作。128个缓存描述表组成一个缓存描述链表(BD ring),如图6所示的,该缓存描述链表采用环形链表的方式,上行和下行各有一个深度为128的缓存描述链表,用于在所述CPU和所述FPGA之间传递包缓存的信息,完成数据包的转发。其上行和下行各有一个缓存描述链表,缓存描述链表存放在内存中,每个缓存描述表项包含64位,由两个32位的数据构成,如下表所示。

缓存描述表格式

31     30      29:16      15:0

OWN    ERR                PACKET_LENTH

BUFFER_ADDR_INDEX

OWN:1表示有包,0表示无包。

ERR:表示此包是坏包还是好包。

PACKET_LENTH:包的长度。

BUFFER_ADDR_INDEX:包所在内存的地址。

以下描述本发明的POS-PHY总线与PCI总线间的数据包转发的方法中对数据包的上行处理步骤:

对数据包的上行处理时所述FPGA和软件的具体操作流程分别如图4A和图4B所示。

所述软件完成初始化,同时启动所述FPGA收包。所述FPGA收到64字节(或一个小包),以PCI_MASTER方式查询内存中上行缓存描述链表中第一个缓存描述表的内容,如果内存为空,则获取相应空闲内存的地址,并将数据包传到此内存中。

当完成一个整包的传送后,将缓存描述表OWN标志置为有包状态,同时填入长度信息,上报有包中断即发起中断通知软件处理,即所述FPGA发出一个PCI中断,用来通知系统软件已经有一个完整的数据包收到并已存放在内存中,系统软件收到这个中断以后将启动一个处理该数据包的程序。同时缓存描述表地址及上行处理计数器分别加1,即RX_WR_INDEX=RX_WR_INDEX+1,指向下一张缓存描述表。。

如果所述FPGA仍然有包就重复上述流程。如果发现内存已经用尽,则上报数据满即RX_FIFO满的中断。为防止不停地上报FIFO满中断,此时所述FPGA停止查询所述缓存描述表,等待软件处理或者改为每隔256个时钟周期查询一次情况;一旦软件处理完内存的数据包,则由软件启动所述FPGA上行端继续工作。

软件驱动流程是:软件对所述上行缓存描述链表进行初始化,将OWN标志设定为0,即无包标志,同时填上对应的内存地址;在软件收到上行有包中断后,即检查缓存描述表中是否有包,如无,则进行异常处理,可复位所述FPGA;如有则读取长度,完成包处理,并将缓存描述表OWN标志置为0无包状态,并检查下一个缓存描述表是否有数据,依次循环下去,直到处理完所有数据。为防止该进程独占任务队列,需要在处理完128个缓存描述表,重新申请一个进程加入到任务队列中。

以下描述本发明的POS-PHY总线与PCI总线间的数据包转发的方法中对数据包的下行处理:

对数据包的下行处理时所述FPGA和软件的具体操作流程如图5A和图5B所示。

当软件向所述内存中写一个数据包后,更新下行缓存描述链表,设置有包标志,填入数据包的地址,同时将所述FPGA的下行启动寄存器写1。

所述下行启动寄存器设计为一个8位双向下行包计数器,当软件写一次,下行包计数器加1;当所述FPGA完成一次收包后,包计数器减1。

所述FPGA开始后,检查所述下行启动寄存器,一旦不为0,就开始读取下行缓存描述链表,如果该下行缓存描述链表的缓存描述表指示有包即其缓存描述OWN=1,就根据该缓存描述表中的包长度,启动DMA,开始收该内存中的整个数据包。完毕后,将缓存描述表的相应表项OWN标志置空,即OWN=0。

接着对缓存描述表地址加1,以及下行处理计数器加1即TX_INDEX=TX_INDEX+1,检查下一张缓存描述表是否为空,如果不为空,即重复上述流程,如果为空,则依据下行启动寄存器是否大于0来决定是否收包。

下行数据包的处理采取整包模式,即所述FPGA收到一个完整的包以后才会启动下行FIFO输出控制状态机,状态机就是在所述可编程逻辑器件设计中的一种通用设计方法,用来控制各种输入输出信号的逻辑关系,这样可以避免出现下溢的现象。

所述软件驱动的流程是:软件启动后,首先初始化下行缓存描述链表,将其OWN标志设为0,同时填上对应的内存地址,并初始化所述FPGA的TX_INDEX;检查所述缓存描述表是否为空,如长时间为非空,则认为异常,发送异常报告;如为空,在此缓存描述表中写入数据包,通过PCI想所述FPGA的所述下行启动寄存器写1;修改所述缓存描述表,表示该内存有数据包,即设置其OWN=1并填入其长度;然后检查下一个缓存描述表是否为空,如空,则重复上述步骤;如长时间为非空,则认为异常,发送异常报告。

综上,本文明解决了数据包在POS-PHY总线与PCI总线之间进行双向转发的问题,可以把一个带有POS-PHY总线的二层处理模块与三层处理模块连接起来,实现数据包在这两个模块之间的双向转发。

应当理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其具体实施例进行等同的改变或替换,而所有这些改变或替换都应属于本发明所附权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号