vivado版本为2022.2 链接: 单周期CPU代码
一共实现了15条指令,9条R型指令,5条I型指令,1条J型指令,指令格式与编码参照《LS-CPU-EXB-003cpu设计与体系结构实验指导手册》中的附录A1。
各个模块核心思路:
PC模块:PC是程序计数器,用于存放下一条要执行指令的地址。有四种情况考虑
① PC=PC+4,执行下一条指令
② PC=PC+4+立即数*4,执行的指令为分支跳转指令,跳转至当前指令后的立即数+1条指令。(考虑了延迟槽技术)
③ PC={(PC+4)[31:28],立即数<<2};,执行的指令为 J型指令,跳转目标为PC 的最高 4 位与立即数左移2 位后的值拼接得到。
④ PC=PC
指令存储器模块:建立异步读的单口ROM 类型的IP核,将指令存入coe文件中供IP核调用。
寄存器堆模块:用二维数组建立两个读端口一个写端口的寄存器堆,并初始化为0。
数据存储器模块:建立二维数据模拟真双口RAM,一个端口用于读写,另一个端口用于将存储器中数据显示在led显示屏上。
控制器模块:针对不同指令中opcode和Func的值设置各个控制变量的值。
MIPS指令 编写冒泡排序程序: 用ADDIU指令将立即数存到寄存器中再用SW指令将寄存器中的数存到存储器中。将8,7,6,5,4,3,2,1八个数存到存储器地址1-8中。写一个循环实现冒泡排序,排序完成后存储器内地址1-8显示1,2,6,7,8,13,14,15。 用汇编指令编写一个冒泡排序,再将汇编指令转化为MIPS指令(下文中G表示通用寄存器
当时写了好几个版本,都有一些不同的地方,不过结果应该都是一样的,先上传这俩吧