JTAG総合情報サイト>機能の紹介>FPGAプロトタイピング

FPGAプロトタイピング

MITOUJTAGで端子は操作できるけど・・

MITOUJTAGの端子操作機能を使えば、動作中あるいは未書き込みのFPGAを強制的に停止して、マウスクリックで端子を自由に操作することができます。

原理的にはすべてのI/Oを操作できるので、マウスクリックを行うことでメモリの書き換えや各種信号パターンの生成も行えるはずです。しかしながら、さすがに複雑なシーケンスをマウスクリックだけで出力するのは現実的ではありません。そこで、MITOUJTAGではJTAGスクリプトを用いて、簡単に出力波形を作りこむことができようになっています。

スクリプト機能でさらに便利に!

MITOUJTAG Proが提供するスクリプト機能は、FPGAを論理合成せずに動かすというものです。昨今のFPGAは規模が大きくなったため論理合成に数十分から数時間といった途方もない時間を要するようになってきています。従来の方法では、FPGAの出力信号を少しだけ変更したい場合でも最初から論理合成をやり直さなければならず、論理合成に時間がかかることは開発効率を非常に低下させる要因となっていました。MITOUJTAG Proはこの問題を解決します。

 

デモンストレーション

デモに使用したFPGA評価ボード市販のFPGA評価ボード(Virtex4評価ボード:右の写真)を使って、このツールを動作させた例を示します。

右のFPGA評価ボードには、「電源を入れるとサンプルのアプリケーションが起動して液晶の画面に"Memec V4FX12"と表示し、その後FPGA内のCPUがLEDを点滅させるデモ」 が工場出荷時に書き込まれています。

常識的に考えれば、FPGAやROMを書き換えない限り、この動作は変わることはありません。

 

ところが、この評価ボードとパソコンをJTAGケーブルで接続し、MITOUJTAG Proを動作させると、FPGAの動作がをパソコンからコントロールできるようになります。そして、C言語で記述したとおりの動作を強制的に行わせることができます。

もともとのFPGAには、そのような「外からの指令で動作を買える」という機能は組み込まれていないのですが、MITOUJTAG Proを使うと、どのような状態にあるFPGAであっても、外から自由に操作できてしまうのです。

 

 

クリックで動画再生

その結果、上のムービーのように、「液晶に"Hello!! スイッチ ヲ オシテクダサイ"と表示し、押しボタンスイッチを押すとその近くのLEDが点滅する」、というように動作を行うようになりましす。

上の動画をみている限りでは、FPGAにそのような動作をするデザインが書き込まれたように見えますが、実際にはFPGAには何も書き込まれていません。FPGAの中はデフォルトのサンプルのままです。

すなわち、FPGAのデフォルトの動作をすべて停止させ、ユーザが記述したC言語のソースのとおりに、FPGAの動作を強制的に変更してしまったのです。

 このとき、論理合成は行っておりませんので、C言語で書いたソースがFPGAの動作に反映されるまでには5秒とかかりません。

 論理合成による動作方法がコンパイラ的な処理によってFPGAを動作させていたのに対して、この技術ではFPGAをインタプリタ的に動作をさせています。インタプリタであるが故に、ソースの変更から実機の動作までの時間を非常に短くすることができるのです。

 

 

応用分野

 

FPGAプロトタイピングは以下の分野のアプリケーションに威力を発揮します。

① ASICや大規模FPGAのプロトタイピングのプロトタイピング

 FPGAの論理合成は昔から時間のかかる作業でしたが、最近の大規模なFPGAでは特にその時間が長くなっています。単純なケアレスミスでわずかなソースコードを変更した場合であっても、FPGAの論理合成では原則としてすべてのコードを再合成しなければならないため、貴重な時間を無駄にしてしまいます。

 

 大規模なFPGAを多用した回路では、FPGA間や、FPGAとメモリ間、FPGAとインタフェースコネクタ間が接続されているかということを調べるだけでも、途方もない時間を要していまいます。

 規模が大きなFPGAほど論理合成時間も長くなるため、「ASICのプロトタイピング用ボード」などでは、ソースを変更してから動作させるまでに途方もない時間を要してしまいます。

 

