差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
risc_v_tech [2019/06/18 10:32]
group003 创建
risc_v_tech [2019/06/18 10:34] (当前版本)
group003
行 1: 行 1:
-##技术细节 +## RISC-V ​技术细节 
-#### ISA基础和扩展+### ISA基础和扩展
 RISC-V采用模块化设计,由可选的基础部件组成,并增加了可选扩展。 ISA基础及其扩展是在工业界,研究界和教育机构之间共同开发的。基数指定指令(及其编码),控制流,寄存器(及其大小),存储器和寻址,逻辑(即整数)操作和辅助设备。仅基础可以实现简化的通用计算机,具有完整的软件支持,包括通用编译器。 RISC-V采用模块化设计,由可选的基础部件组成,并增加了可选扩展。 ISA基础及其扩展是在工业界,研究界和教育机构之间共同开发的。基数指定指令(及其编码),控制流,寄存器(及其大小),存储器和寻址,逻辑(即整数)操作和辅助设备。仅基础可以实现简化的通用计算机,具有完整的软件支持,包括通用编译器。
  
行 14: 行 14:
 已经提出了针对标准扩展的Zxxx和针对非标准(供应商特定)扩展的Yxxx的命名方案。例如,正在讨论用于总存储排序的Ztso扩展,一种替代弱内存排序的内存一致性模型。[59] 已经提出了针对标准扩展的Zxxx和针对非标准(供应商特定)扩展的Yxxx的命名方案。例如,正在讨论用于总存储排序的Ztso扩展,一种替代弱内存排序的内存一致性模型。[59]
  
-#### 寄存器集+### 寄存器集
 RISC-V具有32个(或嵌入式变体中的16个)整数寄存器,并且在实现浮点扩展时,有32个浮点寄存器。除存储器访问指令外,指令仅对寄存器进行寻址。 RISC-V具有32个(或嵌入式变体中的16个)整数寄存器,并且在实现浮点扩展时,有32个浮点寄存器。除存储器访问指令外,指令仅对寄存器进行寻址。
  
行 23: 行 23:
 没有指令来保存和恢复多个寄存器。那些被认为是不必要的,太复杂的,也许是太慢了。 没有指令来保存和恢复多个寄存器。那些被认为是不必要的,太复杂的,也许是太慢了。
  
-#### 存储器访问 ​+### 存储器访问 ​
 与许多RISC设计一样,RISC-V是一种加载存储架构:指令仅对寄存器进行寻址,其中加载和存储指令传送到存储器和从存储器传送。 与许多RISC设计一样,RISC-V是一种加载存储架构:指令仅对寄存器进行寻址,其中加载和存储指令传送到存储器和从存储器传送。
  
行 44: 行 44:
 一些RISC CPU(例如MIPS,PowerPC,DLX和Berkeley的RISC-I)在加载和存储中放置16位偏移量。它们通过加载高位字指令设置高16位。这允许容易地设置上半字值而不移位。但是,大多数使用上半字指令会产生32位常数,如地址。 RISC-V使用类似SPARC的12位偏移和20位上位指令组合。较小的12位偏移有助于紧凑的32位加载和存储指令选择32个寄存器中的两个,但仍有足够的位来支持RISC-V的可变长度指令编码。 一些RISC CPU(例如MIPS,PowerPC,DLX和Berkeley的RISC-I)在加载和存储中放置16位偏移量。它们通过加载高位字指令设置高16位。这允许容易地设置上半字值而不移位。但是,大多数使用上半字指令会产生32位常数,如地址。 RISC-V使用类似SPARC的12位偏移和20位上位指令组合。较小的12位偏移有助于紧凑的32位加载和存储指令选择32个寄存器中的两个,但仍有足够的位来支持RISC-V的可变长度指令编码。
  
-#### 立即数+### 立即数
 RISC-V处理32位常数和地址,其指令设置32位寄存器的高20位。加载立即lui加载20位到31到12位。然后第二个指令如addi可以设置底部的12位。 RISC-V处理32位常数和地址,其指令设置32位寄存器的高20位。加载立即lui加载20位到31到12位。然后第二个指令如addi可以设置底部的12位。
  
行 53: 行 53:
 一些快速CPU可以将指令的组合解释为单个融合指令。 lui或auipc可能是与addi,货物或商店融合的好候选人。 一些快速CPU可以将指令的组合解释为单个融合指令。 lui或auipc可能是与addi,货物或商店融合的好候选人。
  
