所有关于电路
技术文章

电气工程师指令集架构指南(ISAs)

2018年8月15日,通过罗伯特Keim

本文探讨了与处理器的设计和beplay体育下载不了功能相关的一些重要细节。

本文探讨了与处理器的设计和beplay体育下载不了功能相关的一些重要细节。

如今,很少有电气工程师不经常(至少是间接地)与嵌入式处理器交互。几乎任何设计都可以受益于小型微控制器的存在,在许多情况下,需要一个功能强大的微控制器,数字信号处理器,或嵌入式计算机。这些处理器改变了电子设计,实际上它们改变了整个世界。

毫无疑问,工程师可以在几乎不了解底层细节的情况下成功地实现嵌入式处理器。然而,对我们在设计中使用的集成电路的内部功能至少有一些了解通常是有益的,这也适用于微处理器。此外,对处理器设计的基本原则的充分熟悉可能有助于您确定哪些设备更适合给定的系统。

CPU vs处理器vs微处理器

当术语被一致使用时,它是有用的,所以让我们定义一些相关的术语:

  • 一个CPU(中央处理单元)由数据路径和控制单元组成。
    • datapath公司是二进制数据通过算术运算、位移位等方式进行操作的地方。
    • 控制单元负责管理数据流和生成控制信号,使数据路径执行指令指定的操作。
  • 一个处理器由CPU和其他组件组成,这些组件帮助CPU更有效地工作,并与周围的系统交互。在我看来,将CPU转变为处理器的最低要求是一些内存以及管理内存和CPU之间的数据移动所需的逻辑。然而,内存不是很有用,除非你也有一个输入/输出系统,允许其他ICs将数据写入内存或从内存读取数据。
  • 处理器不一定是一个单独的设备,这就是处理器和微处理器。尽管一个处理器可以由(例如)通过带状电缆连接的独立的CPU和内存模块组成,一个微处理器总是一个集成电路。
  • 一个单片机是一种集成设备,它将微处理器与基于硬件的外设(如模数转换器、定时器和串行通信电路)结合在一起。

什么是机器语言?

那么处理器讲什么语言呢?处理器不理解我们称之为“软件”或(在嵌入式处理器的情况下)“固件”的代码行,即使您仍然属于正在迅速减少的使用汇编语言的工程师群体,这也是正确的。

处理器说话机器语言也就是说,二进制指令存储在程序存储器中,由控制单元实现。一个机器语言指令由不同的字段组成:

  • 关键字段是操作码(操作代码的缩写)。这个位序列告诉处理器要执行哪个特定的操作(例如,两个数字相加,寄存器值递增,跳转到特定的指令)。
  • 其他可能的字段包括寄存器号或存储数据的内存位置,一个数值(例如,用于数学运算)和程序内存中的地址。数值被称为立即数据。

一个三字节机器语言指令的例子。

同样,这些字段是简单的二进制数。如果你看一下机器语言,它就是一堆让人头脑发麻的1和0。人类版本的机器语言被称为汇编语言,它使用直观的字母组合(如ADD、MOV和JMP)来代替二进制操作码,并使用十进制或十六进制数字来代替二进制数字。

汇编语言指令的例子,取自Silicon Labs数据表

阅读和解释这些说明是可行的,但不是特别容易或令人愉快,而且如果您花大量时间在汇编上工作,您将很容易理解流行的高级语言,如C。

处理器是一种设备还是一种设计?

上面给出的定义意味着处理器是一个特定的、有形的电子单位,它使用内存、输入/输出和CPU来执行计算任务。这当然是正确的,但它也反映了某种受限的、可能是过时的观点:受限,因为它没有说明一个事实,即处理器的物理实现不一定是处理器功能的固有部分;而且过时了,因为现在的“处理器”可能只是一个流,一个装入到FPGA

在这一点上,我想介绍an的概念指令集架构(ISA)。顾名思义,ISA指的是一组机器语言指令,以及将这组指令组合成一个一致的处理体系结构的各种功能细节。然而,让我们更进一步,试着从一个特定的角度来理解ISA一个处理器。

我的意思是:像封装尺寸、引脚计数、晶体管尺寸、内存组织和数据总线实现等并不是处理器的基本方面。如果目标是研究处理器本身的性能和特性,我们需要关注ISA。

指令集的重要性

我们这些习惯于为微控制器编写固件的人可能倾向于把指令看作是使处理器执行所需任务的一个组成部分。我们有时钟、adc、串行I/O、电源电压监视器等,所有这些都与我们的C语句一起工作,以创建一个功能齐全的嵌入式设备。然而,在处理器本身的上下文中,指令定义了特性。

我不能用下面这句话来更好地表达这个概念,这句话是我在一本关于数字设计的旧教科书中找到的:“计算机的逻辑结构通常在汇编语言参考手册中描述。”汇编语言,以及处理器实现该语言的方式,对处理器内部功能的描述。因此,在理解其汇编语言指令的格式、行为和实现之前,您不能(完全)理解特定处理器的实际工作方式。换句话说,您可以通过学习一个处理器的ISA来了解它。

