<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 處理器設計的謬誤—第二部分

處理器設計的謬誤—第二部分

—— Processor Design Mistakes, Part 2
作者:Grant Martin 首席科學(xué)家,Steve Leibson 技術(shù)福音傳道者 Tensilica公司 時(shí)間:2008-11-27 來(lái)源:電子產(chǎn)品世界 收藏

摘要:本系列文章深度調查了各種失敗的種群。每一篇文章探索了造成一種特殊的種群消亡的重大設計錯誤。每一種重大的設計錯誤還用一個(gè)或兩個(gè)以上的例子來(lái)進(jìn)行說(shuō)明。
關(guān)鍵詞:;設計;ISA;HLL;微碼

本文引用地址:http://dyxdggzs.com/article/89852.htm

  本文第一部分討論了支持特定語(yǔ)言或語(yǔ)言域的高級計算機指令集架構(ISA)的發(fā)展,并把那個(gè)種群稱(chēng)為Myopisaur。本系列文章將來(lái)會(huì )討論其它的處理器種群以及跟那個(gè)種群相關(guān)的設計錯誤。

  在那個(gè)年代所采用的一種主要方法就是實(shí)現針對HLL的處理器,正如在本系列文章第一部分所討論的那樣,就是把一個(gè)中間ISA裁剪為一種HLL,然后,采用或開(kāi)發(fā)類(lèi)似的處理器硬件以通過(guò)微編程來(lái)仿效經(jīng)定義的ISA。在上世紀50年代,微碼首次被劍橋大學(xué)在EDSAC項目中由Maurice Wilkes實(shí)現,人們最初開(kāi)發(fā)它是為計算機控制邏輯而開(kāi)發(fā)一種更為簡(jiǎn)單的方法1。微碼由實(shí)現中間ISA的基本處理器指令序列組成。它或者由一些簡(jiǎn)化的中間語(yǔ)言進(jìn)行編譯,或者以匯編形式進(jìn)行手工編寫(xiě)。微匯編程序然后把匯編代碼轉換為可執行代碼,這些可執行代碼然后被存儲在片上本地存儲器或快速訪(fǎng)問(wèn)、低延遲存儲器上。在上世紀70年代和80年代,設計工程師把微碼存儲在由分立存儲器芯片或存儲器模塊實(shí)現的外部存儲器上。在當今的IC集成水平上,處理器微碼幾乎總是存儲在片上RAM或ROM之上。

  微碼盡管曾經(jīng)獲得了普及應用,但是,本質(zhì)上已經(jīng)從現代的處理器設計消失了,因為片上可用硬件快速增加、硬件成本的關(guān)聯(lián)下降以及廣泛的采用邏輯綜合來(lái)進(jìn)行芯片設計。所有這些發(fā)展使得ISA的直接硬件實(shí)現更加容易并且更加在經(jīng)濟上有吸引力。

贊成采用微碼的案例

  微碼提供的若干優(yōu)點(diǎn):

  ·目標碼在一個(gè)家族之內與其它處理器兼容或與以前一代的處理器兼容;

  —以各種價(jià)格-性能特性能夠創(chuàng )建一個(gè)家族的待構建的處理器。在該家族中的高端處理器實(shí)現中間ISA更為直接或者甚至通過(guò)多功能單元而加速它,以開(kāi)發(fā)指令級并行化(ILP)。在該家族中的低端處理器把中間ISA映射至更為有限的硬件上,從而使得程序的執行更慢但是也成本更低。

  —在一個(gè)處理器家族中,能夠在多個(gè)處理器上把經(jīng)編寫(xiě)的編譯器用于中間ISA。從中間ISA至較低端機器的實(shí)際指令組的映射—具體包括在微碼中—可以獨立的層編寫(xiě),并可能避免采用編譯器,或者至少需要非常簡(jiǎn)單的編譯器。進(jìn)一步說(shuō),這樣的映射可能很少采用,因為中間ISA不會(huì )暴露給用戶(hù),并且不必按照HLL可能演化的那種方式演化。一些語(yǔ)言編譯器目前采用中間語(yǔ)言形式(例如Pascal的P代碼或Java的虛擬機)以及一個(gè)兩步—或通過(guò)解釋或兩步編譯—的過(guò)程以產(chǎn)生最終的可執行代碼;這個(gè)過(guò)程可以簡(jiǎn)化對接并也能夠支持針對同一ISA的多個(gè)語(yǔ)言—即使不涉及微碼。

  ·通過(guò)采用多個(gè)ISA和多個(gè)微碼組,由微碼編寫(xiě)的處理器能夠在運行時(shí)間上動(dòng)態(tài)地適應不同的HLL,從而能夠針對以不同的語(yǔ)言編寫(xiě)的程序實(shí)現更好的執行性能。

  ·對于依賴(lài)于解釋器的各種語(yǔ)言,對適當的中間ISA的形式開(kāi)發(fā)以及把那個(gè)中間ISA的微碼映射至目標ISA,能夠通過(guò)把它們的開(kāi)發(fā)分為更加簡(jiǎn)單的兩級(對于工程設計來(lái)說(shuō)是一流的劃分和征服方法)而加快語(yǔ)言的可用性。如上所述,這可能對于在RISC上實(shí)現多語(yǔ)言支持也是一個(gè)策略,或者,對于把一個(gè)語(yǔ)言對接至多個(gè)處理器也是一個(gè)策略。

  ·正如上面所討論的,通過(guò)把實(shí)現一個(gè)語(yǔ)言編譯器的過(guò)程分為兩級,就有可能為一種新的目標機提供語(yǔ)言支持,較之于編寫(xiě)特殊的目標編譯器更加快。

  ·利用一個(gè)中間ISA指令而不是兩個(gè)或兩個(gè)以上的目標ISA指令,代碼長(cháng)度可以被減少。此外,通過(guò)從主存儲器減少指令抓取的數量可能改善性能。在這種情形下,中間ISA可能較之于固有的機器RISC ISA而創(chuàng )建一種CISC。

  ·對ISA僅僅部分支持而不是全部支持,可能簡(jiǎn)化一種語(yǔ)言不常用部分的編譯器的編寫(xiě)。對于支持ISA的新型處理器的硬件設計也可能在復雜性、設計努力以及項目風(fēng)險上被減少,因此,采用經(jīng)過(guò)很好測試的微碼實(shí)現的執行來(lái)實(shí)現某些功能,可能較之于直接硬件實(shí)現來(lái)說(shuō)是更好的替代方法。

  ·這一技術(shù)如果利用更多的現代處理技術(shù)的優(yōu)點(diǎn)可能會(huì )更好且時(shí)鐘速率更快,以提供對較老機器以及在更新的處理器上的指令集—對較老的ISA的一種虛擬化—的后向兼容性。下一步就是在軟件上完全執行這個(gè)轉換,而完全不涉及任何微碼,這就需要各種技術(shù)改善以提供所需要的性能。這樣的改善可能包括較高頻率、邏輯、可能的多核以及更多的嵌入式存儲器。

