Verilog |
您所在的位置:网站首页 › 中国u20国家足球队有归化球员吗视频 › Verilog |
仲裁
当多个源和用户需要共享同一资源时,需要某种仲裁形式,使得所有用户基于一定的规则或算法得到获取或访问共享资源的机会。 仲裁方案 严格优先级轮询 根据优先级的差异,用户访问共享资源的机会也不同。低优先级的用户可能时钟无法得到资源。 公平轮询 公平的对待所有请求。所有用户获得均等的访问机会,不会有用户时钟无法得到资源。 权重轮询 兼顾了公平性和差异性。在一个轮询周期内,不同权重的用户会得到不同的访问次数。在一个轮询周期内,不同权重的用户会得到不同的访问时间片。 混合优先级(高优先级组和低优先级组) 组间按照优先级轮询,组内采用公平轮询。 严格优先级轮询 在严格优先级轮询方案中,发出请求的用户有固定的优先级。我们假设有8个用户(agent),agent0具有最高优先级,agent7具有最低优先级。在本方案中,优先级高的用户只要保持请求,就会持续得到授权。随着优先级不断降低,用户得到授权的机会也随之下降。该方案可以根据用户的重要新提供不同的服务,但低优先级的用户可能长时间得不到服务。此时可以通过对高优先级用户增加一些请求约束的方法来避免低优先级用户被“饿死”。第一种方法是为每个用户分配一个变量,该变量决定了在一个轮询周期内该用户能够得到许可(被授权)的次数。该变量是可以通过软件编程进行修改的,因此其轮询权重也可以相应调整。 例如,有三个用户,agent0权重为3、agentl权重为2、agent2权重为1。在一个轮询周期中,agent0最大可以得到3次许可,agent1可以得到2次许可,agent22可以得到1次许可。在一个轮询周期开始时,变量N_agnt0、N_ agnt1和Nagnt_2分别被预置为3、2和1。每次轮询后对应的变量值减1,一个轮询周期结束后,这些变量会被重新设置为预置的初值。 如果所有的用户同时请求,仲裁器将按照下面两种方式给予许可: 一个用户可以连续地获得许可,获得许可的次数由预置的权重值决定。当所有用户同时发出请求时,许可序列依次为: 在所有存在许可机会的用户之间进行公平轮询,在一个循环周期内,不用用户得到的总许可机会由预置的权重值决定。当所有请求同时发生时,许可序列为: 在另一种方案中,可软件编程的定时器被用于分配权重。一个仲裁周期开始时,定时器数值被加载到本地变量中。当一个用户获得许可后,本地变量减1,直到减至0为止。如果被轮询的用户没有完成操作,仲裁器停止对当前用户的许可并根据优先级轮询下一个用户。 接下来,我们给出了采用WRR轮询方案的Verilog RTL代码及仿真结果,它采用的是第一种许可方式,序列为A,A,A,B,B,C…。 下面是采用第二种权重轮询方式的Verilog代码及仿真结果,当所有用户都同时发出请求时,轮询序列为: 参考《verilog高级数字系统设计技术与实例分析》,仅用于本人记录学习笔记,如有侵权请联系删除。 权重轮询仲裁代码所谓轮询仲裁,就是指每次访问结束后都会更新优先级,举个栗子:假设有N个请求,分别编号为0,1,2,…,N-1,初始时刻,这N个请求的优先级为0>1>2>…>N-1,某个时刻,仲裁器将总线的控制权交给了请求i(0…>N-1>0>1>…>i。 在本文中,我们设计了一个3请求的总线仲裁器,代码如下: `timescale 1ns/10ps module bus_arbitor( input logic clk, input logic rst_n, input logic signal_a, //三个主机,轮询仲裁 input logic signal_b, input logic signal_c, output logic [1:0] grant); logic [1:0] last_grant; //记录上一次总线仲裁结果 parameter A = 2'b00; //将总线控制权交给A parameter B = 2'b01; //总线控制权交给B parameter C= 2'b10; //总线控制权交给C parameter NULL = 2'b11; // always@(posedge clk,negedge rst_n) if(~rst_n) begin grant |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |