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位,由其他管理模块完成虚拟地址的映射和截断。