指令集是计算机中的一个“抽象层级”。什么是抽象层级?
| Level | Representation |
|---|---|
| HLL | if (a < b) |
| Compiler | |
| ASM | blt x1, x2, L1 |
| Assembler | |
| Bin | 1100011... |
| MOS | |
| HW | High/Low Level |
编译器和汇编器的操作就是把我们的意图(计算机无法理解)转换成对计算机有意义的电信号。那,怎样的电信号才是有意义的呢?
指令集就是有意义的电信号的合集,是软硬件之间的契约,其中每个指令对应着一个电路操作——你给电路输入一些电信号,它就会返回一些电信号——意味着硬件电路是根据指令集来设计的。
这个Project,这在真实工业界属于哪个环节?
| 阶段 | 核心任务 | 涉及角色 |
|---|---|---|
| 0. ISA Definition | 定义契约 (RISC-V spec)。手册规定 ADD 的行为,但不规定电路怎么搭。 |
Architect |
| 1. Microarchitecture | 设计蓝图。决定用 5 级流水线还是乱序执行?(Project 核心) | Logic Designer |
| 2. RTL Design | 写代码 (Verilog)。用 HDL 描述行为 (Logisim 是图形化 RTL)。 | Logic Designer |
| 3. Physical Design | 物理实现。综合 (Synthesis) |
PD Engineer |
| 4. Fab | 制造。台积电/中芯国际光刻。 | Foundry |
这一部分相信大家主要在正课上进行了学习。
指令集可以被分为两类:
RISC-V 就是是一个精简指令集!
值得注意的是,指令集都是人为规定的!

指令集定义了硬件支持的基本操作,这包括:
RISC-V 的 ADD 指令(add rd, rs1, rs2)定义为两个寄存器(rs1, rs2)相加并将结果存储在目标寄存器(rd)中。硬件通过设计算术逻辑单元(ALU)来实现加法操作,同时更新目标寄存器的值。
为了实现简单的加法运算,我们至少需要设计寄存器、ALU等模块。
接下来,让我们一起开始造轮子吧!



组合逻辑 (Combinational Logic):
时序逻辑 (Sequential Logic):
| 访问时间 | 存储元件 | 容量 |
|---|---|---|
| 1ns | Register | <1KB |
| 2ns | Cache (L1-L4) | 32MB |
| 10ns | Main Memory | 8GB |
| 10ms | Disk | 1TB |
现代计算机中存储部件的对比。Project 中我们主要设计最顶层的 Register。
定义:组合逻辑电路(Combinational Logic Circuits)是没有存储元件的电路,其输出仅依赖当前输入。
特点:
Decoder

Full adder

ALU

即时性:输入到输出往往只需要一个很短的延时
定义:不仅依赖当前输入,还依赖于以前的输入和状态,因为它们包含存储元件,如触发器(Flip-Flops)。
特点:
有记忆功能:能够记忆以前的状态,输出不仅取决于当前输入,还取决于电路的历史状态。
时钟信号:大多数时序逻辑电路都依赖时钟信号进行同步操作。时钟信号帮助协调电路中各部分的状态变化。
实例:
Latch(锁存器) - 电平触发
D Flip-Flop(触发器)- 电路模型结构:Master-Slave (主从结构)。两个 Latch 串联。
行为:像两道气闸门。
意义:让状态只有在时钟上升沿才可以被改变,实现了离散时间的同步。

D Flip-Flop(触发器)- 抽象表现电路符号


Logisim中的位置

真值表:
| CLK | |||
|---|---|---|---|
| 0 | 0 | 1 | |
| 1 | 1 | 0 | |
| 0 | |||
| 1 |
D Flip-Flop(触发器)- 抽象表现真值表:
| CLK | |||
|---|---|---|---|
| 0 | 0 | 1 | |
| 1 | 1 | 0 | |
| 0 | |||
| 1 |






依赖于Master和Slave触发器的导通互斥性


A register file is an array of processor registers in a central processing unit (CPU). The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file (PRF) within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution.
What's this?
可以注意到,“寄存器堆”其实就是一组被有序排列并编号的寄存器。
在RISC-V中,寄存器堆的大小一般为32个寄存器,分别编号为x0-x31。
在RISC-V等Load-Store Architecture,ALU无法直接处理RAM中的数据,必须将Register File作为中转站.
虽然ALU的主要数据来源为Register,但也可以接受来自于Program Counter的地址和来自Instruction Decoder的立即数(Immediate Number)等位置的数据作为输入.
端口定义 (Ports)
rs1, rs2):
ADD x3, x1, x2。rd):
RegWrite (WE) 信号控制。
如何从 32 个寄存器中挑出 1 个?
逻辑公式:
注意:因为有两个读端口,你需要两个独立的 MUX!

如何只写入目标寄存器?
逻辑推导:
RegWrite是全局写使能信号x0 处理:确保 x0 的 WE 恒为 0,或输入恒接地。

Setup & Hold Time理想模型认为状态瞬间改变,但物理世界存在延迟。这是Master-Slave结构带来的物理代价。
Setup Time (
Hold Time (
Takeaway: 时钟频率不能无限高,因为数据必须要在 Setup Time 之前跑完组合逻辑电路。
D 触发器真值表 (Edge Triggered):
| CLK | D | Q (Next State) |
|---|---|---|
| 0 | 0 (Sampled) | |
| 1 | 1 (Sampled) | |
| 0/1 | X | Q (Hold) |
图示芯片 (74HC175) 内部包含 4 个 D-FF,共用 CLK 和 Clear 信号。这其实就是一个 4-bit Register。
Logisim 中的 Register 本质是 Flip-Flop 的阵列。



关键设置:
调试技巧:
Reset 信号通常是异步的。Try Register:

ROM (Read-Only Memory)
Try ROM:

RAM (Random Access Memory)
Try RAM:
The Heartbeat of CPU
PC 本质上只是一个 32-bit Register,但它决定了 CPU 的控制流。
状态转移方程 (State Transition):
Why +4? RISC-V 指令长 32-bit (4 Bytes),内存按字节编址。
构建一个mini PC:
D。Reset (通常初始化为 0x0)。Critical Thinking:
如果没有 Clock 控制 Register (例如误用了 Latch),这个电路会发生什么?
下次 Tutorial,我们将开展:
Homework:
- 复习今天的时序逻辑
- Build A Program Counter
- 预习 RISC-V 基础指令格式。
@ Presented by Qihang Yan
@ ShanghaiTech University
1. **High-Level (C/C++)**: 逻辑表达 (`a = b + c`)。 1. **Compiler (gcc)**: **架构映射**。决定变量放在哪个寄存器,翻译为汇编。 2. **Assembler**: **符号翻译**。将 `ADD` 翻译为 `0110011` (机器码)。 3. **Hardware**: 机器码控制电路通断。 **指令集 (ISA)** 就是软硬件之间的**契约**。