http://www.opencores.org/projects.cgi/web/mcpu/mcpu.pdf
この論文が最初に発表されたのは2001年で、私が知ったのは2002年か2003年だったと思う。知っている者にとっては、ああアレか、って感じだが、最近内容が更新されたみたいなので紹介しようと思う。8ビット系では私の知る限り世界最高の激シンプルナノピコプロセッサである。
猫にも判る良論文なので揚げ足や突っ込みを入れたくないが、タイトルの CLPD は CPLD が正しい。タイトルだけ変で本文はちゃんと CPLD になっているのが不思議。発表された時からそうなっていて未だに修正されてないのは何故?(汗) で↓がそのプロセッサのデータパス図だ。この極小8ビットプロセッサの命令セットは僅かに4つ。ニモニックで書くと、nor,add,sta,jcc だけである。更に演算用として使えるレジスタはアキュームレータしか存在しない。にもかかわらず、2つの自然数のGCD(最大公約数)をユークリッドの互除法(の変形)で求めるサンプルコードが示されている。
ALUにaddとnorの2つのファンクションしかなくても、巧く使えば算術・論理演算はどうにでもなることを示しているわけだ。遥か昔の4ビットマイコンも命令が極めて少なく、命令を(マクロで)自分で作ってあらゆる演算に対応していたわけで、こういうコードを見ると実に懐かしく思う。単価数十円の時計マイコンは今でもそうかも知れないが。
さて、MAX2で動かすという前提でQuartusIIにVHDLソースを入れて最適化設定を変えながらタイミング解析を行ってみると次のようになった。 fmaxはTimeQuestタイミングアナライザの結果である。
・Speed優先:47LEs,fmax=152.7[MHz]
・Balanced:39LEs,fmax=142.82[MHz]
・Area優先:39LEs,fmax=142.82[MHz]
MAX2のような廉価CPLDで動かしてすら(キャリの立ってない時のjcc実行を除いて、1命令を2クロックサイクルで実行出来るマシンなので)約75[MIPS]という恐ろしげ(汗)な性能を持つプロセッサだということが出来る。
勿論、外付けでクロックとプログラム用メモリ(RAMかROM)あるいは何かしらのMemory mapped I/Oを付けないと意味がない。またアドレスが6ビットなので64バイトのアクセス領域しかなく、何が出来るというわけでもないが、コレをベースに自分で命令セットを弄ったり拡張してみると、プロセッサの本質(の一部ではあるが)を、より深く理解することが出来るのではないかと思う。
> 何が出来るというわけでもないが、
たしかに…
I/Oがないので外部のコントロールができない
少なくともI/Oがないと遊べない
命令を増やすかアクセス領域を広げて
一部をI/Oにあてるか
XC9536にものると書いてあるので少し拡張すれば
それなりに使えるかも?
セルが36のところに32のものをのせたら
拡張できないか…
もう少し大きいのを使えって…
いらっしゃいませ、コメントありがとうございます。
このプロセッサは、計算機工学初心者向けの学習用教材としては面白いと思います。計算機の非常に基本的な構造が示されており、動作を実現する機能間の最低限の関連性を即座に理解できるからですが、実用性はないに等しいので「シミュレーションで動かしてちょっと遊んでみる」という程度でオワリでしょう。それでも充分「プロセッサとは何か」を理解する足掛かりにはなるかと思い、このブログで採り上げてみただけでした。