处理器设计的谬误(2)
本文第一部分讨论了支持特定语言或语言域的高级计算机指令集架构(ISA)的发展,并把那个种群称为Myopisaur。本系列文章将来会讨论其它的处理器种群以及跟那个种群相关的设计错误。
在那个年代所采用的一种主要方法就是实现针对HLL的处理器,正如在本系列文章第一部分所讨论的那样,就是把一个中间ISA裁剪为一种HLL,然后,采用或开发类似的处理器硬件以通过微编程来仿效经定义的ISA。在上世纪50年代,微码首次被剑桥大学在EDSAC项目中由Maurice Wilkes实现,人们最初开发它是为计算机控制逻辑而开发一种更为简单的方法1。微码由实现中间ISA的基本处理器指 令序列组成。它或者由一些简化的中间语言进行编译,或者以汇编形式进行手工编写。微汇编程序然后把汇编代码转换为可执行代码,这些可执行代码然后被存储在 片上本地存储器或快速访问、低延迟存储器上。在上世纪70年代和80年代,设计工程师把微码存储在由分立存储器芯片或存储器模块实现的外部存储器上。在当 今的IC集成水平上,处理器微码几乎总是存储在片上RAM或ROM之上。
微码尽管曾经获得了普及应用,但是,本质上已经从现代的处理器设计消失了,因为片上可用硬件快速增加、硬件成本的关联下降以及广泛的采用逻辑综合来进行芯片设计。所有这些发展使得ISA的直接硬件实现更加容易并且更加在经济上有吸引力。
赞成采用微码的案例
微码提供的若干优点:
·目标码在一个家族之内与其它处理器兼容或与以前一代的处理器兼容;
—以各种价格-性能特性能够创建一个家族的待构建的处理器。在该家族中的高端处理器实现中间ISA更为直接或者甚至通过多功能单元而加速它,以开发指令级并行化(ILP)。在该家族中的低端处理器把中间ISA映射至更为有限的硬件上,从而使得程序的执行更慢但是也成本更低。
—在一个处理器家族中,能够在多个处理器上 把经编写的编译器用于中间ISA。从中间ISA至较低端机器的实际指令组的映射—具体包括在微码中—可以独立的层编写,并可能避免采用编译器,或者至少需 要非常简单的编译器。进一步说,这样的映射可能很少采用,因为中间ISA不会暴露给用户,并且不必按照HLL可能演化的那种方式演化。一些语言编译器目前 采用中间语言形式(例如Pascal的P代码或Java的虚拟机)以及一个两步—或通过解释或两步编译—的过程以产生最终的可执行代码;这个过程可以简化 对接并也能够支持针对同一ISA的多个语言—即使不涉及微码。
·通过采用多个ISA和多个微码组,由微码编写的处理器能够在运行时间上动态地适应不同的HLL,从而能够针对以不同的语言编写的程序实现更好的执行性能。
·对于依赖于解释器的各种语言,对适当的中间ISA的形式开发以及把那个中间ISA的微码映射至目标ISA,能够通过把它们的开发分为更加简单 的两级(对于工程设计来说是一流的划分和征服方法)而加快语言的可用性。如上所述,这可能对于在RISC上实现多语言支持也是一个策略,或者,对于把一个 语言对接至多个处理器也是一个策略。
·正如上面所讨论的,通过把实现一个语言编译器的过程分为两级,就有可能为一种新的目标机提供语言支持,较之于编写特殊的目标编译器更加快。
·利用一个中间ISA指令而不是两个或两个以上的目标ISA指令,代码长度可以被减少。此外,通过从主存储器减少指令抓取的数量可能改善性能。在这种情形下,中间ISA可能较之于固有的机器RISC ISA而创建一种CISC。
·对ISA仅仅部分支持而不是全部支持,可能简化一种语言不常用部分的编译器的编写。对于支持ISA的新型处理器的硬件设计也可能在复杂性、设计努力以及项目风险上被减少,因此,采用经过很好测试的微码实现的执行来实现某些功能,可能较之于直接硬件实现来说是更好的替代方法。
·这一技术如果利用更多的现代处理技术的优点可能会更好且时钟速率更快,以提供对较老机器以及在更新的处理器上的指令集—对较老的ISA的一种虚拟化—的后向兼容性。下一步就是在软件上完全执行这个转换,而完全不涉及任何微码,这就需要各种技术改善以提供所需要的性能。这样的改善可能包括较高频率、逻辑、可能的多核以及更多的嵌入式存储器。
反对采用微码的案例
微码还具有若干缺点:
·与具有较为简单的ISA的机器相比,低端中间ISA机器的性能常常非常差,因为中间ISA机器的分层常常证明并不是最优化地使用计算资源。
·与针对真实的目标机器能够实现的根本简单的ISA的编译器相比,在中间ISA上生成代码的编译器无法做到同一程度的最优化。对编译的最优化只能在两个独立的层面上
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 嵌入式线控驾驶系统开发过程中设计和测试考虑(02-02)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)