Macの奴隷の臍茶な話
渡邊鼎の!言いたい放談!
 

11:Motorolaって、CPU設計が変!な時もあったねー!!! 

MotorolaのCPUと言えば、有名な物が、古くは6800系、次に68000系ですね。

その後、DSP56000系96000系などあったが、PowerPC系、ColdFire、Embedded向けPowerPC系などと変遷してますね。

6800系が一応8080系、Z80系の向こうを張って売れたんですが、16bitに移行するとき68000となりましたね。なん〜ちゅう、すんごい昔の話じゃ!!

その当時、DECのミニコンの命令系統が直交性がよく、すっきりした命令系統であったのを見習ったのか、68000系では、Z80,8086などのいわゆる電卓向けのCPUから派生した直交性がよくない命令系統の(玄人受けしない)CPUの向こうを張って、なかなか評判のよい命令系統のCPUを作り上げました。その後68020,68030,68040などとやってったんですが、なかなか期待したほどには早くならないんですね、これが。

CPUを動作させるのにはクロックに同期させて動作させるんですが、CPUと主記憶などの通信の時も、DECなどがやっていた同期型を見習ったのか、主記憶を読み書きするのにクロックに同期して順番に動作させていたんです。非常に理路整然としていて、非がないように見えたんですね。これが。

これをタイミングチャートで書くと以下のような感じですね。(68000の場合)

CPUがメモリーアクセスを開始する為、S0でまずアドレスをアドレスバスに出し始めます。次にCPUがメモリーアクセスを始めることを外部に知らせるため、S2でASをTrueにします。次に外部の主記憶装置からデータを読み出し準備が出来たことを知らせる信号を受け付け始めます。これはDTACKという信号をクロックのS4の立ち下がりで見て、Lowでなければ1クロック待ち再度チェックします。Lowならその次のクロックの立ち下がりでデータを読み込みます。そして、ASなどをFalse(High)にします。

というふうに、クロックに同期して、順次確認しながら実行していくわけです。

外部回路はこれに合うようにDTACKを出したりメモリーを動作させ、読んだり書いたりするわけです。すると、外部回路に要求される応答スピードのクリティカルポイントとしては、AS/がアサートされてからDTACKを出すまでがどれくらい早く応答して出せるか、ということになります。これをいかに早くするか、及び、その後メモリーからデータを読んできてデータバスに乗せ、CPUがデータバスを読み込むタイミングに間に合うように用意する迄の時間を高速にしないといけません。

昔、メモリーの動作速度が遅いときはこのようなタイミング設計でよかったのですが、十分早く動作するようになり、なるべくCPUを速く動作させたいと考えるとき、上記タイミングは無駄があることになります。

まず、アドレスとASに1クロックの遅れがあり、無駄である。次にDTACKの確認の1クロック後にデータをCPU内に取り込んでいる。これが無駄。だって、外部回路で間に合ったと教えている(DTACK)タイミングで同時にデータをも取り込んでも良いでしょう。間に合わなかったことが解ったら、いっぺん取り込んだデータをその次に内部で使用すること自身を進まないようにすればいいだけですから。

結局、先ほど書いた、外部回路からのReady信号と、Data信号を同時に取り込んでも大丈夫という考えが思いつかなかった、取り込んだ後間に合わなかったら取り込んだデータを無視し、次の動作を止めておく、という考えが思いつかなかった、というのがMotorolaの失敗だと思います。ま、この辺までは、他社もにたようなもんですからいいんですが、問題はこの次に、RISCが出てきてもっと高速化をしなければならないときに68020とか68030でバス構造を変えたときにとった手法です。

結局ASを半クロック早く出し、DSACKによって1Byte〜4Byteなどでの読み書きを変革したんですが、まだDSACK-DATAの1クロック遅れ読み込みは同じです。よって、このときも外部回路の高速化限界はASからDSACK迄の時間でかなり決まってしまいました。

このときに、同時に取り込むことはできたはずです。なぜしなかったのか、このへんはなぜかは解りませんが、なにか開発担当者の人たちに一つの思いこみがあってこういう考えに至らなかったような気がします。

68040になったときは、ASはTSとなりDTACKに相当するTAという信号になり、データとTAを同時に取り込んで処理するようになり、最速2バスクロックで終了できるようになりこれまでよりは早くなりました。

でもこのころ、他社では1クロックの立ち上がりと立ち下がりで動作させ、1クロックでバスサイクルが終了するもっと高速のCPU-バス間の通信方式をとっている物もありました。

機器組み込みの世界では非常に多くのシェアをとった68000系だったんですが、68000から68020,68030に移行するとき、バス構造を似たものに踏襲しなくてはいけなかったと感じてそうしたのかどうか、わかりませんが、そのような感じもします。

しかし、結局68040に移行したときまるっきり変えたんですから「何やってんだろうな」と感じたのは私一人だけではなかったと思います。結局ユーザーが欲しかったのは、ソフトのバイナリーコンパチだったんですから。


[Home] [Linkし放題] [Fleamarket]