反對采用微碼的案例

  微碼還具有若干缺點(diǎn):

  ·與具有較為簡(jiǎn)單的ISA的機器相比,低端中間ISA機器的性能常常非常差,因為中間ISA機器的分層常常證明并不是最優(yōu)化地使用計算資源。

  ·與針對真實(shí)的目標機器能夠實(shí)現的根本簡(jiǎn)單的ISA的編譯器相比,在中間ISA上生成代碼的編譯器無(wú)法做到同一程度的最優(yōu)化。對編譯的最優(yōu)化只能在兩個(gè)獨立的層面上完成。瞄準一個(gè)家族中直接實(shí)現中間ISA的高端處理器的HLL編譯器無(wú)法為該家族中的低端處理器進(jìn)行最優(yōu)化,除非為它們做特別的修改,這樣會(huì )打消它們的一些優(yōu)點(diǎn)。

  ·為了滿(mǎn)足若干不同的語(yǔ)言的要求,一種針對若干不同ISA的機器可能結合不穩定的設計折中,從而為所有的目標語(yǔ)言提供差的性能。

  ·微碼編譯器、翻譯器或生成器(把固定的中間ISA翻譯為根本的目標、簡(jiǎn)單的ISA)可能極度簡(jiǎn)單或者難以適應,因為它并不打算頻繁地運行。此外,微碼可能難以改變,特別是如果被存儲在ROM之中的話(huà)(當然一些機器在片上RAM存儲的部分微碼允許改變)。

  中間ISA概念的一些領(lǐng)先的支持者把它們具體表達在Burroughs處理器中(如上所述),但是,在文獻中可以發(fā)現許多其它的努力,由多年來(lái)構建的許多不同的微可編程計算機的可用性來(lái)支持。Carlson2討論的一種微編程Fortran計算機代表了Fortran語(yǔ)言的接近直接實(shí)現,并且僅僅需要一個(gè)簡(jiǎn)單的翻譯器,此外,他還討論了一種微編程的EULER處理器(EULER是Algol 60的變種)。Hassitt、Lageschulte和Lyon3討論的APL機器就采用了微編程。

  在上世紀80年代,Flynn4調查了許多架構方法,其中,包括微碼概念,并試圖定義直接執行HLL的理想的語(yǔ)言機器。Moulton5研究了支持HLL編譯和執行的微編程及其的一般設計。在用微編程支持的許多其它HLL當中(見(jiàn)前一節更多的討論)有LISP6和Prolog7??赡苷f(shuō)明這一概念的最早代表就是Burroughs機器的B1700/1800系列,它支持面向Cobol、Fortran和RPG8的中間ISA。最近,我們已經(jīng)看到這一方法的元素被用于解釋方法之中,如具有P代碼的Pascal和具有其虛擬機的Java;盡管具有足夠的動(dòng)機來(lái)改善性能并且經(jīng)過(guò)足夠的時(shí)間,但是,這些語(yǔ)言的固有編譯器仍然會(huì )出現。在任何情況下,這些方法可能不必要采用在現代處理器上的微碼。

