本文探讨了一些与处理器的设计和功能有关的重要细节。 如今,很少有电气工程师不定期(至少间接地)与嵌入式处理器交互。小型微控制器的存在几乎可以使任何设计受益,并且在许多情况下,需要功能强大的微控制器,数字信号处理器或嵌入式计算机。这些处理器已经改变了 电子设计,实际上它们已经改变了整个世界。 毫无疑问,工程师可以成功实现嵌入式处理器,而对其底层细节几乎一无所知。但是,通常至少对我们在设计中使用的集成 电路的内部功能有一些了解是有益的,这也适用于微处理器。另外,如果对处理器设计的基本原理有充分的了解,可能会帮助你确定哪些设备更适合给定的系统。
CPU vs处理器vs微处理器术语在连续使用时会很有帮助,因此让我们定义一些相关术语: - 一个CPU(中央处理单元)包括数据通路和控制单元的。
- 的数据通路是其中二进制数据是由算术运算装置操纵的地方,比特移位,等等。
- 所述控制单元负责管理的数据流,并产生使所述数据路径来执行由指令指定的操作的控制信号。
- 一个处理器由一个CPU和附加组件,帮助所述CPU功能更有效,并与周围的系统交互的。在我看来,将CPU变成处理器所需的最低限度是内存,以及管理内存和CPU之间的数据移动所需的逻辑。但是,存储器不是很有用,除非您还具有一个允许其他IC将数据写入存储器或从存储器中读出数据的输入/输出系统。
- 处理器不一定是单个设备,这就是处理器与微处理器的区别所在。尽管处理器可以(例如)由通过带状电缆连接的独立CPU和内存模块组成,但微处理器始终是集成电路。
- 一个微控制器是一个集成的设备,它结合了基于硬件的外围设备(例如模拟-数字转换器,定时器,和串行通信电路)的微处理器。
什么是机器语言? 那么处理器说什么语言?处理器不了解我们称为“软件”或(对于嵌入式处理器而言)“固件”的代码行,即使您仍然属于使用汇编语言的迅速减少的工程师团队,也是如此。 处理器使用机器语言,即存储在程序存储器中并由控制单元实现的二进制指令。机器语言指令由不同的字段组成: - 基本字段是操作码(操作码的缩写)。该位序列告诉处理器要执行哪个特定动作(例如,加两个数字,增加寄存器值,跳转到特定指令)。
- 其他可能的字段包括在其中存储数据的寄存器号或存储位置,数值(例如,用于数学运算)和程序存储器中的地址。数值称为即时 数据。
三字节机器语言指令的示例。
同样,这些字段只是二进制数。如果您看一下机器语言,那是令人难以理解的一和零的集合。机器语言的人类版本称为汇编语言,它具有字母(例如ADD,MOV和JMP)的直观组合,而不是二进制操作码,并使用十进制或十六进制数字代替二进制数字。
汇编语言说明示例,摘自此Silicon Labs数据表。
阅读和解释这些说明是可行的,但并非特别容易或令人不愉快,如果您花费大量时间进行汇编工作,您将很容易理解C等高级语言的流行性。
处理器是设备还是设计?上面给出的定义意味着处理器是使用存储器,输入/输出和CPU来执行计算任务的特定的有形电子单元。这当然是正确的,但它也反映了某种有限的观点,也许是过时的观点:有限的,因为它不能说明处理器的物理实现不一定是该处理器功能的固有部分的事实。和过时的,因为如今的“处理器”无非就是将比特流装载到 FPGA中。 在这一点上,我想介绍一个指令集体系结构(ISA)的概念。顾名思义,ISA指的是一组机器语言指令以及将这些指令集组合为一致的处理体系结构的各种功能细节。但是,让我们更进一步,尝试从某种角度理解ISA 是一个处理器。 我的意思是:封装尺寸,引脚数,晶体管大小,存储器组织和数据总线实现等不是处理器的基本方面。如果目标是研究处理器本身的性能和特性,则需要关注ISA。 指令集的重要性我们这些习惯于为微控制器编写固件的人可能倾向于将指令视为使处理器执行所需任务的一个组成部分。我们有时钟,ADC,串行I / O, 电源电压监视器等,所有这些都与我们的C语句结合使用,以创建功能齐全的嵌入式设备。但是,在处理器本身的上下文中,指令定义了特性。 我不能比引用我在一本关于数字设计的旧教科书中找到的以下句子更好地表达这个概念:“计算机的逻辑结构通常在汇编语言参考手册中进行描述。” 汇编语言以及处理器实现该语言的方式是对处理器内部功能的描述。因此,你不(完全)不了解特定处理器的实际工作方式,除非您了解其汇编语言指令的格式,行为和实现。换句话说,你可以通过研究ISA了解处理器。
RISC与CISC对指令集体系结构定义性质的讨论有助于我们理解为什么处理器分类的基本方法基于精简指令集计算机(RISC)与复杂指令集计算机(CISC)之间的差异。 以下是我试图简要总结这两种体系结构类型的特征: - RISC处理器强调与更基本的计算操作相对应且长度和执行时间更统一的通用指令。指令的实现经过高度优化,流水线可提高执行速度。包含更多的寄存器,以便可以最大程度地减少内存使用(访问内存的指令往往很慢)。
- CISC处理器强调专用指令,这些指令可以更直接地实现软件中使用的复杂操作。这使得从高级语言到汇编语言的转换变得更加容易,并且在高级编译器出现之前,这是一个重要的考虑因素。复杂的指令还需要较少的内存-例如,RISC处理器可能需要三条指令来执行CISC处理器响应一条指令将执行的任务。
全面比较RISC和CISC实现的性能可能需要一本书而不是一篇文章,但是我认为可以说RISC当前被视为大多数应用程序的首选体系结构。另外,必须指出,处理器不仅限于我们在技术讨论和评估中自然采用的“ RISC vs. CISC”心态。计算机工程师可以基于处理器的预期用途或其他设计约束来结合两种体系结构的各个方面。
摘自此Silicon Labs数据表的8051处理器图。我要说8051主要是CISC体系结构。学习ISA在评估特定处理器的唯一方法是阅读整个指令集手册的情况下,你可能永远找不到自己。当然,制造商会很乐意指出哪些设备更适合于给定的应用程序,并且您可能还可以与同事或主管进行交流,他们的经验比花一个下午(或几个下午)花费更多的宝贵时间。汇编语言细节。 尽管如此,还是有必要对ISA特性以及这些特性如何影响给定处理器的性能或实现产生一些熟悉。即使这些信息只是帮助您了解为什么以某种方式设计处理器,您至少也可以获得与电气工程越来越相关的见解。当然,您永远也不知道何时决定坐下来设计自己的基于FPGA的软处理器...
RISC-V的一些示例一种引起广泛关注的ISA被称为RISC-V。老实说,我不知道它的体系结构或功能是否有任何特别创新,但是在复杂的处理器体系结构中它具有一个相当不寻常的特征:它是完全免费和开源的。
基于RISC-V的处理器的示例。这是Roa Logic 的RV12架构。
这并不意味着物理处理器设备将免费。经营一家 半导体制造厂并不是很便宜,而且必须以某种方式为下线的芯片付费。但是,该 体系结构可供所有人使用,并且可以免费用于任何目的。 该RISC-V指令集手册是145页,是不完全的光线下看书。不过,这是一个很好的资源,我想通过讨论RISC-V ISA的一些随机选择的特性来结束本文。 - 地址空间(PDF文件的第16页): RISC-V架构支持32位和64位地址空间,其设计旨在确保将来与128位地址空间兼容。但是,设计人员认为32位地址空间已经并且将继续满足许多应用的需求,并且由于它降低了功耗,因此它是低功耗嵌入式设备的首选实现。
- 只读计数器(第35页):规范将三个64位只读计数器视为任何RISC-V实现的必要组成部分。它们不提供典型的计数器功能,因为用户无法修改计数值。而是,这些计数器跟踪处理器的活动和经过的时间,它们旨在确保用户可以访问有助于性能分析和优化的信息。
- 小型化(第39页): RISC-V的“ RV32E”指令集是标准“ RV32I”指令集的简化版本。它适用于嵌入式系统,在这些系统中,PCB面积通常是稀缺的商品。RV32E具有16个通用寄存器(而不是RV32I中使用的32个寄存器),显然,这种修改可以将处理器内核所需的面积减少25%。
- 错误处理(第48页):处理器可以合并对错误情况的自动响应;因此,可以对错误条件进行自动处理。例如,“陷阱”会导致在发生某种有问题的事件时将程序控制权转移到陷阱处理程序。基于给定系统的要求和约束,此功能可能被视为理想或不可取的。RISC-V体系结构的设计人员选择不为零除事件实现陷阱,这意味着在某些情况下,代码必须包含用于错误处理的附加分支指令。
结论处理器设计涉及专门的知识和技能,对于大多数电气工程师而言,这些知识和技能并不重要。但是,了解基本原理和技术可以帮助我们了解在设计中经常出现的微控制器和DSP,并评估不同指令集体系结构的优缺点。
|