こちらの記事でCPLDを初めて使いましたが、64bit版Windows10で64bit版ISE 14.7を使ってXC9536にちゃんと書き込めるようになるまでに紆余曲折があったので、備忘録的に記録します。

 

なお、経緯に興味ない人のためにポイントをまとめておくと、

・XC9500シリーズに対応しているコンフィギュレーションソフト ISE は64bit版Windows10に対応していない

・XC9500シリーズ(XLでもXVでもない無印のもの)の一部にバージョン4.1i以降のISEでは書き換えできないものがある

・XilinxアンサーレコードAR#62380に従って64bitのProcess Navigatorが64bitのWindows10で動くようにする

・Blunk氏のドキュメントに従ってISE 14.7の設定を変更する

・以上で64bitのWindows10にインストールしたXilinx ISE Webpack 14.7でXC9536のコンフィギュレーションができるようになる

ということです。

 

◇◇◇


さて、CPLDは事前にその機能を組み込んでおかなければなりません。

そのためにはコンフィギュレーションするソフトやダウンロードケーブルが必要です。

ソフトはメーカから提供されています。無償のものもあります。

ダウンロードケーブルもメーカ純正のものが販売されているんですが、数万円します。

ちょっと試してみるだけなのに数万円の出費はもったいないので、安いダウンロードケーブルがないか調べました。
するとXilinx社にパソコンのパラレルポートを使ったダウンロードケーブル、Parallel Cable III(PC3)の公開情報がありました。回路図も載っているので、自作できます。その情報を元に基板をデザインして発注しました。

なお、PC3は回路としては単なる信号バッファのようです。

ケーブル長を短くしてノイズ耐性を上げれば、直結でもダウンロードできるかもしれません。

 

レトロハードは電源が5Vなので5V電源用のXC9500(無印)シリーズか、3.3V用で5VトレラントなXC9500XLシリーズが必須です。

なので、既にディスコンになっているデバイスですが、まだ在庫を扱っているショップがあったのでXC9536を発注しました。

XC9536を選んだのは、規模的にちょうどよさそうで、現在でも入手できるツールがこのデバイスをサポートしていたからです。

◇◇◇

 

基板と部品が到着するまでの間に時間があるので、VHDLの勉強のためXC9500シリーズを扱えるツールの中で最新のISE 14.7をパラレルポートがあるPCにインストールしました。

このPCは最近WindowsXPからWin10に変更したばかりです。

パラレルポートがあって、かつWindowsをインストールしてあるのはこの子だけなので、選択肢がありませんでした。

 

しかし、インストール自体は完了できたのですが、なぜか起動できません。

 

スタートメニューに登録されたショートカットを一通りチェックしていたら、32bit版のProject Navigatorは動くことがわかりましたので、以後32bit版を使ってVHDLのお勉強を始めました。

 

元々の目的だったMSX-MUSICのアドレスデコーダをなんとか作り、エミュレータでの動作確認も完了します。

 

ちょうどそんな頃、発注していた基板が到着しました。

 

○Xilinx Parallel Cable III基板

 

XC9536は44pPLCCですが、XC9500シリーズには84pPLCCもあります。

そこで44pと84p両方のPLCCソケットを載せられるようにしました。

また、In-SystemでCPLDの書き換えもできるようにJTAGのピンヘッダも付けられるようにしました。

JTAGピンヘッダとPLCCソケットだけ付ければ、JTAG->PLCCの変換基板としても使えるようになっています。

 

○Xilinx Parallel Cable III基板 部品実装後


部品を組み付けて使ってみるも、ダウンロードケーブルとして全く認識しません。

 

PC3のドキュメントに"10.1以降はPC3をサポートしない"と記載があったので、ISE9.2iのインストールを試してみますがインストーラが起動しません。

ISE9.2iの対応OSはWindowsVista/XPなので、Windows10では世代が違いすぎてインストールできないようです。

そこでVirtualBoxとWindowsXPのゲストOSを入れてISE9.2iをインストールしてみましたが、パラレルポートが使えませんでした。

Connecting to cable (Parallel Port - LPT1).
Checking cable driver.
 Driver windrvr6.sys version = 8.1.1.0. WinDriver v8.11 Jungo (c) 1997 - 2006 Build Date: Oct 16 2006 X86 32bit SYS 12:35:07, version = 811.
 LPT base address = 0378h.
 ECP base address = FFFFFFFFh.
Cable connection failed.

ログを見ると、どうやらPC3はECPを使っているらしいです。

VirtualBoxはECPをサポートしていないので、ゲストOSからはPC3を使うことはできませんね。

 

なんとかPC3をWindows10で使えないかといろいろ検証しているうちにProcess Navigatorを経由してiMPACTを起動するのが面倒になったので、スタートメニューから直接iMPACTを起動してみたら、なぜかあっさりとPC3を認識しました。

