科学用計算機のためのニブル指向CPUの構築
クラシックな科学用計算機の体験を再現しようとする試みは、ハードウェア設計とコンピュータアーキテクチャの魅力的な交差点へと導きます。高精度な十進法計算機を構築することが目標である場合、従来のCPU(Z80や6502など)の標準的なバイト指向アーキテクチャは、助けになるどころか、しばしば障害となります。
gdevicによって開発されたこのプロジェクトは、十進法計算のために特別に最適化されたCPUを作成するために、ハードウェアのベースレベルに戻るというアイデアを探求しています。VerilogでカスタムCPUを設計することで、ハードウェアアーキテクチャをデータ表現(具体的にはBinary Coded Decimal (BCD))に合わせることが、カスタムチップ上で高精度な科学計算を実現するための最も効率的な方法であることを、このプロジェクトは示しています。
アーキテクチャの選択:なぜニブルなのか?
このプロジェクトの核心は、CPUを「ニブル指向」にすることに決定した点にあります。標準的なコンピュータでは、バイト(8ビット)がメモリの最小のアドレス指定可能な単位です。しかし、BCDとして数値を保持する科学用計算機の場合、各十進数字は4ビットのニブルによって表されます。
もし標準的な8ビットCPUを使用した場合、プロセッサは単一の数字を分離するために、ビットシフトやマスキング操作を常に行わなければなりません。4ビットのニブルを自然なデータ幅とし、メモリがニブル単位でアドレス指定可能であることを保証することで、設計者はこのオーバーヘッドを排除できます。ハードウェアは十進数字で「考える」ように構築されており、BCD算術の実装をはるかに合理化しています。
カスタムCPUの技術仕様
システムは、命令メモリとデータメモリを分離し、命令フェッチとデータのフェッチを同時に、より効率的に行うことを可能にするハーバード・アーキテクチャに基づいて構築されています。主な技術的コンポーネントは以下の通りです:
- 12-bit ISA: 計算機の特定のニーズに合わせて設計されたカスタム命令セットアーキテクチャ。
- 8-state Execution FSM: 命令実行サイクルを処理する有限状態マシン。
- Hardware Stack Guard: スタックオーバーフローを防ぐための専用メカニズム。マイクロコードのデバッグ用に特別に設計されたFAULT状態を備えています。
- CORDIC Algorithm: 三角関数を扱うために、このプロジェクトではCORDIC (Coordinate Rotation Digital Computer) アルゴリズムを利用しており、14桁の有効数字の精度で検証されています。
- Custom PCB: 最終的なハードウェア実装には、EasyEDA/JLCPCBで設計された、バッテリーと充電回路を備えたカスタムPCBが含まれます。
ソフトウェア・スタックとツールチェーン
ハードウェアは方程式の半分に過ぎません。CPUを計算機として機能させるために、このプロジェクトには包括的なソフトウェアおよびソフトウェアシミュレーション・ツールチェーンが含まれています:
Two-pass Assembler: Pythonで記述されており(約700行)、このアセンブラはカスタムISAをマシンコードに変換します。
Verilator + Qt Framework: これにより、同じVerilogソースコードを、シミュレーション、デスクトップGUIデバッガー、WebAssembly、および実際のFPGAハードウェア上で、いくつかの環境で実行することが可能になります。
Microcode Scripting: マイクロコードの上にスクリプト言語が実装されており、、ハードウェアロジックの変更を必要とせずに、新しい機能を計算機に追加することが可能になります。
レガシーと影響
このプロジェクトは、科学用計算機のクラシックな時代、特にHPの製品へのオマージュです。あるコメント主が指摘したように、70年代や80年代の伝説的なHPの計算機は、その堅牢な構造と、逆ポーランド記法 (RPN) の使用で知られていました。RPNは、複雑な式において括弧を使用する必要をなくします。
"HPの計算機を持っていることの最良の点は、堅牢な物理的構造でした... 精度、そして、クラスメートが計算機を借りようとするときに、あなたが彼らにRPNを知っているかどうか尋ねると、彼らが恐怖に引き起こされることでした。"
これらの初期の科学用計算機のロジックを再現することで、このプロジェクトは、現代のFPGA設計と、パーソナルコンピュータの黎端期を定義づけたクラシックなアーキテクチャの決定との間の溝を橋渡ししています。