大規模なプロトタイピング

 

 ところが、MITOUJTAGは「論理合成」をしないため、使用するFPGAデバイスの規模が大きくなっても、動作開始までの時間は短いままです。

 わずか数秒でコンパイルが完了し、ソースファイルの変更が即座にFPGAの動作に反映されます。

 

② 各種ICとの接続シーケンスの確立

 基板上で、FPGAが単体で使われることはほとんどありません。

 FPGAのI/Oには、メモリICや、各種インタフェースICなどの周辺ICや、コネクタが接続されているのが普通です。FPGAを設計するエンジニアは、FPGAの内部の信号処理ロジックを設計するとともに、これらの周辺IC接続インタフェースも設計しなければなりませんでした。

 

FPGAの回路は、内部の演算回路と,外部とのインタフェース回路でできている

 

 FPGA内部のロジック(演算回路など)は、従来の論理シミュレータでも十分にシミュレーションできますが、周辺ICとのインタフェース回路は論理シミュレータでは検証できません。実機を用いて動作確認を行う必要がありました。

 

各種ICとの接続の確立

 

 どんなに入念にデータシートを読んで設計したインタフェース回路でも、最初に記述したコードには多少の間違いは生じるものです。間違いを修正しながら正しいインタフェース回路に落ち着くまでには、何度かの論理合成を行うことになるでしょう。

 

 正しいインタフェース方法を確立するため論理合成を繰り返すということは、FPGAの規模が大きくなれば論理合成に要するトータルの時間は非常に大きなものになります。あまりに論理合成時間が長いとエンジニアはどのような意図で回路を作っていたかを忘れてしまうことさえあります。

 

 MITOUJTAG Proは論理合成せずにFPGAの端子を操作できるため、記述したコードのとおり即座にFPGAが動作します。論理合成を経ることはないので、「正しいインタフェース方法」をみつけるまでのトータルの時間を低減することができます。

 

 エンジニアが思考する迅速さFPGAの動作を変更できるということのメリットは計り知れません。

 

③ 不揮発性メモリの初期値設定

 近年の組み込み機器では、CPU用のプログラムにはフラッシュメモリが、IDコード保持用にシリアルメモリなどがよく用いられています。これらのメモリは工場出荷時に一度だけ書けばよいうというものも多く、実稼動時には全く書き換える必要のないものもあります。

 

 従来のシステムではこのような不揮発性メモリがFPGAからアクセスされるようになっている場合、その書き込み回路まで一緒にFPGA内に作りこむ必要がありました。一般にはフラッシュメモリの書き込みは、読み出しにくらべて非常に複雑なシーケンスを要求します。このため、書き込み用回路の設計という、ある意味無駄な作業に多くの時間を割く必要があったのです。

従来は一度だけしか書き込まないメモリの書き込み回路もFPGA内につくる必要があった

 

MITOUJTAG Proはこの種の問題に対するスマートな解決策を提供します。「メモリ操作ライブラリ」を活用すれば、FPGAの端子を操作して、メモリ書き込みシーケンスを発行することができます。もはやFPGA内には一度しか使われない回路を作る必要はありません。

 

JTAGスクリプトの文法

MITOUJTAG Proのアドバンスド・JTAG・ファンクションジェネレータを使用するために、新たな言語を習得する必要はありません。C言語が使用できるエンジニアであれば誰でもすぐに使用することができます。

なぜならば、アドバンスド・JTAG・ファンクションジェネレータを操作する「JTAGスクリプト」という言語は、普通のC++言語であるからです。MITOUJTAG Proは、Borland C++、Visual Cコンパイラ、GCCのように、既に世の中で広く用いられている。信頼性に優れたコンパイラを利用することができます。このため、コンパイラのバグを考慮する必要はありません。また、テンプレートや継承など、C++言語の複雑な文法でさえも100%フルに活用することができます。

 

MITOUJTAG ProのJTAGスクリプトでは、ソース中に記述された「JSSignal型」の変数を操作すると実際のデバイスが動作し、JSSignal型の変数を読み出すと実際のハードウェアの値が読み出されるという、非常に単純明快なしくみで動作しています。

 

 

