仲裁器设计(3)RR调度推理

原创 用友财务软件  2022-09-09 12:00:13  阅读 442 次 评论 0 条
摘要:

????????前两篇转载的硅谷老李的文章,可以参考理解; 这一篇,我们来自行推理。最终代码也是使用的本篇推理的结果。 目录 1.固定优先级调度 1.1 方法1 1.2方法2 2.RR轮询调度

本文主要分享【】,技术文章【仲裁器设计(3)RR调度推理】为【子墨祭】投稿,如果你遇到相关问题,请看以下文章。

????????前两篇转载的硅谷老李的文章,可以参考理解;

????????这一篇,我们来自行推理。最终代码也是使用的本篇推理的结果。


目录

1.固定优先级调度

1.1 方法1

1.2方法2

2.RR轮询调度

3.举个栗子


1.固定优先级调度

输入:请求信号req[N-1:0]

输出:许可信号grant[N-1:0]

每一个bit代表一个模块的请求/许可调度。1代表有,0表示无。

1.1 方法1

约定从LSB到MSB,优先级依次降低。由此确定,固定优先级调度器的设计目标为:

找出req信号里从低到高第一个出现的1

假设req信号里第一个’1’出现在i位。可知i-1位全部为0。

此时我们使用一个中间变量req-1

那么req-1,低位为0,向高位借位,req-1 = ?[i-1:0] 为全1,[i] =0, [N-1:i+1]则保持不变。

再对其取反,得到 ~(req-1) : [i-1:0] 为全0,[i] =1, [N-1:i+1]为req [N-1:i+1]取反。这样从低到高,就找出了第一个1出现在i位。

其结果再与req信号按位与 ?~(req-1) &req : 得到[i] =1,其余位全0,就得到独热码的grant。

总结: req的2的补码与req自身按位与就可以得到固定优先级调度算法

assign ?grant ?= ?req ?& ?(~(req-1));
1.2方法2

从更直观的理解来说,对第i位grant意味着req的第i位为1,且低[i-1:0]位0.

N-1

...

i+1

i

i-1

...

0

对应到代码:

grant[i] ?= ?(req[i] == 1b1)??&& ?(|req[i-1:0] == 1b0);

再看边界情况,i=0明显不满足,需要单独考虑:grant[0] = req[0] ;

综上:

grant[0] = req[0] ;

for(i=1;imask[i] = |grant[i-1:0]; 

同样,我们再来考虑边界情况:

i=0很明显不满足,考虑mask[0]的情况,与grant[N-1]逻辑吻合(读者可自行推理),所以mask[0]=grant[N-1];

综合考虑:

mask[0]=grant[N-1];

for(i=1;i
本文地址:https://www.ufidawhy.com/gjp/120177.html
版权声明:本文来源于网络,如有侵权请E-mail联系 ufidawhy 站长 ufidawhy@vip.qq.com!

评论已关闭!