ARM 处理器(新的和旧的)是否使用微码?如果是,那又是为了什么?他们的指令还不够简单,不需要翻译成微操作就可以直接执行吗?
Bre*_*ugh 15
TL,博士;虽然 ARM 处理器使用与微编码 CPU 相似的概念(例如,有一个硬件块将指令解码为一个或多个微操作),但它们不是 使用 ROM 存储每个微指令的传统意义上的微编码,也不是这些微指令/操作在实际硬件中生成后是否可以修改。事实上,ARM 处理器在指令解码器中使用硬连线控制来生成微操作。
然而,在实践中,修改指令解码器类似于修改微码处理器,因为 ARM 将其 CPU 架构的硬件描述语言 ( HDL ) 源代码授权给各个制造商,这使得硬件级修改更容易实施。有关典型 RISC 和 CISC 指令解码器之间的更多差异,请参阅微处理器设计 Wikibook 中的指令解码器部分。
虽然 ARM 架构本身不是传统意义上的微编码,但单个指令被 解码为更小的微操作。现代 ARM 处理器远非“简单”——尽管指令本身非常正交,但有很多现代技术(例如流水线、超标量指令、乱序执行、缓存、扩展的复杂指令,如浮点单元)或 NEON 指令),现代 A9 内核具有。事实上,任何处理器都可以很简单地执行,而无需转换为微操作,但这本质上是将“所有鸡蛋放在一个篮子里”——您无法更正指令集中任何可能的勘误,也无法在生产后扩展/修改它。
然而,如果我们只讨论指令解码阶段,那么确实许多 ARM 处理器并没有以允许事后修改的方式进行微编码,尽管这可能是因为大多数授权 ARM 技术的制造商都可以访问实际硬件源代码(用 HDL 编写)。这降低了功耗,因为不需要微码阶段,但单个指令被“编译”成实际的硬件块。这也允许每个制造商进行勘误校正。
事实上,即使在基于 CISC 的 CPU(例如 x86)中,也不需要使用微码。然而在实践中,指令集的复杂性,加上许可、功耗和应用方面的各种差异,使得微码的选择非常适合 x86 的情况。然而,在 ARM 的情况下,它的用处不大,因为就硬件本身而言,对指令集(解码器)的更改更容易实现和控制(因为它可以由制造商定制)。
尽管在某些情况下拥有微码实际上可以简化处理器的设计(因为每条指令都作为“微程序”而不是实际硬件存在),但这实际上只是一个指令解码器(例如Thumb-2 扩展,允许可变-通过在 ARM 指令解码器内添加一个单独的指令解码器来存在长度指令)。虽然在功能上这些单元可以使用微码来实现,但这在功耗方面并不明智,因为您需要为 CPU 本身中的每个控制信号定义输出,即使不需要。这确实不是 然而,这与实际 CPU 本身的“复杂程度”有任何关系,因为 ARM 内核具有人们所期望的所有现代结构(流水线、指令/数据缓存、微 TLB 缓冲区、分支预测、虚拟内存等...... )。
在 ARM 的情况下,鉴于指令集的正交性,实现这种微编码方法所涉及的复杂性将超过直接在指令解码器块中简单更改相关硬件的好处。虽然这当然是可能的,但可以这么说,它最终会“重新发明轮子”,因为您能够直接修改(和编译/测试/模拟)硬件中的更改。
在这种情况下,您可以将 ARM 源代码本身“认为”为一种微编码,尽管不是将每个微操作/微程序存储在可以事后修改的 ROM 中,而是直接在指令解码器中的硬件。鉴于指令解码器本身是用 VHDL/Verilog 编写的,对现有指令进行更改就像修改源代码、重新编译和测试新硬件(例如在 FPGA 或模拟器上)一样简单。这与现代 x86 硬件的复杂性形成鲜明对比,后者在开发过程中更难测试/模拟,在生产后更难以修改(因为晶体管的尺寸远远超过人们可以在其中运行的尺寸,即使是最昂贵的现代FPGA,从而增加了使用微码存储的好处)。使用 FPGA 的物理硬件。
归档时间: |
|
查看次数: |
6595 次 |
最近记录: |