次はAC97のオーディオインタフェースを作ります。
AC97はオーディオ用のシリアルインタフェースで、クロック、リセット、SYNC、データ入力、データ出力の5本の線で制御します。12.288MHzのクロックはAC97のチップが作り出します。
電源投入後、デフォルトではAC97チップからはクロックは出ていないようです。そこで、MITOUJTAGのバウンダリスキャンで、FPGAからAC97チップへのリセット信号(L22番端子)を操作して、L→Hと出力してやると、その隣のクロック信号(K22番ピン)がHとLを激しく遷移するのが確認できました。ただし、リセット中にSYNC信号(G17番ピン)はLにしておかなければならないようです。
MITOUJTAGを使えば、画面上に表示された端子の絵をカチカチとクリックするだけで、そのとおりに実際のデバイスが動いてくれますので、FPGAのソースを1行も変えなくてもこういった確認ができます。FPGAにつながったデバイスの挙動を確かめるために、ちょっとVHDLソース変えて論理合成して・・・という面倒な作業を行うは必要ありません。
AC97は、256ビットのフレームをスロットという単位でデータをやり取りしています。スロットは0~12までの13個あって、スロット0は16ビット、スロット1~12は各20ビットです。スロット0の時だけSYNC信号をHにします。
これらの制御信号のタイミングはFPGAが作ります。この信号は12.288MHzの速さなので、JTAGバウンダリスキャンで1つ1つの遷移を見ることはできません。
そこで、MITOUJTAGのBLOGANA機能を使います。BLOGANAとは、BlockRAMの中に波形を溜め込んでおく、いわば「FPGA埋め込み型ロジックアナライザ」です。
BLOGANAを使うには、VHDLのソースコードのarchitecture文の信号宣言のところ次のような文を埋め込みます。
これは、BLOGANAをVHDLのコードから呼び出せるようにするための文で、どのデザインでも共通の記述方法です。
BLOGANA_DINという72ビットの信号を作っていることに注意してください。
次に、VHDLソースの本文に、見たい信号を次のように記述します。
この文ではport mapで実体を作っているのですが、port map文の中に観たい信号を直接記述するのではなく、BLOGANA_DINという72ビット幅の信号を入れています。
そして、BLOGANA_DINの各ビットに観たい信号をつなぐようにしています。
論理合成を行ったらMITOUJTAGで書き込み(XC3S1500なら約2秒)ます。JTAGロジックアナライザを起動したら「BRAM」とかかれたボタンを押します。すると、次の図のような設定ダイアログが表示されます。
このダイアログのファイル名を入力するところには、さきほどのBLOGANAを埋め込んだVHDLソースのファイルを指定します。すると、プログラムが自動的にVHDLソースを解読して、BLOGANA_DINという信号がどのように使われているかを判断し、ロジアナの各ビットに名前をつけてくれます。他に設定すべき項目はないので簡単に波形を観ることができます。
ファイル名を指定しない場合は、すべての信号の名前が(unknown)になるだけで、機能はします。
↑の波形で、「AC97_SLOT」などの信号名は、VHDLファイルを機械的に解釈して自動的につけられています。VHDLソースで使われている信号名そのままなので、気に入らなければ自分で修正することもできます。
最新のJTAGロジックアナライザでは、何本かの信号を結合して、10進数や16進数で表示する機能をもっています。上の例ではAC97コントローラが内部で持っているスロット番号とビット番号を10進数にしています。
(※SYNCやDINなど、外に出る信号は1クロック遅らせているので注意)
このような感じで波形の1つ1つが見えるため、FPGAのデバッグが非常にラクになります。
ところが、AC97にいろいろな信号を与えてみたものの、どうもAC97のチップがシリアル出力信号を何も出してくれていないようです。AC97まわりのデバッグは次回にします。
最近のコメント