せーさく中の基板は XC2S100E + XCF01S がコアになっている。 とりたてて好みとか都合があったわけではないんで、当時一番安かった組合せ、1 ペアで 2200 円なり。
コア部分だけ組み上げ、テストプログラムを書き込もうとしてつまずいた。 naxjp が XC2S100E も XCF01S もサポートしてねー ... 泣く泣く 1 周目は iMPACT 使ったけど、 やっぱ naxjp が使えたほうがいろいろ取り回しがよろし、というとこで実装してみた。
NP1003D には XC18V01 が載ってるが、新旧のどちらかは不明。 naxjp 0.79 のサポートは旧 XC18V01 まで。 新 XC18V01 は旧 X18V01 とはアルゴリズムが微妙に非互換で、naxjp 0.79 では書けない。 XCF01S の書き込みアルゴリズムは新 XC18V01 に同じ。
書き込みアルゴリズムの相異点に関する話はアプリケーションノート xapp058 のサンプルプログラム eisp_pc.zip に含まれるドキュメント readme_xc18v00_xcf00s.txt が図入りで分かりやすい。 要約すると新旧の非互換部分は 2 つ:
@@ -165,7 +170,8 @@
PrintMessage("ferase");
csi->SetTDI(Num,0xec); //FADDR CODE
csi->OutputSIR(false); //TDOチェックしない
- csi->RunTestIdle(100000);
+ ClockTCK(false);
+ csi->RunTestIdle(15100000);
return true;
}
@@ -533,6 +539,7 @@
PrintMessage("fpgm");
csi->SetTDI(Num,0xea); //FPGM CODE
csi->OutputSIR(false); //no TDO check
+ ClockTCK(false);
csi->RunTestIdle(14000);
printm(".");
}
IDCODE のチェック部に XCF01S (0x5044) 等を付け加えるのは略。
なお、同じ XCF ファミリでも parallel 書き込みモードをもつ XCFxxP シリーズはまた書き込みアルゴリズムが違うらしい。 同じ方法では XCFxxP で動かない ... のかな。
# naxjp -bypass XCV100Eでいける ... と楽で良かったんだがそういう訳にはいかなかった。ちぇ。 Spartan IIE は Spartan II と同じ config アルゴリズム (xapp188) を持ち、 Virtex E のアルゴリズム (xapp139) とは異なると。
てことで Spartan II と同じ手順でバイパスするため、そっちのソースに Spartan IIE の IDCODE を付加しておく(alg2s.c)。
@@ -27,6 +27,8 @@
break;
case 0x0614: //XC2S100
break;
+ case 0x0a14: //XC2S100E
+ break;
case 0x0618: //XC2S150
break;
case 0x061c: //XC2S200
てな感じ。留意点ふたっつ。
てあるので、コードそのものはだせない。問い合わせ中。2. NAXJPの仕様が固まるまでは、改変したものを配布しないでください。
続報: この件、「ださんでくれ」つーことなので、必要な人は自前で書くか、暫く待ちましょう。 ← お返事
ついでに パラレルケーブル以外の、USB 経由などの高速書き込みへの野望とかも世に散見するが、 新 ROM の erase には絶対に 15 秒かかるので、 データ転送時間が 20 秒 → 1 秒になったとこで書き込み時間は半分にしかならないのであった ...。
ターンアラウンドタイムを短くするには、FPGA への USB 経由なりでの直接書き込みできるようにせんといかんと。 基板そのものは Spartan IIE の configuration のすべてのモード (xapp176) に対応させてあるので、 USB 経由 SelectMAP mode 書き込みの実験くらいは出来る ... ま、そのうち考えよう。