img1.png

 

 

JSSignal型の変数は、物理的な1本の信号にマッピングされていることもあり、複数の信号を束ねたバスにマッピングされていることもあります。

 

ユーザは実際のハードウェアの操作のためのしくみを意識する必要はありません。C言語の文法にしたがって、どの信号をどのように操作したいか、というアルゴリズムを記述する作業に注力できます。

なお、JTAGスクリプトではVHDLと同じように「 <=演算子」や、「(x downto y)」といった一部拡張された記述を用いることによって、C言語から簡単にハードウェアの動作を記述することもできます。

 

JSSignal型の変数(オブジェクト)に対する操作の例としては、以下のようなものが用意されています。

記述方法 機能 記述例
<=演算子 ハードウェアを操作する LED <= '0';
nOE <= 'Z';
(int)へのキャスト JSSignal型の変数をint型に変換する printf("SW=%d ",(int)SW1_IN);
[]演算子 バスの中の特定のビット参照 ADDR[12] = '0';
( downto )記述 バスの中の特定のビット範囲参照 int a = ADDR(15 downto 8)

 

 

JTAGスクリプトは、JTAGに特化した独自仕様のローカル言語ではない

 

JTAGスクリプトは、通常のC++コンパイラを用いてコンパイルすることができます。現在では「GNU C Compiler (MinGW)」、「MicroSoft Cコンパイラ」、「Borland Cコンパイラ」での動作を確認しています。

このことからもわかるように、JTAGスクリプトは通常のC++コンパイラでコンパイルできるほど従来のC言語との親和性が高くなっています。

独自に作成した言語にありがちな独自仕様はありません。

 

ライブラリの活用

MITOUJTAG Pro.には、汎用的で再利用可能なアルゴリズムを記述したライブラリが付属しています。(随時提供予定)

このライブラリには、SDRAMの操作や、DDR SDRAMの操作、I2Cメモリの操作、フラッシュメモリの操作などが含まれています。これらのライブラリを活用することによって、迅速にスクリプトファイルを記述し、ユーザはユーザのボードに特化したアルゴリズムの開発に注力することができます。

 

従来のFPGA開発方法は非効率であった

FPGAを動かすには、ソースコードをVHDLやVerilogで書いて論理合成にかけ特定のアーキテクチャにフィットさせる、というのがこれまでの常識でした。

誰もがごくあたりまえのように行っているこのプロセスには大きな問題があります。

  • VHDLやVerilogは、C言語などのソフトウェア言語に比べて難しい。
  • FPGAを動かすには、個々のFPGAのアーキテクチャに対する知識が必要。
  • デバイスに合った論理合成ツールを使わなければならない。
  • 論理合成には膨大な時間がかかる。

これらはごくあたりまえのようなことなのですが、開発効率という面からみると、ソフトウェアの開発に比べて桁違いに効率の悪いものです。

 

たとえば、「FPGAに液晶ディスプレイをつなぎ、I2Cのメモリから読み出した文字列を表示させる」というアプリケーションを作ろうとしたとき、どのくらいかかるでしょうか?

どんなにFPGAに慣れた人でも、液晶ディスプレイやI2Cのメモリとの正しいインタフェース方法をみつけるために、何度も何度も論理合成を繰り返すのではないでしょうか?

ソフトウェアでも同じようにコンパイルして正しいコードに近づいていきますが、ハードウェアの論理合成との決定的な違いは論理合成時間の遅さにあります。そのうえ最近のFPGAでは、論理合成に掛かる時間はますます長くなる傾向にあります。わずか1行のソースの修正であっても、FPGAの合成ツールはデザイン全体を再合成します。大規模なFPGAの開発では論理合成を行うたびに何時間もかかってしまい、更なる効率の低下を招いています。

従来の論理合成による動作方法がコンパイラ的な処理によってFPGAを動作させていたのに対して、MITOUJTAG ProはFPGAをインタプリタ的に動作をさせます。インタプリタであるが故に、ソースの変更から実機の動作までの時間を非常に短くすることができるのです。これからはFPGAにも迅速さが必要になってくるでしょう。