《RISC-V开放架构设计之道》启程:理念、指令与实践初探【学习笔记1】
<div class='showpostmsg'> 本帖最后由 luyism 于 2024-6-11 19:31 编辑# 《RISC-V开放架构设计之道》启程:理念、指令与实践初探【学习笔记1】
## O、引言:
近年来,RISC-V这个名词频频出现在计算机架构领域,吸引了广泛的关注。作为一个开放性和灵活性兼备的新兴架构,RISC-V的出现打破了由少数几大架构主导的局面,推动了技术创新。出于对其开放标准和灵活设计的好奇,我决定通过《RISC-V开放架构设计之道》这本书来深入了解RISC-V。
以下是我在阅读本书过程中所获得的心得体会,看看RISC-V如何在开放、简洁、可扩展的设计原则下,逐步揭开计算新时代的序幕。
## 一、设计的艺术:理念与架构的交响曲
### 1.1 RISC-V的设计理念与架构
RISC-V的诞生背景令人瞩目,它的核心价值在于开放性和模块化设计。这一设计理念回应了当前计算领域对灵活性和扩展性的需求。RISC-V通过开放标准,为全球开发者提供了一个自由创新的舞台,促进了技术的进步和应用的多样性。
**开放性**:RISC-V的开放标准允许硬件和软件开发者在不受限制的情况下进行创新。这种开放性尤其适用于物联网、嵌入式系统和人工智能等快速发展的领域。例如,许多初创公司和研究机构都选择RISC-V作为其硬件平台,因为它不仅节省了专利费用,还能根据具体需求进行定制化开发。
**模块化设计**:RISC-V采用模块化的指令集架构(ISA),这意味着开发者可以根据具体应用需求选择合适的指令集扩展(如RV32I基础整数指令集、RV64I 64位整数指令集、浮点指令集等)。这种模块化设计使得RISC-V在多种应用场景中都表现出色,从高性能计算到低功耗嵌入式设备。
### 1.2 RISC与CISC的对比
RISC(精简指令集计算机)与CISC(复杂指令集计算机)一直是计算机架构中的两个主要流派。RISC-V通过简化指令集,减少了硬件复杂度,提高了处理器的效率和性能。这种模块化与增量型的ISA设计,使得RISC-V在灵活性和可扩展性方面表现优异。
#### 1.2.1 RISC架构
**设计理念**:RISC架构的设计理念是简化指令集,每条指令执行的功能单一而高效。这种简化的指令集使得处理器设计更加简洁,指令执行速度更快,同时也降低了硬件复杂度和功耗。
**指令集特点**:
- 简洁:RISC架构的指令集通常包含少量的基本指令,执行功能单一。
- 高效:由于指令执行功能单一,每条指令的执行周期较短,从而提高了指令执行的效率。
- 灵活:RISC架构的指令集可以根据具体应用需求进行扩展和定制,满足不同场景下的需求。
**实际应用案例**:
- **低功耗嵌入式系统**:RISC架构由于其指令执行效率高和功耗低的特点,被广泛应用于低功耗嵌入式系统中。例如,智能家居设备、传感器节点和可穿戴设备等场景中常见的处理器采用了RISC架构。
- **实时控制系统**:RISC架构的指令执行效率高,适合于对响应时间要求较高的实时控制系统。例如,工业自动化、机器人控制和航空航天等领域中的控制器常采用RISC架构。
#### 1.2.2 CISC架构
**设计理念**:CISC架构的设计理念是复杂指令集,每条指令执行的功能较为复杂和多样化。这种复杂的指令集使得处理器可以在一条指令中完成多个操作,从而降低了程序中所使用的指令数量和程序长度。
**指令集特点**:
- 复杂:CISC架构的指令集通常包含大量的复杂指令,每条指令执行的功能多样化。
- 大型指令集:CISC架构的指令集规模较大,包含了大量的指令和操作码。
- 低层次指令:CISC架构的指令集包含了许多低层次的硬件操作,如内存访问、I/O控制等。
**实际应用案例**:
- **复杂数据处理**:CISC架构的复杂指令集适合于处理复杂的数据操作和计算任务。例如,图形处理、多媒体处理和加密解密等应用中常见的处理器采用了CISC架构。
- **高性能计算**:CISC架构的复杂指令集可以在一条指令中完成多个操作,适合于高性能计算场景。例如,服务器、工作站和超级计算机等领域中常见的处理器采用了CISC架构。
#### 1.2.3 实际应用对比分析
- **功耗与性能**:RISC架构因简洁和高效,通常拥有更低的能耗和出色的性能比,特别适合能源敏感和高性能计算。CISC则以牺牲一定的功耗为代价,换取单指令处理复杂任务的能力,适用于对性能有极高要求的场景。
- **程序设计与优化**:RISC架构因指令集精简,程序代码更为紧凑,利于编译器优化,适合资源受限环境。CISC架构虽程序长度较长,但一条指令可完成多步操作,在特定应用中能简化编程逻辑,减少代码量。
## 二、指令集的奥秘:基石与进阶
### 2.1 基础整数指令集探索
在第2章中作者说明了RISC-V的基础整数指令集(RV32I),这是一切的基石。RISC-V的指令集设计非常简洁,但功能强大,通过对比其他架构的指令集(如ARM和x86),可以清晰地看到RISC-V在效率和灵活性上的优势。
RV32I指令集的精简设计是其一大亮点。相比ARM和x86,RISC-V RV32I仅包含大约50条基础指令,这大大减少了处理器硬件的复杂度,使得设计更易于理解和实现。在嵌入式系统设计中,这种简洁性直接转化为更低的硬件成本和更快的开发周期。例如,在设计一款低功耗的物联网传感器节点时,使用RV32I指令集的微控制器能够以更少的硅片面积实现所需功能,同时保持良好的能耗表现。
RISC-V RV32I的指令集设计注重指令的执行效率,大多数指令能够在单个时钟周期内完成。这种设计思路在执行密集型任务时尤为有利,如在实时控制系统的应用中,快速的指令响应时间是关键。对比之下,x86架构中的某些复杂指令可能需要多个周期才能完成,这在某些场景下会成为性能瓶颈。在实践中,开发人员利用RV32I指令集的高效特性,可以设计出更快速响应的系统,如在无人机的飞行控制中,快速的指令执行能力直接关联到飞行的稳定性和精确度。
### 2.2 关键指令解读
通过对几条关键指令的深入解读,我认识到这些指令如何在实际应用中提高效率。例如,RV32I指令集中的取数和存数指令,通过简化的地址计算,提高了内存访问的速度和效率。
#### 2.2.1 取数指令(Load Instructions)
取数指令在处理器中用于从内存读取数据并将其存储到寄存器中。RV32I指令集中的取数指令主要包括`LB`(加载字节)、`LH`(加载半字)、`LW`(加载字)等。这些指令通过简化的地址计算和对齐方式,提高了数据读取的速度和效率。
**示例:LW指令**
`LW x1, 0(x2)`
- **操作**:从x2寄存器指向的内存地址读取一个32位字,并存储到x1寄存器。
- **简化地址计算**:LW指令中的地址计算采用基地址加偏移量的方式,简化了复杂的内存地址计算过程。
- **提高效率**:由于RISC-V架构要求内存地址对齐,即32位字的地址必须是4的倍数,这样可以在一次内存访问中完成读取操作,从而提高了内存访问效率。
在实际应用中,这种简化的地址计算和对齐方式使得内存访问更加高效。例如,在数据密集型应用如图像处理和信号处理中,快速内存访问对于系统性能至关重要。通过使用LW指令,可以显著减少内存访问的延迟,从而提升整体处理速度。
#### 2.2.2 存数指令(Store Instructions)
存数指令用于将寄存器中的数据写入到内存中。RV32I指令集中的存数指令包括`SB`(存储字节)、`SH`(存储半字)、`SW`(存储字)等。这些指令同样通过简化的地址计算和对齐方式,提高了数据写入的速度和效率。
**示例:SW指令**
`SW x1, 0(x2)`
- **操作**:将x1寄存器中的32位字写入到x2寄存器指向的内存地址。
- **简化地址计算**:与取数指令类似,SW指令采用基地址加偏移量的地址计算方式,简化了内存地址计算过程。
- **提高效率**:由于RISC-V架构要求32位字的存储地址必须是4的倍数,因此可以在一次内存访问中完成写入操作,提高了数据存储的效率。
在嵌入式系统和实时控制应用中,快速的数据存储操作是确保系统实时性和稳定性的关键。通过使用SW指令,可以在保证数据一致性的同时,减少存储操作的延迟,从而满足实时系统对高效数据存储的要求。
#### 2.2.3 算术指令(Arithmetic Instructions)
算术指令在处理器中用于执行基本的算术运算,如加法、减法等。RV32I指令集中的算术指令包括`ADD`(加法)、`SUB`(减法)等。这些指令通过简化的操作数处理和高效的运算逻辑,提高了算术运算的速度和精度。
**示例:ADD指令**
`ADD x1, x2, x3`
- **操作**:将x2和x3寄存器中的值相加,并将结果存储到x1寄存器。
- **简化操作数处理**:ADD指令采用寄存器直接操作的方式,避免了复杂的内存操作,提高了算术运算的效率。
- **高效运算逻辑**:由于RISC-V架构的设计简洁,算术运算的执行逻辑得以简化,从而提高了指令执行的速度和精度。
在科学计算和数据分析等需要大量算术运算的应用中,使用高效的算术指令可以显著提升计算性能。例如,在矩阵运算和数值模拟等应用中,通过使用ADD指令,可以快速完成大量的加法运算,从而加速整体计算过程。
### 2.3 RISC-V RV32I在工程实战中的高效与灵活部署
#### 1. 指令集优化实践
- **循环展开**:在嵌入式系统开发中,针对循环密集型任务,合理使用RV32I指令集的循环展开技术能显著提升执行效率。例如,在图像处理算法中,通过手动展开循环减少循环次数,直接利用RISC-V的单周期指令完成计算,避免了循环开销,提高了处理速度。
- **指令级并行(ILP)**:RISC-V架构鼓励开发者利用指令间的独立性进行并行处理。通过分析代码,识别并行执行的指令序列,可以有效提升流水线利用率。在实时数据分析应用中,通过精心安排指令顺序,实现指令间无数据依赖的并行执行,从而提升处理器吞吐量。
#### 2. 灵活部署策略
- **指令集定制**:针对特定应用领域,如物联网设备或边缘计算,通过添加RISC-V的可选扩展(如M乘法、F单精度浮点),定制化指令集以满足特定性能需求。在设计低功耗传感器网络时,只选用必需的RV32I和M扩展,减少硬件成本与功耗。
- **跨平台移植技巧**:从ARM或x86迁移到RISC-V时,关注指令映射与优化。利用RV32I指令集的简洁性,简化原有复杂指令序列,同时注意利用RISC-V的特殊指令优化性能。例如,x86的移位操作可能需要多条指令,在RISC-V中可能一条指令即可完成。
## 三、学习收获:
- **理念上的启发**:RISC-V的模块化设计,将大型系统模块化,不仅简化管理,还促进了复用性和升级的便捷性。开放标准则是一个革命性的思想,它降低了技术参与门槛,加速了创新交流与迭代
- **技术提升**:对处理器内部的工作机制有了更细致的认知。增强了对高级语言代码生成和优化过程的理解。
## 四、附加元素:
### 4.1 RISC-V指令集参考卡
### 4.2 RISC-V架构师从过去指令集设计的错误中吸取的教训
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>原来看看RISC与CISC的对比就知道了</p>
<p>RISC-V架构师从过去指令集设计的错误中吸取的教训,这个收藏</p>
本帖最后由 hellokitty_bean 于 2024-6-12 09:43 编辑
<p>ARM 和 RISC-V 是遵循 RISC 设计理念的 ISA,那么哪一个更好呢?</p>
<p>一个闭源,一个开源</p>
<p>一个有专利费,一个免费</p>
<p>一个不能自己扩展,一个因为开源可以自己扩展</p>
<p>。。。。。。理念</p>
<p>搬砖:</p>
<p>(2019年的帖子)<br />
</p>
<p>身处电子行业或电子类的学生对RISC-V不太陌生,这个词在2018年可谓是霸占了大量的篇幅啊。今天就让我们一起从它的字面意思入手看看这个RISC-V是个“神马玩意”</p>
<p>首先我们从名字的第一个单词入手,RISC的较官方解释为 精简指令集计算机 , 它具有一致的指令的格式,一致的所有指令的指令周期,并且可采用流水线技术。许多早期的RISC设计有着不好的缺点——转移延时槽,转移延时槽是指一个跳转或转移指令之后的指令空间。无论转移是否发生,空间中的指令将被执行(或者说是转移效果被延迟)。这些指令让CPU的算术和逻辑单元繁忙比通常执行转移所需更多的时间。现在转移延时槽被认为是实现特定RISC设计的副作用,现代的RISC设计通常避免了这个问题(如PowerPC,最近的SPARC版本,MIPS)。</p>
<p>RISC-V(读作RISC-FIVE)指令集是基于精简指令集计算(RISC)原理建立的开放指令集架构(ISA),RISC-V是在指令集不断发展和成熟的基础上建立的全新指令。RISC-V指令集完全开源,设计简单,易于移植Unix系统,模块化设计,完整工具链,同时有大量的开源实现和流片案例,已在社区得到大力支持。其优势在于完全开源,架构简单,易于移植Linux和Unix,设计模块化,工具链完整。</p>
<p>基于上述分析,我们为什么会在短时间内在这么多途径听到RISC-V呢。这是由于RISC-V作为一种全新的芯片架构,为中国自主设计制造CPU打开了不小的可能性。微处理器架构被ARM和Intel x86垄断的局面极有可能被RISC-V的横空出世而打破。有人说,RISC-V给了中国机会,大家重新出发中国不会差。在我看来,机会也是实打实的机会摆在我们面前,我们没有理由去浪费摆在面前的机会。国内各大公司早已盯上了RISC-V,华米科技早已发布基于RISC-V家都的黄山一号芯片。但是我们也不能过于乐观,重新出发确实不假,但是中国目前芯片制造无论在工艺上还是在IP研发上都与欧美之间存在差距。国产主流微处理器核心还是基于这些大公司的技术。而且海外的公司手中抓住太多的知识产权和专利,这都会让我们在芯片制造的路上多出些汗。</p>
<p><br />
<br />
作者:磕盐路上的碎话<br />
链接:https://www.jianshu.com/p/5cd2a2ded1e7<br />
来源:简书<br />
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</p>
<p>最后的应该是机翻吧,那个PC相对的寻址模式是什么意思啊</p>
极限零 发表于 2024-6-12 10:59
最后的应该是机翻吧,那个PC相对的寻址模式是什么意思啊
<p>PC相对的数据寻址模式是指指令中包含的地址偏移量是相对于当前程序计数器(PC)的值进行计算的。表示指令指定的内存地址是基于当前指令所在位置的相对偏移量,不是一个绝对地址。这个模式可以让生成位置无关代码变得更加容易。位置无关代码可以在内存中任意位置加载和执行,不需要在链接或加载时进行调整。</p>
hellokitty_bean 发表于 2024-6-12 09:32
ARM 和 RISC-V 是遵循 RISC 设计理念的 ISA,那么哪一个更好呢?
一个闭源,一个开源
一个有专利费, ...
<p>说到ARM和RISC-V哪个更好,这还真不是一个非黑即白的问题,得看从哪个角度讲。就像你提到的,两者都是基于RISC(精简指令集计算机)的理念,但走了两条不同的路。这取决于你的需求和应用场景。如果你需要一个成熟、广泛支持的架构,选择ARM。如果你需要灵活性、定制化和低成本,RISC-V更合适。</p>
<p><strong>ARM</strong>,老大哥地位稳固,生态系统成熟。ARM架构已经发展多年,广泛应用于手机、平板、嵌入式设备等领域。几乎所有的智能手机(如苹果的iPhone和大多数安卓设备)都使用ARM架构的处理器。企业用的话得给专利费,但换来的是一个经过市场检验的稳定生态系统,大量现成的软硬件支持,尤其在移动端和嵌入式领域,ARM几乎是个金字招牌。如果你看重的是成熟的解决方案和市场兼容性,ARM是不错的选择。</p>
<p><strong>RISC-V</strong>,年轻有活力,开放先锋。开源免费是它最大的旗号,没有专利墙,谁都可以用,谁都能改,想怎么扩展就怎么扩展,灵活性和定制性是它的强项。这对于创新型企业、高校研究、小型团队或者特定行业定制化需求特别友好。你想低成本实验、快速迭代,或者搞些新玩意儿,RISC-V的门坎儿低,自由度高。</p>
luyism 发表于 2024-6-12 13:01
说到ARM和RISC-V哪个更好,这还真不是一个非黑即白的问题,得看从哪个角度讲。就像你提到的,两者都是基 ...
<p>嗯嗯嗯。。。。老大哥说得对呀!</p>
<p>以前看计算机体系结构,总是厌恶枯燥各种不适应。</p>
<p>现在回头来看,还是论坛里的帖子有趣入脑入心<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" /></p>
<p>写的好全面,点个赞</p>
<p> </p>
页:
[1]