当人们在谈论RISC-V的时候,实际在谈些什么?本书尝试告诉您答案。
本书计划采用众包的方式完成,欢迎RISC-V的爱好者贡献自己的力量,以推动RISC-V在中国的普及,同时共同学习进步。
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。
待讨论大纲(以下是囿于我的见识列出的大纲草稿,有很多不完善地方,大家多讨论):
ISA的产生
区分计算机体系结构和微结构
指令级架构(instruction set architecture, ISA)
处理器微结构
体系结构与微结构的互相影响
介绍从最开始的晶体管,到CMOS,到基于标准单元的版定制流程,自动综合和布局布线,物理综合,仿真,前仿和后仿,LVS和formal verification,最终到SystemVerilog的verification特性和HLS的出现。这张的目的是给不理解硬件设计的读者入个门。后面讲到Rocket的某些硬件优化的时候会有好处。
这有三个方面:开源软件,发生的原因和意义,其优势和现在的广泛使用(Linux,GNU GCC等等) 现存的问题:License的斗争,开发缓慢的问题,分支严重的问题,patent的问题,难以商业化不挣钱的问题。
开源硬件,早已出现,OpenRISC和OpenCore社区,但是为何不太成功:开发人员少群众基础不够,项目多数未完成,完成的也缺少验证,难以流片验证,缺少开源工具链,模拟设计难以开源,开源设计难以流片的各种实际因素。当然也说现在已有的成果,开源模拟器,简单的开源逻辑综合器,开源的硬件设计等等。
指令及开源:指令集本身对性能影响其实不大,但是一个指令集所附带的生态环境非常重要。选用一个指令集其实是选择了一个生态环境,为这个生态环境付费。开源指令集的主要目的其实是提供一个开源的生态环境,包括ISA, 编译器,操作系统,软件库等等。
这一章就讲RISC-V指令集
介绍UCB, MIPS, RISC-V的出现,开源,基金会的建立,它的目的和意义。
wsong83:
- 关于UCB的历史,可以看看RISC-V Geneology
介绍RV64I和RV32I的基本情况,重点介绍设计原理,可扩展的方式,面向硬件设计的编码方式,面向简单流水线设计的指令选择(不用条件执行,不用多周期指令)。
思考,拿RV64I和AArch64的编码来比一比,应该能体现RV64I的编码优势。
为何选择使用CSR,CSR的设计细节,不同特权级的定义,特权级之间的跳转,delegation的使用,异常处理模型。(这里可以说的惊人细节太多了)
介绍什么是内存模型,virtual memory的设计,和RISC-V的内存模型(这一部分快定义好了)
为什要有压缩指令及,怎么设计的,性能数据。结合压缩指令及讨论instruction fusion。简单说说压缩指令对硬件的影响,比如指令地址unalign,fetch级的动态取指速度,节省I$等等。
AMO和LR/SC的设计意图(原子操作和关键区支持)。M/D/F/E等等已经可以用的扩展,和计划中的扩展。
Spike是RISC-V的instruction set simulator (ISS),也是独立于实现的标准参照。 应该讲一讲Spike的使用和其背后的原理。
介绍围绕RISC-V开发的编译器、移植的操作系统等软件的情况。
概述基于RISC-V指令集的处理器、SoC,并进行简单地汇总统计。
简单介绍Rocket-chip最初设计的由来,几次流片经历,作为RV64G的主要硬件实现,最终作为freechipsproject脱离UCB。 此处简单提及Rocket和Boom是Rocket-chip支持的两种处理器实现,Freedom和lowRISC是基于Rocket-chip的两个SoC扩展。
讲流片经历的时候,讲事件,不具体讲性能结果。留到第四章。
简单说明Chisel和FIRRTL的功能。简单介绍Chisel相对SystemVerilog等HDL的优势,同时区分Chisel和HLS。 举简单例子来说明:
画几个结构图来形式化的表示Rocket-chip的内部链接。同时叙述Rocket-chip的可配置功能。 同时在这里介绍devicetree的自动生成。
TileLink总线的channel名称和功能,支持的报文类型和传输协议等等。
介绍Rocket-Chip采用的缓存一致性策略、片上互联总线的结构图、多核结构等。
这里主要是讲仿真的基本方法和Rocket-chip/Chisel提供的几种测试方法:require check, assertion, bus-monitor, unitest, groundtest, isa regression. 这一章并不具体讲测试和仿真的基本步骤。
整体性的介绍,结构框图,可配置模块(scratch-pad, blocking L1, non-blocking L1, RoCC, FPU)。 已流片的结果比较。
5级ALU流水线结构,多周期整数乘法器,I$和D$的连接,CSR的连接,forwarding network。
指令缓存的结构,BHT, BTB, RAS的结构和运行时学习,branch/jump指令的执行,以及由于分支预测错误造成的流水线重置。
介绍非阻塞数据缓存的结构,cache hit的基本流水线,miss时的data fetch,tlb miss造成缺页,地址空间检查(强制PMA),parity检查与数据修复,支持coherence。
在非阻塞数据缓存的基础上,通过裁剪获得阻塞缓存和scratch pad。
还不确定用cache来做scratch pad(pin cache line)的实现在L1还是L2。如果在L1可以尝试说一说。不过这个点的水比较深。
介绍RISC-V支持的分页式内存、页表结构、TLB设计、硬件页表查询PTW
分析RoCC接口,并可以通过仿真实验说明RoCC如何使用
包括特点(比如:乱序、超标量)、性能参数、结构框图、接口图等,src/main/scala目录下的文件的基本作用。
以图示的方式分析
以图示的方式分析
以图示的方式分析
以图示的方式分析
介绍SiFive公司及其Freedom系列的基本情况
介绍Freedom E310的性能参数、结构框图、接口图、各个模块的作用、地址空间分配、启动顺序等
仿真步骤,实验环境搭建,实验步骤(包括下载到开发板的步骤),测试例程分析(以SiFive提供的Eclipse开发环境中的自带测试例程进行分析,主要是分析启动过程的代码,这样也更好地帮助读者熟悉RISC-V的指令的用法)
首先是介绍如果调试,给出步骤,做实验,给出实验截图。然后,分析调试的原理,包括debug rom的内容、openocd的设置及基本工作原理、JTAG总线的知识、Freedom E310对于调试指令的处理,并进一步分析step、break、continue等调试指令的实现原理。
介绍如何使FreeRTOS在Freedom E310上的运行
我先大概列一下目录,宋同学修改啊
包括LowRISC的产生原因、发展历史、相比Rocket的主要改进点、结构图。
包括主要思路、实现效果、最好能结合试验演示效果等
包括主要思路、实现效果、使用测试等
包括PULP与PULPino的关系、PULPino的结构组成、RI5CY、流片的性能 PULP低功耗的原因,功耗对比(在论文中有对比),以及可以工作在多种电压情况下
介绍什么是向量运算、RI5CY的向量运算指令、优势特点、实现等
介绍硬件循环的原理、优势、实现等
不知道准确的翻译是什么
官网上只是在zedboard上做了测试,而且是需要ARM配合,这里计划使用Arty平台测试,与Freedom E310的测试平台是同一个,移植后,可以独立运行,不需要ARM配合。同时,在移植过程中,就顺便讲解关键脚本、boot code、测试程序等。此外,还介绍调试过程,这个也是官网没有的。
介绍浮点运算的基本情况,便于理解后文
介绍FPU在Rocket-Chip的可以实现的功能、对外接口、在流水线的位置、对流水线的影响、浮点指令的执行过程等。
leishangwen: 这个先放在这里吧,理由有两个:1、还不确定如果单独作为一章,那么讲的内容有哪些,能否独立成完整的一章;2、单独作为一章放在Rocket、BOOM两章的后面,有点破坏整本书的目录结构,有点突兀,如果确实要单独成章,建议放在全书的最后。