微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如何在用Verilog 实现优先级循环的中断

如何在用Verilog 实现优先级循环的中断

时间:10-02 整理:3721RD 点击:
有没有人能提供一个思路呢 设计中有七个中断源,通过verilog实现中断优先级的循环 比如开始是1优先级最高,1中断之后变成优先级最低的,依次类推,有没有比较简单的实现方案 跪求

寄存上次的中断号   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的高位优先级高于地位!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top