该版本用作系统寄存器的实现,M/S/U状态的实现与切换,以及load/store的虚实地址转换
设计指标
- 2023.12.8
- 2023.12.9
不实现mideleg和medeleg,因此一旦出现异常,直接切换至M态,
调试记录
到存储区中取PTE要额外至少一拍,需要使用store buffer
如果PTE在boot data ram中,拍数为一拍;但如果PTE在总线上的axi_sram中,则需要更多拍数。
首先,没有store buffer,如果两条连续的store axi_sram空间的操作,第二条会丢失;
其次,store buffer可以保证store完成后,后续的load或另一条store才会再次执行;如果不用store buffer,由于取PTE多出来的一拍(两级页表则要两拍),虚实地址转换至少在一拍内完成,load/store的指令执行至少会多出一拍来,导致流水线不同步。
load指令还好,如果不写回,流水线会始终stall,但对store来讲,机器认为store会在4拍内完成,但却使用了5拍,如果后面发出一条load指令,此时会不会出错。
无论如何,在没有cache、流水线只有五级的情况下,还是加上store buffer为好。