数字IC前端学习笔记:仲裁轮询(一)

news2024/11/15 12:32:50

相关文章

数字IC前端学习笔记:LSFR(线性反馈移位寄存器)

数字IC前端学习笔记:跨时钟域信号同步

数字IC前端学习笔记:信号同步和边沿检测

数字IC前端学习笔记:锁存器Latch的综合

数字IC前端学习笔记:格雷码(含Verilog实现的二进制格雷码转换器)

数字IC前端学习笔记:FIFO的Verilog实现(一)

数字IC前端学习笔记:FIFO的Verilog实现(二)


目录

1.关于仲裁

2.常规仲裁方案

3.严格优先级轮询


1.关于仲裁

        当多个源或用户需要共享同一资源时,需要某种仲裁形式,使得所有用户基于一定的规则或算法得到获取或访问共享资源的机会。例如,共享总线上,可以连接多个总线用户。另一个例子是交换机中的端口仲裁,当多个入口希望通过某一个出口输出数据时,需要使用一定的端口仲裁机制来选择某一时刻允许哪一个入口发送数据。最简单的仲裁方案是公平轮询(round-robin)方案,此时,仲裁器公平的对待所有用户的请求,不同用户具有均等的机会。然而,如果某些设备的速度快于其他设备,它需要更多的对共享资源的访问机会,或者某些用户具有更高的处理优先级,那么简单的循环方案是不够的。

        在此情形下,使用严格优先级轮询或者权重轮询方案更为合适。也有一些方案将多种轮询方案结合起来使用。无论采用哪一种方案,都应该保证让某些用户始终得到资源,下面将讨论通常使用的仲裁方案。

2.常规仲裁方案

        根据需要,设计者可以选择和设计自己所需要的仲裁(轮询)方案。接下来要讨论的是工业上经常使用的的经典方案。

  • 严格优先级轮 
    •  根据优先级的差异,用户访问共享资源的机会也不同。
    • 低优先级的用户可能始终无法得到资源。
  • 公平轮询
    •  公平地对待所有请求。
    • 所有用户获得均等的访问机会,不会有用户始终无法得到资源。
  • 权重轮询
    •  兼顾了公平性和差异性。
    • 在一个轮询周期中,不同权重的用户会得到不同的访问次数。
    • 在一个轮询周期中,不同权重的用户会得到不用的访问时间片。
  • 混合优先级(高优先级组合低优先级组)
    • 组间采用优先级轮询,组内采用公平轮询。

3.严格优先级轮询

        在严格优先级轮询方案中,发出请求的用户有固定的优先级。我们假设有8个用户(agent),agent0具有最高的优先级,agent7具有最低的优先级。在本方案中,优先级高的用户只要保持请求,就会持续得到授权。随着优先级不断降低,用户得到授权的机会也随之下降。该方案可以根据用户的重要性提供不同的服务,但低优先级用户可能长时间得不到服务。此时可以通过对高优先级用户增加一些请求约束的方法来避免低优先级用户被“饿死”。如下图为严格优先级轮询的波形。

        严格优先级轮询代码及仿真结果如下。

