◆HDLのコンパイルについて
使用するボードは、Xilinx社のSpartan3Eスターターキットです。
使用するツールはXilinxのISE 10.1です。
このページは、ISEと、コアジェネレータ等の付属ツールの使用方法を知っている方を対象に書いています。
◆下準備その1
いきなりでごめんなさい。ボードの改造が必要です。
IC16の5番PIN(AUX_CLK)と、J3の48番PIN(FX2_CLKIO)を接続する必要があります。
下の写真を参考にしてください。
この改造が必要な理由
どういう理由でそうなるのか、未だによく解らないのですが、下図のようにすると、70MHz⇔100MHzの乗せ換えをする為のFIFO部分に、大量のタイミングエラーがでて、タイミング制約を満たせなくなってしまいます。
しかし、下図のように、一旦100MHzのクロックを一旦FPGAの外に出して、CLK_AUXからもどしてやると、タイミングエラー無しで、あっさり配置配線が終了します。
筆者の勝手な推測ですが、おそらく、NGのケースでは、70MHzと100MHzのクロックの位相差をISEが計算できてしまう為、本来、非同期なので満たさなくてもよいFIFOの2つのクロック間の信号受け渡し部分のSetUp/Holdを満たそうとしてタイミングエラーとなってしまい、OKのケースでは、2つのクロックの位相差を計算できないので、潔く非同期のパスとして処理しているので、タイミングエラーが出なくなるのでは? と思っています。
あるいは、単純にGlobal配線リソースの問題なのかもしれません。
どなたか、本当の理由をご存じの方、教えて頂けるとありがたいです。
◆下準備その2
CORE Generatorが出力したファイルを勝手に配布して良いのか自信がなかったので、DCMと、FIFOのデータは配布パッケージには含まれていません。以下を参考に、生成する必要があります。
全部で、DCMを2個と、FIFOを4個生成する必要があります。
それぞれの名前を
dcm1
dcm2
Fifo8bx16w
Fifo32bx512w
Fifo38bx16w
Fifo68bx16w
として、CORE Generatorで作ってください。
この後の合成の事を考えると、作業ディレクトリは、
~SYN\P3dSysTop
の直下が良いと思います。
★1個目
dcm1
dcm1(1/5)
dcm1(2/5)
dcm1(3/5)
dcm1(4/5)
CLK2XがLocalRouting
dcm1(5/5)
Calculateボタンを押すのを忘れずに!
★2個目
dcm2
dcm2(1/4)
dcm2(2/4)
dcm2(3/4)
dcm2(4/4)
★3個目
Fifo8bx16w
Fifo8bx16w(1/5)
Distributed RAMです。
Fifo8bx16w(2/5)
Fifo8bx16w(3/5)
Almost Full Flagを忘れずに
Fifo8bx16w(4/5)
Fifo8bx16w(5/5)
★4個目
Fifo32bx512w
Fifo32bx512w(1/5)
Block RAMです。
Fifo32bx512w(2/5)
Fifo32bx512w(3/5)
Fifo32bx512w(4/5)
Programable Flagsを使用してます
Fifo32bx512w(5/5)
★5個目(あと少しだ! がんばれ!)
Fifo38bx16w
Fifo38bx16w(1/5)
Distributed RAMです。
Fifo38bx16w(2/5)
Fifo38bx16w(3/5)
Fifo38bx16w(4/5)
Fifo38bx16w(5/5)
★ラスト!
Fifo68bx16w
Fifo68bx16w(1/5)
Distributed RAMです。
Fifo68bx16w(2/5)
Fifo68bx16w(3/5)
Fifo68bx16w(4/5)
Programable Flagsを使用しています。
Fifo68bx16w(5/5)
大変お疲れ様でした。 これで準備は完了です。
◆論理合成と配置配線とROM化とFlashへの書き込み
上記のCORE Generatorで生成したファイル一式を、
~SYN\P3dSysTop
の直下に置いて、
ISEから、
~SYN\P3dSysTop
にある、
P3dSysTop.ise
を開いてください。
以降の操作は説明不要ですよね。
ちなみに、配置配線後のレポートだと、全部で4656スライス中、4634スライス使っています。(使用率:99.5%)
ぱっつんぱっつんです。
無事、Flashへ書き込めたら、次はデバッガの使い方です。
こちらを参照してください。