CoolRunnerⅡを試してみた2

December 30, 2015

次にCPLDにプログラミングする(回路データを書き込む)方法を調査しました。

プログラミングするためにはダウンロードケーブルを用意しないといけないのですが、純正のケーブル(225ドル)やDIGILENT社のJTAG HS2(59.99ドル)は高いですし、XilinxのHPで回路図が公開されている(つまり自作できる)パラレルケーブル(PC3)はパラレルI/Fのある古いPCが必要(しかも最新のiMPACTでは未対応)で、今更そんなPCは持っていません。さて、どうしたものかとググってみたら、USBコントローラFT232R/245Rを使用してプログラミングするソフト(PROG_CPLD)を公開されている西田ラヂオ氏のページが見つかりましたので、ありがたく使わせていただくことにしました。USBコントローラについては、FT232RLを使用した秋月のモジュールを購入(950円)しました。

このモジュールとCPLDとの接続は下記の図のようにしました。モジュールのジャンパは出荷時から変えていません。右図はCPLDの方です。CPLDの内部電源(1.8V)はダウンロードには不要かなと思っていたのですが、供給しないとダメみたいです。ちなみに電源については5Vを3端子レギュレータで3.3V(JTAG用)と1.8V(CPLD内部用)に変換して作りました。

名称未設定

今回の回路はブレッドボード上に実装しました。電源回路は画面には写っていませんが、3端子レギュレータ2つ(1.8V,3.3V生成用)を使っています。CPLDの変換基板は2列のピンヘッダをつけてしまい、ブレッドボードにさせなかったため、ジャンパ線で接続しています(足をつけていたのはこのためです)。

次に、プログラミングするためのテスト用SVFファイルを作成します。ざっくり手順を書いておきます(使用したISE Design Suiteのバージョンは14.7(2015/12現在の最新版)です)。

  1. ISE Design SuiteのISE Project Navigatorを起動してプロジェクトを作成(ターゲットはxc2c32a-6VQ44)
  2. ソースを新規追加し、適当な回路をVerilogで記述(今回は1入力1出力のインバータを作成しました)
  3. User ConstraintsのFloorplan IO Pre-Synthesisを右クリックし、RUNを選択→PACEが起動する
  4. PASEで入出力を各ピンに割り当てて(意味があるかわからないが、I/O StdはLVCMOS33にしておく)保存し、PACEを閉じる→Project Navigatorに戻る
  5. Generate Programming Fileを右クリックし、RUNを選択→SVFの作成で必要となるjedファイルがプロジェクトのフォルダに生成される
  6. ISE iMPACTを起動し、Automatic Project File LoadでNO, New iMPACT ProjectでCancelを選択、左上のiMPACT Flowsの枠にあるBoundary Scanをダブルクリック→右側の領域に「Right click to Add Device or Initialize JTAG chain」と小さい文字で表示される
  7. 右側の領域を右クリックしAdd Xilinx Device…を選択し、先ほど生成されたjedファイルを指定する→TDI,TDOにつながったチップ画像が表示される
  8. チップ画像を右クリックしてOne Step SVFを選択する→SVFファイルが生成される(ファイル名はdefault.svf)。生成される場所は下のコンソールのログに出ているので確認する

ようやく、プログラミングの準備ができましたので、PROG_CPLDを使ってプログラミングを試みました。しかし、結果は失敗です・・・。どうやら、SVFファイルのパースで失敗してしまったようです。もしかしたらISEのバージョンが新しいため、SVFの出力方式が変わったのかもしれないですね。

幸い、PROG_CPLDのソースファイルも同じページで公開されていたため、これを改造してみることにしました。

SVFの仕様は全く知らなかったので、手探り状態でなかなかうまくいかなかったのですが、いろいろソースをいじくった結果、ついにダウンロードに成功しました!改造したソースとビルドしたexeファイルはここに公開しています(GPLライセンスです)。※ビルドするにはftd2xx.h, ftd2xx.libが必要です。