发明内容
本发明实施例提供一种信元交换方法和装置,以实现在较简单的调度下无冲突的进行信元交换。
一种信元交换方法,包括:
将从输入端口接收的信元缓存在所述输入端口对应的第一fifo中;
根据信元中的目的地址信息或目的端口信息,确定所述信元的输出端口;
按照第一RAM组的位宽,将所述第一fifo中的信元拆分为L个数据块,并分别写入第一RAM组中的各RAM中,所述第一RAM组中包括的RAM个数大于或等于L个,其中,L=信元长度/第一RAM组的位宽;
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并输出,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,所述从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并输出,具体包括:
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述信元的输出端口所对应的第二fifo中;
通过所述输出端口输出所述第二fifo中缓存的信元。
较佳的,所述将第一fifo中的信元拆分为L个数据块,并分别写入第一RAM组中的各RAM中具体为:
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过L个时隙将所述L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
一种信元交换装置,包括:
与输入端口数量相同的第一fifo,用于存储从与之对应的输入端口接收的信元;
确定单元,用于根据所述信元中的目的地址信息或目的端口信息,确定所述信元的输出端口;
第一RAM组,包括不少于L个RAM,用于缓存所述信元,其中,L=信元长度/第一RAM组的位宽;
输入控制单元,用于按照第一RAM组的位宽,将所述第一fifo中的信元拆分为L个数据块,并分别写入所述第一RAM组中的各RAM中;
输出控制单元,用于根据所述确定单元确定的所述信元的输出端口,从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并输出,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,装置中还包括:
与输出端口数量相同的第二fifo,用于缓存对应的输出端口从所述第一RAM组中读出的数据;
所述输出控制单元具体用于,根据所述确定单元确定的所述信元的输出端口,从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述输出端口所对应的第二fifo中,并在一个信元读取完毕后,从对应的输出端口输出所述第二fifo中缓存的信元。
进一步,所述第一控制单元具体用于:
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过L个时隙将所述L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
一种信元交换方法,包括:
将从输入端口接收的信元缓存在所述输入端口对应的第一fifo中;
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过一个周期中的L个时隙将所述L个数据块依次写入所述输入端口所属的分组对应的第一RAM组中,每个时隙向所述第一RAM组中的相应RAM中写入一个数据块,不同输入端口分配的起始时隙不同,所述第一RAM组中包括的RAM个数大于或等于L个,其中,L=信元长度/第一RAM组的位宽,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量,并且大于或等于L;
根据所述信元中的目的地址信息或目的端口信息,确定所述信元的输出端口和该输出端口所属的分组,每组的输出端口数小于或等于一个周期中时隙的个数;
将所述第一RAM组中的信元写入所述信元的输出端口所属的分组所对应的第二RAM组中,所述第二RAM组的位宽与所述信元长度相等。
将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中,所述第三RAM组的位宽与所述第一RAM组相同,所述第三RAM组中包括的RAM个数大于或等于L个;
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并输出,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,所述从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并输出,具体包括:
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述信元的输出端口所对应的第二fifo中,以及通过所述输出端口输出所述第二fifo中缓存的信元。
较佳的,所述每个分组中输入端口或输出端口的个数不超过L个。
进一步,所述将信元写入所述信元的输出端口所属的分组所对应的第三RAM组中与所述信元输出端口对应的RAM中,具体为:
将所述信元写入所述信元的输出端口所属的分组和所述信元的输入端口所属的分组共同对应的第二RAM组中的与所述信元输出端口对应的RAM中。
进一步,所述将信元写入所述信元的输出端口所属的分组所对应的第三RAM组中与所述信元输出端口对应的RAM中,具体为:
将所述信元写入所述信元的输出端口所属的分组对应的各第二RAM组中数据量较少的一个对应所述输出端口的RAM中。
较佳的,所述将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中具体包括:
轮流将对应同一第三RAM组的各第二RAM组中较早存储的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中。
进一步,所述将信元写入第三RAM组中,具体为:
根据所述信元的输出端口,将所述信元写入所述第三RAM中对应所述输出端口的区域。
一种信元交换装置,包括:
与输入端口数量相同的第一fifo,用于存储从与之对应的输入端口接收的信元;
确定单元,用于根据所述信元中的目的地址信息或目的端口信息,确定所述信元的输出端口和该输出端口所属的分组,每组的输出端口数小于或等于一个周期中时隙的个数;
与输入端口分组数量相等的第一RAM组,包括不少于L个RAM,用于缓存所述信元,其中,L=信元长度/第一RAM组的位宽;
M个第二RAM组,位宽与所述信元长度相等,用于缓存所述信元,其中M为输入端口的分组数与输出端口的分组数的乘积;
与输出端口分组数量相等的第三RAM组,包括不少于L个RAM,用于缓存所述信元,位宽与所述第一RAM组相同;
第一控制单元,用于按照所述第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过一个周期中的L个时隙将所述L个数据块依次写入所述输入端口所属的分组对应的第一RAM组中,每个时隙向所述第一RAM组中的相应RAM中写入一个数据块,不同输入端口分配的起始时隙不同,其中,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量;
第二控制单元,用于根据所述确定单元确定的所述信元的输出端口所属的分组,将所述第一RAM组中的信元写入所述信元的输出端口所属的分组对应的第二RAM组中;
第三控制单元,用于将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中;
第四控制单元,用于从为所述信元的输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并输出,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,装置中还包括:
与输出端口数量相同的第二fifo,用于缓存对应的输出端口从所述第三RAM组中读出的数据;
所述第四控制单元具体用于,根据所述确定单元确定的所述信元的输出端口,从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述输出端口所对应的第二fifo中,并在一个信元读取完毕后,从对应的输出端口输出所述第二fifo中缓存的信元。
进一步,所述第二控制单元具体用于,根据所述确定单元确定的所述信元的输出端口所属的分组,将所述信元写入所述信元的输出端口所属的分组和所述信元的输入端口所属的分组共同对应的第二RAM组中的与所述信元输出端口对应的RAM中。
进一步,所述第二控制单元具体用于,根据所述确定单元确定的所述信元的输出端口所属的分组,将所述信元写入所述信元的输出端口所属的分组对应的各第二RAM组中数据量较少的一个对应所述输出端口的RAM中。
较佳的,所述第三控制单元具体用于,轮流将对应同一第三RAM组的各第二RAM组中较早存储的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中。
进一步,所述第三控制单元具体用于,将所述第二RAM组中的信元拆分为L个数据块,并根据所述信元的输出端口,分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中对应所述输出端口的区域。
将从输入端口接收的信元缓存在所述输入端口对应的第一fifo中;
根据信元中的目的地址信息或目的端口信息,确定所述信元的输出端口;
按照第一RAM组的位宽,将所述第一fifo中的信元拆分为L个数据块,并分别写入第一RAM组中的各RAM中,所述第一RAM组中包括的RAM个数大于或等于L个,其中,L=信元长度/第一RAM组的位宽;
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述信元的输出端口所对应的第二fifo中,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L;
通过所述输出端口输出所述第二fifo中缓存的信元。
进一步,所述将第一fifo中的信元拆分为L个数据块,并分别写入第一RAM组中的各RAM中具体为:
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过L个时隙将所述L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
一种信元交换装置,包括:
与输入端口数量相同的第一fifo,用于存储从与之对应的输入端口接收的信元;
第一RAM组,包括不少于L个RAM,用于缓存所述信元,其中,L=信元长度/第一RAM组的位宽;
与输出端口数量相同的第二fifo,用于缓存从所述第一RAM组中读出的数据;
输入控制单元,用于按照第一RAM组的位宽,将所述第一fifo中的信元拆分为L个数据块,并分别写入所述第一RAM组中的各RAM中;
输出控制单元,用于根据所述确定单元确定的所述信元的输出端口,从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第一RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述输出端口所对应的第二fifo中,并在一个信元读取完毕后,从对应的输出端口输出所述信元,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,所述第一控制单元具体用于:
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过L个时隙将所述L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
一种信元交换方法,包括:
将从输入端口接收的信元缓存在所述输入端口对应的第一fifo中;
按照第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过一个周期中的L个时隙将所述L个数据块依次写入所述输入端口所属的分组对应的第一RAM组中,每个时隙向所述第一RAM组中的相应RAM中写入一个数据块,不同输入端口分配的起始时隙不同,所述第一RAM组中包括的RAM个数大于或等于L个,其中,L=信元长度/第一RAM组的位宽,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量,并且大于或等于L;
根据所述信元中的目的地址信息或目的端口信息,确定所述信元的输出端口和该输出端口所属的分组,每组的输出端口数小于或等于一个周期中时隙的个数;
将所述第一RAM组中的信元写入所述信元的输出端口所属的分组所对应的第二RAM组中,所述第二RAM组的位宽与所述信元长度相等。
将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中,所述第三RAM组的位宽与所述第一RAM组相同,所述第三RAM组中包括的RAM个数大于或等于L个;
从为所述输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述信元的输出端口所对应的第二fifo中,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L;
通过所述输出端口输出所述第二fifo中缓存的信元。
较佳的,所述每个分组中输入端口或输出端口的个数不超过L个。
进一步,所述将信元写入所述信元的输出端口所属的分组所对应的第三RAM组中与所述信元输出端口对应的RAM中,具体为:
将所述信元写入所述信元的输出端口所属的分组和所述信元的输入端口所属的分组共同对应的第二RAM组中的与所述信元输出端口对应的RAM中。
或者,所述将信元写入所述信元的输出端口所属的分组所对应的第三RAM组中与所述信元输出端口对应的RAM中,具体为:
将所述信元写入所述信元的输出端口所属的分组对应的各第二RAM组中数据量较少的一个对应所述输出端口的RAM中。
进一步,所述将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中具体包括:
轮流将对应同一第三RAM组的各第二RAM组中较早存储的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中。
较佳的,所述将信元写入第三RAM组中,具体为:
根据所述信元的输出端口,将所述信元写入所述第三RAM中对应所述输出端口的区域。
一种信元交换装置,包括:
与输入端口数量相同的第一fifo,用于存储从与之对应的输入端口接收的信元;
确定单元,用于根据所述信元中的目的地址信息或目的端口信息,确定所述信元的输出端口和该输出端口所属的分组,每组的输出端口数小于或等于一个周期中时隙的个数;
与输入端口分组数量相等的第一RAM组,包括不少于L个RAM,用于缓存所述信元,其中,L=信元长度/第一RAM组的位宽;
M个第二RAM组,位宽与所述信元长度相等,用于缓存所述信元,其中M为输入端口的分组数与输出端口的分组数的乘积;
与输出端口分组数量相等的第三RAM组,包括不少于L个RAM,用于缓存所述信元,位宽与所述第一RAM组相同;
与输出端口数量相同的第二fifo,用于存储从所述第三RAM组中读出的信元;
第一控制单元,用于按照所述第一RAM组的位宽,将所述第一fifo中的信元拆分成L个数据块,从预先为所述输入端口分配的起始时隙开始,通过一个周期中的L个时隙将所述L个数据块依次写入所述输入端口所属的分组对应的第一RAM组中,每个时隙向所述第一RAM组中的相应RAM中写入一个数据块,不同输入端口分配的起始时隙不同,其中,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量;
第二控制单元,用于根据所述确定单元确定的所述信元的输出端口所属的分组,将所述第一RAM组中的信元写入所述信元的输出端口所属的分组对应的第二RAM组中;
第三控制单元,用于将所述第二RAM组中的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中;
第四控制单元,用于从为所述信元的输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从所述第三RAM组的L个RAM中依次读出所述信元的各数据块,并缓存在所述信元的输出端口所对应的第二fifo中,并在一个信元读取完毕后,从对应的输出端口输出所述信元,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,所述第二控制单元具体用于,根据所述确定单元确定的所述信元的输出端口所属的分组,将所述信元写入所述信元的输出端口所属的分组和所述信元的输入端口所属的分组共同对应的第二RAM组中的与所述信元输出端口对应的RAM中。
或者,所述第二控制单元具体用于,根据所述确定单元确定的所述信元的输出端口所属的分组,将所述信元写入所述信元的输出端口所属的分组对应的各第二RAM组中数据量较少的一个对应所述输出端口的RAM中。
进一步,所述第三控制单元具体用于,轮流将对应同一第三RAM组的各第二RAM组中较早存储的信元拆分为L个数据块,并分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中。
较佳的,所述第三控制单元具体用于,将所述第二RAM组中的信元拆分为L个数据块,并根据所述信元的输出端口,分别写入所述输出端口所属分组对应的第三RAM组中的各RAM中对应所述输出端口的区域。
本发明实施例提供一种信元交换方法和装置,通过在每个输入端口增加fifo,缓存对应的输入端口所输入的信元,并将各个fifo中缓存的信元拆分为多个数据块写入共享缓存,再由输出端口通过不同的时隙读出信元,并输出,完成交换,由于增加了fifo对信元进行了缓存,进而可以使得各个不同端口需要对同一缓存进行读写时,各端口分别在不同的时隙进行读写,避免了冲突且容易调度。
具体实施方式
本发明实施例提供一种信元交换方法和装置,在每个输入输出端口都增加了一个对应的fifo来缓存所输入输出的信元,并为每个输入输出端口分配写入或读出缓存的起始时隙,各端口从各自的起始时隙开始,通过一个周期中的L个时隙写入或读出缓存中的信元,其中,L=信元长度/第一RAM的位宽,在每个端口都需要进行写入或读取时,每个时隙都有且只有一个端口对一个RAM进行读取或写入,从而避免了缓存读写的冲突。
以576位的信元和位宽为16位的RAM组为例:
在进行写入时,如图1所示,每个输入端口都通过36个时隙分别对RAM组中的36个RAM进行写入,每次写入一个RAM的位宽的长度,36个时隙刚好可以将一个信元全部写入到该RAM组中,由于每个输入端口的起始时隙都不同,比前一个端口晚一个时隙,并且都是从RAM组的第一个RAM开始一次写入,避免了输入端口间写入的冲突,且在进行一个周期以后,每个输入端口都处于全速写的状态,没有对带宽造成浪费。
同样,在进行读出时,如图2所示,每个输出端口都通过36个时隙分别从RAM组中的36个RAM读出,每次读出一个RAM的位宽的长度,36个时隙刚好可以将一个信元从该RAM组中全部读出,由于每个输出端口的起始时隙都不同,比前一个端口晚一个时隙,并且都是从RAM组的第一个RAM开始一次读取,避免了输出端口间读取缓存的冲突,且在进行一个周期以后,每个输入端口都处于全速读的状态,没有对带宽造成浪费。
根据端口的数量,设置的缓存数量的不同,本发明实施例具体提供如下几种实施方式:
实施例一、
仅在信元交换装置中设置一个RAM组。
如图3所示,本发明实施例提供的信元交换方法包括:
步骤S301、将从输入端口接收的信元缓存在输入端口对应的第一fifo中;
步骤S302、根据信元中的目的地址信息或目的端口信息,确定信元的输出端口;
步骤S303、按照第一RAM组的位宽,将第一fifo中的信元拆分为L个数据块,并分别写入第一RAM组中的各RAM中,第一RAM组中至少包括L个RAM,L=信元长度/第一RAM的位宽;
步骤S304、从为该输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从第一RAM组的L个RAM中依次读出该信元的各数据块,并通过该信元的输出端口输出。
进一步,在步骤S304中,还可以将从第一RAM组的L个RAM中依次读出该信元的各数据块存储到与该信元的输出端口对应的第二fifo中,待该信元的所有数据块全部读出后,再从第二fifo中输出该信元。
为防止写入时造成缓存冲突,在步骤S303中,同样也是按照时隙顺序写入,即,按照第一RAM组的位宽,将第一fifo中的信元拆分成L个数据块,从预先为输入端口分配的起始时隙开始,通过L个时隙将L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
以输出端口从第一RAM组中写数据为例,由于给不同的输出端口分配的起始时隙不同,而各个输出端口从起始时隙开始,都从第一RAM组的第一个RAM开始读取数据,所以各个输出端口错开了读取时间,对于缓存来讲,每个时隙都有输出端口在进行读取,并没有位宽的浪费。
在写入时,也是同样,由于给不同的输入端口分配的时隙不同,在每个时隙中,各个输入端口都对第一RAM中不同的RAM进行写入操作,避免了冲突。
为保证每个输出端口都能够分到不同的时隙,一个周期中所包含的时隙数目要大于或者等于输出端口的数量,当然,为保证对于每个RAM来讲,能够达到每个时隙都有输出端口在读取数据,一个周期中的时隙数目应该等于输出端口的数量。当输入端口数量和输出端口数量不同时,一个周期中所包含的时隙数目要大于或等于较多的一个,即,如果输入端口数量大于输出端口数量,一个周期中所包含的时隙数目要大于或等于输入端口数量,反之,则一个周期中所包含的时隙数目要大于或等于输出端口数量。
同时,一个周期中所包含的时隙数目还要大于或等于L,这样才能够保证在一个周期内将一个信元完整的写入到第一RAM组中去。
当第一RAM组中包括的RAM数目大于L时,只有前L个RAM中会被写入数据。
较佳的情况是,第一RAM组中包括L个RAM,一个周期所包含的时隙数目刚好等于输出端口数量和L中较大的一个,这样既保证了数据读取的顺利进行,又没有浪费缓存资源。
当第一RAM组中包括L个RAM时,每个RAM中存储该信元的一个数据块,L个RAM刚好存储一个信元,即利用第一RAM组每个RAM的相同地址来存储一个信元。
进一步,第一RAM组中的RAM容量越大越好,当多个输入端口向同一个输出端口发送信元时,可以存储在第一RAM组中,由该输出端口依次读出,实现了缓冲,且调度较简单。
如图4所示,该信元交换装置中包括:第一fifo401、确定单元402、第一RAM组403、输入控制单元405和输出控制单元406,其中:
第一fifo401的数量与输入端口相同,并且每个第一fifo对应一个输入端口,用于存储从与之对应的输入端口接收的信元;
确定单元402,用于根据第一fifo401中所存储的信元中的目的地址信息或目的端口信息,确定该信元的输出端口;
第一RAM组403,包括不少于L个RAM,用于缓存信元,其中,L=信元长度/第一RAM组的位宽;
输入控制单元405,用于按照第一RAM组403的位宽,将第一fifo401中的信元拆分为L个数据块,每个数据块的大小即为第一RAM组403中RAM的位宽,并将L个数据块分别写入第一RAM组403中的各RAM中;
在写入时,可以从预先为所述输入端口分配的起始时隙开始,通过L个时隙将所述L个数据块依次写入第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块。
输出控制单元406,用于根据确定单元402确定的信元的输出端口,从为该输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从第一RAM组403的L个RAM中依次读出信元的各数据块,并输出,其中,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
或者,信元交换装置中也可以进一步包括第二fifo404,第二fifo404的数量与输出端口相同,并且每个第二fifo404对应一个输出端口,用于缓存从第一RAM组中读取出的数据,此时,输出控制单元406具体用于,根据确定单元402确定的信元的输出端口,从为该输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从第一RAM组403的L个RAM中依次读出信元的各数据块,并缓存在该输出端口对应的第二fifo404中,并在一个信元读取完毕后,从对应的输出端口输出第二fifo404中缓存的信元。
下面以具体的实例来说明该实施方式:
若交换装置中的输入输出端口各有36个,一个信元的长度为576位,第一RAM组的位宽为16,那么L为36,刚好等于输入输出端口的数量,此时,信元交换装置中的第一RAM组中需要包括至少36个RAM,当第一RAM组中包括36个RAM、每个周期包括36个时隙时较佳。如从该信元交换装置的第15个输入端口输入一个信元,需要输出至第20个输出端口时,该第15个输入端口所对应的第一fifo首先缓存该信元,确定单元根据第一fifo中缓存的信元中的目的地址信息或目的端口信息确定该信元的输出端口为第20个输出端口。输入控制单元从预先分配的第15个时隙开始,向第一RAM组中写入该信元,在时隙15时向第一RAM组中的第一个RAM中写入该信元的第一个16位,在时隙16时向第一RAM组中的第二个RAM中写入该信元的下一个16位,当下一个周期的第14个时隙时,即可将该信元的最后一个16位写入第一RAM组中的最后一个RAM中,完成了向第一RAM组中写入该信元。输出控制单元从预先分配给第20个输出端口的第20个时隙开始,从第一RAM组中读出该信元,在时隙20时向第一RAM组中的第一个RAM中读出该信元的第一个16位,在时隙21时向第一RAM组中的第一个RAM中读出该信元的下一个16位,直到下一个周期的第19个时隙时,即可从第一RAM组中的最后一个RAM中读出该信元的最后一个16位,所读出的数据都存储在第20个输出端口所对应的第二fifo中,当该信元读取完毕后,将该第二fifo中存储的信元从第20个输出端口输出,完成了对该信元的交换。
若该信元交换装置有37个输入端口或者37个输出端口,将一个周期所包括的时隙数目设置为37个即可实现信元的交换。
实施例二、
在信元交换装置中设置了多个缓存,较适用于输入输出端口较多的情况。
此时,如图5所示,进行信元交换的方法中包括:
步骤S501、将从输入端口接收的信元缓存在输入端口对应的第一fifo中;
步骤S502、按照第一RAM组的位宽,将第一fifo中的信元拆分成L个数据块,从预先为输入端口分配的起始时隙开始,通过一个周期中的L个时隙将L个数据块依次写入输入端口所属的分组对应的第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块;
不同输入端口分配的起始时隙不同,为保证能够将一个信元的各个数据块写入到第一RAM组各个RAM的相同地址中,第一RAM组中包括的RAM个数要大于或等于L个,其中,L=信元长度/第一RAM组的位宽,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量;
步骤S503、根据信元中的目的地址信息或目的端口信息,确定信元的输出端口和该输出端口所属的分组,每组的输出端口数小于或等于一个周期中时隙的个数;
步骤S504、将第一RAM组中的信元写入信元的输出端口所属的分组所对应的第二RAM组中,第二RAM组的位宽与信元长度相等。
步骤S505、将第二RAM组中的信元拆分为L个数据块,并分别写入输出端口所属分组对应的第三RAM组中的各RAM中,第三RAM组的位宽与第一RAM组相同,第三RAM组中包括的RAM个数大于或等于L个;
步骤S506、从为输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从第三RAM组的L个RAM中依次读出信元的各数据块,并输出。
同样,不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于第一RAM组中RAM的数量;
进一步,还可以为每个输出端口设置一个第二fifo,将从第三RAM组的L个RAM中读出信元的各数据块缓存在信元的输出端口所对应的第二fifo中,在一个信元读取完毕后,再通过输出端口输出第二fifo中缓存的信元。
如图6所示,此时,该信元交换装置中包括:第一fifo601、确定单元602、第一RAM组603、第二RAM组604、第三RAM组605、第一控制单元607、第二控制单元608、第三控制单元609和第四控制单元610,其中:
第一fifo601的数量与输入端口相同,并且每个第一fifo601对应一个输入端口,用于存储从与之对应的输入端口接收的信元;
确定单元602,用于根据第二RAM组604中所存储的信元中的目的地址信息或目的端口信息,确定该信元的输出端口和该输出端口所属的分组;
第一RAM组603,数量与输入端口的分组数量相同,每个第一RAM组603都包括不少于L个RAM,用于缓存接收的信元,其中,L=信元长度/第一RAM组的位宽;
第二RAM组604,至少包括M个,M为输入端口的分组数与输出端口的分组数的乘积,用于缓存信元,第二RAM组604的位宽与信元长度相等,可以在一个时隙完成一个信元的写入或读出;
第三RAM组605,数量与输出端口的分组数量相同,每个第三RAM组605都包括不少于L个RAM,用于缓存信元,第三RAM组605的位宽和第一RAM组603的位宽相同;
第一控制单元607,用于按照第一RAM组603的位宽,将第一fifo601中的信元拆分成L个数据块,从预先为输入端口分配的起始时隙开始,通过一个周期中的L个时隙将L个数据块依次写入输入端口所属的分组对应的第一RAM组中,每个时隙向第一RAM组中的相应RAM中写入一个数据块,不同输入端口分配的起始时隙不同,其中,一个周期包括的时隙数大于或等于一个分组中所包括的输入端口数量;
第二控制单元608,用于根据确定单元602确定的信元的输出端口所属的分组,将第一RAM组603中的信元写入该信元的输出端口所属的分组对应的第二RAM组604中;
第三控制单元609,用于将第二RAM组604中的信元拆分为L个数据块,并分别写入该信元的输出端口所属分组对应的第三RAM组605中的各RAM中;
第四控制单元610,用于从为信元的输出端口分配的起始时隙开始,通过一个周期中的L个时隙分别从第三RAM组605的L个RAM中依次读出该信元的各数据块,并输出,其中,预先为不同输出端口分配的起始时隙不同,一个周期中包括的时隙数大于或等于输出端口的数量,并大于或等于L。
进一步,信元交换装置中还可以包括数量与输出端口的数量相同的第二fifo606,与输出端口一一对应,用于存储从第三RAM组605中读出的信元,此时,第四控制单元在从第三RAM组605的L个RAM中依次读出该信元的各数据块时,将各个数据块缓存在该信元的输出端口所对应的第二fifo606中,并在一个信元读取完毕后,从对应的输出端口输出第二fifo606中缓存的信元。
下面举例说明本发明实施例较佳的实施方式:
如图7所示,为具有96个输入端口和输出端口的信元交换装置的结构示意图,由于信元长度为576,第一RAM组和第三RAM组中RAM的位宽为16,所以L值为36,为充分利用时间,避免端口的等待情况,一个周期的时隙数目设置为36,所以输入端口和输出端口各被分成了三组,1-36端口为第一组,37-72端口为第二组,73-96端口为第三组,每个分组中各个端口编号由小到大分别对应的起始时隙为1-36。
当信元交换装置从第1个输入端口接收到一个信元后,将该信元存储在第1个输入端口对应的第一fifo中,并在下一个周期的第一个时隙将该信元的前16位写入到第一RAM组的第一个RAM中,在该周期的第二个时隙将该信元的下一个16位写入到第一RAM组的第二个RAM中,直至该周期结束时,将该信元的第36个16位写入到第一RAM组的第36个RAM中,完成了对该信元的展宽。
若同时信元交换装置的第2个输入端口也接收到一个信元,则该信元存储在与第2个输入端口对应的第一fifo中,并在这个周期的第二个时隙向第一RAM组的第一个RAM中写入第一fifo中所存储的信元的前16位,在第三个时隙向第一RAM组的第二个RAM中写入该信元的下一个16位,依次类推,刚好与第1个端口的写入操作错开一个时隙。
如果该分组的36个输入端口都不停的接收信元,那么每个时隙中,36个输入端口都分别向该分组中的第一RAM组的不同RAM中写入数据。
确定单元获取各个分组的第一RAM组中所存储的信元中的目的地址信息或目的端口信息,确定各个信元的输出端口以及各个信元的输出端口所属的分组。可以为每个分组的第一RAM组分别设置一个确定单元,也可以各个分组共用一个确定单元。
读出第一RAM组中存储的信元,并写入到对应该信元的输出端口所在分组的第二RAM组中。由于第二RAM组中各RAM的位宽与信元长度相等,为576位,所以用一个时隙从第一RAM组中读出并写入到第二RAM组中即可,这样,在一个周期的36个时隙中,就可以将该组的36个端口在一个周期内所写入的36个信元全部读出并写入到各信元相应的第二RAM组中。
由于每个输入端口组和输出端口组的组合都有一个对应的第二RAM组,在将第一RAM组中的信元写入到第二RAM组中的时候,可以根据该信元的输入端口组和输出端口组,将该信元写入到对应的第二RAM组中,即,仍以图7中的信元交换装置为例,若从第1个输入端口输入一个信元去往第73个输出端口,则将该信元写入到第一组输入端口和第三组输出端口共同对应的第二RAM组中。
进一步,为使得信元在等待写入到第三RAM组中的时候更加有序,便于调度,可以在将信元写入到第二RAM组中时,将信元写入到第二RAM组中与该信元的输出端口所对应的RAM中,例如从第1个输入端口输入一个信元去往第73个输出端口,则将该信元写入到第一组输入端口和第三组输出端口共同对应的第二RAM组对应第73个输出端口的第一个RAM中。
更进一步,为了避免各个输入端口分组中去往同一个输出端口的信元数量不均衡,导致同一个输出端口对应的三个第二RAM组中的RAM利用率不均衡,可以在将信元写入到第二RAM组中时,选择该信元的输出端口所属的分组所对应的三个第二RAM组中,该输出端口对应的三个RAM中数据量最少的一个。如果在一个时隙中,只有一个输入端口分组的一个信元去往该输出端口,则将该信元写入到该输出端口对应的三个第二RAM组的三个RAM中最浅的一个,如果有两个输入端口分组各有一个信元去往该输出端口,则分别将这两个信元写入到该输出端口对应的三个第二RAM组的三个RAM中较浅的两个,如果三个输入端口分组都有一个信元去往该输出端口,则分别将三个信元写入到该输出端口对应的三个第二RAM组的三个RAM中,此时,可以采用链表的方式来记录各个信元的写入顺序。
或者,在第二RAM组中,还可以采用链表的方式来表征一个信元的输出端口,这时就不需要将信元写入第二RAM组中固定的对应该信元的输出端口的RAM中了,在读出时,如图8所示,只要轮询三个输入端口分组到该输出端口分别生成的三个链表即可。
从第二RAM组中读出信元并写入第三RAM组中也只需要一个时隙就可以完成,这样,通过一个周期的36个时隙,刚好可以向第三RAM组中为该组36个输出端口各写入一个信元。在为一个输出端口写入信元时,第三控制单元轮询该输出端口所对应的三个RAM或者三个链表,每次读出一个信元写入到第三RAM组中。
第三RAM组的深度可以为该组输出端口数量的二倍,每个输出端口对应两个地址,这样,刚好在一个周期内,第三控制单元在这个周期的一个时隙中向一个地址写入信元,第四控制单元在这个周期中从另一个地址读出信元,实现了对缓存的充分利用。
本发明实施例提供一种信元交换方法和装置,通过在每个端口增加fifo,缓存对应的输入端口所输入的信元,并将各个fifo中缓存的信元在不同的时隙中写入共享缓存,再由输出端口通过不同的时隙读出信元,并缓存在输出端口处增加的fifo中,再通过输出端口输出,完成交换,由于增加了fifo对信元进行了缓存,进而可以使得各个不同端口需要对同一缓存进行读写时,各端口分别在不同的时隙进行读写,避免了冲突且容易调度。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。