前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【投稿】海思手撕代码之_RR_arbiter

【投稿】海思手撕代码之_RR_arbiter

作者头像
AsicWonder
发布2020-08-18 16:22:50
2K0
发布2020-08-18 16:22:50
举报

背景:优先级仲裁器的关键缺点是,在非常繁忙的系统中,对于较低优先级的请求在收到授权之前需要等待的时间没有限制。另一方面,循环仲裁器允许每个请求者按顺序进行一轮。维护一个指针寄存器,它指向下一个请求者。如果该请求程序是活动的,它将获得授权。如果没有,下一个活动请求者将获得授权。然后,该指针被移动到下一个请求者。通过这种方式,请求者等待的最大时间量受到请求者数量的限制

Round Robin arbiter(循环优先级仲裁器),使用Round Robin的逻辑实现优先级。RR优先级的含义,包括两个层次:

1)基于次序的优先级 :小号输入口的优先级高于大号输入口;

2)最高优先级是循环的:与严格优先级不同的是,RR逻辑中,最高优先级并不总是0,而是根据上一次选择的输入口而变化的。上一次选择的输入口的下一个输入口具有最高的优先级。

不多说,直接上代码,代码写的比较粗暴,case逻辑可以采用多级else if实现优先级,不用像我一样只是看清转移,多级else if实现优先级如下所示:

注释:

signal为请求信号,[3:0] signal 可以看作注释里的{D,C,B,A};

grant是优先级逻辑的结果,grant [1:0]=2’b00 A获得响应

Testbench 如下:

仿真图如下所示,实现如下跳转:

复位后 A获得响应,输入signal=4’b0001,根据转态转移,仍然是A获得响应;

输入signal=4’b0010,B获得响应;

输入signal=4’b0100,C获得响应;

输入signal=4’b1001,D获得响应;

输入signal=4’b0011, 回到A响应。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档