Verilog | Round_Robin_Arbiter

chatgpt/2023/9/27 16:46:50

重写了权重轮询仲裁,添加lock输入信号,表示请求方收到了仲裁许可,在对应的lock拉低之前,仲裁器不可以开启新的仲裁。

Generics

Generic nameTypeValueDescription
N4

Ports

Port nameDirectionTypeDescription
clkinput
rst_ninput
requestinput[N-1:0]
lockinput[N-1:0]
grantoutput[N-1:0]

Verilog实现

rtl代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/07/20 16:11:36
// Design Name: 
// Module Name: round_robin_arb
// ===================================================================================
// 功能:
// 		-1- Round Robin 仲裁器
//      -2- 仲裁请求个数N可变
// 		-3- 加入lock机制
// 		-4- 复位时的最高优先级定为 0 ,次优先级:1 -> 2 …… -> N-2 -> N-1
// 
// ===================================================================================module Round_Robin_Arbiter #(parameter N = 4  //仲裁请求个数
) (input          clk,input          rst_n,input  [N-1:0] request,input  [N-1:0] lock,output [N-1:0] grant     //one-hot
);// 存储移位后上一次仲裁结果reg          aaa;wire         bbb;reg  [N-1:0] last_state;reg  [N-1:0] grant_r;assign bbb = ~|(lock & grant);assign grant = grant_r;always @(posedge clk or negedge rst_n)if (!rst_n) aaa <= 0;else aaa <= |request & ~(|(lock & grant));always @(posedge clk or negedge rst_n) beginif (!rst_n) last_state <= 4'b0001;  // 默认值,表示最低位的优先级最高else if (aaa) last_state <= {grant[N-2:0], grant[N-1]};  // 有仲裁请求,根据上一次的仲裁结果,左移1bit后用于控制新的优先级else last_state <= last_state;  // 无仲裁请求时,pre_state不更新end// 如果最左侧几个高优先级主机都为发起仲裁请求,需要从最低位开始轮询。// 此处通过两个request拼接,将右侧低位拼接到左侧,即可实现对低位的判断。wire [2*N-1:0] grant_ext;assign grant_ext = {request, request} & ~({request, request} - last_state);//得到的grant_ext必定为一个独热码,但是置高位可能在代表低位的高4bit中,因此进行求或运算always @(posedge clk or negedge rst_n) beginif (!rst_n) begingrant_r <= 0;//    		grant_ext <= 0;end else if (bbb) begin//    		grant_ext <= {request,request} & ~({request,request} - last_state);grant_r <= grant_ext[N-1:0] | grant_ext[2*N-1:N];endend// wire aaa;// assign aaa = (|request & ~(|(lock & grant)));// wire [3:0] last_state;// assign last_state = rst_n ? aaa ? {grant[N-2:0], grant[N-1]} : last_state : 'b0001;// assign grant      = bbb ? grant_ext[N-1:0] | grant_ext[2N-1:N] : grant;
endmodule

tb代码

// =====================================================================
// 功能:测试模块 Round_Robin_Arbiter 功能 
// =====================================================================`timescale 1ns / 1ps
module TB_Round_Robin_Arbiter();parameter 		N 		= 		4; //仲裁请求个数reg 							clock;
reg 							reset_b;
reg 			[N-1:0]			request;
reg 			[N-1:0]			lock;
wire 			[N-1:0] 		grant;//one-hotinitial clock = 0;
always #10 clock = ~clock;initial
beginreset_b <= 1'b0;request <= 0;lock <= 0;#20;reset_b <= 1'b1;@(posedge clock)request <= 2;lock <= 2;@(posedge clock)request <= 0;@(posedge clock)request <= 5;lock <= 7;@(posedge clock)lock <= 5;@(posedge clock)request <= 1;@(posedge clock)lock <= 1;@(posedge clock)request <= 0;@(posedge clock)lock <= 0;#40;@(posedge clock)request <= 0;lock <= 2;@(posedge clock)request <= 0;@(posedge clock)request <= 5;lock <= 7;@(posedge clock)lock <= 5;@(posedge clock)request <= 1;@(posedge clock)lock <= 1;@(posedge clock)request <= 0;@(posedge clock)lock <= 0;#100;$finish;
endRound_Robin_Arbiter #(.N(N)) inst_Round_Robin_Arbiter (.clk     (clock),.rst_n   (reset_b),.request (request),.lock    (lock),.grant   (grant));endmodule

仿真结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGLM-6B VS 昆仑万维天工对比

下面进行昆仑万维天工与ChatGLM-6B内测结果进行对比&#xff0c;其中ChatGLM-6B的结果来自https://github.com/THUDM/ChatGLM-6B&#xff0c;假设ChatGLM-6B的结果是可靠的&#xff0c;那么为了公平&#xff0c;昆仑万维天工&#xff08;https://tiangong.kunlun.com/interlocu…

python_PyQt5开发验证K线视觉想法工具V1.1 _增加标记类型_线段

目录 运行情况&#xff1a; 代码&#xff1a; 承接 【python_PyQt5开发验证K线视觉想法工具V1.0】 博文 https://blog.csdn.net/m0_37967652/article/details/131966298 运行情况&#xff1a; 添加线段数据在K线图中用线段绘制出来 代码&#xff1a; 1 线段标记的数据格式…

企业计算机服务器数据库中了360后缀勒索病毒怎么解决,数据恢复

近日&#xff0c;一家中型企业的服务器数据库遭到了一起严重的网络安全事件&#xff0c;导致企业的运营暂时陷入混乱。据了解&#xff0c;该企业的技术人员在服务器数据库中发现了一种名为“360后缀”勒索病毒&#xff0c;该勒索病毒通过对企业重要文件进行加密&#xff0c;数据…

合宙Air724UG LuatOS-Air script lib API--log

Table of Contents log _log(level, tag, …) (local函数 无法被外部调用) log.trace(tag, …) log.debug(tag, …) log.info(tag, …) log.warn(tag, …) log.error(tag, …) log.fatal(tag, …) log.openTrace(v, uartid, baudrate) log 模块功能&#xff1a;系统日志记录,分…

支付宝调试问题

网页支付返回表单不正确显示 升级前现象&#xff1a; SpringBoot 的返回给前台的<form>表单会自动提交&#xff0c;结果一直提示这个&#xff0c;而不是期望的支付宝登录页 实际得到这个&#xff1a; 期望得到这个&#xff1a; 因为沙箱账号是之前申请的&#xff0c;所…

【EI/SCOPUS会议征稿】第三届检测技术与自动化工程国际学术会议 (TTAE 2023)

第三届检测技术与自动化工程国际学术会议 (TTAE 2023)原定将于2023年9月15-17日在中国西安召开。 检测技术与自动化工程国际学术会议将每年举行一次&#xff0c;旨在将“检测技术”和“自动化工程”等学术领域的学者、专家、研发者、技术人员聚集到一个学术交流的平台&#xf…

怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象

&#x1f600;前言 本章是spring基于XML 配置bean系类中第2篇讲解怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象–ref和怎么去引用/注入内部 bean 对象 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0…

25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)

1.简述 一、算法原理 1、问题引入 之前我们了解过的算法大部分都是无约束优化问题&#xff0c;其算法有&#xff1a;黄金分割法&#xff0c;牛顿法&#xff0c;拟牛顿法&#xff0c;共轭梯度法&#xff0c;单纯性法等。但在实际工程问题中&#xff0c;大多数优化问题都属于有约…
推荐文章