固定优先级 -- Fixed Priority
思路:假设最低位优先级最高,从低位到高位依次去判断,借助一个pre_req来记录低位是否已经有了request,如果第i位有了request,那么第i+1位一直到最高位的pre_req都是1。
实现方式一
//Fixed Priority Arbiter
module fixed_prior_arb #(
parameter REQ_WIDTH=3)(
input[REQ_WIDTH-1:0] req,
output[REQ_WIDTH-1:0] grant
);
wire[REQ_WIDTH-1:0] pre_req;
assign pre_req[0]=1'b0;
assign pre_req[REQ_WIDTH-1:1]=req[REQ_WIDTH-2:0] | pre_req[REQ_WIDTH-2:0];
assign grant=req&~pre_req;
endmodule
上述思想本质上时找到req从低到高的第一个1。那么利用补码的思想,将req-1,得到的结果进行取反,将取反后的结果与req原来的值按位与。结果就会得到grant。
实现方式二
//Fixed Priority Arbiter
module fixed_prior_arb #(
parameter REQ_WIDTH=3)(
input[REQ_WIDTH-1:0] req,
output[REQ_WIDTH-1:0] grant
);
assign grant=req&~(req-1);
endmodule
Round Robin
思路一:
优先级变化,输入request正常。
利用上述fixe

本文探讨了FPGA开发中仲裁器的设计,包括固定优先级仲裁器的两种实现方式以及轮询(Round Robin)仲裁器的两种思路。在固定优先级仲裁器中,通过预请求信号记录低优先级的请求状态,使用补码和按位操作确定授权。而在轮询仲裁器中,通过调整优先级或请求处理方式实现资源的公平分配。
最低0.47元/天 解锁文章
2339

被折叠的 条评论
为什么被折叠?