RISC和CISC

关于指令集体系结构定义本质的讨论有助于我们理解为什么处理器分类的基本方法是基于a简化指令集计算机(RISC)和一个复杂指令集计算机(CISC)。

下面我尝试简要总结一下这两种架构类型的特点:

  • RISC处理器强调通用指令,它们对应于更基本的计算操作,并且在长度和执行时间上更加统一。指令的实现是高度优化的流水线用于提高执行速度。更多的寄存器被包含进去,这样内存的使用就可以最小化(访问内存的指令往往是相当慢的)。
  • CISC处理器强调专门的指令,可以更直接地实现软件中使用的复杂操作。这使得从高级语言转换为汇编语言变得更容易,在复杂编译器出现之前,这是一个重要的考虑因素。复杂的指令也需要更少的内存——例如,一个RISC处理器可能需要三条指令来执行CISC处理器响应一条指令所执行的任务。

全面比较RISC和CISC实现的性能可能需要一本书而不是一篇文章,但我认为,可以说RISC目前被视为大多数应用程序的首选架构。此外,需要指出的是,处理器并不局限于“RISC vs. CISC”的心态,我们在技术讨论和评估的上下文中自然采用这种心态。计算机工程师可以根据处理器的预期用途或其他设计限制来合并这两种体系结构的各个方面。

一个8051处理器的图表,从Silicon Labs数据表。我想说8051主要是一个CISC架构。

研究一个ISA

您不太可能发现自己处于这样一种情况:评估特定处理器的唯一方法就是阅读整个指令集手册。当然,制造商会很乐意告诉您哪些设备更适合某个特定的应用程序,而且您也可以接触到同事或主管,他们的经验远比花一个下午(或几个下午)苦读汇编语言的细节有价值得多。

尽管如此,还是有必要熟悉一下ISA特征以及这些特征如何影响给定处理器的性能或实现。即使这些信息只是帮助您理解为什么处理器是以某种方式设计的,您至少也获得了与电子工程日益相关的见解。当然,你永远不知道什么时候你可能会决定坐下来设计你自己的基于fpga的软处理器……

一些来自RISC-V的例子

一个吸引了大量注意的ISA叫做RISC-V。老实说,我不知道它的架构或功能是否有什么特别创新的地方,但它在复杂的处理器架构中有一个相当不寻常的特点:它是完全免费和开源的。

一个基于risc - v的处理器的例子。这是RV12架构从Roa逻辑。

这并不意味着物理处理器设备将是免费的;经营一家半导体制造工厂并不便宜,而且必须有人以某种方式为装配线下的芯片买单。的体系结构然而,它对每个人都是可用的,可以用于任何目的。

RISC-V指令设置手册这本书有145页,读起来并不轻松。但是,这是一个很好的资源,我想通过讨论一些随机选择的RISC-V ISA的特性来结束本文。

  • 地址空间(PDF档案第16页):RISC-V体系结构支持32位和64位的地址空间,为保证未来与128位地址空间的兼容性,设计了RISC-V架构。然而,设计者相信32位地址空间对于许多应用程序来说已经足够了,而且它是低功耗嵌入式设备的首选实现,因为它降低了功耗。
  • 只读计数器(第35页):该规范认为三个64位只读计数器是任何RISC-V实现的基本组件。它们不提供典型的计数器功能,因为用户不能修改计数值。相反,这些计数器跟踪处理器活动和运行时间,它们旨在确保用户能够访问有助于性能分析和优化的信息。
  • 小型化(39页):RISC-V的“RV32E”指令集是标准“RV32I”指令集的简化版本。它是为嵌入式系统而设计的,因为在嵌入式系统中,PCB的空间通常是稀缺的商品。RV32E有16个通用寄存器(而不是RV32I中使用的32个寄存器),显然这个修改可以减少25%的处理器核心所需的区域。
  • 错误处理(第48页):处理器可以合并对错误条件的自动响应;例如,当出现某种问题事件时,“陷阱”会导致程序控制转移到陷阱处理程序。根据给定系统的需求和约束,可以将此特性视为可取的或不可取的。RISC-V体系结构的设计者选择不实现被0除事件的陷阱,这意味着在某些情况下,代码必须包含一个额外的用于错误处理的分支指令。

结论

处理器设计涉及的专业知识和技能对大多数电气工程师来说并不是优先考虑的。然而,基本原理和技术的知识可以帮助我们理解在我们的设计中经常出现的微控制器和dsp,并评估不同指令集架构的优缺点。

1评论
  • mjaa 2019年9月27日

    罗伯特,谢谢你提供的信息翔实的文章。我发现没有什么比设计自己的处理器、alu或全微控制器更能说明为什么我们有市场上的产品,尤其是在指令集、寄存器集、指令宽度、寻址模式等设计选择之间的权衡。说到这一点,我总是觉得很好笑,在70/80年代,我们在处理器设计上的进步是多么的小。任何进步都被微材料技术的巨大飞跃所摧毁,这将导致时钟速度和模具密度的量子飞跃。

    喜欢的。 回复