Process Navigatorから起動したときには認識しなかったので、いろいろ調べたところ、

・32bitのProcess Navigatorからは32bitのiMPACTが起動されること

・64bitOS環境で32bit版のiMPACTを実行するとダウンロードケーブルを認識できないこと

がわかりました。

 

64bitOSでPC3を使うためには64bit版のiMPACTを使わないといけないようなので、またまたXilinxのアンサーレコードAR#62380の情報に従って64bit版のProcess Navigatorを起動できるようにしました。

Process Navigator経由で起動したiMPACTでもダウンロードケーブルを認識できることを確認しました。

 

これでようやくCPLDのコンフィギュレーションができると思いましたが、実際にダウンロードしようとしたら今度はエラーになってしまいました。

Get Device IDもエラーになります。

デバイスIDすら取得できないなんて、Get Device IDコマンドの意味なくない?

IINFO:iMPACT:583 - '1': The idcode read from the device does not match the idcode in the bsdl File.
INFO:iMPACT:1578 - '1': Device IDCODE   :    00001001010100000010000010010011
INFO:iMPACT:1579 - '1': Expected IDCODE:    00101001010100000010000010010011
'1': Check to make sure if version '0000' is supported.

ログを見るとIDCODEの上から3bit目が違います。

XilinxのアンサーズレコードAR#8265:IDCODEの例 によると先頭4bitはversionを表しているようです。

どうやらXC9536には複数のバージョン(リビジョン)があるようなので、次のようにXC9536のBSDLファイルのversionの記述を'0010'から'XXXX'に修正してみたら、Program/Verifyに成功しました。

 

    "0010" &        -- version
       ↓
    "XXXX" &        -- version

 

ようやく目処がついたので、CPLD版のFM音源拡張基板をデザイン/発注しました。

 

基板が届くまで一週間ほどかかるので、ついでに今まで組んだ回路の中で一番複雑だったPC88メモリ拡張基板のTTL部分と、入手困難なTTLの置き換え実験サンプルとしてMSXのメモリマッパーシステムに使う74LS670等価回路&bit数拡張+アドレスデコーダをVHDLで組んでみました。

 

PC88メモリ拡張基板のほうは、端子数はギリギリでしたがマクロセルにはまだまだ余裕ありました。(19/36個使用)

MSXのメモリマッパーシステムのほうは、端子は少し余裕がありましたが、8bitのメモリマッパーはマクロセルが足りず(40/36個必要)、7bitでギリギリでした。(35/36個使用)

XC9572XLも発注していますが、自分の工作くらいならXC9536で充分なことがわかりました。

 

◇◇◇

 

CPLD版のFM音源拡張基板が到着したので、基板に合わせてピンアサインを変更したコンフィギュレーションファイルを作り、ダウンロードしようとしたらエラーになってしまいました。
新しいCPLDに書き込むと正常終了しますが、そのCPLDにもう一度書こうとするとまたエラーになります。

しかし、Verifyすると成功します。

どうやらversionが'0000'のXC9536ではEraseができないようです。

 

Webで検索してみたら、「ISE3.1iでないとバージョンが'0000'のXC9536のEraseはできない」という記事が国内で1件、海外で1件見つかりました。

しかし、Xilinxのダウンロードページでは3.1iのサービスパックは公開されていますが、3.1i本体は公開されていません。

 

仕方がないのでXC9536('0000')はワンタイム品として最終版のみに使うことにして、最終版を作るまでの実験用にXC9572XLを発注しました。

 

しかし、諦めきれずにいろいろ調べていたところ、Blunk氏の記事

http://www.blunk-electronic.de/ise/howto_erase_XC9500.pdf

を見つけました。ドメインはドイツですが、資料は英語です。

(リンク許可をもらっていないのでリンクは張っていません。)

 

これによれば、

・XC9536('0000')とXC9536('0010')ではEraseのアルゴリズムが違う

 '0000':セクタイレース

 '0010':バルクイレース

・ISE4.1i以降はErase手順がバルクイレース固定になっているため、'0000'のEraseはできない

とのこと。

資料はISE 10.1について書かれていますが、ISE 14.7でも同じのようです。

 

対策としてBlunk氏がErase用のSVFを作成して公開されています。

このSVFはXC9572用なのでそのままではXC9536には使えません。

XC9536に合わせて修正して使ったところ、無事'0000'のXC9536のEraseに成功しました。

EraseしたXC9536('0000')にiMPACTから再度ダウンロードができることも確認しました。

 

ようやくXC9536('0000')のダウンロード環境が完成です。

 

◇◇◇

 

実はここまでに1ヶ月くらいかかってしまいました。

古いデバイスを使えるようにするのは結構大変ですね(苦笑