-#### 子程序调用,跳转和分支+### 子程序调用,跳转和分支
 RISC-V的子程序调用jal(跳转和链接)将其返回地址放在寄存器中。这在许多计算机设计中更快,因为与直接在内存中的堆栈上推送返回地址的系统相比,它节省了内存访问。 jal具有20位带符号(2的补码)偏移量。偏移量乘以2,然后添加到PC以生成32位指令的相对地址。如果结果不在32位地址(即,可被4整除),则CPU可能会强制执行异常。 RISC-V的子程序调用jal(跳转和链接)将其返回地址放在寄存器中。这在许多计算机设计中更快,因为与直接在内存中的堆栈上推送返回地址的系统相比,它节省了内存访问。 jal具有20位带符号(2的补码)偏移量。偏移量乘以2,然后添加到PC以生成32位指令的相对地址。如果结果不在32位地址(即,可被4整除),则CPU可能会强制执行异常。
  
行 76: 行 76:
 ISA手册建议通过使用默认分支预测来优化软件以避免分支停顿。这将重新使用签名的相对地址的最高位作为提示位来判断是否采用条件分支。因此,RISC-V分支的操作​​代码中不需要其他提示位。这使得分支操作代码中有更多位可用。简单,廉价的CPU只能遵循默认预测 ISA手册建议通过使用默认分支预测来优化软件以避免分支停顿。这将重新使用签名的相对地址的最高位作为提示位来判断是否采用条件分支。因此,RISC-V分支的操作​​代码中不需要其他提示位。这使得分支操作代码中有更多位可用。简单,廉价的CPU只能遵循默认预测
  
-#### 算术和逻辑集+### 算术和逻辑集
 RISC-V将数学分离为最小的整数指令集(集合I),具有加,减,移位,逐位逻辑和比较分支。这些可以用软件模拟大多数其他RISC-V指令集。 (原子指令是一个值得注意的例外。)RISC-V目前缺少通常用于加速纯整数处理器中软件浮点运算的零和位域操作的计数。 RISC-V将数学分离为最小的整数指令集(集合I),具有加,减,移位,逐位逻辑和比较分支。这些可以用软件模拟大多数其他RISC-V指令集。 (原子指令是一个值得注意的例外。)RISC-V目前缺少通常用于加速纯整数处理器中软件浮点运算的零和位域操作的计数。
  
行 85: 行 85:
 RISC-V不会导致算术错误的异常,包括溢出,下溢,低于正常和除以零。相反,整数和浮点运算都会生成合理的默认值并设置状态位。除法后,一个分支可以发现除零。状态位可以通过操作系统或周期性中断进行测试。 RISC-V不会导致算术错误的异常,包括溢出,下溢,低于正常和除以零。相反,整数和浮点运算都会生成合理的默认值并设置状态位。除法后,一个分支可以发现除零。状态位可以通过操作系统或周期性中断进行测试。
  
-#### 原子记忆操作+### 原子记忆操作
 RISC-V支持在多个CPU和线程之间共享内存的计算机。 RISC-V的标准内存一致性模型是发布一致性。也就是说,加载和存储通常可以重新排序,但是一些加载可以被指定为必须在稍后的存储器访问之前的获取操作,并且一些存储可以被指定为必须遵循先前的存储器访问的释放操作。 RISC-V支持在多个CPU和线程之间共享内存的计算机。 RISC-V的标准内存一致性模型是发布一致性。也就是说,加载和存储通常可以重新排序,但是一些加载可以被指定为必须在稍后的存储器访问之前的获取操作,并且一些存储可以被指定为必须遵循先前的存储器访问的释放操作。
  
行 102: 行 102:
 该规范给出了如何使用该子集来锁定数据结构的示例。 该规范给出了如何使用该子集来锁定数据结构的示例。
  
-#### 压缩子集+### 压缩子集
 标准RISC-V ISA规定所有指令均为32位。这使得实现特别简单,但与具有这种指令编码的其他RISC处理器一样,导致代码大小比其他指令集更大。[2] [60]为了补偿,RISC-V的32位指令实际上是30位;​ 3/​4的操作码空间保留用于可选(但推荐)的可变长度压缩指令集RVC,其包括16位指令。与ARM的Thumb和MIPS16一样,压缩指令只是较大指令子集的别名。与ARM的Thumb或MIPS压缩集不同,空间从一开始就被保留,因此没有单独的操作模式。标准和压缩指令可以自由混合。(字母C) 标准RISC-V ISA规定所有指令均为32位。这使得实现特别简单,但与具有这种指令编码的其他RISC处理器一样,导致代码大小比其他指令集更大。[2] [60]为了补偿,RISC-V的32位指令实际上是30位;​ 3/​4的操作码空间保留用于可选(但推荐)的可变长度压缩指令集RVC,其包括16位指令。与ARM的Thumb和MIPS16一样,压缩指令只是较大指令子集的别名。与ARM的Thumb或MIPS压缩集不同,空间从一开始就被保留,因此没有单独的操作模式。标准和压缩指令可以自由混合。(字母C)
  
