BLOGANAモジュールから任意の値を出力
MITOUJTAG BASIC 1.5 SP2で新たに追加された機能として
「BLOGANAモジュールから任意の値を出力」という機能があります。
これは、FPGAの動作中の回路に、JTAGを通じて任意の値を送り込むことができるという機能です。
FPGAは論理合成したらそのとおりにしか動かないので、動作やパラメータをダイナミックに変えられり回路を実現するのは大変面倒なことでした。たとえば、画像コントローラであれば、水平開始位置や垂直開始位置、明るさなどを少しづつ変えて試してみたいことなどがあります。
こういった機能を実現するには、FPGAの中にデバッグ用の内部レジスタを用意して、ユーザI/Oのどこかを通じてそれを書き換えるというのが常でした。
例えば、FPGAを使ったUSBカメラを作るのであれば、USBを通じて画像を取得する経路だけではなく、USBを通じて内部レジスタにアクセスする回路も作らなければなりません。そうしたら、「USBを通じて内部レジスタにアクセスする回路」のパラメータを変えてデバッグすることをUSBを経由で行う回路もほしくなります。
そんなとき、FPGAとパソコンの間でJTAGを使って通信すると便利です。
XILINXのSpartan2以降では、JTAGインタフェースを使って内部の回路と通信するためのプリミティブが用意されています。そのプリミティブを使うとFPGAに埋め込むタイプのロジックアナライザなどが作れるわけですが、今回は波形を観察するだけではなく、逆にパソコンのソフトから任意のデータを送りこむことも可能にしてみました。
イメージで描くと下の図のような感じになります。
JTAGを使う方法ではユーザI/Oは一切使わず、また正規系のデータパスに手を加えることなく、FPGAの内部回路に横からちょっかいを出すことができます。
前置きがながくなりましたが、今回のMITOUJTAG 1.5 SP2では、JTAGロジックアナライザの画面の右上にBLOGANA USEROPというボックスが追加されています。(下の図の丸で囲った部分)
このボックスに値を入れてOKボタンを押すと、FPGAの内部ロジックに信号を与えることができます。
実際に、XILINXのSpartan3AN評価ボードで実験してみました。
Spartan3AN評価ボードで作ったサンプル回路の構成を下の図に示します。
サンプルソースを下記のURLにおいておきます。
■「blogana_op_test.vhd」をダウンロード
BLOGANAコンポーネントにあるUSER_OPという信号が今回のMITOUJTAG BASIC V1.5 SP2で追加された信号で、20bitの出力信号です。
上のソースは8個のLEDをチカチカと点滅させる回路なのですが、点滅の方法を決定するロジックを、下の記述のようにMODEという信号で選択できるようにしています。
process(CLK) begin
if(CLK'event and CLK='1') then
if(TIMER = 0) then
case MODE(1 downto 0) is
when "00" => LED <= LED + 1;
when "01" => LED <= LED - 1;
when "10" => LED <= LED(0) & LED(7 downto 1);
when others => LED <= LED(6 downto 0) & LED(7);
end case;
end if;
end if;
end process;
MODEが00ならばアップカウンタ、01ならダウンカウンタ、10、11ならば回転です。
このような信号(MODE信号)をロジックに埋め込んで動作を変えるというのはとりたてて特殊なことではありませんが、
・FPGAの論理合成をしない
・ユーザI/Oを介した通信機能を作らなくてよい
といったところが新しいといえます。
MITOUJTAGを使うと、パソコンから簡単に値を送りこむことができるようになり、USEROPのボックスに値を入れてOKボタンを押すと、LEDの動きが変化します。
今はバス出力という単純なものですが、今後はこの機能をどんどん発展させていきたいと思います。
動いているFPGAの中のいたるところをパソコンからいじくることができて、再論理合成なしにFPGAの動作を動的に変更できるようなデバッグ手段を構築するのが、MITOUJTAGの目指すところです。
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント