XC3S50-4VQ100Cのconfigを自分でやる件です.(config ROMを使わずに)
今回は、FLASH→FPGAの流れについてです.
FPGA XC3S50 の回路図はこちらです.
config信号を配線したコネクタがこれです.
それ以外の信号をArduino側回路図に接続して回路は出来上がりです.
↓config信号の概念図はこれです.
HSWAP in config中は0にする、あらゆるpinを内部pullupする役割
M[2:0] in slave serial modeにするには111にする
CCLK in serial clock
DIN in serial data、LSB 1stで入れる
PROG_B in config開始のゴング、0でconfig開始.すぐ1に戻す
DOUT out serial data出力、ここでは使わない
INIT_B inout PROG_B直後は0、config準備が整ったら1になる
DONE inout config中0、config終了したら1
CPUが制御するのはCCLK,DIN,PROG_B,INIT_B,DONEの5本です.
CPU制御をポエム風に語りますとこんな感じ.
①半田付けで固定してしまうpin
M[2:0]=0b111
HSWAP=0
②CPU起動時初期設定
PROG_B=1
CCLK=1
③開始のゴング
PROG_B=0 → 1mSec wait → PROG_B=1
④INIT_B=1になるまでpoling wait
⑤FLASHの先頭から順にbit serialで1byteずつLSB 1stで出す(DIN,CCLKへ)
ただし、FLASH上のconfig data(54kB)よりも256byte多めに出す
(この理由は、FPGAがconfig後に余分なCCLKを要するため)
⑥ ⑤のbyte送出毎にDONEをpolingする.DONE=0なら⑤へ
⑦ DONE=1につき終了
ーーーー
以下はsourceの説明です.
Arduino sourceを置きます(zip)
おなじみのsetup()で、こんなことをやっています.
searchBin();
dispStatus();
FPGAWrite();
searchBin()はFLASHのbottom addressからゼロ番地へ向かって非FFhが現れるaddressを探します.消去済FLASHはFFhになります.この操作の理由は、.binのサイズが正確にはわからないので、現物のサイズを調査するため.
変数dataLenに.binサイズを代入しますが、サイズを+256しておきます..binを全部FPGAに与えた後に追加のclockが必要なのでその対応です.
dispStatus()は、addressなどの表示です.表示するだけ.
FPGAWrite()がconfigの本体.やってる事は上に書いたポエム風そのものです.注意すべきはLSB 1stってとこぐらいかな.FPGAへ流し込む量は変数dataLenが所持しています.
詳しくはsourceを見てちょ
追記:ArduinoからSTM32C011に移植します.プリント基板を作ります.
かしこ
0 件のコメント:
コメントを投稿