行 113: 行 113:
 由于RISC-V和原型没有保存和恢复多个寄存器的指令,因此与Arm的Thumb集相比,大小差异很大。相反,编译器生成了访问堆栈的传统指令。然后原型RVC汇编器经常将这些转换为压缩形式的一半大小。但是,这仍然需要比保存和恢复多个寄存器的ARM指令更多的代码空间。研究人员建议修改编译器以调用库例程来保存和恢复寄存器。这些例程往往会保留在代码缓存中,因此运行速度很快,但可能不如保存多条指令快。 由于RISC-V和原型没有保存和恢复多个寄存器的指令,因此与Arm的Thumb集相比,大小差异很大。相反,编译器生成了访问堆栈的传统指令。然后原型RVC汇编器经常将这些转换为压缩形式的一半大小。但是,这仍然需要比保存和恢复多个寄存器的ARM指令更多的代码空间。研究人员建议修改编译器以调用库例程来保存和恢复寄存器。这些例程往往会保留在代码缓存中,因此运行速度很快,但可能不如保存多条指令快。
  
-#### 嵌入式子集+### 嵌入式子集
 用于最小嵌入式CPU(集合E)的指令集以其他方式减少:仅支持16位32位整数寄存器。不应支持浮点指令(规范禁止它是不经济的),因此必须使用浮点软件库。建议使用压缩集C.特权指令集仅支持使用基址绑定地址重定位的机器模式,用户模式和内存方案。 用于最小嵌入式CPU(集合E)的指令集以其他方式减少:仅支持16位32位整数寄存器。不应支持浮点指令(规范禁止它是不经济的),因此必须使用浮点软件库。建议使用压缩集C.特权指令集仅支持使用基址绑定地址重定位的机器模式,用户模式和内存方案。
  
行 120: 行 120:
 记者还提出了更小的非标准16位RV16E ISA:一个使用16×16位整数寄存器,使用标准的EIMC ISA(包括32位指令)。另一个提议只使用16具有8×16位寄存器的位C指令。据说完全重新编码的ISA可以使用完整的RV16EG。 记者还提出了更小的非标准16位RV16E ISA:一个使用16×16位整数寄存器,使用标准的EIMC ISA(包括32位指令)。另一个提议只使用16具有8×16位寄存器的位C指令。据说完全重新编码的ISA可以使用完整的RV16EG。
  
-#### 特权指令集+### 特权指令集
 RISC-V的ISA包含一个单独的特权指令集规范。截至2017年7月,这是初步的。 RISC-V的ISA包含一个单独的特权指令集规范。截至2017年7月,这是初步的。
  
行 138: 行 138:
 规范中支持几种存储器系统。仅物理适用于最简单的嵌入式系统。对于大容量存储系统中缓存的内存,还有三种UNIX样式的虚拟内存系统。虚拟内存系统有三种尺寸,地址大小分别为32,​39和48位。所有虚拟内存系统都支持4 KiB页面,多级页表树,并使用非常相似的算法来遍历页表树。所有这些都是为硬件或软件页面行走而设计的。为了可选地降低页表行走的成本,超大页面可以是系统页表树的更高级别中的叶页。 SV32有一个双层页表树,支持4个MiB超级页面。 SV39有一个三级页表,支持2个MiB超级页面和1个GiB gigapages。 SV48需要支持SV39。它还有一个4级页表,支持2个MiB超级页面,1个GiB gigapages和512个GiB terapages。超级页面在页面边界上对齐,以获得下一个最小页面大小。 规范中支持几种存储器系统。仅物理适用于最简单的嵌入式系统。对于大容量存储系统中缓存的内存,还有三种UNIX样式的虚拟内存系统。虚拟内存系统有三种尺寸,地址大小分别为32,​39和48位。所有虚拟内存系统都支持4 KiB页面,多级页表树,并使用非常相似的算法来遍历页表树。所有这些都是为硬件或软件页面行走而设计的。为了可选地降低页表行走的成本,超大页面可以是系统页表树的更高级别中的叶页。 SV32有一个双层页表树,支持4个MiB超级页面。 SV39有一个三级页表,支持2个MiB超级页面和1个GiB gigapages。 SV48需要支持SV39。它还有一个4级页表,支持2个MiB超级页面,1个GiB gigapages和512个GiB terapages。超级页面在页面边界上对齐,以获得下一个最小页面大小。
  
