Skip to content

About

一步一步写MIPS CPU

Topics

Resources

Stars

886 stars

Watchers

17 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

step_into_mips:计算机组成原理实验与参考实现

本仓库整理了一条从基础数字部件到 MIPS SoC、再到教学型 Tiny OS / RTOS 的实验路线。前半部分延续重庆大学计算机组成原理课程改革实验内容;后半部分在 Nexys4 DDR 上补充 SoC、UART、异常/中断、DDR2 和 StepOS baseline,作为《硬件综合设计》和 NSCSCC(龙芯杯系统能力培养大赛)入门的参考实现。

最终集成目标是 Lab 10: StepOS Tiny OS / RTOS:在 DDR-capable MIPS SoC 上启动一个小型操作系统 baseline,提供 UART shell、DDR pattern test、timer tick、两个任务 round-robin scheduler 和 syscall-like ABI。

实验进度

Lab 主题 说明
1 ALU 设计,存储器 IP 使用 早期实验仍可参考原分支 lab_1
2 简单取指译码模块 早期实验仍可参考原分支 lab_2
3 单周期 MIPS CPU 早期实验仍可参考原分支 lab_3
4 五级流水 MIPS CPU 本仓库提供 Vivado batch 仿真/综合脚本
5 SoC 总线与统一地址空间 Nexys4 DDR 最小 SoC、boot ROM、GPIO/LED MMIO
6 UART 与 Boot Monitor UART MMIO、boot banner、字符回显
7 扩展 ISA 与 C Runtime 扩展指令、byte strobe 数据总线、ISA self-test
8 中断、异常和 Timer CP0-like mfc0/mtc0/eret、timer IRQ、固定异常入口
9 DDR2 外部内存 d_valid/d_ready wait-state 访存、行为级 DDR model、true MIG
10 Tiny OS / RTOS StepOS shell、DDR test、timer tick、两任务 round-robin scheduler

Labs 5-10 的系统演进和设计取舍见 docs/lab_5_to_lab_10_roadmap.md。

仓库结构

src/        RTL 源码,按 lab 分目录;src/common 放共享 UART 等模块
sim/        Vivado/XSim testbench
scripts/    Vivado batch 仿真、bitstream 构建和 JTAG 下载脚本
software/   boot image 生成器和教学软件镜像
constr/     Nexys4 DDR XDC 约束
coe/        早期实验使用的 COE 教学文件
docs/       Labs 5-10 文档、路线和设计说明
xpr/        早期实验 Vivado project 文件
tools/      预留/辅助工具目录

生成的 boot ROM 镜像(例如 src/lab_10_tiny_os/lab_10_boot.mem)和 listing(例如 software/tiny_os/gen_lab10_boot.lst)作为教学参考材料保留在仓库中;Vivado build/、.jou、.log、bitstream/checkpoint 等构建产物不应提交。

Vivado 环境

本机示例环境为 Vivado 2025.2:

set +u
unset ZSH_VERSION
source /mnt/data1/Xilinx/2025.2/Vivado/settings64.sh

如果安装路径不同,请调整 settings64.sh 路径。

Lab 10 快速测试

1. 生成 StepOS boot ROM

cd /mnt/data1/nexys4/step_into_mips
python3 software/tiny_os/gen_lab10_boot.py

输出:

src/lab_10_tiny_os/lab_10_boot.mem
software/tiny_os/gen_lab10_boot.lst

2. 行为级仿真

set +u
unset ZSH_VERSION
source /mnt/data1/Xilinx/2025.2/Vivado/settings64.sh
vivado -mode batch -source scripts/sim_lab10.tcl

成功标志:

Simulation succeeded: lab_10 StepOS shell and scheduler verified
LAB10_SIM_DONE

3. 构建 true-MIG bitstream

vivado -mode batch -source scripts/build_lab10.tcl

成功标志:

LAB10_BITSTREAM=/mnt/data1/nexys4/step_into_mips/build/lab10_top.bit

并且 routed timing report 中应有:

All user specified timing constraints are met.

4. 下载到 Nexys4 DDR

vivado -mode batch -source scripts/program_lab10.tcl

成功标志:

LAB10_PROGRAMMED=xc7a100t_0 BITSTREAM=/mnt/data1/nexys4/step_into_mips/build/lab10_top.bit

5. UART shell 测试

串口参数:

/dev/ttyUSB1
115200 8N1

推荐:

picocom -b 115200 --flow n --parity n --databits 8 /dev/ttyUSB1

如果串口打开时已经错过启动输出,保持串口打开后按 Nexys4 DDR 的 BTNC 中间按钮复位。期望启动输出:

step_into_mips lab10 tiny os
DDR CAL OK
DDR TEST OK
OS INIT OK
SCHED READY
step-os>

Shell 不回显输入字符;直接输入命令并按 Enter 即可:

help
ps
mem
led 1
run demo

期望响应:

help ps mem led run
task0 shell
task1 demo
DDR CAL OK
DDR TEST OK
OK
demo started

其它实验常用命令

Lab 4:

vivado -mode batch -source scripts/sim_lab4.tcl
vivado -mode batch -source scripts/build_lab4.tcl

Lab 5:

vivado -mode batch -source scripts/sim_lab5.tcl
vivado -mode batch -source scripts/build_lab5.tcl
vivado -mode batch -source scripts/program_lab5.tcl

Lab 6-9 在仿真/构建前可先重新生成 boot image:

python3 software/lab_6/gen_lab6_boot.py
python3 software/lab_7/gen_lab7_boot.py
python3 software/lab_8/gen_lab8_boot.py
python3 software/lab_9/gen_lab9_boot.py

然后运行对应脚本:

vivado -mode batch -source scripts/sim_labN.tcl
vivado -mode batch -source scripts/build_labN.tcl
vivado -mode batch -source scripts/program_labN.tcl

其中 N 为 6、7、8 或 9。

文档入口

预备知识和器件实现可参考原仓库分支:prepare。

附录文档可参考原仓库分支:appendix。

参考与致谢

本实验内容以《Digital Design and Computer Architecture》为基础,同时引入由龙芯中科提供的比赛资源作为参考,特此感谢。

About

一步一步写MIPS CPU

Topics

Resources

Stars

886 stars

Watchers

17 watching

Forks

Releases

Packages

Contributors

Languages