// A 优先级最高,B C优先级相同
// 先查询A,再按照上次grant顺序,查B或C;
module arbiter2(
input clk,
input rst_n,
input [2:0] req, // [A,B,C]
output [2:0] grant);
always@(posedge clk or negedge rst_n)
if(!rst_n)
grant<=3'b000;
else case(grant)
3'b000: if(req[2]) grant<=3'b100;
else if(req[1]) grant<=3'b010;
else if(req[0]) grant<=3'b001;
else grant<=3'b000;
3'b001:if(req[2]) grant<=3'b100;
else if(req[1]) grant<=3'b010;
else if(req[0]) grant<=3'b001;
else grant<=3'b000;
3'b010:if(req[2]) grant<=3'b100;
else if(req[0]) grant<=3'b001;
else if(req[1]) grant<=3'b010;
else grant<=3'b000;
3'b100:if(req[2]) grant<=3'b100;
else if(req[1]) grant<=3'b010;
else if(req[0]) grant<=3'b001;
else grant<=3'b000;
default: grant<=3'b000;
endcase
endmodule
仲裁器A优先级最高,BC优先级相同
最新推荐文章于 2024-08-29 13:40:27 发布