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