Carbon
|
|
⭐️ 1
|
💬️ 1
Carbon
构想的中断发生情况
- 常规指令:阻塞一周期、阻塞两周期
- sw
- 跳转延迟槽:跳转、未跳转
- eret后一条指令
- 乘除指令
- 乘除槽
- 乘除槽内的延迟槽
- 指令异常
- 指令异常且处于延迟槽
对应.asm
注:以下测试代码仅针对本人结构编写,即乘除模块在E级,cp0在M级。例如为了测乘除指令刚到乘除模块时的情况,macroPC取乘除指令上一条。然而,如果你采用了其他的设计,还请自行调整。
此代码未测试中断发生在eret后的情况,然而强烈建议自行进行测试
由于水平有限,不保证对应测试代码真的起到测试的作用,还请各位大佬批评指正
1 | no_jump: |
数据导出方案
在Mars所在地址打开cmd输入
1 | java -jar <mars> db nc mc CompactDataAtZero a dump 0x4180-0x6ffc HexText <xxx.txt> <xxx.asm> |
修改后的tb
1 | `timescale 1ns/1ps |
对应易错点
- 跳转指令无论是否跳转,接下来一条指令都应视为延迟槽
- cp0设计在w级则需要检查
store
类指令在w时被下中断写使能信号是否关闭 - 如果设计eret后清空延迟槽则需要考虑优先级问题(阻塞>清空)
- 更进一步,如果设计了清空延迟槽需要考虑在
eret
后的nop
下中断的情况
|
CC BY 4.0
❤️ 6