tags
摸鱼的笔记
课程
type
Post
status
Published
date
Mar 4, 2026
slug
micro
summary
category
摸鱼的笔记
password
icon
#1 ISA
指令也是作为数据存储的,二者有统一的地址索引方式,但二者是否要混合存储,可以视具体设计而定。存在一起可以提升存储空间的利用率,分开存则可以提升读取的速度(不会互相干扰)
CISC & RISC
CISC(x86)在高性能运算(如PC,Server)占主导地位;而RISC(ARM和RISC-V)在边端设备(如手机,IoT)占主导。二者之间也有互相借鉴,如x86会把复杂指令拆分成简单指令进行pipeline,从而提升主频;RISC-V可以自由扩展,纳入更多复杂的指令
nvidia的卡(H,A,B系列)基于ARM,而数据中心大多是x86,数据互联用PCIe(Intel的良好生态)。为了抢夺市场份额,nvidia推出NVlink和整机,其性能通常好于N卡+PCIe,但数据中心还是以买N卡居多。
RISC-V是load-store based,即操作的时候必须先把数据从内存提取到寄存器中,不能直接在内存中操作。与之相对地,x86允许直接对内存数据进行运算
RISC-V
指令固定为32bit。以下讨论64位系统,即数据/地址是64bit
- Registers
x0~x31 & PC(Program Counter,记录当前指令的地址)
x0是写死的“0”。就算出现在operands中也不会变,可以用来进行一些骚操作
x1(at)用来存储当前函数执行结束之后的返回地址。
寄存器分成两类:caller save 和 callee save。假设当前函数A调用了别的函数B,caller save意思是如果要保持该寄存器在B执行前后不变,那么需要A来负责保存(如先写到内存中);callee save的意思是A无需关心这个寄存器的值,B来保证调用前后它的值不会改变

在物理实现上,Regfile存的是32个64bit数据。有2个读取和1个写入口。
- Instructions

opcode表示指令的“大分类”,funct表示指令的“小分类”
rs1/rs2代表从regfile中读取的地址
rd代表结果写入regfile的地址
immediate表示即时数
大体上保证rs/rd/opcode位置不变,其他的可能拆得比较散
一般来说如果需要往指令里传入数据,不会直接把数据写在指令中(因为指令只有32位)。而会把数存在一个寄存器中,然后传入寄存器的地址(只要5位)。
但有些时候想往指令中直接传入一些比较小的数,多用于地址运算,这些数就是immediate。
- R format

- I format

“d”的意思是double word,即64位。如果是“lb”就是load byte,“lw”就是load word,在这些情况下,需要扩展高位使存入数据的值与预期一致。
immediate是基于rs1中数据的偏置offset,读取的内存地址由rs1中数据+immediate得到。
- S format

与I format基本同理,只是把rd变成了rs2
- SB format


以
beq rs1, rs2, L1为例,意为如果rs1==rs2,则跳转到L1。其中L1的地址为当前指令地址(PC)再加上immediate的偏置。电路实现上,正常情况下PC都需要+4(如果程序按顺序执行,一条指令是4个Byte),如果需要跳转则额外加一个偏置。
注意到immediate只传入了[12:1]而没有传入最低位,即指令跳转是以16bit为单位的(理论上可以不传入最低2位并以32bit为单位跳转)。这样一方面提升了offset的范围,另一方面可以在极端场景下满足16bit指令的要求。
- UJ format

jal x1, ProcAddr jump and link,PC=PC+ProcAddr,并将PC+4存入$x1中(作为子函数的返回地址)jalr x0, 0(x1) jump and link register,x0不会被改变,而PC=x1+0,即跳回到上一层函数。与jal的区别在于前者PC直接加offset,后者将PC变为$x1+offset。- U format

用来加载大的immediate

- 作者:Tianyao Xiao
- 链接:https://xty27.top/article/micro
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。




.webp?table=block&id=26f9eb83-9bee-8076-a3c5-ca0cac0be867&t=26f9eb83-9bee-8076-a3c5-ca0cac0be867)



.webp?table=block&id=25c9eb83-9bee-807c-9d8c-f33f89eaa541&t=25c9eb83-9bee-807c-9d8c-f33f89eaa541)