手撕Verilog--总线仲裁round robin算法

文章介绍了总线仲裁中的两种算法:固定优先级仲裁和roundrobin算法。在固定优先级中,通过“req&req的补码”实现优先级分配。roundrobin算法则动态调整优先级,每次授权后将最高优先级设为最低。通过hot信号和double_req操作实现优先级循环变化,并通过仲裁输出的独热码进行左移位来更新优先级。
摘要由CSDN通过智能技术生成

关注、星标公众,精彩内容每日送达

来源:网络素材

当总线上有多个master,他们都能发起传输请求req,要求占用总线。但资源是有限的,需要去仲裁谁获得总线使用权grant。

仲裁器Arbiter充当裁判,master想要访问总线,需要申请req,得到授权grant后,才发起传输。因而仲裁算法决定grant和req的函数关系

a75e5b33271a54e3fbf9824abcdbdedd.png

1、固定优先级

讨论一个固定优先级的仲裁算法,当master有4个时,即req[3:0],我们设定req[0]优先级最高,即当req[0]=1,grant[0]=1;req[1],req[2],req[3]优先级逐次降低

其真值表如下,功能其实很简单,从req低位到高位搜索1,第一个出现的1,其对应的grant位也是1。

ab655542d8b0a790d5747f661bbfe2b4.png

我也不知道咋推到来的,这样的逻辑关系,我们可以用:“req&req的补码 ”实现。简要论述一下,补码为req取反加1,即req'=~req+1。也就是grant=req&(~req+1)能概括上面的真值表。

如下图所示,假设req的第n bit为第一个1,~req将使得低n-1位全为1,~req+1将在第n位进位加1,其余高位仍正好是req的取反结果。这样一与,就能定位到1.

bd53d28016a1d69b4a32f43ec8c2629b.jpeg

RTL如下

abc95a1f0cbe623cdbd85e98b0e94a78.png

2、round robin算法介绍

回归主题round robin算法,说白了,就是以一定规则改变优先级:上次获得授权的master,其优先级降为最低,依然保持优先级向“左”递减的规律。

如下图所示,0时刻,优先级从LSB到MSB向左递减(数值越大,优先级低),grant[0]得到授权。1时刻,req[1]的优先级最高,req[0]的优先级最低,优先级呈现一个“循环”,

45b79bed5a576d0ec5c548bcaddfc0ec.png

(图源:仲裁器设计(二)-- Round Robin Arbiter - 极术社区 - 连接开发者与智能计算生态 (aijishu.com),下同)

3、实现

那我们如何去调整优先级?

同样不知道咋来的,添加base信号改变优先级,其中base信号为独热码形式,如4’b0010,表示当前req[1]具有最高优先级

为了计算grant,我们需要拼接req为{req,req}为double_req,然后将double_req和~(double_req-base)相与得到double_gnt,最后将double_gnt两半相或得到输出gnt。

7ad0d17254a6b27b34eed9982c0a419a.png

tb验证如下

5e07a158bdb2dc869f07e93a5b9ecbaf.png

如下图,当hot=4'b0010,req[1]的优先级最高,req[2],req[3],req[0]次之

c1924c0a8c140b82bdc9b35ac6b7f874.png

hot=4'b0100,req[2]拥有最高优先级,req[3],req[0],req[1]次之。不难看出,优先级最高的获得grant次数为8(一半),而次优先级则有4次,次次优先级有2次,最次优先级有1次,以及一个没有请求的情形。可以说,优先级高的获得授权的机会显著增多

683381144fcd1077d86ed5da3c7c5e62.png

正是hot既能显示优先级(1为最高优先级,而优先级呈现循环的向左递减),同时,hot能够影响grant的裁决,代码会简单很多。

上面的代码实现了grant=f(req,hot)的关系,我们的round robin还要求改变优先级。hot可以体现优先级,因而增加hot的改变即可。

一切都很巧合,仲裁的输出也是独热码,我们的round robin算法要求已经获得授权的master优先级最低,我们只需要对gnt向左循环移位即可

f75d73373967fdc56b1549c04e68337a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值