恰逢龙芯高端处理器出世之时,BirB和Calx对于制作CPU的尝试也应运而生。本项目是两人合作完成的计算机组成原理课设大作业,是在正点原子的ZYNQ 7020开发板上实现的一个基于MIPS指令集的32位CPU,并且带有非常炫酷的显示功能。显示模块、PS大部分逻辑和CPU的部分逻辑由Calx完成,汇编器、CPU大部分逻辑和PS部分逻辑由BirB完成。
XB-CPU是两人合作的组织,bluex是两人对于本CPU的称呼。仓库主体代码在2024年1月7日之后应该没有更新了,所以有些bug可能已经找到原因,但是本仓库仍然未更新。
本仓库(cpu_test)包含将全部模块(CPU与显示),而bluex仓库和bluex update是CPU的仓库。bluex本身包含bluex 1版本(异步复位),而bluex update包含bluex 2、bluex 3.0、bluex 3.1版本(同步复位)。主要的PL部分代码存放在cpu_test.srcs/sources_1/new目录下,包含汇编器(python),CPU(Verilog);主要的PS部分代码存放在vitis/cpu/src中,包含显示模块、中断配置等等。
- 加减乘除(支持操作数都是寄存器或有一个操作数为立即数且在后的运算,但是乘除法要求操作数是16位的补码)
- 与或非、异或(支持操作数都是寄存器或有一个操作数为立即数且在后的运算)
- 大小比较
- 条件分支与无条件跳转
- 移位运算
- 读写主存
- 搬移寄存器数据
- 理论主频150M,但是上板结果显示在100M左右已经出现了部分问题
- 大小比较可能有bug
- CPU_error不能正常使用,会莫名进入错误状态然后死机,所以已经在CPU test仓库中关闭该功能,bluex update仓库仍然保留该功能
- 条件分支指令的下条指令为普通指令,而下下条指令为无条件跳转时,PC会发生不可预料的跳转
- 堆栈及相关操作指令
- 实现函数跳转指令
- 实现中断
- 将外设统一编址
- 实现分支预测
- 显示所有寄存器的值
- 显示主存所有数据
- 切换壁纸
应当承认,本项目还有很多不足,特别是CPU部分。本项目选择开源,便是希望后来者能够居上,解决现有的问题,做出更好的作品!