cnrv / riscv-soc-book

关于RISC-V你所需要知道的一切
https://cnrv.github.io/riscv-soc-book/
542 stars 66 forks source link

关于RISC-V你所需要知道的一切

当人们在谈论RISC-V的时候,实际在谈些什么?本书尝试告诉您答案。

本书计划采用众包的方式完成,欢迎RISC-V的爱好者贡献自己的力量,以推动RISC-V在中国的普及,同时共同学习进步。

by-nc-sa-3.0-cn
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。

待讨论大纲(以下是囿于我的见识列出的大纲草稿,有很多不完善地方,大家多讨论):

第一章 RISC-V产生的时代背景

1 计算机体系结构和处理器微结构

2 现有指令集 (leishangwen)

3 硬件开发的变迁 (wsong83)

介绍从最开始的晶体管,到CMOS,到基于标准单元的版定制流程,自动综合和布局布线,物理综合,仿真,前仿和后仿,LVS和formal verification,最终到SystemVerilog的verification特性和HLS的出现。这张的目的是给不理解硬件设计的读者入个门。后面讲到Rocket的某些硬件优化的时候会有好处。

4 开源运动

这有三个方面:开源软件,发生的原因和意义,其优势和现在的广泛使用(Linux,GNU GCC等等) 现存的问题:License的斗争,开发缓慢的问题,分支严重的问题,patent的问题,难以商业化不挣钱的问题。

开源硬件,早已出现,OpenRISC和OpenCore社区,但是为何不太成功:开发人员少群众基础不够,项目多数未完成,完成的也缺少验证,难以流片验证,缺少开源工具链,模拟设计难以开源,开源设计难以流片的各种实际因素。当然也说现在已有的成果,开源模拟器,简单的开源逻辑综合器,开源的硬件设计等等。

指令及开源:指令集本身对性能影响其实不大,但是一个指令集所附带的生态环境非常重要。选用一个指令集其实是选择了一个生态环境,为这个生态环境付费。开源指令集的主要目的其实是提供一个开源的生态环境,包括ISA, 编译器,操作系统,软件库等等。

第二章 RISC-V

这一章就讲RISC-V指令集

1 RISC-V的历史

介绍UCB, MIPS, RISC-V的出现,开源,基金会的建立,它的目的和意义。

wsong83:

2 RISC-V的基本设计原理

介绍RV64I和RV32I的基本情况,重点介绍设计原理,可扩展的方式,面向硬件设计的编码方式,面向简单流水线设计的指令选择(不用条件执行,不用多周期指令)。

思考,拿RV64I和AArch64的编码来比一比,应该能体现RV64I的编码优势。

3 RISC-V特权指令设计

为何选择使用CSR,CSR的设计细节,不同特权级的定义,特权级之间的跳转,delegation的使用,异常处理模型。(这里可以说的惊人细节太多了)

4 内存模型

介绍什么是内存模型,virtual memory的设计,和RISC-V的内存模型(这一部分快定义好了)

5 RISC-V的压缩指令

为什要有压缩指令及,怎么设计的,性能数据。结合压缩指令及讨论instruction fusion。简单说说压缩指令对硬件的影响,比如指令地址unalign,fetch级的动态取指速度,节省I$等等。

6 RISC-V的扩展指令集

AMO和LR/SC的设计意图(原子操作和关键区支持)。M/D/F/E等等已经可以用的扩展,和计划中的扩展。

7 Spike模拟器

Spike是RISC-V的instruction set simulator (ISS),也是独立于实现的标准参照。 应该讲一讲Spike的使用和其背后的原理。

8 RISC-V的软件生态

介绍围绕RISC-V开发的编译器、移植的操作系统等软件的情况。

9 RISC-V在产业界与学术界的现状(leishangwen)

概述基于RISC-V指令集的处理器、SoC,并进行简单地汇总统计。

第三章 Rocket-Chip概述

简单介绍Rocket-chip最初设计的由来,几次流片经历,作为RV64G的主要硬件实现,最终作为freechipsproject脱离UCB。 此处简单提及Rocket和Boom是Rocket-chip支持的两种处理器实现,Freedom和lowRISC是基于Rocket-chip的两个SoC扩展。

讲流片经历的时候,讲事件,不具体讲性能结果。留到第四章。

1 Chisel和FIRRTL

简单说明Chisel和FIRRTL的功能。简单介绍Chisel相对SystemVerilog等HDL的优势,同时区分Chisel和HLS。 举简单例子来说明:

2 Rocket-Chip的基本结构

画几个结构图来形式化的表示Rocket-chip的内部链接。同时叙述Rocket-chip的可配置功能。 同时在这里介绍devicetree的自动生成。

3. TileLink片上总线

TileLink总线的channel名称和功能,支持的报文类型和传输协议等等。

4. 缓存一致性与片上互联总线

介绍Rocket-Chip采用的缓存一致性策略、片上互联总线的结构图、多核结构等。

5. Rocket-chip的仿真和测试

