2017年1月1日日曜日

TRIO FMチューナ KT-9900 近代化改修: FPGA FMチューナ基板を組み込み

FPGAチューナ基板の組み込みに合わせ、設計データを最新版に更新することにしました。最新版では、ワイドFM(FM補完放送)に対応するため、局発周波数が69.12MHzに変更されているほか、数多くの性能向上が盛り込まれています。さらにはシリアル設定モードに対応しているのは、うれしいところです。

ワイドFM対応の改修については、このサイトが詳しく大変参考になりました。ハード面では、アンテナ入力系のバンドパスフィルタの広帯域化と局発周波数の変更があります。今回は、KT-9900のフロントエンドを活用するという大命題があるので、基板上のフィルタ回路を使用しないことにしました。ワイドFMに対応させるには、外部にワイドFM用のバンドパスフィルタをもうけ、KT-9900のフロントエンドとスイッチで切り替えるしかないかなと思っています。 


次に発振モジュールの交換です。既存のモジュールをちゃんと交換できるか心配したのは杞憂でした。交換をも想定した基板パターン設計がなされているようです。


次に肝心な設計データの更新です。まずは、ISE 14.7をインストールしますが、64ビット版Windows10ではOpen Project と操作するとアプリがいきなり落ちてしまいます。それでもプロジェクトファイルをダブルクリックすると何事もなかったかのように動いてくれるのでそのまま作業を続けることにしました。
受信周波数の初期設定値を地元FM局の周波数に書き換えようと user_if.vhd を書き換え、Generate Programming Fileさせるところまではすんなり成功します。ところが設計データをFPGAに書き込もうとするとiMPACTが途中で異常終了してしまい進めることができません。

ネットで調べるとどうやら既知の不具合のようです。(こちらこちら

さて、iMPACTで基板にデータを書き込む方法をすっかり忘れてしまいました。とてもわかりにくいのでメモを残しておきます。FPGAチューナ基板には、ヒューマンデータ社のFPGAモジュール XP68-01が搭載されており、モジュール内のコンフィグPROMにデータを書き込みます。

ISEでManage Configuration Project(iMPACT)を右クリック⇒Run でiMPACTを起動します。


まずは設計データが記述されたbitファイルからPROMに書き込むために必要なmcsファイルに変換するために Create PROM Fileをダブルクリック



PROM File Formatter画面で、SPI Flash/Configure Single FPGA ⇒ Step2に続く 緑色 右矢印 ⇒ Storage Device(bits)  16Mを選択 ⇒ Add Strage Device ⇒ Step3に続く 緑色 右矢印 ⇒ File Format は MCS、必要があればOutput File Nameを指定



ファイル変換元の設計データを聞いてくるので top.bit を指定します。Add DeviceのポップアップはNoを選びます。



iMPACT ProcessesタブのGenerate Fileをクリックして mcsファイルへの変換を実行します。



Boundary Scan ⇒ Right click to Add Device or Initialize JTAG chainのウインドウで右クリック ⇒ Initialize Chain ⇒ Auto Assign Configuration Files Query Dialog は No



SPI/BPI を右クリックし Add SPI/BPI Flashを選ぶと、PROMに書き込むファイルを聞かれるので先ほど生成したファイル(mcsファイル)を指定する。



PROMデバイスとして、M25P16を指定します。



これでようやくPROMへの書き込み準備ができました。FLASHを右クリックしてProgramを実行します。このとき、FPGAモジュールのコンフィギュレーションモードをMaster Serial/SPIに設定(SW1 ON) しておく必要があります。



ところで書き込みに失敗した話です。PROMに書き込もうとしたらidcodeが不一致だと言ってFailしてしまいます。デバイスを自動認識できているくせに Device IDの読み出しにも失敗します。ネットの情報によると書き込み器とFPGAのあいだのJTAG波形が不適切なせいだとのこと。でもこのケーブルで書き込み実績はあるはずです。FPGAチューナの作者様に相談したところケーブルコネクタの抜き差しを試せとの回答があり、やってみるとあっさり解決。どうやらコネクタの接触不良が原因だったようですが何だこりゃという感じでした。