SI100B EE Part Project · Tutorial 1

Sequence Logic & Introduction to RISC-V

@Yunxiang He, heyx1@shanghaitech.edu.cn
@Quanyu Chen, chenqy2022@shanghaitech.edu.cn
@Yongzhi Zhang, zhangyz2022@shanghaitech.edu.cn
@Chaofan Li, lichf1@shanghaitech.edu.cn
@Qihan Ding, dingqh@shanghaitech.edu.cn

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024
Contents

Contents

0. About Project

0. About Project

  1. 关于具体的 Project 内容,我们会在这周内发布一个完整的文档。
  2. 关于 Online Judge:我们只对部分组件提出测试要求,相应测试用例的通过与否会计入成绩。
  3. 关于 Project Report:这部分非常重要!
    1. 我们并不会要求你的 CPU 的行为和我们完成的 Reference 完全一致。
    2. 因此,在 Report 中,你需要详细展示你设计的测试用例,以证明你的设计是正确的。
    3. 对于一个信息学院的学生来说,这是一个非常重要的素质。
  4. 虽然只需要在最后提交一份 Report,我们每周都会布置一些建议的任务,以帮助你们推进工作。
SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

1. Background

1. Background

指令集是计算机中的一个“抽象层级”。什么是抽象层级?

  • 原始电平计算机只认识电信号(“低电平”和“高电平”)
  • 机器码:把低电平和高电平抽象成 0 和 1 的数字——机器码。
  • 汇编语言:把机器码抽象成一些字母,例如LDR(读),STR(写),ADD(加)。汇编器可以把这些字母转换成机器码。
  • 高级语言:把汇编语言抽象成更多的字母,例如C语言,Python等。编译器可以把这些字母转换成汇编语言。

编译器和汇编器的操作就是把我们的意图(计算机无法理解)转换成对计算机有意义的电信号。那,怎样的电信号才是有意义的呢?

指令集就是那些有意义的电信号的合集,其中每个指令对应着一个电路——你给电路输入一些电信号,它就会返回一些电信号——意味着硬件电路是根据指令集来设计的。

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

1. Background

What is RISC-V?

指令集可以被分为两类:

  • 复杂指令集CISC(Complex Instruction Set Computer):一条指令就可以实现一个复杂的功能
  • 精简指令集RISC(Reduced Instruction Set Computing):RISC中的一条指令大多是“基本指令”,它是通过多条指令组合完成一个复杂的功能

RISC-V 就是是一个精简指令集!

值得注意的是,指令集都是人为规定的!

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

1. Background

From Instruction Set to Hardware

指令集定义了硬件支持的基本操作,这包括:

  1. 算术运算(加减乘除)
  2. 逻辑运算(与或非)
  3. 数据操作(加载、存储)
  4. 控制流(分支、跳转)。
  • 因此,指令集本身并不先于电路产生,它首先需要寄存器、缓存、执行单元等硬件资源的支持。
  • 相比x86,RISC-V指令简单、长度固定,硬件设计更简洁,流水线性能更高。

Example:

RISC-V 的 ADD 指令定义为两个寄存器(rs1, rs2)相加并将结果存储在目标寄存器(rd)中。硬件通过设计算术逻辑单元(ALU)来实现加法操作,同时更新目标寄存器的值。

为了实现简单的加法运算,我们至少需要设计寄存器、ALU等模块。

接下来,让我们一起开始造轮子吧!

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

2. Sequential logic

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Sequential logic 时序逻辑

在传统数字电路课程中,学生将在“时序逻辑”这一章节学习到寄存器等相关元件。我们不会介绍时序逻辑相关的繁琐知识,而是通过Top Level的模块讲解,力求让每一位选择EE Project的同学建立对计算机组成的基本认知。

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Regiser(寄存器)

半导体存储电路中使用的存储单元可以分为静态存储单元和动态存储单元两大类。静态存储单元由门电路连接而成,其中就包括寄存器和触发器。只要不切断供电电源,静态存储单元的状态就能一直保持下去。动态存储单元则利用电容的电荷存储效应来存储数据,我们暂时不做介绍。

存储器的种类虽然很多,但它们的基本结构形式都是由存储矩阵和读写控制电路两部分组成的。跟据工作方式不同,可以将存储器分为随机存储器(RAM)和只读存储器(ROM),随机存储器又分为静态随机存储器(SRAM),和动态随机存储器(DRAM)。

