2007.5.25 fpgaparkへ移行。ドキュメント追加
MR16概要
MR16は、Minimum Resource 16bit RISCの略で、偽X1のサブCPUの置き換えとしてVerilogHDLで書き下ろしたRISC IPです。
アドレスバス、レジスタなどは全て16bit幅で、ARM7TDMIやH8/300H等と、クラシックな8bitCPU(i8051,Z80等)との中間規模のCPUです。
プリンストン・アーキテクチャ(インストラクション/データバス共通)を採用しており、簡素で汎用的なメモリマッピングが可能です。
命令セットはH8/300H等に類似した見通しのよい一般的なアーキテクチャを持っています。
Xilinx FPGAデバイスに最も小さくなるように設計されており、他の互換8bitMCUのIPより小さく実装できます。
メモリアクセスを伴う命令は2クロック要しますが、それ以外は分岐命令も含めて1クロックで動作します。
メモリアドレスは1クロック先出しなので、同クロックのFPGA内蔵BlockRAMを直結できます。
FPGA内蔵BlockRAMだけをメモリにすればSpartan3のエリア最適化でも32MHz超で動作します。
Xilinx Spartan3にフィットするように専用設計されていますが、標準言語で記述しているので他のFPGAやCPLDでも動作するはずです。
非同期乗算機とレジスタRAMをネイティブプリミティブで持たないFPGAでは回路規模や速度が低下してMR16のアドバンテージが低下します、そこはSpartan3専用設計なので。
CPUを作るのは、私にとってはとても面白く有意義な作業でした。
MUXソースのタップ位置を1つ変更するだけで、FreqMAXが2倍になったりします。
みなさんも、自分のお気に入りFPGAに特化したCPUを書いてみてはいかがでしょうか?
MR16仕様
※仕様に関するドキュメントは現在準備中で、完成次第、随時更新予定です。
CQ出版社の
Interface誌2007年6月号p170-178に解説記事が掲載されています。
ブロック図(準備中)
レジスタマップPDFファイルです
命令デコードマップ PDFファイルです
命令セット一覧 PDFファイルです
コンディションコード PDFファイルです
更新履歴(準備中)
開発環境
寒河江氏が公開されているフリーウェアのマクロアセンブラAASM(Ver.3.71以降)用のマクロを用意してあります。
デバッガは現在ありません。シリアルポートからダウンロード/実行する為のローダーを準備中です。
Cコンパイラは現在ありません。どなたか挑戦される方はいらっしゃいませんか?
DOWNLOAD
MR16 CORE Ver.2007.4.4 MR16コアVer.2007.4.4版のVerilogHDLソースコード
MR16 instruction macro for AASM 3.71 Ver.2007.3.30 AASM 3.71対応MR16用アセンブラマクロ
16bit Timer+GPIO Sample タイマ+割り込みコントローラ+GPIOを追加するサンプルモジュールソース
Spartan3StarterKit用開発パッケージ(要望待ち)
IcarusVerilog/IVI(0.4)対応、逆アセンブルトレース付きシミュレーションモデル(要望待ち)
サポート、連絡先
暫定的にこちらの掲示板でサポートしていますので、使ってみたい方はそちらへ書き込んでください。
メールでの問い合わせは下記アドレスへお願いします。
実装事例
●偽X1用マルチスレッド、マルチファンクションサブCPU
−80C49サブCPUエミュレーション
−MB8877A(FDC)/.d88(イメージファイル)エミュレーション
−FDDシーク音エミュレーション/PCM再生ドライバ
−PS/2キーボードドライバ
●組み込みシステム開発評価キット用リモートメモリモニタ用制御プロセッサ
−調歩同期シリアルポート
−BLANCAシステムバスホストコントローラ
●組み込みシステム開発評価キット用インテリジェントPS/2ホストコントローラ
−PS/2仮想シリアルインターフェース
−PS/2キーボードホストコントローラ
−PS/2マウスホストコントローラ
−BLANCAシステムバスデバイスコントローラ
2005.4.12版 旧バージョンについて
以下の重大なバグが発覚したため2005.4.12版の公開は終了しました。新バージョンへの切り替えをご検討ください。
・アドレス範囲が 0?ff?h(bit11-bit4が全て1の時)で実行されるJSR命令は正しく機能しません。
・N,Vを扱う条件分岐命令の条件判定が正しくありません。