当前位置: 首页 > news >正文

基于verilog的轮询调度器

在这里插入图片描述
代码参考这一期视频,博主提供的代码感觉不好综合,改了一版如下所示:


// Round-robin arbiter (combinational index output, no comb loops, low resources)
module EASYAXI_ARB #(parameter DEEP_NUM = 8
)(input  wire                        clk,        // System clockinput  wire                        rst_n,      // Asynchronous active-low resetinput  wire [DEEP_NUM        -1:0] queue_i,    // Request queue inputinput  wire                        sche_en,    // Scheduling enable signaloutput wire [$clog2(DEEP_NUM)-1:0] pointer_o   // Grant output (index, combinational)
);// 记录“下一次从谁后面开始找”的优先掩码:// 授权在 k 位,则更新为 ~((1<<(k+1))-1),即仅高于 k 的位为 1,低位全 0reg  [DEEP_NUM-1:0] req_power;// 先尝试从当前优先起点之后找;若没有,则从头找wire [DEEP_NUM-1:0] req_after_power = queue_i & req_power;wire                old_grant_work  = |req_after_power;// 提取最低位 1(one-hot),资源很省:x & (-x) 等价于 x & (~x + 1)wire [DEEP_NUM-1:0] old_first = req_after_power & (~req_after_power + {{(DEEP_NUM-1){1'b0}},1'b1});wire [DEEP_NUM-1:0] new_first = queue_i         & (~queue_i         + {{(DEEP_NUM-1){1'b0}},1'b1});wire [DEEP_NUM-1:0] grant = old_grant_work ? old_first : new_first;  // one-hot 仲裁结果// one-hot -> index(组合)function automatic [$clog2(DEEP_NUM)-1:0] onehot_to_index;input [DEEP_NUM-1:0] onehot;integer i;beginonehot_to_index = {($clog2(DEEP_NUM)){1'b0}};for (i = 0; i < DEEP_NUM; i = i + 1) beginif (onehot[i]) onehot_to_index = i[$clog2(DEEP_NUM)-1:0];endendendfunction// 组合输出:有请求则输出当前仲裁索引,否则为 0assign pointer_o = (|queue_i) ? onehot_to_index(grant): {($clog2(DEEP_NUM)){1'b0}};// 时序:仅在需要调度时更新优先掩码(轮询)// 授权 one-hot = grant;下一轮起点掩码 = ~((grant<<1) - 1)// 当 grant 在最高位时,(grant<<1) 为 0,减 1 生成全 1,取反得全 0,从而下轮会从头(new_first)开始 —— 符合轮询语义always @(posedge clk or negedge rst_n) beginif (~rst_n) beginreq_power <= {DEEP_NUM{1'b1}};  // 复位为“允许从任何位置开始”end else if (sche_en) beginif (|queue_i) beginreq_power <= ~(((grant << 1)) - {{(DEEP_NUM-1){1'b0}},1'b1});end// 若无请求,不更新 req_power(保持当前起点)endendendmodule
http://www.dtcms.com/a/399564.html

相关文章:

  • 网站权重排名百度网盟如何选择网站
  • 邯郸营销网站建设公司哪家好安徽建设厅考勤网站
  • Spring 框架详细入门知识点
  • Shell常用快捷键和常用文件操作命令
  • 优秀设计网站大全电子商务网站开发环境示范
  • 在随钻测量的演进史中,陀螺为什么是关键角色?
  • seo网站排名全选网站建设工作情况总结
  • 在 Windows GPU 机器上运行 Linux CUDA
  • Python基础总结
  • 二手车网站开发PPT国内专业网站制作
  • 事业单位可以建设网站吗深圳网站设计哪好
  • 做房产推广那个网站好重庆装修价格明细表
  • 工业产品设计网站推荐制作网站首页psd
  • 谷歌seo网站推广怎么做手机网站域名哪里注册时间
  • 记一次添加.h和.cpp后,编译时显示无法解析的外部符号问题
  • 宝安网站制作哪里好长阳网站建设
  • 机器学习——线性回归详解
  • Python知识体系
  • 做电商看的网站有哪些内容网站开发和ui的区别
  • 从0到1搭建灵活用工平台:一套系统需要具备哪些核心功能?
  • 【ReST】2. ReST 行内文本语法详解及与 Markdown 的区别
  • 网站 维护网站开发待遇怎么样
  • 网站建设合同怎么写开网店怎么找货源啊
  • iOS 混淆在多渠道分发场景下的实践,配置统一、符号表管理与分发安全
  • 开发区网站开发语言乌克兰俄罗斯
  • HAProxy 负载均衡器
  • 使用C#代码自定义密码加密Word
  • 报修网站模板网络营销是什么时候兴起的
  • 【Java开发:Lambda表达式】
  • tomcat启动卡在Initializing Spring root WebApplicationContext