0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过FPGA内部编程实现轮询调度的设计

电子设计 作者:电子设计 2018-11-28 07:54 次阅读

1、 引言

4X2.5G线路接口卡是T比特路由器的一种重要接口,属于高密度线路接口,这种接口是当前路由器设计中的一个重点和难点。所谓高密度,指的是在一块绕路接口卡上提供多个接口。之所以出现高密度线路接口的需求,是因为互联网的规模不断的扩大,对路由器的接入能力提出了日益增大的需求,如果还沿用单板单接口的设计方法将导致路由器的物理规模不断的扩大,不符合现代设备发展的趋势。在4X2.5G线路接口卡的设计中,采用单片多路的SDH处理芯片S19202集中完成物理层的处理,然后根据整体设计方案在其后端进行数据的技术处理。

针对多路报文在送往转发单元时的公平性和稳定性需求,以及SDH芯片S19202的特点,提出了输入报文合路采用分片轮询(Cell Round Robin Scheduling;CRR)和改进的欠账式轮询调度(Defect Round Robin Scheduling;DRR)相结合的调度策略。这种调度策略保证了4路POS接口之间的公平性和整包处理的稳定性,并且在工程上易于实现。本文第2节详细阐述了该调度策略的设计与实现过程,第3节对全文进行了总结。

2、 轮询调度的设计与实现

在4X2.5G线路接口卡的设计中,采用了AMCC公司的SDH处理芯片S19202进行链路层数据处理,该芯片的特点是4个接口共享同一组接收总线和同一组发送总线,另外提供通道选择信号来指示当前工作的线路接口号,其输入端每个接口的缓存大小最大只有1k字节,根本不足以缓存一个长的整包(最长包可达到1500字节)。

针对这个特点,设计中使用了在S19202后端的FPGA进行分片轮询和整包接收的处理,保证了4个接口的公平性和稳定性;针对4个接口的报文共享一条到转发的通路时,由于各接口的报文长度差异,可能造成的不公平和不稳定,提出了一种改进式欠账轮询的调度策略。通过分片轮询和改进式欠账轮询的结合使用,保证了4个接口合路的公平性和稳定性。

通过FPGA内部编程实现轮询调度的设计

图1 输入合路模块中的轮询调度策略

输入合路模块中联合调度策略的原理如图1所示,对SDH芯片S19202送出的4路数据进行分片逐个轮询,并缓存进相应通道的整包接收FIFO,相应通道若没有数据则轮空,转入下一通道;整包轮询合路调度则逐个轮询4个整包FIFO,若该FIFO有整包,则在每一轮询周期发送一个整包,否则轮空。

在该联合调度策略中,分片轮询调度比较容易实现,仅需在FPGA实现的最前端设计一个轮询机,利用SDH芯片S19202提供的通道指示信号(在FPGA设计用SRX_CHANNEL表示)对每个通道进行固定的轮询访问,有数据则存入相应的通道整包接收FIFO即可。而整包调度是使每个通道得到服务的公平性和稳定性的关键,它直接决定着接收服务的通道所得到的服务带宽、时延以及时延抖动等性能指标,因此本文把研究重点放在了整包调度的设计与实现上。

目前,在整包调度上,主要的调度算法有先到先服务(FCFS)、逐包调度(PRR)、公平排队、虚时钟、加权循环服务(WRR)等多种策略。由于多数调度方式在包长不定的IP网络中实现时遇到了困难,为此,M.Sheedhar等提出了适用于IP网络的欠帐式循环调度(DRR),该算法由于其较低的实现复杂度、良好的公平性及稳定性而被经常采用。

但是,DDR算法直接用于高密度线卡设计中会有一定的问题。首先,DRR算法是针对集成服务网络中不同业务需求而提出的,在一般应用中由于队列数较多,所以需要减小队列数,而在我们的设计中只有4个队列,所以不需要减小队列数;其次,在线卡设计中合路报文的包长无法直接给出,如果一定要加上包长则需用多加一级缓存,这就增大了设计复杂度也提高了成本;同样由于经典DDR算法严格要求储蓄计数器值大于队头包长才输出,这种不允许带宽透支只允许盈余的要求会导致出现有包但是无法输出的现象。

根据4X2.5G线路接口的实际情况和DDR算法的思想,我们可以给出如下适合高密度POS接口使用的改进式欠账式循环调度策略:

1) 逐包轮询;

通过FPGA内部编程实现轮询调度的设计

采用这种改进的DRR算法下,可以保证在变长包的情况下,各个接口的整包缓存队列在报文合路时公平的带宽,确保合路调度的稳定运行。

DRR整包轮询合路的基本工作过程为:轮询4个整包缓存队列,每读取一个整包都判断该包是否是协议包,如果是协议包,则按照上交CPU报文格式送协议FIFO,如果是需要转发的报文,则按照转发报文格式送数据报文FIFO。

调度机轮询到某个队列时,为该队列的储蓄计数器加上40;然后判断该队列是否为空,如果为空,则马上转向下一个队列;如果非空,则判断当前该队列是否有整包,如果当前该队列无整包,则转到下一个队列;否则,如果该队列目前有整包则输出该队列的队头包到合路队列,同时该路的储蓄计数器的值要减去输出报文的长度;然后重复上述过程,直到该队列无整包或者队列的储蓄计数器的值小于40时跳转到下一队列服务,其详细工作流程如图2 所示:

通过FPGA内部编程实现轮询调度的设计

图2 改进的DRR合路调度流程图

DRR合路调度单元已在ALTERA公司的quartusII4.1环境下用VHDL编程实现,其仿真波形如图3所示:

