固定优先级仲裁器及RR轮询Verilog实现

news2025/1/16 20:49:35

一、固定优先仲裁器

所谓固定优先仲裁器,即其优先级是固定的,当有多个请求到达时,按照优先级得到仲裁结果,并且优先级一直保持不变。如当有四个请求到达时,如果最高优先级为0号请求,则对0号请求响应,进一步说明,若请求状况为4'b0110,则响应1号请求,若为4'b1100则响应2号请求。

通过分析我们可知,若优先级是按照从右到左依次降低,即最低位的请求优先级最高,则我们只需要判断出请求中最低位的1即可,将仲裁结果中对应的位拉高,其余置0,利用之前介绍到的常用的数据处理方法(见下文),利用原码和补码相与实现。

数字电路中常用的几种数据处理方法-CSDN博客

 Verilog实现如下:

module fixed_arbiter #(
  parameter WIDTH = 4 
  )
  (  
  input  [WIDTH-1:0]request,
  output [WIDTH-1:0]grant
);
 
  assign grant = request & (~request + 'd1);

endmodule : fixed_arbiter

仿真结果如下:

二、RR轮询仲裁器

Round Robin就是考虑到公平性的一种仲裁算法,在固定优先级仲裁器的基础上进行设计。即在每次仲裁之后更新优先级,如最优先级mask初始为4'b1111,最低位优先级最高,则在输入请求为4'b1101的第一次仲裁后,输出仲裁结果为4'b0001,mask要变为4'b1110,优先级变为bit1的优先级最高,然后是bit2、bit3,即最低位请求已经被响应过了,接下来希望其他请求被响应,轮询着被仲裁。在请求还是4'b1101的情况下第二次的仲裁结果为4'b0100,这事因为bit1虽然优先级高于bit2但是没有请求,因此响应bit2的请求。当bit3的请求被响应后,优先级应变会1111,然后再次循环。一次完整的仲裁结果如下:

请求优先级仲裁结果
110111110001
110111100100
110110001000
110111110001
110111100100
110110001000

结合上述的固定优先级仲裁,我们可以通过将请求和优先级相与的结果输入到固定优先级仲裁器得到RR轮询的结果。这样做的实质就是将已经响应过的bit位以及请求为0的bit位去除掉,然后为1的最低位满足在有请求的bit位中,其优先级最高。

那我们已经知道:

RR轮询仲裁器=优先级更新+固定优先级仲裁器

其中,固定优先级仲裁其的输入=请求&优先级。

接下来就是如何更新优先级,我们观察仲裁结果和优先级的变化情况,优先级就是将仲裁输出结果为1的高几位置为1,仲裁结果的本位及低位要变为0。如仲裁结果为0001,bit0为1,那bit3、bit2、bit1就要变为1,bit0变为0,优先级就要更新为1110;如仲裁结果为0010,那优先级就要更新为1100。当仲裁结果的最高位为1时,按照之前的算法此时变为4'b0000,不符合优先级变化要求,因此此时将其重置为1111

那如何实现上述的变化呢,从要实现的效果来看,和之前文章提到的独热码的反码保留高位连续的1并将低位置0一致,仲裁结果为独热码,可参考下面文章:

数字电路中常用的几种数据处理方法-CSDN博客

因此优先级的更新为~grant&(~grant+1),并且当仲裁结果最高位为1时需要更新为4'b1111。

Verilog实现如下:

module RR#(
  parameter WIDTH = 4
  )

  (
  input  clk,
  input  rst_n,
  input  [WIDTH-1:0] request,
  output [WIDTH-1:0] grant_o
  );

  reg [WIDTH-1:0]mask;
  wire [WIDTH-1:0]grant_0;
  wire [WIDTH-1:0]grant_1;
  wire [WIDTH-1:0]mask_req;

