当有多个设备同时想占用同一个资源时,需要仲裁器通过某种调度算法决定不同设备使用资源的先后顺序。

Round Robin算法就是其中一种调度算法,其思路是,当多个仲裁请求(request)送给仲裁器时,仲裁器通过轮询的方式分时给不同的设备返回许可(grant),当一个requestor 得到了grant许可之后,它的优先级在接下来的仲裁中就变成了最低,当同时有多个requestor的时候,grant可以依次给到每个requestor,即使之前高优先级的requestor再次有新的request,也会等前面的requestor都grant之后再轮到它。由此看出,Round Robin算法是一种公平的算法,它避免了当最高优先级的requestor不断有新的request时,具有最高优先级的requestor一直占用资源,导致其他requestor无法占用资源的阻塞现象。

在verilog设计中,如何实现呢?假设request是位宽是6,最高位是第5位,最低位是第0位,默认低比特位具有高优先级。
1.首先需要找到request中优先级最高的比特位,对优先级最高的比特位给出许可信号。这一步可以通过request和它的2的补码按位与。这是因为一个数和它的补码相与,得到的结果是一个独热码,独热码为1的那一位是这个数最低的1。
2.在下一轮仲裁中,已经被仲裁许可的比特位变成了最低优先级,而未被仲裁许可的比特位将会被仲裁。因此对第一步中给出许可的比特位(假设是第2位)以及它的低比特位进行屏蔽,对request中的第5位到第3位进行保持,这个操作可以利用掩码111000和request相与实现得到。
得到掩码的方法是,对第一步的许可信号grant-1,再与grant本身相或,相或的结果再取反。
3.通过第二步得到第2位到第0位被屏蔽的request_new信号,判断request_new是否为全0信号,如果是全0信号,代表此时不存在需要被仲裁的比特位,则返回第一步:找到request中优先级最高的比特位,对优先级最高的比特位给出许可信号,然后进行第二步。如果request_new不是全0信号,代表存在未被仲裁的比特位,则找到request_new中优先级最高的比特位,对优先级最高的比特位给出许可信号,然后进行第二步。

Round-Robin算法的verilog实现相关推荐

  1. Round Robin算法的简单C#实现

    整理笔记的时候,发现自己在项目中还用C#实现过一次Round Robin算法算法,当时的应用场景,是要根据权重给多个队列均匀的提供数据,对输入的数据进行拆分处理.算法很简单,最核心的部分,其实是取最大 ...

  2. Round Robin 算法

    什么是Round Robin? 先来看和他相近的名词,轮询调度算法(Round-Robin Scheduling) 轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N ...

  3. 仲裁器设计(二)-- Round Robin Arbiter 轮询调度算法

    作者:李虹江 原文:https://mp.weixin.qq.com/s/r-nckE5nGz9mc5KqjPXKYg 本文授权转自IC加油站微信号,未经作者授权,严禁二次转载. 上一篇老李讲了固定优 ...

  4. round robin权重轮循算法实现

    为什么80%的码农都做不了架构师?>>>    先上代码,采用php脚本语言 <?php/* * Copyright (C) FatHong*//* 数据初始化,weight: ...

  5. Verilog权重轮询仲裁器设计——Weighted Round Robin Arbiter

    前两篇讲了固定优先级仲裁器的设计.轮询仲裁器的设计 Verilog固定优先级仲裁器--Fixed Priority Arbiter_weixin_42330305的博客-CSDN博客 Verilog轮 ...

  6. Verilog轮询仲裁器设计——Round Robin Arbiter

    上篇讲了固定优先级仲裁器的设计,并给出了指定最高优先级的实现方法 Verilog固定优先级仲裁器--Fixed Priority Arbiter_weixin_42330305的博客-CSDN博客 轮 ...

  7. 负载均衡算法--轮询法(Round Robin)

    在分布式系统中,为了实现系统的高性能.高并发.高可用,在构架中都会进行负载均衡设计,它是分布式系统的核心和中枢,负载均衡的好坏直接影响着整个系统的性能.负载均衡分为软件均衡和硬件均衡两类,比如apac ...

  8. 负载均衡算法--加权轮询法(Weight Round Robin)

    接上一篇博文:负载均衡算法–轮询法(Round Robin),本文讲解加权轮询算法. 加权轮询算法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同.给配置高.负载低 ...

  9. Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n

    负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务 ...

最新文章

  1. 矩阵专职_新的篇章开始了-我将以专职技术作家的身份加入RunCloud
  2. 设计模式入门:建造者模式
  3. linux下php连接mysql数据库_Linux下PHP连接Oracle数据库
  4. Python Django手写分页代码
  5. 最好理解的: spring ioc原理讲解,强烈推荐!
  6. 55个好习惯可令世界更美好(2)
  7. let 作用域问题, 全局变量不能this引用
  8. 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
  9. 【JAVA】初识Java
  10. 如何批量PDF转换JPG
  11. openbsd mysql_在OpenBSD上运行MyDNSNameservers(MySQL / PHP + MyDNS + MyDNSConfig)
  12. N32G430学习笔记1-工程模板建立
  13. 力扣每日一题:891. 子序列宽度之和(java)
  14. 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点
  15. android电子书大全 下载
  16. Spring boot 2.0 mongoTemplate 操作范例
  17. Android App 线上热修复方案
  18. 接受了微软丹棱君的专访!
  19. 前端学习第16天:媒体查询-响应式布局
  20. Centos下jira、confluence利用nginx 代理配置为统一入口

热门文章

  1. OCTA数据集的交叉验证划分为训练集和测试机
  2. 永中科技破产拍卖为何无效?
  3. 华强北再也没法生产散装 iPhone 了
  4. 一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
  5. 回溯法 | 求解装载问题
  6. Java 3DES加密解密(Commons.Codec Base64)
  7. 熊猫互娱破产清算,王健林又给王思聪成立新公司了?
  8. 弹性ip是可以加入共享带宽?
  9. git 合并远程分支
  10. android 垂直水平居中对齐,Android中RelativeLayout的字符水平(垂直居中)对齐