目录
1.RISC-V的概念
2.RISC-V的易错点
3.SoC(片上系统)
4.内核
5.协处理器
6.敏捷开发
6.1 敏捷开发的概念
6.2 敏捷开发模式的分类
7.MMIO
7.1 MMIO的概念
7.2 Port I/O和MMIO的主要区别
8.Verilog HDL
9.Chisel
10.RTL生成器
10.1 RTL生成器的概念
10.2 RTL级的基本要素和设计步骤
11.Chipyard框架
12.Gemmini
13.Rocket Core
RISC-V(读作“RISC-FIVE”)是基于精简指令集计算(RISC)原理(原则)建立的开放(开源)指令集架构(ISA),V表示为第五代RISC(精简指令集计算机),表示此前已经四代RISC处理器原型芯片。每一代RISC处理器都是在同一人带领下完成,那就是加州大学伯克利分校的David A. Patterson教授。与大多数ISA相反,RISC-V ISA可以免费地用于所有希望的设备中,允许任何人设计、制造和销售RISC-V芯片和软件。它虽然不是第一个开源的的指令集(ISA),但它很重要,因为它第一个被设计成可以根据具体场景可以选择适合的指令集的指令集架构。基于RISC-V指令集架构可以设计服务器CPU,家用电器cpu,工控cpu和用在比指头小的传感器中的cpu。
RISC-V指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。最主要的特点是其ISA通过支持自定义指令的方式,支持自定义硬件加速器,用于专用领域的计算加速设计。
RISC-V是一种开放的指令集架构《精简指令集架构》,而不是一款具体的处理器。任何组织与个人都可以根据RISC-V架构设计实现自己的处理器/高性能处理器/低功耗处理器。只要是根据RISC-V架构而设计的处理器都可以成为RISC-V架构处理器。
片上系统(SoC:System-on-a-chip)指的是在单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。所谓完整的系统一般包括中央处理器(CPU)、存储器、以及外围电路等。 SoC是与其它技术并行发展的,如绝缘硅(SOI),它可以提供增强的时钟频率,从而降低微芯片的功耗。
片上系统技术通常应用于小型的,日益复杂的客户电子设备。例如,声音检测设备的片上系统是在单个芯片上为所有用户提供包括音频接收端、模数转换器(ADC)、微处理器、必要的存储器以及输入输出逻辑控制等设备。此外系统芯片还应用于单芯片无线产品,诸如蓝牙设备,支持单芯片WLAN和蜂窝电话解决方案。
由于空前的高效集成性能,片上系统是替代集成电路的主要解决方案。SoC 已经成为当前微电子芯片发展的必然趋势。Player Station 即采用的SoC。
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
协处理器(Co-processor),一种芯片,用于减轻系统微处理器的特定处理任务。
协处理器是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。
RoCC 加速器是一款自定义协处理器。
敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简单地来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。
敏捷开发的实现主要包括 SCRUM、XP(极限编程)、Crystal Methods、FDD(特性驱动开发)等等。其中 SCRUM 与 XP 最为流行。同样是敏捷开发,XP 极限编程 更侧重于实践,并力求把实践做到极限。这一实践可以是测试先行,也可以是结对编程等,关键要看具体的应用场景。
MMIO(Memory mapping I/O)即内存映射I/O,它是PCI规范的一部分,I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的帧缓存,BIOS,PCI设备就可以使用读写内存一样的汇编指令完成,简化了程序设计的难度和接口的复杂性。I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)。
1)前者就是我们常说的I/O端口,它实际上的应该被称为I/O地址空间。前者不占用CPU的物理地址空间,后者占有(这是对x86架构说的,一些架构,如IA64,port I/O占用物理地址空间)。
2)前者是顺序访问。也就是说在一条I/O指令完成前,下一条指令不会执行。例如通过Port I/O对设备发起了操作,造成了设备寄存器状态变化,这个变化在下一条指令执行前生效。uncache的MMIO通过uncahce memory的特性保证顺序性。
3)使用方式不同
由于port I/O有独立的64K I/O地址空间,但CPU的地址线只有一套,所以必须区分地址属于物理地址空间还是I/O地址空间。
Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。
Verilog 继承了 C 语言的多种操作符和结构,与另一种硬件描述语言 VHDL 相比,语法不是很严格,代码更加简洁,更容易上手。Verilog 不仅定义了语法,还对语法结构都定义了清晰的仿真语义。因此,Verilog 编写的数字模型就能够使用 Verilog 仿真器进行验证。
Chisel(Constructing Hardware In a Scala Embedded Language)是一种嵌入在高级编程语言Scala的硬件构建语言。 Chisel是由伯克利大学发布的一种开源硬件构建语言,建立在Scala语言之上,是Scala特定领域语言的一个应用,具有高度参数化的生成器(highly parameterized generators),可以支持高级硬件设计。 Chisel实际上只是一些特殊的类定义,预定义对象的集合,使用Scala的用法,所以在写Chisel程序时实际上是在写Scala程序。
RTL主要描述的是寄存器到寄存器之间逻辑功能的实现,它不具体关心到底使用了多少逻辑门,因而比门级更为简单和高效。
RTL描述是可以表示为一个有限状态机,或是一个可以在一个预定的时钟周期边界上进行寄存器传输的更一般的时序状态机。RTL code:Register-Transfer-Level code,通常由VHDL/verilog两种语言进行描述。
可以将RTL生成器视为通用 RTL 设计,使用元编程和标准 RTL 混合编写。这种类型的元编程由 Chisel 硬件描述语言启用。标准 RTL 设计本质上只是来自生成器的设计的单个实例。然而,通过使用元编程和参数系统,生成器可以允许以自动化方式集成复杂的硬件设计。
典型的RTL级的设计包含三个部分:时钟域描述,时序逻辑描述,组合逻辑描述。
较为推荐的设计步骤如下:
1. 功能定义与模块拆分
2. 定义所有模块接口
3. 设计时钟域:注意全局时钟资源几乎没有时钟偏斜(Clock Skew)但时延(Clock Delay)大,驱动能力强;第二全局时钟偏斜小,但时延小,驱动能力次之。
4. 考虑设计中的关键路径:关键路径即时序要求最紧张的路径,主要由频率、建立时间(Tsetup)、保持时间(Thold)等制约,同时可以用pipeline或者逻辑复用等方法缓解。
5. 顶层设计:推荐使用自顶向下的设计,这同模块规划是一致的。
6. FSM状态机:后续有专门介绍
7. 时序逻辑设计
8. 组合逻辑设计
Chipyard是用于敏捷开发基于Chisel的SoC的开源框架。 它让用户能够利用Chisel HDL,Rocket-Chip SoC生成器和其他Berkeley项目来生产RISC-V SoC,它具有从MMIO映射的外设到定制加速器的所有功能。 Chipyard项目包含处理器内核(Rocket,BOOM,Ariane),加速器(Hwacha),存储器系统以及其他外围设备和工具,以帮助用户快速创建功能齐全的SoC。 Chipyard支持多种敏捷硬件开发流程,包括软件RTL仿真,FPGA加速仿真(FireSim),自动化VLSI流程(Hammer)以及针对裸机和基于Linux的系统的软件开发。
Gemmini,基于脉动阵列的矩阵乘法单元生成器/针对神经网络的矩阵乘法加速器,主要用于研究此类集成 SoC 加速器的软件/硬件影响。它的灵感来自于边缘端和移动 SoC端机器学习加速器的最新趋势。 Gemmini 也可以看作是一个具有非标准 RISC-V 自定义指令的 RoCC 加速器。
Gemmini 以非标准 RISC-V 自定义指令(RISC-V custom instructions)的 RoCC 加速器的方式而实现。Gemmini 单元使用 Rocket 或 BOOM tile的 RoCC 端口,默认情况下通过系统总线连接到内存系统(即直接连接到 L2 缓存)。
Rocket Core是伯克利开发的一款开源RISC-V处理器核,可以由伯克利开发的SoC生成器Rocket-Chip生成。
【区分】Rocket Core是一款处理器核;Rocket-Chip是一款SoC生成器,可以生成若干伯克利开发的处理器核,包括Rocket Core和BOOM Core。