这里主要是讲仿真的基本方法和Rocket-chip/Chisel提供的几种测试方法:require check, assertion, bus-monitor, unitest, groundtest, isa regression. 这一章并不具体讲测试和仿真的基本步骤。

第四章 Rocket处理器

1. Rocket处理器介绍

整体性的介绍,结构框图,可配置模块(scratch-pad, blocking L1, non-blocking L1, RoCC, FPU)。 已流片的结果比较。

2. Rocket的基本流水线

5级ALU流水线结构,多周期整数乘法器,I$和D$的连接,CSR的连接,forwarding network。

3. 指令缓存以及分支预测

指令缓存的结构,BHT, BTB, RAS的结构和运行时学习,branch/jump指令的执行,以及由于分支预测错误造成的流水线重置。

4. 数据缓存

介绍非阻塞数据缓存的结构,cache hit的基本流水线,miss时的data fetch,tlb miss造成缺页,地址空间检查(强制PMA),parity检查与数据修复,支持coherence。

在非阻塞数据缓存的基础上,通过裁剪获得阻塞缓存和scratch pad。

还不确定用cache来做scratch pad(pin cache line)的实现在L1还是L2。如果在L1可以尝试说一说。不过这个点的水比较深。

5. 虚拟内存支持

介绍RISC-V支持的分页式内存、页表结构、TLB设计、硬件页表查询PTW

6. Rocket处理器RoCC设计分析(leishangwen)

分析RoCC接口,并可以通过仿真实验说明RoCC如何使用

第五章 BOOM处理器

1. BOOM处理器介绍

包括特点(比如:乱序、超标量)、性能参数、结构框图、接口图等,src/main/scala目录下的文件的基本作用。

2. 推测发射机制

以图示的方式分析

3. 寄存器重命名

以图示的方式分析

4. 数据存储

以图示的方式分析

5. 指令提交

以图示的方式分析

第六章 SiFive公司的Freedom系列

1. Freedom系列简介(leishangwen)

介绍SiFive公司及其Freedom系列的基本情况

2. Freedom E310介绍

介绍Freedom E310的性能参数、结构框图、接口图、各个模块的作用、地址空间分配、启动顺序等

3. 仿真实验

仿真步骤,实验环境搭建,实验步骤(包括下载到开发板的步骤),测试例程分析(以SiFive提供的Eclipse开发环境中的自带测试例程进行分析,主要是分析启动过程的代码,这样也更好地帮助读者熟悉RISC-V的指令的用法)

4. 调试过程及原理分析(leishangwen)

首先是介绍如果调试,给出步骤,做实验,给出实验截图。然后,分析调试的原理,包括debug rom的内容、openocd的设置及基本工作原理、JTAG总线的知识、Freedom E310对于调试指令的处理,并进一步分析step、break、continue等调试指令的实现原理。

5. 移植运行FreeRTOS

介绍如何使FreeRTOS在Freedom E310上的运行

第七章 LowRISC (wsong83)

我先大概列一下目录,宋同学修改啊

1. LowRISC介绍

包括LowRISC的产生原因、发展历史、相比Rocket的主要改进点、结构图。

2. tagged memory

包括主要思路、实现效果、最好能结合试验演示效果等

3. trace debugger

包括主要思路、实现效果、使用测试等

第八章 PULPino

1. PULPino介绍

包括PULP与PULPino的关系、PULPino的结构组成、RI5CY、流片的性能 PULP低功耗的原因,功耗对比(在论文中有对比),以及可以工作在多种电压情况下

2. 向量算术指令

介绍什么是向量运算、RI5CY的向量运算指令、优势特点、实现等

3. 硬件循环

介绍硬件循环的原理、优势、实现等

4. post increment load/store指令

不知道准确的翻译是什么

5. 扩展算术指令

6. 基于Arty平台的移植试验(leishangwen)

官网上只是在zedboard上做了测试,而且是需要ARM配合,这里计划使用Arty平台测试,与Freedom E310的测试平台是同一个,移植后,可以独立运行,不需要ARM配合。同时,在移植过程中,就顺便讲解关键脚本、boot code、测试程序等。此外,还介绍调试过程,这个也是官网没有的。

第九章 浮点运算

1. 浮点标准

介绍浮点运算的基本情况,便于理解后文

2. RISC-V的浮点指令扩展

3. Rocket-Chip中的FPU

3.1 基本情况

介绍FPU在Rocket-Chip的可以实现的功能、对外接口、在流水线的位置、对流水线的影响、浮点指令的执行过程等。

3.2 浮点加法模块设计

3.3 浮点乘法模块设计

3.4 浮点除法、平方根模块设计

4. FPU验证

4.1 基于组合随机激励测试的验证

4.2 基于形式化工具的验证

leishangwen: 这个先放在这里吧,理由有两个:1、还不确定如果单独作为一章,那么讲的内容有哪些,能否独立成完整的一章;2、单独作为一章放在Rocket、BOOM两章的后面,有点破坏整本书的目录结构,有点突兀,如果确实要单独成章,建议放在全书的最后。