一种信元交换方法和装置 【技术领域】
本发明涉及数据通信技术, 尤其涉及数据通信技术中的一种信元交换方法和装置。 背景技术
目前的交换装置中, 交换芯片一般采用两种架构来实现, 一种是 crossbar( 交叉 开关矩阵 ) 架构, 另一种是 shared-memory( 共享内存 ) 架构。
采用 crossbar 架构进行信元交换需要考虑数据输入输出的两级调度问题, 在输 入输出之间需要进行匹配, 即输入端和输出端需要根据自身的空闲情况进行匹配和调度, 再与对方进行协商。调度算法的复杂性随着输入输出端口的增加而成指数增加, 在输入输 出端口较多时, 调度算法的复杂度极大。
在这种 crossbar 架构的基础上进一步发展出来的带交叉点缓存的 crossbar 结构 在每个交叉点都增加了缓存, 虽然不再需要匹配算法, 但是需要的交叉点缓存数量为输入 输出端口数的平方倍, 在端口数量较多的情况下, 交叉点缓存数量达到不可实现的程度。 采用 share-memory 架构使用了共享缓存, 相对于 crossbar 架构减少了对缓存资 源的消耗, 但是在向多个共享缓存中写入信元时, 由于是按照各个缓存的深度轮流写入的, 以使得各个缓存的深度均匀, 但是这就有可能使得不同的输出端口在同一时间从同一缓存 中读数据, 造成冲突。如果增大共享缓存的带宽, 允许更多的输出端口同时读取数据, 可以 降低这种冲突发生的概率, 但同时多个输出端口需要在统一缓存中读数据时的调度复杂度 也增加了, 在端口数量较多的时候, 很难解决冲突的问题。
发明内容 本发明实施例提供一种信元交换方法和装置, 以实现在较简单的调度下无冲突的 进行信元交换。
一种信元交换方法, 包括 :
将从输入端口接收的信元缓存在所述输入端口对应的第一 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 对信 元进行了缓存, 进而可以使得各个不同端口需要对同一缓存进行读写时, 各端口分别在不 同的时隙进行读写, 避免了冲突且容易调度。
附图说明
图 1 为本发明实施例中按照时隙向 RAM 组中写入信元的示意图 ; 图 2 为本发明实施例中按照时隙从 RAM 组中读出信元的示意图 ; 图 3 为本发明实施例提供的信元交换方法流程图之一 ; 图 4 为本发明实施例提供的信元交换装置结构示意图之一 ; 图 5 为本发明实施例提供的信元交换方法流程图之二 ; 图 6 为本发明实施例提供的信元交换装置结构示意图之二 ; 图 7 为本发明实施例提供的一种具体的信元交换装置结构示意图 ; 图 8 为本发明实施例提供的从第二 RAM 组中轮询读取信元的示意图。具体实施方式
本发明实施例提供一种信元交换方法和装置, 在每个输入输出端口都增加了一个 对应的 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 对信元进行了缓存, 进而可以使得各个不同端口需 要对同一缓存进行读写时, 各端口分别在不同的时隙进行读写, 避免了冲突且容易调度。
显然, 本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发 明的精神和范围。这样, 倘若本发明的这些修改和变型属于本发明权利要求及其等同技术 的范围之内, 则本发明也意图包含这些改动和变型在内。