什么是英特尔微码?


77

从我读到的内容来看,它用于修复CPU中的错误,而无需修改BIOS。根据我对汇编的基本知识,我知道汇编指令由CPU在内部分解为微代码,并相应地执行。但是intel可以通过某种方式在系统启动和运行时进行一些更新。

有人有更多信息吗?是否有任何关于微码可以做什么以及如何使用的文档?


编辑:我读过维基百科的文章:没弄清楚我怎么能自己写一些,以及它有什么用。


4
你为什么需要它?这可能是永久损坏CPU的最佳方法。
ruslik 2010年

4
它可用于修复CPU中的错误或引入错误。英特尔为您做前者,因此,除非您想做后者,否则弄乱它几乎没有意义。
jalf

2
您可能对此感兴趣:downloadcenter.intel.com/…。请查看该链接中提供的“详细说明”。
yasouser 2010年

1
为什么intel无法打开它:stackoverflow.com/questions/5806589/…运行微代码的电路也称为“ RISC内核”。
西罗Santilli郝海东冠状病六四事件法轮功

Answers:


77

在较早的时期,微代码在CPU中被大量使用:每条指令都被拆分成微代码。这在适度的CPU中启用了相对复杂的指令集(考虑到具有许多操作数模式和八个32位寄存器的Motorola 68000可以安装在40000个晶体管中,而单核现代x86将拥有超过一亿个)。这不再是真的。出于性能原因,现在大多数指令都是“硬连线”的:它们的解释是由任何微代码外部的非柔性电路执行的。

在最新的x86中,可能有一些复杂的指令(例如fsin(在浮点值上计算正弦函数)用微码实现),而简单的指令(包括与imul进行整数乘法)却没有。这限制了使用自定义微代码可以实现的功能。

话虽这么说,微码格式不仅非常特定于特定的处理器型号(例如,奔腾III和奔腾IV的微码不能相互自由交换-当然,将AMD微​​码用于AMD处理器当然不可行了)问题),但它也是受严格保护的秘密。英特尔已经发布了一种操作系统或主板BIOS可以更新微码的方法(必须在每次硬重置后完成;更新保存在易失性RAM中),但是微码内容未记录在案。在英特尔®64和IA-32架构软件开发人员手册(第3a卷)描述了更新过程(第9.11节“微码更新工具”),但指出实际的微码已“加密”并且校验和已满时钟。措词含糊不清,几乎可以隐藏任何种类的密码保护,但最重要的是,对于除英特尔以外的其他人来说,目前不可能编写和尝试一些自定义微代码。

如果“加密”不包括数字(非对称)签名,并且/或者如果英特尔员工以某种方式破坏了保护系统,那么可以想到,一些非凡的逆向工程工作可能使人们能够产生这种微代码,但是鉴于适用性可能有限(由于大多数指令都是硬接线的),就编程能力而言,这样做的机会不大。


43
“这不再是事实。出于性能原因,现在大多数指令都是“硬连线的”:它们的解释是由任何微代码之外的非柔性电路执行的。” 我认为这是不正确的。Agnor Fog对现代x86 CPU进行了大量逆向工程,并经常提到微码,实际上,我认为微码是流水线化和OOE而不是普通指令的东西,并且诸如使用内存地址而不是寄存器进行操作之类的正常事情会生成额外的操作。Agnor
Joseph Garvin

5
另外,尝试进行完整的x86-64 CPU仿真的pltsim
Joseph Garvin

2
@JosephGarvin:另一个明显的事实是奔腾IV具有跟踪缓存,而不是普通的L1 icache
ninjalj 2012年

5
这听起来像是很多猜测,没有参考。
ʇsәɹoɈ

2
似乎ptlsim.org不再存在,但Marss86基于ptlsim。
Jordan Miner

18

松散考虑虚拟机或模拟器,例如qemu-arm可以在x86主机上模拟手臂处理器,理想情况下,在模拟手臂上运行的软件不知道它不是真正的手臂。将此想法带到整个芯片的设计水平,使其看起来总是x86,软件永远不会知道芯片内部有一些可编程的项目。并且内部的其他一些处理器是为实现/模拟x86而设计的。可能流行的AMD 29000产品线消失了,因为硬件团队以及也许处理器/内核成为了早期x86克隆的勇气。Linus工作的Transmeta拥有一个vliw处理器,该处理器被制成低功耗x86。在那种情况下,翻译层不是秘密。Vliw,很长的指令字,

不,它不像我所暗示的那样是一个仿真层,在每个芯片内部都没有运行带有qemu程序的linux。它介于中间没有软件/微代码的硬连线和完全仿真之间。可编程位可以像fpga,可编程门一样,也可以是软件或可编程状态机,这意味着非可编程门,只是在门上运行的是可编程的。

您的非x86,非大型铁类型处理器。以ARM为例,是硬连线的,没有微码。PIC,MSP430,AVR等微控制器假定它们未经过微编码。基本上不假定所有处理器都是微编码的,很少假设有任何处理器系列。仅仅是我们在PC中处理过的那些东西已经过去了,也许现在仍然如此,所以感觉就像它们一样。

使用此微代码听起来可能很有趣,但它可能非常特定于处理器系列,除非您为Intel或AMD工作,否则每个人都有自己的内部结构,您可能永远无法访问它的工作方式。因此,您需要在两者之一中找到一份工作,然后在战es中努力,成为一支可能从事这项工作的精英团队之一。而且,一旦您陷入困境,您的技能就可能仅限于在一家公司的一份工作。您可能会对在视频卡上的单个GPU进行编程更有趣,这已被记录或至少具有工具,您今天可以执行而无需在AMD或Intel工作10年就无法实现的目标。


感谢您的明确答复。因此,从某种意义上说,我们可以说CPU是FPGA的一种较小的专业化形式,并且我们可以认为微代码类似于Verilog吗?
Tu Do

1
它内部不是通用的,更像是cpu内部的cpu,但是内部的更原始,可能是RISC,但可能比它更简单(更简单,因为它可能需要多个指令来做一件有趣或有用的事情)。
old_timer 2015年

3
“没有运行在每个芯片内部带有qemu程序的linux。” 我会为这种前景而笑-直到几天前。然后,得到了报道:zdnet.com/article/minix-intels-hidden-in-chip-operating-system。事情变得比过去复杂得多。
Euro Micelli '17

10

您通常不会编写微代码。为此,需要对CPU微体系结构有深入的了解。英特尔一般不会在其微体系结构或微代码上发布任何信息。


4
只要微码不持久,为什么会导致CPU损坏?(我不是在这里谈论超频,我只是问可以在股票CPU上做什么)
Quamis 2010年

5
@Paul R:微代码不是永久性的:)再次阅读该Wiki。另外,Linux每次重新启动时都会一直引导CPU。此外,在Wiki上,它说通常BIOS负责每次初始化时都引导CPU。
Quamis 2010年

4
如果您想了解微代码和其他cpu实现细节,则可以考虑使用FPGA软核处理器。或者只是玩模拟器。
克里斯·斯特拉顿

12
@Paul R:英特尔微代码更新在硬重置中并不持久。硬重置时,处理器将恢复为出厂的微代码。
caf 2010年

5
有微码模拟器,如果您想了解更多有关微码的知识并尝试一下,例如:mythsim.orgen.wikipedia.org / wiki
ChuckCottrill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.