在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5697|回复: 4

[求助] 如何在用Verilog 实现优先级循环的中断

[复制链接]
发表于 2013-11-18 17:44:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
有没有人能提供一个思路呢 设计中有七个中断源,通过verilog实现中断优先级的循环 比如开始是1优先级最高,1中断之后变成优先级最低的,依次类推,有没有比较简单的实现方案 跪求
发表于 2013-11-18 20:04:17 | 显示全部楼层
寄存上次的中断号   N
对中断源 信号I   循环移位(7-N)

然后再进行优先权编码   就是你要的结果
发表于 2013-11-18 22:50:57 | 显示全部楼层
就是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
发表于 2013-11-18 23:11:05 | 显示全部楼层
[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的高位优先级高于地位!
发表于 2024-7-22 16:11:28 | 显示全部楼层


天涯沦落人 发表于 2013-11-18 22:50
**** 作者被禁止或删除 内容自动屏蔽 ****


这代码啥意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 16:34 , Processed in 0.020784 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表