通过FPGA内部编程实现轮询调度的设计

图3 DRR合路调度单元仿真波形图

仿真结果显示这种采用分片轮询和欠账轮询的结合的合路调度策略设计可以达到性能需求,确保变长分组合路调度的公平性和稳定性。

3、 结束语

根据SDH芯片的S19202的特点和性能要求,通过在FPGA内部编程实现分片轮询和改进式欠账轮询结合的调度策略,保证了4X2.5G线路接口卡输入端各个接口合路的公平性和稳定性。经测试该设计性能稳定,整个工作流程简单实用,符合设计要求。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1627

    文章

    21679

    浏览量

    602174
  • 芯片
    +关注

    关注

    454

    文章

    50477

    浏览量

    422089
  • 计数器
    +关注

    关注

    32

    文章

    2254

    浏览量

    94377
收藏 人收藏

    评论

    相关推荐

    IC设计:Verilog是如何实现RR轮询调度的?

    在设计中,我们经常会用到RR(Round-Robin,RR)轮询调度,用于保证在一个时间段内的多个请求信号都能得到公平响应。
    的头像 发表于 12-13 16:14 1723次阅读

    FPGA实现原理

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种特殊的集成电路,其内部结构由大量的可配置逻辑块和互连线组成。FPGA可以
    发表于 01-26 10:03

    请问FreeRTOS是如何实现调度的?

    了stm32的官方例程,原理上的东西大致懂了,可在程序中是如何实现的呢,C语言障碍,没看懂。首先是调度函数,函数函数是如何执行的呢?如下图,新建任务后执行调度函数,为什么没用循环,调度
    发表于 07-30 07:40

    Microchip单片机固定时间片轮询调度汇编代码 精选资料分享

    这是一个能在PIC16F877A开发板上运行的固定时间片轮询调度编程序代码。为什么要用时间片轮询调度?假如我们要写一个单片机程序,程序的目
    发表于 07-13 08:53

    Microchip单片机固定时间片轮询调度汇编代码 精选资料推荐

    这是一个能在PIC16F877A开发板上运行的固定时间片轮询调度编程序代码。为什么要用时间片轮询调度?假如我们要写一个单片机程序,程序的目
    发表于 07-13 08:14

    基于PIC16F877A开发板的固定时间片轮询调度编程序干了啥

    为什么要用时间片轮询调度?基于PIC16F877A开发板的固定时间片轮询调度编程序干了啥?
    发表于 08-02 07:36

    通过对stm32内部的flash的读写可以实现对stm32的编程操作

    一、Flash简介  通过对stm32内部的flash的读写可以实现对stm32的编程操作。  stm32的内置可编程Flash在许多场合具
    发表于 08-05 07:56

    什么是FPGAFPGA功能实现

    通过编程来改变内部结构的芯片。FPGA 功能实现:需要通过
    发表于 01-25 06:45

    调度器的原理及其任务调度代码实现

    一、介绍调度器是常用的一种编程框架,也是操作系统的拆分多任务的核心,比如单片机的裸机程序框架,网络协议栈的框架如can网关、485网关等等,使用场合比较多,是做稳定产品比较常用的编程技术二、原理1
    发表于 02-17 07:07

    基于FPGA轮询合路的设计和实现

    针对高密度接口设计中基于字节处理和整包处理的转换问题,本文提出了分片轮询调度和改进式欠账轮询调度相结合的调度策略,该策略在很大程度上保证了公
    发表于 08-09 15:30 21次下载

    如何使用OpenCL轻松实现FPGA应用编程

    实现这一编程思想的转变,是因为 FPGA 借助 OpenCL 实现编程,程序员只需要通过 C/
    发表于 07-16 17:58 6499次阅读
    如何使用OpenCL轻松<b class='flag-5'>实现</b><b class='flag-5'>FPGA</b>应用<b class='flag-5'>编程</b>

    PYNQ就是通过Python语言直接对FPGA进行编程

    PYNQ框架的设计初衷是通过高层次的封装,将底层硬件FPGA实现细节与上层应用层的使用脱耦,对软件开发者来说,PYNQ框架已经提供了完整的访问FPGA资源的library,让上层应用开
    的头像 发表于 02-08 10:59 4640次阅读

    基于完全服务轮询机制MAC协议的FPGA设计

    基于完全服务轮询机制MAC协议的FPGA设计(通信电源技术杂志订阅)-该文档为基于完全服务轮询机制MAC协议的FPGA设计讲解文档,是一份还算不错的参考文档,感兴趣的可以下载看看,,,
    发表于 09-27 15:15 2次下载
    基于完全服务<b class='flag-5'>轮询</b>机制MAC协议的<b class='flag-5'>FPGA</b>设计

    RR轮询调度?Verilog是如何实现RR轮询调度的?

    在设计中,我们经常会用到RR(Round-Robin,RR)轮询调度,用于保证在一个时间段内的多个请求信号都能得到公平响应。
    的头像 发表于 09-28 09:55 3865次阅读
    RR<b class='flag-5'>轮询</b><b class='flag-5'>调度</b>?Verilog是如何<b class='flag-5'>实现</b>RR<b class='flag-5'>轮询</b><b class='flag-5'>调度</b>的?

    fpga是什么 fpga用什么编程语言

    更高的灵活性和可重构性。在FPGA中,用户可以通过编程来配置硬件单元之间的连接关系,从而实现所需的电路功能。接下来,我们将详细介绍FPGA
    的头像 发表于 02-04 15:26 1579次阅读