{{category 電子工作}} !!!やりたいこと *Xilinx の ISE が吐く .bit ファイルから、コンフィグ ROM を使わずにマイコン経由で SpartanII をコンフィグレーションしたい。 !!!.bit ファイルを使ってスレーブシリアルでコンフィグする *[FPGA FAQ の .bit ファイルヘッダ部解説|http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm] *上記の解説でほぼわかるのですが、ちょっと誤植があるので注意(Field 4 が2つあったり、raw bit stream の長さの桁が多かったりする)。 **FPGA FAQ から引用したヘッダの例(誤植を訂正してまとめました。) 00000000: 00 09 0f f0 0f f0 0f f0 0f f0 00 00 01 61 00 0a *.............a..* 00000010: 78 66 6f 72 6d 2e 6e 63 64 00 62 00 0c 76 31 30 *xform.ncd.b..v10* 00000020: 30 30 65 66 67 38 36 30 00 63 00 0b 32 30 30 31 *00efg860.c..2001* 00000030: 2f 30 38 2f 31 30 00 64 00 09 30 36 3a 35 35 3a */08/10.d..06:55:* 00000040: 30 34 00 65 00 0c 28 18 ff ff ff ff aa 99 55 66 *04.e..(.......Uf* ,フィールド 1 ,2 bytes ,フィールド長 0x0009 (big endian) ,9 bytes ,some sort of header ,フィールド 2 ,2 bytes ,フィールド長 0x0001 ,1 byte ,key 0x61 (文字 "a") ,フィールド 3 ,2 bytes ,フィールド長 0x000a (デザイン名に依存) ,10 bytes ,デザイン名 "xform.ncd" (後に続く 0x00 を含む) ,フィールド 4 ,1 byte ,key 0x62 (文字 "b") ,2 bytes ,フィールド長 0x000c (パーツ名称文字列に依存) ,12 bytes ,パーツ名称文字列 "v1000efg860" (後に続く 0x00 を含む) ,フィールド 5 ,1 byte ,key 0x63 (文字 "c") ,2 bytes ,フィールド長 0x000b ,11 bytes ,日付文字列 "2001/08/10" (後に続く 0x00 を含む) ,フィールド 6 ,1 byte ,key 0x64 (文字 "d") ,2 bytes ,フィールド長 0x0009 ,9 bytes ,時刻文字列 "06:55:04" (後に続く 0x00 を含む) ,フィールド 7 ,1 byte ,key 0x65 (文字 "e") ,4 bytes ,フィールド長 0x000c9090 (デバイスタイプ、ram bit stream 長に依存) ,823440 bytes ,0xffffffffaa995566 の sync word で始まる raw bit stream。 ,,↑これを FPGA に送信すればいい *スレーブシリアルでプログラムをするには、M0-M2 をすべてオープン(PULL-UP状態)にして、'''/PROGRAM''' を'''H->L->H''' してプログラムモードにした後、'''/INIT''' が '''L->H''' に戻るのを待つ。 *あとは .bit ファイルから、raw bit stream のところだけ取り出して、1バイトずつ '''上位ビットから''' '''DIN''' を内容のとおりに動かし、'''CCLK''' を '''L->H''' してやればいいということ。 !!!サンプルプロジェクト(ページ最下部に添付。無保証) *ストロベリーリナックス製の SpartanComplete基板(H8/3069F + SpartanII(XC2S200))をターゲットにしてテストしたサンプルプロジェクトです。 *プロジェクトファイルは Renesas製 H8S,H8/300 C/C++ Compiler 6.2.0 + Hew 4.03 で作成してあります。バージョンが古い方は Update してください。 *SCI1 から 115200bps (Debug ビルドは Hterm にあわせて 38400bps) で .bit をそのままバイナリ転送してやると、ヘッダを解析(ってか、raw bits を取り出してるだけ)して、CCLK と DIN をパカパカするだけのプログラムです。 *Spartan Complete に添付されていた「楽チン FPGA」の H8 用ファームとほぼ同じような機能です。 *「楽チン FPGA」と違う点 **巷でデファクトになっている、Renesas さんが配布されている Hterm を使ったモニタで動作します(もちろん直接焼くこともできます)。モニタを使用した場合には、モニタでロード>FPGA ロード のシリアル2段ブート可能。 **ソースが改変できますので、コンフィグした後、ユーザプログラムを実行できます。また、他の H8 マイコンや AVR 等にも容易に移植可能と思われます。マイコンの空き Flash 領域に .bit の内容を置いたり、最近流行の MMC(SD)からコンフィグしてもいいのではないかと思います。 *TeraTerm Pro のファイル転送(バイナリのチェックボックスにチェックを忘れずに!)で正常動作を確認しています。 **Release ビルドで H8/3069F の内蔵 FLASH から動作(115200bps)。 **Debug ビルドで H8/3069F 用にコンフィグされた Renesas 製 Hterm 対応モニタから動作(38400bps)。 *純正コンパイラをお持ちでなくても、Release ビルド側の .mot を焼けば動作しますが、ポートは SpartanComplete と同じである必要があります。 **ポート設定はプロジェクト内のソース、 spartan.h をご覧ください。 *ライセンスは NYSL(煮るなり焼くなり好きにして) とします。なにかの参考になれば幸いです。 *関連ページ:[[Avnet Spartan-3A Evaluation Kit を Config する]]