当前位置:   article > 正文

仲裁器理论基础

仲裁器

在多模块共享同一资源时,需要仲裁器来决定谁可以使用共享资源(如memory access).所以输入是各模块的请求(req),输出是grant。

仲裁器(arbiter) 在FPGA主要用于多个source源同时发出请求时,根据相应的优先级来响应哪一个source。FPGA的仲裁器分为轮询仲裁器(Round-Robiin)固定优先级仲裁器(Fixed-Priority)

    轮询仲裁器规则
    轮询仲裁的规则是当0、1、2、、、N-1个source信号源同时向仲裁器发出请求时,初始情况下source 0的优先级最高当仲裁器响应了source0后,source1的优先级最高,依次类推。
    轮询仲裁器实现
    轮询仲裁器的实现分为检测仲裁器输入口source信号源的request,根据当前仲裁器的优先级响应相应的request,仲裁器grant输出source端的请求,更新仲裁器的优先级。
  
    固定优先级仲裁器规则
Fixed-priority Arbiter顾名思义当0、1、2、、、N-1个source同时发起request,Source 0的优先级最高,即便source0被响应完后,仍为最高优先级,其中优先级按照序号逐渐降低
    固定优先级仲裁实现
固定优先级仲裁器在FPGA实现与轮询仲裁器类似,唯一不同的是轮询仲裁在每次响应完request后会对优先级进行更新,而固定优先级则不需要此步骤。
 

       SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

        共享总线是一种常见的总线结构,多个总线上的设备拥有共同的地址线和数据线。
当一个总线设备希望占据总线进行数据收发操作时,需要通过属于自己的arequest信号向仲裁器发出申请,只有得到仲裁器的许可(对应的agrant置1 )时才能进行数据收发操作,没有得到许可的总线设备不能发起数据操作,否则将会出现多个设备同时驱动总线的错误。
下图是有两个总线设备的总线仲裁器电路,areq0和areq1以及agnt0和agnt1分别是master1和master2的请求和确认信号,rid是仲裁方式选择信号。当多个总线设备同时发出请求时,仲裁器根据内部控制寄存器的值按照固定优先级( rid=1, master2拥有高优先级)或者循环判断( rid=0,从master1->master2->master1循环判断)两种机制给相应的总线设备发出确认信号。

 设计代码

  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Design Name:
  7. // Module Name: Arbiter
  8. // Project Name:
  9. // Target Devices:
  10. // Tool Versions:
  11. // Description:
  12. //
  13. //
  14. module Arbiter(clk,reset,areq0,areq1,agnt0,agnt1,rid);
  15. input clk,reset;
  16. input areq0,areq1;
  17. input rid;
  18. output agnt0,agnt1;
  19. reg [1:0] current_state,nx_state;
  20. parameter idle=2'b00,master1=2'b01,master2=2'b10;
  21. /
  22. always @(posedge clk or posedge reset)
  23. if(reset)
  24. current_state<=idle;
  25. else
  26. current_state<=nx_state;
  27. /
  28. always @(current_state or areq0 or areq1 or rid)
  29. begin
  30. case(current_state)
  31. idle:if(areq1==1 && areq0==0)
  32. nx_state=master2;
  33. else if(areq1==0 && areq0==1)
  34. nx_state=master1;
  35. else if(areq1==1 && areq0==1 && !rid)
  36. nx_state=master1;
  37. else if(areq1==1 && areq0==1 && rid)
  38. nx_state=master2;
  39. else nx_state=idle;
  40. master1:if(areq1==1)
  41. nx_state=master2;
  42. else if(areq1==0 && areq0==0)
  43. nx_state=idle;
  44. else nx_state=master1;
  45. master2:if(areq0==1)
  46. nx_state=master1;
  47. else if(areq1==0 && areq0==0)
  48. nx_state=idle;
  49. else nx_state=master2;
  50. default:nx_state=idle;
  51. endcase
  52. end
  53. assign agnt0=(current_state==master1)?1:0;
  54. assign agnt1=(current_state==master2)?1:0;
  55. endmodule

测试代码

  1. `timescale 1ns / 1ps
  2. module Arbiter_tb;
  3. reg clk;
  4. reg reset;
  5. reg areq0,areq1;
  6. reg rid;
  7. wire agnt0,agnt1;
  8. always begin
  9. #10 clk=1;
  10. #10 clk=0;
  11. end
  12. /
  13. initial begin
  14. clk=0;
  15. reset=1;
  16. areq0=0;
  17. areq1=0;
  18. rid=0;
  19. #100;
  20. reset=0;
  21. //rid=0,路径1->2
  22. repeat(1)@(posedge clk);
  23. #2; areq0=1;areq1=1;
  24. repeat(1)@(posedge clk);
  25. #2; areq0=0;areq1=0;
  26. repeat(1)@(posedge clk);
  27. #2; areq0=1;areq1=1;
  28. repeat(1)@(posedge clk);
  29. #2; areq0=0;areq1=0;
  30. //rid=0,路径4->3
  31. repeat(1)@(posedge clk);
  32. #2; areq0=0;areq1=1;rid=1;
  33. repeat(1)@(posedge clk);
  34. #2; areq0=0;areq1=0;
  35. repeat(1)@(posedge clk);
  36. #2; areq0=1;areq1=1;
  37. repeat(1)@(posedge clk);
  38. #2; areq0=0;areq1=0;
  39. //路径1->5->6->2
  40. repeat(4)@(posedge clk);
  41. #2; areq0=1;areq1=0;
  42. repeat(1)@(posedge clk);
  43. #2; areq0=0;areq1=1;
  44. repeat(1)@(posedge clk);
  45. #2; areq0=1;areq1=0;
  46. repeat(1)@(posedge clk);
  47. #2; areq0=0;areq1=0;
  48. end
  49. Arbiter U1(
  50. .clk (clk ),
  51. .reset (reset ),
  52. .areq0 (areq0 ),
  53. .areq1 (areq1 ),
  54. .agnt0 (agnt0 ),
  55. .agnt1 (agnt1 ),
  56. .rid (rid ));
  57. endmodule

参考链接:https://blog.csdn.net/Hennys/article/details/107662757

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/802666
推荐阅读
相关标签
  

闽ICP备14008679号