always@(posedge clk or negedge rst_n)begin
  if(!rst_n)
    mask <= ~0;
  else
    mask <= ~(grant_o[WIDTH-1:0]+grant_o[WIDTH-1:0] - 1'b1);
end


assign grant_o = (mask_req == 4'b0) ? grant_0 : grant_1;
assign mask_req = mask & request;

  fixed_arbiter inst_fixed_arbiter_0 
  (
    .request(request), 
    .grant(grant_0)
  );

  fixed_arbiter inst_fixed_arbiter_1
  ( 
    .request(mask_req), 
    .grant(grant_1)
  );


endmodule : RR



在代码中我可以发现,我们没有采取在仲裁结果为1000时将优先级更新为1的情况,而是当mask为0时采用固定优先级更新,这时候和将mask重置为1的效果是一样的,当然也可以通过修改代码实现功能。

仿真结果如图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Steam喜加一,限时免费领取《Machinika Museum》

《Machinika Museum》限时免费领取啦&#xff01;这是一款烧脑解谜游戏&#xff0c;让你挖掘神秘外星装置的秘密。在这个非常特别的异星装置博物馆里&#xff0c;你将扮演一名研究员&#xff0c;负责解开各种机械谜题&#xff0c;探索背后的故事。 在这个未来世界&#xff0c;外…

docker 部署 prometheus + Grafana +

# prometheus安装 # 1.拉镜像 docker pull prom/prometheus:v2.43.0 # 2.创建配置文件 mkdir /opt/prometheus/data cd /opt/prometheus/ vi prometheus.yml # 3.使用root用户启动 docker run --name prometheus -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/pro…

制造业装备虚拟3D云展馆开发提升企业营销效果

随着元宇宙时代的到来&#xff0c;商城的运营模式也在发生深刻变革。在这一大背景下&#xff0c;元宇宙商城更加注重场景营造和商品的线上互动体验。3D技术的迅猛发展&#xff0c;为电商行业带来了全新的展示、体验与服务模式&#xff0c;电商3D化已成为不可阻挡的潮流。 华锐3…

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一&#xff0c;环境准备 首先我们需要准备好Java环境&#xff0c;和win上的jdk环境&#xff08;图形化界面如jconsole只有jdk中有&#xff09;。 有这样一个类Prolem&#xff0c;每个线程都会带来100个垃圾对象&#xff0c;线程new完100…

【以规划为导向的自动驾驶】Planning-oriented Autonomous Driving

ABSTRACT 研究背景&#xff1a; 现代自动驾驶系统是顺序化地排列多个任务模块, 近期的主流方法&#xff1a; ①为单个任务部署独立模型 ②设计具有分离式头部的多任务(multi-task)范式。 但是&#xff0c;这些方法会累积误差或任务间协同不足而不利于自动驾驶。 作者认为重…

HTML常用标签-列表标签

列表标签 有序列表 分条列项展示数据的标签, 其每一项前面的符号带有顺序特征 无序列表 分条列项展示数据的标签, 其每一项前面的符号不带有顺序特征 有序列表标签 ol无序列表标签 ul列表项标签 li代码 <!-- 有序列表 --><ol><li>JAVA</li><li>前…

基础学习-Git(分布式版本控制系统)

学习视频推荐 http://【黑马程序员Git全套教程&#xff0c;完整的git项目管理工具教程&#xff0c;一套精通git】 https://www.bilibili.com/video/BV1MU4y1Y7h5/?p5&share_sourcecopy_web&vd_source2b85bd9be9213709642d908906c3d863 1、Git环境配置 安装Git Git下…

【重生之我在学Android】WorkManager (章一)

相关文章 【重生之我在学Android原生】ContentProvider(Java) 【重生之我在学Android原生】Media3 【重生之我在学Android】WorkManager &#xff08;章一&#xff09; 前言 官方文档 官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现 案例 语言&#xff1a;JA…

外贸营销脚本,自动化营销工具的制作!

在当今全球化的商业环境下&#xff0c;外贸行业面临着日益激烈的竞争&#xff0c;为了提高营销效率、降低成本并增加销售额&#xff0c;许多外贸企业开始寻求自动化营销的解决方案。 本文将深入探讨外贸自动化营销脚本与工具的制作方法&#xff0c;并分享五段实用的源代码&…

ros大车学习2024.3.28-2024.5.14小结(1)

ros一键安装推荐wget http://fishros.com/install -O fishros && . fishros (原本的资料的是melodic的&#xff0c;因为资料里面的镜像是ubuntu18.04的&#xff0c;而我用的是鲁班猫sk3566,ubuntu20.04&#xff0c;镜像来源于野火官网)首先获取新noetic源码2024.5.13从…

抖音小店的个人店和个体店有什么区别?限制不同,新手必须了解!

大家好&#xff0c;我是电商月月 我们做抖音小店入驻时会有三个选择&#xff0c;分别为&#xff1a;企业入驻&#xff0c;个体工商户入驻&#xff0c;个人身份证入驻 其中企业店是给厂家&#xff0c;公司建立的选项 那个人店和个体店呢&#xff0c;普通人做店要选择哪种呢&a…

[XYCTF新生赛]-PWN:baby_gift解析(函数调用前需清空eax)

查看保护 查看ida 这里有一处栈溢出&#xff0c;并且从汇编上看&#xff0c;程序将rbp0x20处设置为了rdi&#xff0c;让我们可以控制rdi的值。而程序没有可利用的pop。 完整exp&#xff1a; from pwn import* pprocess(./babygift) premote(gz.imxbt.cn,20833) printf_plt0x4…

优雅谈论大模型7:重新审视神经网络

这个专栏围绕着大模型的基本知识点深入浅出&#xff0c;章节之间的联系较为紧密。若在某个环节出现卡点&#xff0c;可以回到如何优雅的谈论大模型重新阅读。而斯坦福2024人工智能报告解读则为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计专栏。技术宅麻烦…

Hive JSON数据处理

Hive JSON数据处理 JSON&#xff08;JavaScript Object Notation&#xff09;文件格式是一种轻量级的数据交换格式&#xff0c;用于存储和传输结构化的数据。它基于JavaScript的语法&#xff0c;但是可以被多种编程语言所支持和解析&#xff0c;因此被广泛应用于各种场景。 J…

数据中心网络随想-电路交换

数据中心网络扩容并不容易&#xff0c;涉及设备上架&#xff0c;切换等又硬又大的动作&#xff0c;期间对所有应用都会产生影响&#xff0c;所以理论上 “加钱加硬件” 这种看起来很简单的事实际上真不如 “写一个随时部署升级的端到端拥塞控制算法” 更容易实施。 傍晚绕小区…

OpenAI春季发布会-免费多模态GPT4O-简介

前言 2024.5.14&#xff0c;OpenAI宣布即将发布一款性能更为强大的大模型GPT4o&#xff0c;虽然没有爆出些超级酷炫无敌吊炸天的新玩意&#xff0c;但是这次的多模态模型&#xff0c;大家可以免费用了~~&#xff08;但是&#xff09; 虽然是免费使用&#xff0c;但官方发布会上…

sentinel搭建及使用

1.添加依赖&#xff08;版本可依赖于父pom&#xff09; SentinalResource注解&#xff1a; 添加依赖&#xff1a; blockhandler: fallback:

Python 全栈体系【四阶】(四十二)

第五章 深度学习 九、图像分割 3. 常用模型 3.2 U-Net&#xff08;2015&#xff09; 生物医学分割是图像分割重要的应用领域。U-Net是2015年发表的用于生物医学图像分割的模型&#xff0c;该模型简单、高效、容易理解、容易定制&#xff0c;能在相对较小的数据集上实现学习…

分析 vs2019 c++ 中的 decltype 与 declval

&#xff08;1&#xff09; decltype 可以让推断其参数的类型。按住 ctrl 点击 decltype &#xff0c;会发现无法查阅 其定义 &#xff1a; &#xff08;2&#xff09; 但 STL 库里咱们可以查阅函数 declval 的 定义&#xff0c;很短&#xff0c;摘抄如下&#xff1a; templat…

linux服务器测试NVIDIA显卡性能

1.测试环境 一台Linux服务器电脑&#xff08;可联网&#xff09; NVIDIA显卡 注意&#xff1a;仅仅测试浮点运算性能和内存带宽 2.安装测试软件 2.1检查驱动版本 输入指令nvidia-smi&#xff0c;主要是判断显卡驱动有没有安装。如果指令存在可显示如下&#xff1a; luhos…