module arbiter_strict_priority(clk,resetb,
                                req_vector,
                                end_access_vector,
                                gnt_vector);
    input clk;
    input resetb;
    input [3:0] req_vector;
    input [3:0] end_access_vector;
    output reg [3:0] gnt_vector;
    reg [1:0] arbiter_state,arbiter_state_nxt; 
    reg [3:0]  gnt_vector_nxt;
    wire any_request;

    parameter IDLE = 2'b01;
    parameter END_ACCESS = 2'b10;
    
    assign any_request = (req_vector != 0);
    always@(*) begin
        arbiter_state_nxt = arbiter_state;
        gnt_vector_nxt = gnt_vector;
        case(arbiter_state)
            IDLE:begin
                if(any_request)
                    arbiter_state_nxt = END_ACCESS;
                if(req_vector[0])
                    gnt_vector_nxt = 4'b0001;
                else if(req_vector[1])
                    gnt_vector_nxt = 4'b0010;
                else if(req_vector[2])
                    gnt_vector_nxt = 4'b0100;
                else if(req_vector[3])
                    gnt_vector_nxt = 4'b1000;
            end
            END_ACCESS:begin
                if((end_access_vector[0] & gnt_vector[0]) || 
                   (end_access_vector[1] & gnt_vector[1]) ||
                   (end_access_vector[2] & gnt_vector[2]) ||
                   (end_access_vector[3] & gnt_vector[3])) begin
                    if(any_request) begin
                        arbiter_state_nxt = END_ACCESS;
                        if(req_vector[0])
                            gnt_vector_nxt = 4'b0001;
                        else if(req_vector[1])
                            gnt_vector_nxt = 4'b0010;
                        else if(req_vector[2])
                            gnt_vector_nxt = 4'b0100;
                        else if(req_vector[3])
                            gnt_vector_nxt = 4'b1000;
                    end
                    else begin
                        arbiter_state_nxt = IDLE;
                        gnt_vector_nxt = 4'b0000;
                    end      
                end
            end
        endcase
    end
    
    always@(posedge clk or negedge resetb) begin
        if(!resetb) begin
            arbiter_state <= IDLE;
            gnt_vector <=0;
        end
        else begin
            arbiter_state <= arbiter_state_nxt;
            gnt_vector <= gnt_vector_nxt;
        end
    end
endmodule

 

 

        

        

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

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

相关文章

【面试必问】Spring核心之面向切面编程(AOP)

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 &#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#…

【数据结构】八大排序算法

目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 1、递归版本 1.1 hoare 法 1.2 挖坑法 1.3 前后指针法 2、非递归版本 3、快速排序的优化 3.1 三数取中 3.2 小区间优化 七、归并排序 1、递归版本 2、非递归版本 八、计数排序 …

【Spring Security】的RememberMe功能流程与源码详解

文章目录 前言原理 基础版搭建初始化sql依赖引入配置类验证 源码分析 进阶版集成源码分析疑问1疑问2 鉴权 升级版集成初始化sql配置类验证 源码分析鉴权流程 扩展版 前言 之前我已经写过好几篇权限认证相关的文章了&#xff0c;有想复习的同学可以查看【身份权限认证合集】。今…

Ada Tutorial(3)SPARK2——Post condition + Loop Invariant 后置条件 + 循环不变量

文章目录 divmod循环不变量 v.s. 后置条件扩展思考 divmod -- divmod.adb package body DivMod with SPARK_Mode isprocedure DivMod(X : Positive; N : Positive; K : out Natural; Remainder : out Natural)isY : Natural : X;beginK : 0;while Y > N loopY : Y - N;K : …

MySQL 日期与时间函数

一、获取日期、时间 函数用法CURDATE()&#xff0c;CURRENT_DATE()返回当前日期&#xff0c;只包含年、月、日CURTIME() &#xff0c; CURRENT_TIME()返回当前时间&#xff0c;只包含时、分、秒NOW() &#xff0c; SYSDATE()&#xff0c;CURRENT_TIMESTAMP() &#xff0c; LOC…

为什么企业和品牌一定要创建百度百科词条呢?

在企业和品牌宣传推广方面&#xff0c;百度百科作为一个权威的知识平台&#xff0c;早已成为了宣传阶段非常重要的一环。本文伯乐网络传媒将从以下几个方面探讨为什么企业和品牌一定要创建百度百科词条。 一、提升企业和品牌知名度 在信息时代&#xff0c;信息的获取渠道变得更…

PySpark简单使用(零)

介绍 Spark是Apache基金会旗下的顶级开源项目&#xff0c;用于对海量数据进行大规模分布式计算。PySpark是Spark的Python实现&#xff0c;是Spark为Python开发者提供的编程入口&#xff0c;用于以Python代码完成Spark任务的开发PySpark不仅可以作为Python第三方库使用&#xf…

【深入浅出 Spring Security(九)】解决跨域问题和 Axios 所需配置

跨域 一、SpringMVC 跨域的解决方案CrossOrigin&#xff08;注解的方式解决&#xff09;addCorsMappings&#xff08;实现WebMvcConfigurer接口&#xff0c;重写方法&#xff09; 二、Spring Security 跨域的解决方案前后端跨域测试&#xff08;前端相关配置&#xff09; 啥是跨…

