# simple_cpu **Repository Path**: gogolj/simple_cpu ## Basic Information - **Project Name**: simple_cpu - **Description**: 简单处理器的实现 - **Primary Language**: Verilog - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-12 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Simple CPU (YSYX Project) > 一生一芯 / One Student One Chip - RISC-V 简易 CPU 开发项目 ## 项目简介 本项目是「一生一芯」工程实践项目的代码仓库,实现一个基于 RISC-V 指令集的简易 CPU。 ## 项目目标 - ✅ 从零搭建极简 CPU 设计 - ✅ 遵循工业级 Verilog/SystemVerilog 编码规范(Linux 内核风格) - ✅ 模块化、可维护、可移植的代码设计 - ✅ 参考 Linux 内核的代码组织思路 ## 项目结构 ``` simple_cpu/ ├── src/ # 源代码目录 │ ├── core/ # CPU 核心(流水线阶段) │ │ ├── if_stage/ # 取指阶段 │ │ │ ├── if_top.v # IF 单元顶层 ✅ │ │ │ └── pc_unit/ # PC 单元 │ │ │ ├── pc_reg.v # PC 寄存器 ✅ │ │ │ ├── pc_adder.v # PC+4 加法器 ✅ │ │ │ └── pc_mux.v # PC 多路选择器 ✅ │ │ ├── id_stage/ # 译码阶段 │ │ │ ├── id_top.v # ID 单元顶层 ✅ │ │ │ ├── decoder/ # 译码器子模块 │ │ │ │ ├── inst_decoder.v # 指令译码器 ✅ │ │ │ │ └── imm_gen.v # 立即数生成器 ✅ │ │ │ └── gen_reg_unit/ # 寄存器文件单元 │ │ │ └── gen_reg_top.v # 寄存器文件 ✅ │ │ ├── ex_stage/ # 执行阶段 │ │ │ ├── ex_top.v # EX 单元顶层 ✅ │ │ │ └── alu/ # ALU 子模块 │ │ │ └── alu.v # 算术逻辑单元 ✅ │ │ ├── mem_stage/ # 访存阶段 │ │ ├── wb_stage/ # 写回阶段 │ │ ├── ctrl_unit/ # 控制单元 │ │ └── core_top.v # CPU 核心顶层 │ ├── cpu/ # CPU 模块(待迁移) │ │ ├── alu.v # 算术逻辑单元 │ │ ├── control_unit.v # 控制单元 │ │ └── ... │ ├── top/ # 系统顶层 │ ├── mem/ # 内存模块 │ ├── periph/ # 外设模块 │ ├── utils/ # 工具模块 │ └── top.v # 系统顶层模块 ├── include/ # 头文件目录 │ ├── defines.vh # 全局常量定义 │ ├── interfaces.vh # 阶段间接口定义 │ ├── instructions.vh # 指令编码定义 │ └── csr_defines.vh # CSR 寄存器定义 ├── sim/ # 仿真目录 ├── tests/ # 测试用例 ├── vclint/ # 代码规范检查工具 ├── docs/ # 设计文档 ├── PROJECT_MEMORY.md # 项目记忆(设计规范) ├── LICENSE # 许可证 └── README.md # 项目说明 ``` ## 当前进度 | 模块 | 状态 | 说明 | |------|------|------| | 寄存器文件 | ✅ 已实现 | Register File (`src/core/id_stage/gen_reg_unit/gen_reg_top.v`) | | PC 寄存器 | ✅ 已实现 | PC Register | | PC+4 加法器 | ✅ 已实现 | PC Adder | | PC 多路选择器 | ✅ 已实现 | PC MUX | | IF 取指单元 | ✅ 已实现 | Instruction Fetch Unit | | **ID 单元顶层** | ✅ 已实现 | IDUnit (`src/core/id_stage/id_top.v`) | | **指令译码器** | ✅ 已实现 | InstDecoder — 支持 8 条 RV32I 指令译码 | | **立即数生成器** | ✅ 已实现 | ImmGenerate — I/S/U 型立即数符号扩展 | | **算术逻辑单元** | ✅ 已实现 | ALU (`src/core/ex_stage/alu/alu.v`) — 支持 add/addi/lui 运算 | | **执行阶段** | ✅ 已实现 | ExUnit (`src/core/ex_stage/ex_top.v`) — 集成 ALU 和地址计算 | | 控制单元 | 📋 待实现 | Control Unit — 阶段间控制信号传递与对接 | | 内存模块 | 📋 待实现 | Memory | | 外设模块 | 📋 待实现 | Peripherals | ## 代码规范 本项目使用 VCLint 工具进行代码规范检查,遵循以下核心原则: ### 命名规范 - **模块名**:PascalCase(如 `PcRegister`, `IFUnit`, `InstDecoder`) - **信号名**:camelCase(如 `pcNext`, `regWriteEn`, `inst_Name`) - **参数/常量**:UPPER_CASE + 下划线(如 `DATA_WIDTH`) - **实例名**:`u_` 前缀 + 小写模块名(如 `u_pc_reg`, `u_inst_decoder`) - **文件名**:小写 + 下划线(如 `pc_reg.v`, `inst_decoder.v`) ### 注释风格(Linux 内核风格) - **文件头**:每个 `.v` 文件以多行注释开头,包含模块名、功能、作者、日期、版本 - **多行注释**:`/*` 单独一行,每行以 ` * ` 开头,`*/` 单独结束 - **行内注释**:`//` 写在代码行末尾,间隔至少 2 空格 ### 代码风格 - **缩进**:4 空格(禁止使用 Tab) - **空格**:运算符两侧各一个空格 - **时序逻辑**:使用非阻塞赋值 `<=` - **组合逻辑**:使用阻塞赋值 `=` 详细规范请参考 [VCLint 文档](vclint/README.md) 和 [PROJECT_MEMORY.md](PROJECT_MEMORY.md)。 ## 代码检查 ```bash # 使用 VCLint 检查代码规范 python vclint/vclint.py . # 查看当前 git 状态 git status ``` ## 架构说明 本项目采用分层架构设计: 1. **soc_top**:全芯片顶层,包含内存接口和外设 2. **core_top**:CPU 核心封装,对外只暴露总线接口 3. **流水线阶段**:if_stage、id_stage、ex_stage、mem_stage、wb_stage 4. **控制单元**:ctrl_unit 负责流水线控制和中断处理 ### 阶段间接口 ``` IfIdIntf ─→ IDUnit ├─ 字段拆分 (opcode, funct3, rd, rs1, rs2, ...) ├─ InstDecoder ─→ inst_Name, imm_Type, illegalInst └─ ImmGenerate ─→ imm_Num(符号扩展) IdExIntf ─→ ExUnit ├─ imm_Type : 立即数类型(决定 ALU 操作) ├─ imm_Num : 扩展后的立即数 ├─ rs1Data : 寄存器1数据 └─ rs2Data : 寄存器2数据 ExIdIntf ─→ IDUnit └─ aluResult : ALU 运算结果(写回寄存器) ``` ### 控制信号(ID 阶段生成) | 控制信号 | 作用 | 控制逻辑 | |----------|------|----------| | `regWriteEn` | 寄存器写使能 | S-type (sw/sb) → 0,其他 → 1 | | `memWriteEn` | 内存写使能 | S-type (sw/sb) → 1,其他 → 0 | | `memRead` | 内存读使能 | lw/lbu → 1,其他 → 0 | | `aluSrc` | ALU 源选择 | R-type (add) → 0,其他 → 1 | | `jalrEn` | JALR 跳转使能 | jalr → 1,其他 → 0 | 详细设计规范请参考 [PROJECT_MEMORY.md](PROJECT_MEMORY.md)。 ## 学习笔记 项目学习笔记存储在 **Obsidian Vault** 中,路径: `E:\OB\Obsidian Vault\个人成长\技术\YSYX` 采用 **PARA 笔记法** 组织,包含: - **Projects**:当前项目笔记 - **Areas**:领域知识(Verilog、RISC-V、FPGA) - **Resources**:资源库(书籍、论文、模板) - **Archive**:归档内容 > ⚠️ 笔记目录为个人学习空间,AI 不会主动读取或修改,仅在用户明确要求时操作。 ## 参与贡献 1. Fork 本仓库 2. 新建 `Feat_xxx` 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 MIT License