|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
|
特許出願済 C言語で書いたとおりにFPGAが動く! Advanced JTAG Function Generator FGPAのプロトタイピングや基板検査を変える次世代ソリューション アドバンスド・JTAG・ファンクションジェネレータ (ソフトロジック製品群)
|
||||||||||||||||||||||
bool check_connect() { unsigned long val; DEV2_DATA <= "Z"; // 2つ目のデバイスを入力状態に for(int i=0 ; i < 32 ; i++ ) { val = ( 1 << i ) ; // データバスに1ビットづつ'1'を出力 DEV1_DATA <= val; // 1つ目のデバイスから出力 if(DEV2_DATA != val) |
アドバンスド・JTAG・ファンクションジェネレータでは表(ベクタ)形式での入出力も可能です。
ベクタはC言語のプログラム中から容易に呼び出すことができます。

検査したい項目ごとに小さな表を作成すれば、検査アルゴリズムの再利用は容易になります。
さらに、アドバンスド・JTAG・ファンクションジェネレータは基板検査の量産にもご活用いただけるよう「量産モード」と「ラボモード」を備えています。量産モードではプロジェクトやソースファイルの変更が行えず、「OK」「NG」ボタンを押すという操作のみ行うことができます。
クリックで拡大
C 不揮発性メモリの初期値設定
近年の組み込み機器では、CPU用のプログラムにはフラッシュメモリが、IDコード保持用にシリアルメモリなどがよく用いられています。これらのメモリは工場出荷時に一度だけ書けばよいうというものも多く、実稼動時には全く書き換える必要のないものもあります。
従来のシステムではこのような不揮発性メモリがFPGAからアクセスされるようになっている場合、その書き込み回路まで一緒にFPGA内に作りこむ必要がありました。一般にはフラッシュメモリの書き込みは、読み出しにくらべて非常に複雑なシーケンスを要求します。このため、書き込み用回路の設計という、ある意味無駄な作業に多くの時間を割く必要があったのです。

アドバンスド・JTAG・ファンクションジェネレータはこの種の問題に対するスマートな解決策を提供します。
アドバンスド・JTAG・ファンクションジェネレータが提供する「メモリ操作ライブラリ」を活用すれば、FPGAの端子を操作して、メモリ書き込みシーケンスを発行することができます。もはやFPGA内には一度しか使われない回路を作る必要はありません。
D 実デバイスの動作を元にしたテストベクタの作成
アドバンスド・JTAG・ファンクションジェネレータは、C言語で記述した「JTAGスクリプト」に従ってFPGAを操作します。その結果得られた各種の信号は、FPGAのI/O端子でサンプリングされてパソコンに送られます。こうして、得られたデータは保存しておくことができます。
正常に動作する基板で得られたデータをマスタとして保存しておけば、量産検査時にその結果と比較することで、基板の異常を速やかに発見することができます。
また、得られたデータをVerilogやVHDL形式のテストベクタとして出力すれば、それを外部の論理シミュレータのテストベクタとして与えることで、周辺ICの挙動も含めた正しい論理シミュレーションを実行することもできます。
アドバンスド・JTAG・ファンクションジェネレータの特徴アドバンスド・JTAG・ファンクションジェネレータによって動作するICは、次のような特徴があります。
@ 対応FPGAの品種は問わない
アドバンスド・JTAG・ファンクションジェネレータは、あらゆるメーカーのあらゆるFPGAに対応します。FPGAだけではなく、CPLDや、CPUなど、JTAGバウンダリスキャンに対応したICであればいかなるデバイスにも対応します。
A FPGAへの書き込みは不要
アドバンスド・JTAG・ファンクションジェネレータは、FPGAの本来の動作をオーバーライドして動作します。そのため、FPGAにどのようなデータが書き込まれているかを考慮する必要はありません。
FPGAが未書き込みの状態でも使用することができます。
B FPGAの端子だけを操作している
アドバンスド・JTAG・ファンクションジェネレータは、FPGAの端子だけを操作します。
FPGA内部の回路(ユーザロジック)を操作しているわけではありません。
C FPGA内部のユーザリソースは一切使用しない
アドバンスド・JTAG・ファンクションジェネレータは、FPGA内に何かのIPコアを埋め込むようなデバッグツールとは根本的に異なります。FPGA内部のユーザリソースは一切使用しません。そのためあらゆるFPGAやCPLDに同じように対応できるのです。
D 動作速度はFPGAの速度ではない
アドバンスド・JTAG・ファンクションジェネレータは、FPGAが入出力する信号をパソコン上で計算して操作しています。FPGAの本来の速度ではなく、シミュレーションの速度で動作します。
動作は決して速くはありませんが、裏を返せばFPGAの動作の一つ一つをパソコンでコントロール(広義のエミュレート)しているといえます。
したがって、タイミング(時間)が厳密に決められた通信プロトコル(イーサネットやPCI Expressなど)の操作には不向きですが、PCIやISAのようにマスタが送出するクロックで動くような場合には威力を発揮します。
アドバンスド・JTAG・ファンクションジェネレータの動作
アドバンスド・JTAG・ファンクションジェネレータを使用する際の動作の流れを次の図に示します。

ユーザは「ピン定義ファイル」と「スクリプトファイル」を作成します。
ピン定義ファイルというのは、何番のピンに何という信号が接続されているか、ということを記述したファイルです。このファイルはターゲットボードの回路にあわせて作成します。
LED_O 2:D11 C11 D12 D13 |
ピン定義ファイルの例
スクリプトファイルは、動作させたい内容をC言語で記述したものです。
int sub(int param1) { |
アドバンスド・JTAG・ファンクションジェネレータ スクリプトの例
アドバンスド・JTAG・ファンクションジェネレータの「コンパイラエンジン」は、これらのファイルをコンパイルして、中間ファイル(*.jsm)を作成します。このjsmファイルを、「JTAG実行エンジン」が読み取って解釈し、ハードウェアを操作します。
ハードウェアを操作した結果として、FPGAの端子に入力された各種信号の値は、ログファイルやベクタ出力に記述することもできますし、スクリプトの中で変数のように扱うこともできます。
JTAGスクリプトの文法
アドバンスド・JTAG・ファンクションジェネレータを使用するために、新たな言語を習得する必要はありません。
C言語が使用できるエンジニアであれば誰でもすぐに使用することができます。
なぜならば、アドバンスド・JTAG・ファンクションジェネレータを操作する「JTAGスクリプト」という言語は、普通のC++言語だからです。C/C++で記述されたソース中に現れた「JSSignal型」の変数を操作すると、実際のデバイスが動作するという、非常に単純明快なしくみで動作しています。
JSSignal型というのは、実際にはC++言語でいうところのクラスです。JSSignal型の変数(オブジェクト)は物理的な1本の信号にマッピングされていることもあり、複数の信号を束ねたバスにマッピングされていることもあります。
JTAGスクリプトでは、JSSignal型の変数に対する「演算子のオーバーロード」機能を利用して、ハードウェアを操作するJTAGライブラリを、ユーザから見えないところで呼び出しています。
ユーザは実際のハードウェアの操作のためのしくみを意識する必要はありません。C言語の文法にしたがって、どの信号をどのように操作したいか、というアルゴリズムを記述する作業に注力できます。
JTAGスクリプトではVHDLと同じように「 <=演算子」や、「(x downto y)」といった一部拡張された記述を用いることによって、C言語から簡単にハードウェアの動作を記述できます。
JSSignal型の変数(オブジェクト)に対する操作の例としては、以下のようなものが用意されています。
|
記述方法 |
機能 |
記述例 |
|---|---|---|
|
<=演算子 |
ハードウェアを操作する |
LED <= '0'; |
|
(int)へのキャスト |
JSSignal型の変数をint型に変換する |
printf("SW=%d\n",(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言語との親和性が高くなっています。
ライブラリの活用アドバンスド・JTAG・ファンクションジェネレータには、汎用的で再利用可能なアルゴリズムを記述したライブラリが付属しています。(随時提供予定)
このライブラリには、SDRAMの操作や、DDR SDRAMの操作、I2Cメモリの操作、フラッシュメモリの操作などが含まれています。これらのライブラリを活用することによって、迅速にスクリプトファイルを記述し、ユーザはユーザのボードに特化したアルゴリズムの開発に注力することができます。
従来のFPGA開発方法に潜む非効率さ
FPGAを動かすには、ソースコードをVHDLやVerilogで書いて論理合成にかけ特定のアーキテクチャにフィットさせる、というのがこれまでの常識でした。 誰もがごくあたりまえのように行っているこのプロセスには大きな問題があります。
@VHDLやVerilogは、C言語などのソフトウェア言語に比べて難しい。 AFPGAを動かすには、個々のFPGAのアーキテクチャに対する知識が必要。 Bデバイスに合った論理合成ツールを使わなければならない。 C論理合成には膨大な時間がかかる。
これらはごくあたりまえのようなことなのですが、開発効率という面からみると、ソフトウェアの開発に比べて桁違いに効率の悪いものです。
たとえば、「FPGAに液晶ディスプレイをつなぎ、I2Cのメモリから読み出した文字列を表示させる」というアプリケーションを作ろうとしたとき、どのくらいかかるでしょうか? どんなにFPGAに慣れた人でも、液晶ディスプレイやI2Cのメモリとの正しいインタフェース方法をみつけるために、何度も何度も論理合成を繰り返すのではないでしょうか? ソフトウェアでも同じようにコンパイルして正しいコードに近づいていきますが、ハードウェアの論理合成との決定的な違いは論理合成時間の遅さにあります。
そのうえ最近のFPGAでは、論理合成に掛かる時間はますます長くなる傾向にあります。わずか1行のソースの修正であっても、FPGAの合成ツールはデザイン全体を再合成します。大規模なFPGAの開発では論理合成を行うたびに何時間もかかってしまい、更なる効率の低下を招いています。
従来の論理合成による動作方法がコンパイラ的な処理によってFPGAを動作させていたのに対して、アドバンスド・JTAG・ファンクションジェネレータはFPGAをインタプリタ的に動作をさせます。インタプリタであるが故に、ソースの変更から実機の動作までの時間を非常に短くすることができるのです。これからはFPGAにも迅速さが必要になってくるでしょう。 |
お見積もり依頼・ご相談
本製品に関するお見積もり依頼・お問い合わせは、下記のあて先までお願いします。
特殊電子回路株式会社
担当:内藤 info@tokudenkairo.co.jp 電話 03-3253-0525

Copyright(C) 2006 TokushuDenshiKairo Inc. All rights reserved.
info@tokudenkairo.co.jp