- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于FPGA和IP Core的定制缓冲管理的实现
作为堆栈形式的空闲地址队列在实际操作中会把一部分空闲地址队列放入片内缓冲中。这样在读BRAM释放地址进入空闲地址队列时可以节省PRAM的一次写入操作,在写BRAM时申请空闲地址时可以节省PRAM的一拍读取操作。PRAM堆栈结构下内置空闲地址队列表如图6所示。
图6 PRAM堆栈结构下内置空闲地址队列表
以图5的读出操作为例,当Read Control模块由PQ List的首地址0读出相应的BRAM中的内容,同时读出PRAM中对应的下一跳地址1,更新地址1为新的首地址。这时,地址0为已经释放的地址,按空闲队列的操作要求,地址0需要进入空闲地址队列中,在写操作时再将地址0读出提供给Write Control模块用于写BRAM。而基于图6的结构,地址0在被释放后不再进行更新PRAM中的空闲地址队列Free List的操作,直接写入片内缓冲中,在Write Control模块申请地址时由片内缓冲中读出提供给Write Control模块 。仅在片内Free List缓冲几乎满时,进行PRAM中的空闲地址队列Free List的更新操作,或在片内Free List缓冲空时进行PRAM中的空闲地址队列Free List的读取操作。基于图6的结构,在一个读写周期内,可以节省两次PRAM的操作,在最坏情况下也可节省一次PRAM的操作。但基于堆栈的结构,栈顶的地址被高频率的反复的调用,栈底的地址很难被使用,DRAM的工作寿命会因此受到影响。为保证DRAM的工作寿命,在有些系统中将空闲地址队列Free List做成链表形式,从而保证每个DRAM的存储空间都能被平均的使用。读出操作的Free Lis链表结构如图7所示。
图7 读出操作的Free Lis链表结构
Read Control模块由PQ List的首地址0读出相应的BRAM中的内容,同时读出PRAM中对应的下一跳地址1,更新地址1为新的首地址。
Free List相对于堆栈模式增加尾指针d。Free List在回收地址时维持首指针a不变,将尾指针d更新为刚释放的地址0,同时地址d中写入下一跳指针0。这样一次BRAM的读出操作同样需要一次PRAM的读取操作及一次PRAM的写入操作。对于链表方式的空闲地址队列Free List,在每个读、写周期必须进行两次PRAM的写入操作及两次PRAM的读取操作,PRAM的效率不高。
针对两种空闲地址队列的效率及对DRAM的影响,在很多系统中采用了折中的方法,即在PRAM中使用链表方法管理空闲地址队列Free List,在片内采用堆栈模式另建一个空闲地址队列Free List,在这种情况下,每个读、写周期需要三次PRAM的操作。
在实际系统中,BRAM的带宽与PRAM的带宽一般为TM的瓶颈,PRAM主要受限于访问的次数,而BRAM受限于接口带宽。
在10G的TM系统中,片内数据总线的位宽定为128位,系统时钟定为150MHz,BCELL的大小定为64B。在这种情况下,读取操作和写入操作均为4个时钟周期。在满足10G系统的需求下,读取、写入操作周期为7个时钟周期。在前面曾计算过,在满足10G TM系统的情况下,BRAM采用64位 DDR II SDRAM,接口时钟使用250MHz即可满足数据接口的需求。PRAM采用32位ZBT SRAM ,接口时钟使用系统时钟,每个PCELL为64位,每个读、写周期需要6个时钟周期完成。在实际系统中采用Altera FPGA,BM的设计可以满足10G的TM线速工作的需求。
在40G核心网的TM系统中,片内数据总线的位宽为256位,系统时钟采用250MHz(在40GE的系统中可选用200MHz)。采用DDR II SDRAM,接口时钟使用333MHz,则192位的BRAM可以满足40G的TM需求。此时,BCELL可为96B、192B、384B,在这里选用1
92B。当BCELL选用192B时,读取操作和写入操作同样均为6个时钟周期。在满足40G系统的需求下,读取、写入操作周期为9个时钟周期。PRAM采用48位QDR SRAM,接口时钟使用150MHz,每个PCELL为96位,在每个读、写时钟周期内,PRAM最多可被操作5次。在采用Altera FPGA的情况下,BRAM采用192位 DDR II SDRAM,PRAM采用48位QDR SRAM,BM的设计可以满足40G的TM线速工作的需求。
来源:维库开发网