2017年6月16日 星期五

淺談古代CPU:副處理器的故事(3)

前情提要:
淺談古代CPU:副處理器的故事(1)
淺談古代CPU:副處理器的故事(2)

Intel在1980年公布了8087,隔年,也就是1981年八月,IBM PC問世,上面特別留了一個空的40 pin IC插座給8087,從此個人電腦終於跟以前那些「大型主機」一樣,擁有浮點運算的能力,也就在這一年,一家叫做Weitek的公司成立。

中文版的Wiki對Weitek的介紹有不少錯誤,首先,所謂「 三位自Intel公司離職的台灣工程師 所共創 」就錯了, 這三位都是HP Lab(Hewlett Packard Central Research Lab)出來的,Chi-Shin Wang( 王繼行 )是1967年台灣大學物理系畢業,後來到Standford念電機博士,台大物理學會在民國56年出版的《時空》第五期有他的文章,他後來在1987年自己開了一家IC設計公司叫IIT,後來改名叫8x8;IIT是頭幾個不靠逆向工程做出387相容浮點副處理器的廠商之一;Edmund Sun (孫燕生) 台灣出生,國立交通大學電子物理系58級畢業,1974年Caltech加州理工學院畢業,後來開了C-Cube,是硬體影像壓縮的先驅,後來還投資設立不少公司;Godfrey Fong (方端) 是總裁兼CEO, 1961-66 上海復旦大學半導體物理碩士,在Weitek之前,1974年他在Fairchild,,1981到HP Lab,這三位都沒待過Intel;另外有紀錄的還有G. Leonard (Len) Baker, Jr.,他是投資董事之一。

真正待過Intel的是這兩位:Stephen (Steve) Farnow,他在1979-1985是Intel DRAM部門的Manager , 1986 年到1990年擔任Weitek的VP;另外就是Everett Roach,他在1987到1991年擔任Weitek的Marketing Manager,在進Weitek之前,他是Intel的Marketing Manager,後來還擔任過Cyrix和NS(美國國家半導體)的VP,現在是Qualcomm的資深PM。

Weitek的創立目的本來是想做電腦繪圖,主要是CAD(電腦輔助設計)的相關系統,但是CAD需要強大的浮點運算, 於是他們從同樣是HP Lab找來一批設計浮點運算電路的專家,比較有名的是Fred Ware,美國專利局還有他們在Weitek時申請的浮點運算專利紀錄;結果系統還沒做,浮點運算器晶片已經先有了生意。

Intel推出8087只比8088晚了一年,剛好趕上IBM PC問世;1983年的80287也只比80286晚了一年;1985年80386問世,1986年Compaq就搶先推出了DeskPro 386,成為第一台相容IBM PC的386個人電腦,可是....80387到了1987年才出來,Weitek就趁這個時候搶先推出了可以搭配Deskpro 386的Weitek 1167,而且宣稱浮點運算速度是387的2-3倍。

1167其實是三顆晶片加上一片很大的電路板,然後再用一塊轉接板插到主機板的插座上,這三顆分別編號是WTL1163、1164和1165,1163是負責介面轉換的晶片,1164是浮點乘法器,1165是ALU;隔年Weitek就把這塊大板子縮成一顆IC,推出同樣用於386系統的3167,再隔一年,也就是1989年,當Intel推出80486DX時,Weitek同時推出Weitek 4167。
雖然同步推出,又號稱是387的幾倍速度,但是這是有代價的;首先,Intel不會這麼佛心的直接讓Weitek使用387的指令集,所以Weitek的副處理器指令集完全是獨立的,這表示軟體要另外修改;第二,Intel也不會讓Weitek使用386和387的專屬介面,怎麼辦呢?


Weitek 的工程師想出了一個絕妙的方法,首先,他們讓Weitek的副處理器同時接上386的位址和資料線(和287/387不同,他們不需要接位址線,但是跟8087很像),讓它變成386記憶體位址上的一個裝置;然後最妙的來了,Weitek把這32條位址線分成兩個部分:高位址A31-A25用來分辨自己跟其他記憶體位址的區別,低的16位元直接當作指令!

這是甚麼意思?意思是Weitek直接把比較高的記憶體位址佔下來,386的定址線是32bit,如果高位址是0xC000(其實就是A31-A25=1100000),Weitek就認定這是給它的指令,就會把低位址的16bit當作指令,另外資料線的32 bit就當作是資料;換句話說,在386來看,一個Weitek FPU 的指令其實就是一個記憶體的存取動作,也就是「mov addr , data」,mov的位址上半部是0xC000,下半部是FPU的指令編碼,而資料就是從暫存器過去。

可是這樣不就表示沒辦法裝4G的記憶體?別傻了,在那個時代,大部分主機板能夠裝到8MB記憶體已經是偷笑了,換句話說整個記憶體定址空間根本絕大部分都是空的,Weitek當然是老實不客氣的佔地為王。

不過Weitek的光輝年代並沒有太久,Intel在486時把浮點運算器整合到CPU裡面,所以速度變快,可是在CPU外面的4167就沒辦法享受到這個好處,另外,像Intel後來推出只有24條定址線的386SX,Weitek的架構就完全沒辦法使用;1989年的4167之後,Weitek就完全沒有在PC上推出新的浮點運算器;在其他平台上也遭遇到同樣的問題:當其他處理器都內建FPU時,外接FPU就毫無優勢可言,雖然到了90年代初開始轉做繪圖晶片,但是這時候為時已晚,1996年被Rockwell收購下市。

雖然Weitek的時代結束,但是這套直接使用CPU位址和資料線的招數倒是活了下來,在486出現後,ISA介面卡的速度和CPU差距越來越大,剛好那時候視訊繪圖對於頻寬的需求日益增加,有人就想到了同樣的招數,直接從CPU的位址和資料線下手,這就是後來的VL(Vesa-Local) Bus。

沒有留言: