FPGA オートコンフィギュレーション
概要
FPGAのコンフィグレーションファイルのシリアルPROMへの書き込み、及びFPGAの自動コンフィギュレーションをSiTCPを介して行うことができるようにします。FPGAの
コンフィギュレーション用ピンにリセットがかけられるようにポンプ回路のようなものを実装しています。
ソースコード/プログラム
- FPGAソースコード(ファームウェア)
SPI_TEST.zip
Spartan3Aのスターターキット用のプロジェクトファイルとSPI_IF.vが入っています。 - プログラム(ソフトウェア)
FPGA-Config.zip - 回路図
FPGA周り、RAM周り
ソースコードの説明
SPI_IF.v
SiTCPからのRBCPの信号を受けてシリアルPROMとやりとりをします。
0x00-0x03 : FPGA Version ID(RBCPの読み取り)/ バッファの読み出し/書き込み開始アドレスの指定(RBCPの書き込み)
0x04 : User Input
0x05 : Control command (4bit) / Control command length (4bit)
0x06-0x07 : シリアルPROMに書き込むデータの長さ
0x08 : シリアルPROMのコマンド(WRITE,READ,WRITE ENABLE など)
0x09-0x0b : シリアルPROMの書き出し/読み出し開始のアドレス
0x1D : テスト用。このアドレスに0xF0を書き込むとLEDが光ったり、消えたりします。(トグルされます)
0x1F : コンフィグ(reboot)のスタート。このアドレスに0xFFを書き込むとコンフィグがスタートします。
0x800-0xFFF : FPGA内のRAMアドレス。自由に書き込みができます。
使用していないレジスタは自由に使えます。ただしFPGAのファームウェアを修正しないといけません。現在のファームウェアでは実質的に使用できるレジストは上記のみです。
システムクロック
SPI_IFを駆動するクロックの周波数によって、SPI_IFモジュールのポートdiv_valueに接続する値が決まります。
~ 40MHz : 2'd1, 40MHz ~ 160MHz : 2'd0 or 2'd2, 160MHz ~ : 2'd3
プログラムの使い方
添付しているプログラムはPythonで記述されています。
- プログラム実行前にmcdfile_folderにISEで生成したspi用のmcsファイルをコピーしてください。
- config_folderのconfig.txtに、1行目:mcsファイル名、2行目:通信を行うSiTCPのIPアドレス、3行目:通信を行うSiTCPのUDPのポート番号を書いておきます。
- fpga_configuration.pyを実行します。(fpga_configuration.pyが置かれている場所で実行)
- config_folderのconfig.txtに記述されているmcsファイル、IPアドレス、ポート番号を読み取ります。
- mcsファイル変換をパスするか聞かれます。基本的にはNoを選択してください。
- mcsファイルの変換、PROMのイレイス、PROMへの書き込み、Verifyが行われます。
- 4がすべて終わると最後にFPGAを再コンフィギュレーション(reboot)するか聞かれます。
Yesなら、reboot用の信号がFPGAに送られてコンフィグを開始します。