-#### 位操作+### 位操作
 为RISC-V制作了一个初步但未经批准的位操纵(B)ISA的大量工作。做得好,位操作子集可以帮助加密,图形和数学运算。草案中记录的包含标准是符合RV5哲学和ISA格式,代码密度或速度的实质性改进(即,指令至少减少3对1),以及大量的实际应用程序,包括预先存在的编译器支持。版本0.36包括无争议指令,用于计数前导零,计数一位,执行和补码,移位,旋转,广义位反转和随机,字节交换,位提取和存储,以及一些位操作添加压缩集(不是,否定和反向)。它还包括一个有争议的比特字段提取和放置方案,使用非标准的48位指令格式。 为RISC-V制作了一个初步但未经批准的位操纵(B)ISA的大量工作。做得好,位操作子集可以帮助加密,图形和数学运算。草案中记录的包含标准是符合RV5哲学和ISA格式,代码密度或速度的实质性改进(即,指令至少减少3对1),以及大量的实际应用程序,包括预先存在的编译器支持。版本0.36包括无争议指令,用于计数前导零,计数一位,执行和补码,移位,旋转,广义位反转和随机,字节交换,位提取和存储,以及一些位操作添加压缩集(不是,否定和反向)。它还包括一个有争议的比特字段提取和放置方案,使用非标准的48位指令格式。
  
-#### 打包SIMD+### 打包SIMD
 对于简单,成本降低的RISC-V系统,建议使用浮点寄存器的位来执行并行单指令,多数据(SIMD)子字算法。这被广泛用于加速多媒体和其他数字信号处理。[2]截至2016年,这个ISA未定义,但可能类似于PA-RISC的多媒体指令:多媒体加速扩展。除了原生的64位数学运算外,PA-RISC MAX2 CPU还可以同时对四个16位子字进行算术运算,并采用多种溢出方法。它还可以将子词移动到不同的位置。 PA-RISC的MAX2有意简化。它缺乏对8位或32位子字的支持。选择16位子字大小以支持大多数数字信号处理任务。这些说明的设计和构建成本低廉。但是,它们将CPU在数字信号处理任务上的性能提高了48倍或更多,从而在1995年实现了实用的实时视频编解码器。[67] [68] 对于简单,成本降低的RISC-V系统,建议使用浮点寄存器的位来执行并行单指令,多数据(SIMD)子字算法。这被广泛用于加速多媒体和其他数字信号处理。[2]截至2016年,这个ISA未定义,但可能类似于PA-RISC的多媒体指令:多媒体加速扩展。除了原生的64位数学运算外,PA-RISC MAX2 CPU还可以同时对四个16位子字进行算术运算,并采用多种溢出方法。它还可以将子词移动到不同的位置。 PA-RISC的MAX2有意简化。它缺乏对8位或32位子字的支持。选择16位子字大小以支持大多数数字信号处理任务。这些说明的设计和构建成本低廉。但是,它们将CPU在数字信号处理任务上的性能提高了48倍或更多,从而在1995年实现了实用的实时视频编解码器。[67] [68]
  
-#### 矢量集+### 矢量集
 所提出的矢量处理指令集可以使打包的SIMD集过时。设计人员希望具有足够的灵活性,CPU可以在标准处理器的寄存器中实现向量指令。如上所述,这将实现具有与多媒体ISA类似性能的最小实现。但是,真正的向量协处理器可以执行具有更高性能的相同代码。 所提出的矢量处理指令集可以使打包的SIMD集过时。设计人员希望具有足够的灵活性,CPU可以在标准处理器的寄存器中实现向量指令。如上所述,这将实现具有与多媒体ISA类似性能的最小实现。但是,真正的向量协处理器可以执行具有更高性能的相同代码。
  
行 163: 行 163:
 与典型的现代图形处理单元不同,没有计划提供特殊硬件来支持分支预测。相反,将使用较低成本的基于编译器的预测。 与典型的现代图形处理单元不同,没有计划提供特殊硬件来支持分支预测。相反,将使用较低成本的基于编译器的预测。
  
-#### 外部调试系统+### 外部调试系统
 RISC-V的硬件辅助调试器有一个初步规范。调试器将使用传输系统(如联合测试操作组(JTAG)或通用串行总线(USB))来访问调试寄存器。标准的硬件调试接口可以支持标准化的抽象接口或指令馈送。 RISC-V的硬件辅助调试器有一个初步规范。调试器将使用传输系统(如联合测试操作组(JTAG)或通用串行总线(USB))来访问调试寄存器。标准的硬件调试接口可以支持标准化的抽象接口或指令馈送。