现代计算机中具有存储功能的部件比对

访问时间 存储元件 容量
1ns Register寄存器 <1KB
2ns Cache高速缓存(L1-L4) 32KB-256MB
10ns 主存 1-8GB
10ms 磁盘 1-4TB
SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Regiser(寄存器)

寄存器由一组触发器组成,每个触发器的输入和输出都由引出端,可以直接和周围电路连接,快速地进行数据交换。由n个触发器组成的寄存器可以存储一组n位的二进制数据。

#c

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Flip-Flop(触发器)

D触发器(D Flip-Flop) 是一种边沿触发(一般为上升沿) 的存储单元,以下是 D 触发器的基本真值表:

时钟 (CLK) D(输入,也就是当前状态) Q(输出,也就是下一个状态)
↑(上升沿) 0 0
↑(上升沿) 1 1
0 或 1(非边沿) x(不关心) 保持原状态

你只需掌握:

  1. 时钟信号 “向上变化” 时:输出 直接更新为输入 的值。
  2. 时钟信号处于 “稳定的高电平或低电平” 时:输出 保持之前的状态,不受输入 的变化影响。
SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Latch(锁存器)

锁存器是触发器的基础模块,用于存储 1 位二进制信息。与触发器,边沿触发它是一种电平触发器,即输出状态随输入变化,在输入信号有效电平时持续更新,并在无效电平时保持不变。为避免问题复杂化,对于锁存器,你无需了解更多。

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

Regiser(寄存器)

以德州仪器74HC175为例,看看寄存器内部是如何构成的:

  1. 当时钟信号从低到高发生跳变(上升沿)时,每个触发器将对应的数据输入 锁存到其输出 。输出状态 和 分别为 和 。
  2. 在时钟信号稳定时(非上升沿),输出 保持之前的状态,不受数据输入 的变化影响。

#c

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

2. Sequential logic

回到我们的问题

RISC-V 的 ADD 指令定义为两个寄存器(rs1, rs2)相加并将结果存储在目标寄存器(rd)中。硬件通过设计算术逻辑单元(ALU)来实现加法操作,同时更新目标寄存器的值。

现在我们能够粗略回答指令(add rd rs1 rs2)在硬件上是如何实现的:

  • 首先,从存储这条指令的指令内存中取出 RISC-V 的 R-Type 指令,经过 Decoder 译码,获得信息:
    1. 指令的操作类型:ADD
    2. 存放两个加数信息的寄存器地址:rs1、rs2
    3. 存放结果的寄存器地址:rd
  • 接着,
    1. 操作类型 ADD、寄存器堆中 rs1、rs2 存放的信息被送入 ALU 进行计算
    2. 计算结果被送进寄存器堆中的 rd 进行存储。
  • 计算完成!
SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

3. Memory Component in Logisim

3. Memory Component in Logisim

3.1. Register

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

3. Memory Component in Logisim

3.2. ROM

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

3. Memory Component in Logisim

3.3. RAM

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

4. Register Files

4. Register Files

What's a Register File? ——Wiki

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 the f**k is this?

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

4. Register Files

Register vs. Register File

  • Register:CPU在进行运行时,往往需要一部分存储空间暂时(临时)存储在运算过程中产生的中间数据,而这个存储空间往往就是寄存器。
  • Registers File:寄存器堆是由一组寄存器组成的二维阵列。为方便访问其中的寄存器,对寄存器堆中的寄存器进行统一编码,称为寄存器编号或者寄存器地址,每个寄存器均通过制定的寄存器编号进行访问。

可以注意到,“寄存器堆”其实就是一组被有序排列并编号的寄存器。

在RISC-V中,寄存器堆的大小一般为32个寄存器,分别编号为x0-x31。

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

4. Register Files

Register Files's I/O

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

4. Register Files

Register Files's Read

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024

4. Register Files

Register Files's Write

#c

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024
SI100B EE Part Project · Tutorial 1

@ Presented by Yunxiang He
@ ShanghaiTech University

SI100B EE Part Project:miniCPU Tutorial 1:Sequence Logic & Introduction to RISC-V Dec.11 2024