過(guò)去殘留下來(lái)的概念

  你可能會(huì )推想,上世紀80年代VLSI的出現已經(jīng)縮減了微編程。的確,行業(yè)標準微處理器ISA的出現,那些ISA的多個(gè)世代的實(shí)現,以及利用現代IC制造工藝可用純晶體管數的增加,似乎已經(jīng)減少了微碼方法的應用。然而,這一技術(shù)的幾個(gè)發(fā)育不全的殘跡已經(jīng)在最近幾年浮出表面。例如,在上世紀80年代末,Unisys推出了所謂的單芯片A系列主機處理器(SCAMP)9,其中結合的相對低端的RISC處理器類(lèi)似于該公司在小型、低端的A3和A4主機上采用的處理器,它里面采用的幾百K微碼就是沿用從上世紀50年代以來(lái)在最初的B5000出現時(shí)所采用的Burroughs "E-model"指令集。SCAMP被用于"Micro-A"計算機,在此,SCAMP芯片利用許多微碼ROM芯片被匯編至2英寸×2英寸的多芯片模塊之中。

  這一方法的另一個(gè)有趣的遺跡以及這一問(wèn)題的一個(gè)反例就是在從AMD K610開(kāi)始的、現在的奔騰級處理器之中發(fā)現的問(wèn)題。在這些處理器中,以前x86處理器世代的CISC指令利用RISC指令集實(shí)現。處理器的指令解碼單元把CISC指令分解為RISC操作,然后,匯編并把這些更為簡(jiǎn)單的操作按組流出至處理器的并行執行單元。它并不是嚴格的微碼,但是,它在一定程度上明顯從微碼而來(lái)。

  這種設計方法還減輕了為更新的處理器創(chuàng )建新的CISC指令。它創(chuàng )建了一種混合CISC/RISC架構。顯然,微架構/微碼機器仍然具有一定的作用和位置,它隨著(zhù)半導體技術(shù)和處理器架構的不斷演化而興衰?;蛟S,這一蜥蜴類(lèi)家族樹(shù)的遺跡將在當今更為敏捷的哺乳類(lèi)機器上延續下去。

  盡管依然存在一些中間ISA的殘留應用,如上所述,微碼已經(jīng)證明在進(jìn)化上走入了死胡同,因為它不如直接用硬件高效地執行一個(gè)ISA。一旦硬件電路豐富,微碼的硬件效率就會(huì )由它的執行低效而超越。在當今的處理器設計中,讓大量比較簡(jiǎn)單的機器通過(guò)微碼仿效更為復雜的機器顯然應用不廣泛,盡管存在偶然的例外。新的編程語(yǔ)言常常最初通過(guò)比較簡(jiǎn)單的中間表示法進(jìn)行解釋?zhuān)?,如果該語(yǔ)言普及并且如果性能成問(wèn)題,那么,不可避免地會(huì )出現針對“裸金屬”處理器的有效的編譯器,因此,仍然需要采用微編程。(本文譯自《微處理器報告》)

參考文獻:
1. Jari Nurmi編, Processor Design: System-On-Chip Computing for ASICs and FPGAs, ,Springer, June 2007
2. M.V. Wilkes和J. B. Stringer, Microprogramming and the Design of the Control Circuits in an Electronic Digital Computer, Proc. Cambridge Phil. Soc 49 (pt. 2), April 1953, pp. 230–238
3. Yaohan Chu 編,High-Level Language Computer Architecture第三章,New York, 1975. Carl R. Carlson, A survey of high-level language computer architecture.
4. A. Hassitt, J. W. Lageschulte和L.E. Lyon, Implementation of a High Level Language Machine, Communications of the ACM, April 1973, Volume 16, Number 4, pp. 199–212
5. Michael J. Flynn, Directions and Issues in Architecture and Language, IEEE Computer, October 1980, pp. 5–22.
6. Peter Moulton, Microprogrammed subprocessors for compilation and execution of high-level languages, 7th annual workshop on Microprogramming, Palo Alto, California, United States, 1974, pp. 74–79.
7. Skef Wholey和Scott F. Fahlman, The Design of an Instruction Set for Common Lisp, ACM Symposium on LISP and Functional Programming, 1984, pp. 150–158
8. Barry Fagin, Yale Patt, Vason Sirni和Alvin Despain, Compiling Prolog into Microcode: A Case Study Using the NCR/32-000, Proceedings of the 18th IEEE Microprogramming Workshop, December 1985
9. Elliott I. Organick和James A. Hinds, Architecture and Programming of the B1700/B1800 Series, North-Holland, New York, 1977
10. Reuters press release, "Unisys Introduces Micro A Computer", January 19, 1989. http://query.nytimes.com/gst/fullpage.html?res=950DE2DE113AF93AA25752C0A96F948260
11. Tom Halfhill, AMD K6 Takes On Intel P6, BYTE, January 1996. http://www.byte.com/art/9601/sec7/art1.htm/



關(guān)鍵詞: 處理器 200811

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>