计算机提示“找不到vcruntime140.dll,无法继续执行代码可”以这样子修复

首先&#xff0c;对于那些不熟悉的人来说&#xff0c;vcruntime140.dll是一个关键文件&#xff0c;用于在Windows操作系统上运行使用C语言编写的大型应用程序。如果你正在运行或安装这样的应用程序&#xff0c;但找不到vcruntime140.dll文件&#xff0c;那么你的应用程序可能无…

word插入图片为何无法显示?

word是我们常用的软件&#xff0c;在使用过程中&#xff0c;我们难免会遇到这样或那样的问题&#xff0c;解决问题的思路我认为首先要找出原因&#xff0c;然后再想办法解决才是最好的方案。 如果在 Word 文档中插入的图片无法显示&#xff0c;可能是以下原因之一&#xff1a;…

安装ORB-SLAM2纯记录(caffe)

ubuntu20.04 显卡配置3050TI 显卡驱动&#xff1a; NVIDIA-SMI 525.116.04 Driver Version: 525.116.04 cuda:Cuda compilation tools, release 11.0, V11.0.221 eigen:3.4.0 opencv 3.4.9 opencv下载链接 pangolin :高翔SLAM十四讲中的 没有安装最新版本 安装pangolin时候出…

有趣的图(二)(56)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 咱们书接上回&#xff0c;上次学了图的基本概念&#xff0c;你都学会了吗&#xff1f; 咱们今天要学习内容如下&a…

通过Appium Desktop实现录制功能并导出自动化脚本

1、我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮&#xff0c; 这是一种通过坐标定位元素的方式。 图中红色标记2为 “Start Recording” 按钮&#xff0c; 选中表示处理录制状态。 2、点击“top by coordinates” 按钮&#xff0c;再点击 “Start Recor…

vue3基础知识的简单应用

vue3基础知识的简单应用 vue3基础知识的简单应用运行结果 vue3基础知识的简单应用 父组件代码 <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><HelloWorld msg"Welcome to Your Vue.js A…

linux opencv4.2静态库编译及链接

1. 编译静态库 拉取opencv源码&#xff1a; https://github.com/opencv/opencv.git进入源码根目录&#xff0c;在platforms/linux目录下创建编译脚本build_linux.sh cd platforms/linux vi build_linux.sh脚本里配置cmake编译参数&#xff0c;这里编译静态库需要将 -DBUILD_S…

华为OD机试真题 JavaScript 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

一、题目描述 如果三个正整数A、B、C ,ABC则为勾股数 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c; 则称 其为勾股数元组。 请求出给定n~m范围内所有的勾股数元组。 二、输入描述 起始范围 1 < n < 10000 n &…

[数据结构初阶]单链表

顾名思义&#xff0c;单链表就是一个相邻节点用一个单向指针串起来&#xff0c;形成一种链式结构&#xff0c;那怎么将这些节点连结起来方便管理呢&#xff1f; 目录 单链表定义 申请空间 创建节点 打印链表 尾插 尾删 头插 头删 查找 插入 删除 pos后删除 pos位置删除…

Python 接口测试之接口关键字封装

引言 我们使用RF做UI自动化测试的时候&#xff0c;使用的是关键字驱动。同样&#xff0c;Python做接口自动化测试的时候&#xff0c;也可以使用关键字驱动。但是这里并不是叫关键字驱动&#xff0c;而是叫数据驱动。而接口测试的关键字是什么呢&#xff1f; 我们数据驱动的载体…

知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询。知识图谱在生物基因学中的应用非常广泛,可以帮助研究人员更好地理解和发现基因与疾病之间的关联关系,并推进相关领域的发展。 目录 引言知识图谱简介生物…

Linux之命令别名---alias

Linux之命令别名 定义 别名是命令的快捷方式。为那些需要经常执行&#xff0c;但需要很长时间输入的长命令创建快捷方式很有用 语法格式 alias 别名’原命令 -选项/参数’ 基本用法 查看设置的别名 [redhat8alocalhost ~]$ alias 删除别名 [redhat8alocalhost ~]$ unalia…