如何在用Verilog 实现优先级循环的中断
寄存上次的中断号 N
对中断源 信号I 循环移位(7-N)
然后再进行优先权编码 就是你要的结果
就是Round Robin仲裁吧,下面的例子供参考。
always @(request or grant) begin
grant_next = grant;
case(1)
grant[0]:
if (request[1]) grant_next = 4’b0010;
else if (request[2]) grant_next = 4’b0100;
else if (request[3]) grant_next = 4’b1000;
else if (request[0]) grant_next = 4’b0001;
grant[1]:
if (request[2]) grant_next = 4’b0100;
else if (request[3]) grant_next = 4’b1000;
else if (request[0]) grant_next = 4’b0001;
else if (request[1]) grant_next = 4’b0010;
grant[2]:
if (request[3]) grant_next = 4’b1000;
else if (request[0]) grant_next = 4’b0001;
else if (request[1]) grant_next = 4’b0010;
else if (request[2]) grant_next = 4’b0100;
grant[3]:
if (request[0]) grant_next = 4’b0001;
else if (request[1]) grant_next = 4’b0010;
else if (request[2]) grant_next = 4’b0100;
else if (request[3]) grant_next = 4’b1000;
endcase
end
endmodule
[2:0]b0,b1,b2,b3,b4,b5,b6;分别表示终端的中断号,
[6:0]a,表示第6:0个终端是否是中断的,1表示终端0表示不终端;
a,b(b0,b1,b2,b3,b4,b5,b6)同时循环左移,对a实行优先级解码就可以了!a的高位优先级高于地位!
