5年9个月前修改于 5年9个月前IP:江苏
890086
4楼

Debug手记:处理器中断响应Bug

Bug仿真波形如下:

isp_fault.png

图中观察可以发现,当中断信号到来时,处理器中中断响应组件并未按照期待完成当前指令后将ISP地址填充至PC

可能的bug来源:

1.下一条指令选择器中对等待状态的处理,我们可以考虑让中断来时强行跳转至ISP,但这样不符合我们对处理器行为的期待

cause1.png

2.中断握手流程未考虑到等待状态

查询代码可发现处理器中断处理流程如下:

cause2-1.png


cause2.png

当复位时清除ISP标志int_service

当中断来临(INT=1且ISP标志=0),保存现场(PC+1/A0A1A2),ISP标志置位

将PC置为ISP地址(在PC_NEXT处实现)

如果返回,清除中断标志位并从RET/RTA寄存器中弹出PC+1/A0A1A2(未在此展示)

看到这里,这里修改代码,通过在进入ISP前检查WAIT状态,仿真故障不再复现

how.png

debug_finished.png

可见,在WAIT状态结束后,正常跳转进入ISP

有奖竞猜:这段中断处理流程的描述中,还有一个Bug,欢迎在评论区中竞猜指出,答对有奖

评论
文号 / 890086

百炼成钢
名片专栏发私信
学术分 1
总主题 14 帖总回复 258 楼拥有证书:进士 学者 机友 笔友
注册于 2011/10/15 18:08:14最后登录 2026/08/13 14:47:57
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

Surfing Lithium

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的