常见泽1 发表于 2019-12-9 13:45

第三篇 RISC-V初步了解

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">RISC-V(发音同&ldquo;risk-five&rdquo;)是一种免费开源指令集架构(ISA),通过开放标准协作开创处理器创新的崭新纪元。RISC-V基金会创立 于2015年,由超过235家成员组织组成,建立了首个开放、协作的软硬件创新者社区,开创了处理器创新的新时代。RISC-V ISA发端于深厚的学术研究,将免费且可扩展的软硬件架构自由度提升至新的水平,为未来50年的计算设计与创新铺平了道路,国产CPU逆袭之路。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">RISC-V是由U.C. Berkeley开发的自由和模块化的RISC指令集,&ldquo;V&rdquo;包含两层意思,一是这是Berkeley从RISC I开始设计的第五代指令集架构,二是它代表了变化(variation)和向量(vectors)。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;"><img alt="https://img-blog.csdnimg.cn/20190316123646519.jpeg" id="图片_x0020_2" src="https://img-blog.csdnimg.cn/20190316123646519.jpeg" style="width:375pt; height:127.5pt" /> </span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">不同于x86、Arm架构高昂的IP费用,RISC-V架构使用BSD开源协议给予使用者很大自由,允许使用者修改和重新发布开源代码,也允许基于开源代码开发商业软件发布和销售。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">国产CPU</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">MIPS&mdash;&mdash;龙芯和君正</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">x86系&mdash;&mdash;北大众志、兆芯、海光</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">Power&mdash;&mdash;中晟宏芯</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">Alpha&mdash;&mdash;申威</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">ARM&mdash;&mdash;飞腾、华为海思、展讯、华芯通</span></span></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">RISC-V&mdash;&mdash;华米、GD、芯来科技、乐鑫、华大、平头哥、</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">GD32VF103采用RISC-V的Bumblebee处理器内核。Bumblebee内核设计了二级变长流水线微架构,配备了精简的指令预取单元和动态分支预测器,并融入多种低功耗设计方法,能够以二级流水线的代价,达到传统架构三级流水线的性能和频率,实现了优秀的能效比与成本优势。所以GD32VF103在最高主频下的工作性能可达153 DMIPS,<span lang="EN-US" style="color:red">CoreMark</span><span style="color:red">测试也取得了</span><span lang="EN-US" style="color:red">360</span><span style="color:red">分的优异表现,相比</span><span lang="EN-US" style="color:red">GD32 Cortex-M3</span><span style="color:red">内核产品性能提升</span><span lang="EN-US" style="color:red">15%</span><span style="color:red">的同时,动态功耗还降低了</span><span lang="EN-US" style="color:red">50%</span><span style="color:red">,待机功耗更是降低了</span><span lang="EN-US" style="color:red">25%</span><span style="color:red">。</span></span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">指令集就是一个处理器的硬件可以支持的基本操作(符号化的抽象描述)的集合。(wiki:&ldquo;An instruction set, with its instruction set architecture (ISA), is the interface between a computer&#39;s software and its hardware, and thereby enables the independent development of these two computing realms; it defines the valid instructions that a machine may execute.&rdquo;)。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">通常,处理器的指令集架构(ISA:Instruction Set Architecture)确定它的功能。最著名的x86就是intel CPU的指令集。一个通用处理器,为了适应所有的应用,其指令集必须考虑最大的灵活性。这种灵活性主要表现在指令功能是不是完备和粒度是不是够细。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">RISC-V的不同寻常之处,除了在于它是最近诞生的和开源的以外,还在于:和几乎所有以往的ISA不同,它是模块化的。它的核心是一个名为RV32I的基础ISA,运行一个完整的软件栈。 RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要,硬件可以包含或不包含这些扩展。这种模块化特性使得RISC-V具有了袖珍化、低能耗的特点,而这对于嵌入式应用可能至关重要。 RISC-V编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码。惯例是把代表扩展的字母附加到指令集名称之后作为指示。例如, RV32IMFD将乘法(RV32M),单精度浮点(RV32F)和双精度浮点(RV32D)的扩展添加到了基础指令集(RV32I)中。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"></p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;">架构师希望保持 ISA 的简洁性,从而缩小实现 ISA 的处理器的尺寸。我们将在随后的章节看到, RISC-V ISA 比 ARM-32 ISA 简洁得多。就简洁性造成的影响举例,我们把使用相同大小缓存(16KiB)的 RISC-V Rocket 处理器和采用相同技术(TSMC40GPLUS)的 ARM-32 Cortex A5 处理器进行比较。 RISC-V 晶粒的大小是 0.27mm2,而 ARM-32 晶粒的大小是0.53mm2。由于面积大一倍, ARM-32 Cortex A5 的晶粒成本是 RISC-V Rocket 的约 4(22)倍。即使晶粒的大小只缩小 10%,成本也将以 1.2(1.12)倍的比例缩小。</span></span></p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-align:justify"><span style="font-family:宋体;"><span style="font-size:16px;"><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">ARM-32 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">的架构师后来试图通过向以前统一的 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">32 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">ISA </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">中添加 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">16 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位指令来缩减代码长度,但根本就没有空间了。因此,唯一的解决方案是先用 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">16 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位指令来创建一个新的 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">ISA</span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">(</span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">Thumb</span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">),然后同时用 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">16 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位指令和 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">32 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位指令来组成另外一个 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">ISA</span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">(</span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">Thumb-2</span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">),并用一个模式位在两种长度的指令间切换。为了切换模式,程序员或编译器会跳转到一个最低有效位为 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">1 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">的字节地址。这种方法有效的前提是,在正常的 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">16 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位和 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">32 </span></span></span></span></span><span class="fontstyle21"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal">位指令中, 该位应该是 </span></span></span></span><span class="fontstyle01"><span style="color:black"><span style="font-weight:normal"><span style="font-style:normal"><span lang="EN-US">0</span></span></span></span></span></span></span></p>

<p style="text-align:justify">&nbsp;</p>

RCSN 发表于 2019-12-9 14:08

<p><a href="https://bbs.eeworld.com.cn/thread-1099999-1-1.html">https://bbs.eeworld.com.cn/thread-1099999-1-1.html</a>&nbsp; &nbsp;骚叔发的一个帖子 risc-v中文版本</p>

mymyhope 发表于 2019-12-10 11:23

<p>开源产品开始觉得很好用,到了最后都觉得有局限性</p>

bigbat 发表于 2019-12-13 09:47

<p>开源发展到和商业软件功能相似时就失去了商业价值了。也就没有那个公司去支持它了。比如linux、freebsd、apache、php、openjava、nxgin、openoffice、mysql等等发展的非常缓慢。有些开源软件的存在只是因为人们恐惧商业软件的垄断危险而已。有些开源软件的核心人员好多在后期都创业了或被商业公司收购。risc-v能发展的很好。</p>

<p>推荐一款很不错的免费IDE软件vscode</p>
页: [1]
查看完整版本: 第三篇 RISC-V初步了解