文章目录
B 站 - 外瑞罗格
1. 视频大纲
- CPU 设计: 取值 instruction fetch;译码 i decoder;执行(+访存)+回写
- 中断系统设计
- 以 CPU 为核心的 SOC 设计,ROM/RAM/Timer 设计
1.1 CPU 基本模块
1)ADD
时序: 与时钟有关
组合: 有输出,就有响应;延时取决于器件
ROM: 放指令;市面上,一般是按字节 byte (8-bit) 存放的;32 位 ADD,放 4 个字节 --> 大小端存储 --> 高字节,放低地址,是大端模式;反之,是小端模式。
寄存器组: 32-bit,x0 恒为 0
![三级流水线]
后续就是写代码;后面暂时不太有必要跟着敲;需要先搞明白原理。
B站 - Rong晔
1. RV32(64) + I \ E \ M \ F \ D \ A \ C \ Q
32-bit 或 64-bit 指令集
2. ADD rd, rs1, rs2
加 (Add). R-type, RV32I and RV64I.
x[rd] = x[rs1] + x[rs2]
把寄存器 x[rs2] 加到寄存器 x[rs1] 上,结果写入 x[rd]。忽略算术溢出。
压缩形式:c.add rd, rs2; c.mv rd,rs2
3. 六种指令类型
R I S B U J
4. 指令和数据分开存储:哈佛结构
5. 第一步设计
设计目标: 单周期、单指令,只做 ADD 指令
测试的 5 条指令: ADD / ADDI / BNE / JAL / LUI
主体模块: PC 寄存器、指令存储器、控制译码模块、立即数扩展模块、寄存器堆、算数逻辑运算单元、数据存储器;各个模块,根据逻辑依次完成自己的工作。
6. 取指令: 指令从 pc_reg 取到 指令存储器
6.1 pc_reg 的指令来自 mux_pc
7. 译码:输入一个 instruction,输出多个标志,如 branch, jump, reg_wen, reg1_raddr
case 语句,得到 很多输出。
7.1 将译码的结果进行处理,得到需要的数据: 寄存器值(寄存器堆)、立即数值(立即数扩展)
8. 执行:算什么?怎么算?
算什么: 两个寄存器、寄存器和立即数、4和PC,立即数和pc --》 mux_alu 数据选择模块
怎么算: ALU 模块