« Xeonのマシンの組み立て | トップページ | LT Spiceを使ってみた »

2013.04.18

MITOUJTAGの遠隔操作スクリプト機能をリリースします

MITOUJTAG Proには、JTAGスクリプト機能があります。この機能を使うと、ユーザプログラムの中から、

if(SW == 0) LED <= 1;
for(int i=0;i<1000;i++) GPIO <= i;

のように、VHDLのような矢印 <= を用いて、C言語で端子の動作をプログラムできます。

この機能は今までもMITOUJTAG Proに入っていたのですが、今回の更新ではこのスクリプト機能をユーザプログラムの中から使えるような「リモート操作機能」を作りました。

つまり、ユーザが、VisualStudioや、C++ Builderでもなんでもいいのですが、C++で作成したプログラムの中で、 if(SW == 0) LED <= 1; のような記述をすれば、ユーザプログラムの中からMITOUJTAGを操作して、実際のハードウェア上の信号にアクセスできてしまうというわけです。

そのためのプログラムをここに置いておきます。

さて、このMITOUJTAGのスクリプト機能はとても強力です。LEDをチカチカさせるだけではなく、SDRAMの検査などもできてしまいます。

MITOUJTAGにはSDRAM操作ライブラリとして、こんな感じのプログラムがあるのですが、

static void set_clock_0()
{
	*dsigs->ck <= "0";
}

static void set_clock_1()
{
	*dsigs->ck <= "1";
}
・・・
void sdram_read_mem(unsigned long *buf,unsigned long addr,int len)
{
	unsigned long *p = buf;
	set_dm(0);
	cmd_act((addr >> 20) & 0x3 ,(addr >> 8) & 0xfff);
	cmd_nop();
	cmd_nop();

	int fin = false;
	int step = 0;
	int maxstep = len + 2;
	*dsigs->d <= "Z";
	for(step = 0;step < maxstep ; step++)
	{
		if(step >= maxstep - 2 - 8)
		{
			fin = true;
		}
		if((step & 7) == 0)
		{
			*dsigs->cas  = "0";
			*dsigs->ba   = (addr >> 20) & 0x3;
			*dsigs->a    = (addr & 0xff) | (fin ? 0x0400 : 0); // A10 = 1
		}
		else
		{
			*dsigs->cas  = "1";
		}
		set_clock_0();
		・・・・

このように普通のC言語で端子の状態を書けてしまうのです。

で、実際にやってみたときの波形がこちら。

Jtagsdram


RASとかCASとか、データ線とかアドレス線とか、そういった信号をバウンダリスキャンで動かしています。

実は、これは究極のRX62Nボード上にあるSDRAMのためのメモリテストです。

Rx62n_bscan


このボードはRX62NのBGA176ピンを使っていて、SDRAMもBGAなので、RX62NとSDRAM間の配線はオシロではあたることができません。幸いなことにRX62Nはバウンダリスキャンに対応しているので、I/O端子をJTAG経由で自由に操作できます。

C言語とバウンダリスキャンを組み合わせればどこまで複雑な波形が作れるかという一例を紹介します。

次の図では、SDRAMのバーストリードやバーストライトコマンドを発行しているのが見えます。A12と書かれた端子が実際にはA10につながっているので、ここが1になればオートプリチャージを示しているわけです。

Jtagsdramburst


SDRAMのメモリテストの内容は、

  1. 32本のデータバスのうち1本だけを順次'1'にする (walking 1)
  2. 32本のデータバスのうち1本だけを順次'0'にする (walking 0)
  3. アドレス線の1本だけを1にしたアドレスを生成して、乱数を読み書きする

このようなシーケンスを生成して、書いたデータを読んだデータを照合して、データ線やアドレス線に断線やショートがないかどうかを効率よく検査しています。

もしボード上の接続が正常ならば、

●データバスは正常につながっています
●アドレスバスは正常につながっています

と表示されますが、異常が見つかった場合は、

●D[15]に異常があります
★アドレス00100000への読み書きでエラーが生じています

のように表示されるので、どこに実装不良があるかわかるというわけです。(幸いなことに不良はまだありませんが)

このような感じで、BGAの基板検査も楽々できてしまいます。

さて、この機能を使うにはCコンパイラがなければなりませんが、このたび、BorlandC++と、GCCとVisualC++に対応しました。

使い方はとても簡単で、ユーザが作ったプログラムに、AjfgClient.DLLを組み込むだけです。どんなプログラムからでもMITOUJTAGに遠隔アクセスできるようになります。

  • Borland C++なら、bcc32 sample.cpp AjfgClient_bcc.lib
  • Vislal C++なら、cl sample.cpp AjfgClient_vc.lib
  • GCC(MinGW)なら、gcc sample.cpp AjfgClient_mingw.a -o sample.exe

とビルドすればOKです。

詳しい使い方は、サンプルプログラムの中のREADMEをご覧ください。

MITOUJTAGで快適な基板の操作をお楽しみください。

|

« Xeonのマシンの組み立て | トップページ | LT Spiceを使ってみた »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Xeonのマシンの組み立て | トップページ | LT Spiceを使ってみた »