◆PSM3DのドキュメントINDEX
とりあえず、てっとり早く動かしてみたい方は、こちら
◇はじめに
本ドキュメントの本文や図や表は、RTLやCソースを読む時の参考とお考えください。
ソースの内容と、ドキュメントの内容は、なるべく一致させるよう努力するつもりですが、もし一致しない部分がありましたら、ソースの方が正しいです。
◇PSM3Dのプログラミングモデル
こちら
◇命令セット
32bit固定長です。
筆者にとっての作りやすさを重視してます。 たとえば、レジスタ指定のフィールドは4ビット境界をまたがないとか・・・
こちら
◇プロセッサコアの構成
こんな感じです。
◇プロセッサコアのブロック図
こんな感じです。(でかい図ですみません)
◇FPGAの全体
こんな感じです。
◇周辺も含めたメモリマップ
こちら
◇周辺回路のレジスタ表
こちら
◇VGA-IFに関して補足
2面を合成しながらVGA(640×480)出力します。
◇内部バスのプロトコル
シングル転送しかできないSBUS1と、これをバースト転送できるように拡張したSBUS2があります。
SBUS1
SBUS2(1/2)
SBUS2(2/2)
◇デバッグ機能について
UARTを使って、PCからFPGA内部へアクセスできるようにしてます。
こんな感じです。
dbgUart部の詳細
通信コマンド表
この部分に関しては、汎用性が高いので、いろんな部分に応用できると思います。
このdbgUartを使って、オンチップデバッグ機能(FPGA全体ブロック図中のP3dDbg)をアクセスして、デバッグ機能を実現しています。
P3dDbgのレジスタ表はこれです。
◇DDR-IFについて
6マスタのDDRメモリインターフェースです。
各マスタの優先順位は固定です。
CPU側のクロックと、DDRのクロックが非同期の為、アービタとDDR-IF部の間にFIFOを挟んでます。
このFIFOはライトバッファとしても機能するので、ライト側の性能はそこそこですが、
READ側は、コマンドの行きと、READデータの戻りで非同期FIFOを2回通過するので、レイテンシが大きいです。
このため、キャッシュOFFだとCPUの性能が悲しいほど低下します。
また、VGA-IFでは、この問題を回避する為、READデータの到着を待たずに、連続してREADコマンドを発行することで帯域を確保しています。
DDR-IF部のブロック図はこちら
◇デモプログラム
Cコンパイラが使えるようになってきたので、Cコンパイラで開発しています。
プロセッサ0で、タイマ割込みを使い定周期に”Hello,World!”の文字列を表示用テキストデータバッファへ書き込み、
プロセッサ1で、上記のテキストデータバッファの内容をビットマップフォントに展開してフレームメモリへ書き込んでます。
◇デバッガ(ICE)
初めてC#を使って書きました。
#defineで定数を定義しようとして、いきなりコケる所からスタートしました。
これが無いとデモソフトが動かせないので公開していますが、はずかしいのでソースはあまりジロジロ見ないでください(汗)
使い方はこちらを参照してください。
◇FPGAのコンパイルの仕方
こちらを参照してください。