free buffer memory

一,背景

设计上存在这样的需求: 开辟一段连续存储空间节点0---N。每个周期至多有一个节点被申请使用, 被申请的节点从列表中删除,使用完的节点被重新放入节点队列,等待下次申请使用。

从需求描述上,该先入先出的行为与fifo很相似。 使用fifo 也可以实现上述需求。例如,有2K 个节点可以被使用,则需要开辟2k*11bit的 资源,4K 需要4K*12bit的资源。 随着节点个数的翻倍,开辟的资源成指数增长。

为了减伤资源的消耗,使用FBM(free buffer memory)来优化设计。 它使用bitmap+RR(行、列rr)方式实现。 2K个节点仅需要开辟32bit*32bit , 4K个节点需要32bit*64bit资源,相较于使用fifo的方式可以资减少90%以上资源。

三,设计思想

bitmap将节点的地址映射为 {行地址,列地址},不管 节点个数多少,对于每个节点,仅占用1bit资源。

rr调度就是用于计算行、列地址的,同时需要维护bitmap中写0(申请出节点 ) 写1(release 节点)。

根据节点总数对bitmap内容初始化为1 ,bitmap 最后一行的可以非满(节点个数非2 的幂次方)。rr 调度在fetch_fifo非满时开始工作,将节点一一调出,并将bitmap对应位置写0 。 前级逻辑申请节点。使用完成后释放节点,若fetch_fifo非满,则直接写入,否则将bitmap对应位置置1 。

这里需要处理冲突:对同一个节点 释放节点时回写1和调度节点时回写0。只要保证fetch-fifo有节点可申请就可以,所以在fetch_fifo满时且前级释放节点,则压rr调度。优先将bitmap置1,其他情况在fetch_fifo非满,则rr轮询调度节点出队。

四,设计实现

free buffer memory_第1张图片

free buffer memory_第2张图片

function [bitmap_dpth:0] to_val;
     input [bitmap_dpth-1:0] char;
     integer i;
     reg found;
     reg [bitmap_depth-1:0] bitmap_d;
	begin
     found=1'b0;
         for (i=0;i

function [bitmap_dpth:0] to_val; input [bitmap_dpth-1:0] char; integer i; reg found; reg [bitmap_depth-1:0] bitmap_d; begin found=1'b0; for (i=0;i

五,结论

如果抛开逻辑的release ,bitmap+rr就是不同的行扫描,在列扫描获取bitmap 中为1 的值。

增加逻辑releasr 要处理一下的冲突。

2个冲突:

① 读写bitmap的冲突

② 写pref_fif的冲突

解决方法:sp调度实现,只要release 有效则不允许bitmap扫描。

1) 在fpref_fifo非满时release ,需占用fifo的写口

2) 在pref_fifo满时release,需要占用bitmap的读写口

可以增加一个fifo将bitmap 和release的操作隔离,可以降低冲突的概率。

你可能感兴趣的:(IC,设计,IC,设计)