SOC修改
將之前完成的31條指令單周期CPU進行了重構,將其分開,實現了內外有別,將CPU、指令ROM和數據RAM。
這樣,以后為其增加接口外設,總線控制,才更加清晰,這是進一步封裝和抽象。
MARS大坑
j和jal指令,使用的是絕對地址,而MARS和我的CPU不匹配……結果就debug半天,很難匹配,因為起始地址如果是00003000開始,那么coe
文件將會又很多東西0……不過內樣的話,就一勞永逸了,看來還是得改。
接下來,做好地址空間映射的修改和文檔完善。
充分體會,一個系統的依賴和完備性,非常重要!
J
和Jal
指令的地址坑,居然花了半天時間debug……它們是絕對地址,不是beq這種的相對地址!地址空間非常重要!
教訓
- 不要一次修改太多東西
- 保留原來沒問題的文件
- 耐心點,從頭開始debug,找到出問題的點!定位非常重要!
繼續修改CPU,符合MARS中的MIPS規范
此次主要是地址空間映射規范。
注意0x00003000
是字節編址的地址,現在采用的是字編址,因此需要注意匹配問題。
并且注意,這個是虛擬地址空間,實際上我們設計的是
- 數據RAM從0開始
- 指令ROM從
0x00003000
開始
取消了ROM、RAM IP核的輸出寄存器
時鐘周期延遲變成了1個周期,而不是2個。
CPU傳出的數據應該是完整的,剩下的由映射機制做
對于CPU,傳出的指令地址和數據地址就應該是32位的,不能因為存儲器小,地址是14位,就輸出14位的。
應該輸出32位,由其他管理模塊完成虛擬地址的映射和截斷。