skip to content
[Jimjimu Notes]
Table of Contents

Course index · Previous: RISC-V Assembly · Next: Datapath Control

R-Format Layout

Pasted image 20260429141649 Pasted image 20260429141711
  • opcode:它决定了这条指令属于哪种基本格式(比如是 R型、I型还是 S型)。
  • funct3 (3 位功能码):在 opcode 划定的大范围下,进一步细分操作类型。比如,同样是 R 型算术指令,funct3 就可以用来区分这到底是加减法相关的指令,还是移位指令,或者是异或(XOR)这样的逻辑指令。
  • funct7 (7 位功能码):这是最精细的区分。当两个指令的 opcode 和 funct3 都完全一样时,就需要靠 funct7 来做最后的“拍板”。加法 (add) 和 减法 (sub)。对于硬件来说,加法和减法高度相似,它们的 opcode 相同,funct3 也相同。它们唯一的区别就在于 funct7 中有一个二进制位不同
Pasted image 20260429141836 Pasted image 20260429141851 Pasted image 20260429141910 Pasted image 20260429141922

I-Format Layout

Pasted image 20260429143036 Pasted image 20260429143249 Pasted image 20260429143315 Pasted image 20260429143327

Load Instructions are also I-Type

Pasted image 20260429144037 Pasted image 20260429144059 Pasted image 20260429144117

S-Format Layout

Pasted image 20260429144244 Pasted image 20260429144702 Pasted image 20260429144715

B-Format Layout

Pasted image 20260430084838

既然代码是连续存的,而且分支指令通常跳得不远,那么我们在指令里面,就不需要存一个完整的 32 位绝对内存地址(比如 0x80001234)。我们只需要存一个偏移量 (Offset) 就可以了(比如告诉 CPU:“以当前的 PC 地址为基准,往前跳 16 个字节”)。

Pasted image 20260430085154

目标地址 = 当前 PC 寄存器的值 + 偏移量 (Offset)。 在计算分支跳转时,我们不使用单字节作为单位

Pasted image 20260430085246 Pasted image 20260430085312 Pasted image 20260430085743

为了保证底层架构的一致性,RISC-V 官方做了一个硬性规定:无论你当前的处理器到底支不支持 16 位的压缩指令,所有分支跳转指令的偏移量,一律以 2 字节(半字)为基本单位进行缩放!

Pasted image 20260430085814 Pasted image 20260430085830 Pasted image 20260430085943 Pasted image 20260430090944
  • 上半部分 (Instruction encodings, inst[31:0]): 这是指令存放在内存中的原始样子。你可以看到 I、S、B 型指令中,立即数(imm)是被无情拆散、塞在各个角落的。
  • 下半部分 (32-bit immediates produced, imm[31:0]): 这是 CPU 内部的立即数生成器 (Immediate Generator) 电路的工作结果。它把上面那些散落的碎片抓出来,重新拼成一个标准的 32 位数字,准备送给 ALU(算术逻辑单元)去计算。
Pasted image 20260430090218 Pasted image 20260430090240

Long Immediates (U-Format)

Pasted image 20260430091608 Pasted image 20260430091640 Pasted image 20260430091924 Pasted image 20260430092329 Pasted image 20260430092407

J-Format

Pasted image 20260430092613

J 型指令为了跳得更远,把能挪用的空间全挪用了,腾出了足足 20 位的空间来存放立即数。 和上一页讲过的 B 型指令一样,为了“白嫖”一个比特位,J 型指令的偏移量也是以 2 字节为单位

Pasted image 20260430092749 Pasted image 20260430092828 Pasted image 20260430093002

Compiling, Assembling, Linking, and Loading

架构图位置

Pasted image 20260430093458

Synchronous Digital Systems

Swithes 开关

Pasted image 20260430100521 Pasted image 20260430100653

Transistors 晶体管

Pasted image 20260430100929 Pasted image 20260430101013

晶体管说明

Pasted image 20260430101225

上图实现了CMOS非门

Pasted image 20260430101639

Accumulator

Pasted image 20260430102722 Pasted image 20260430104043
  1. 电路根本不会等你输入下一个数,它在一微秒内可能已经自己绕着圈子加了几万次,导致输出信号剧烈波动、产生乱码
  2. 无法清零
Pasted image 20260430104154

Register Details Flip-flops

Pasted image 20260430104251 Pasted image 20260430104339 Pasted image 20260430104718

Accumulator (Revisited)

Pasted image 20260430104815

Course index · Previous: RISC-V Assembly · Next: Datapath Control

Backlinks