3 IMS Link による機能テスト

3.1 Verilog-XLによるVCD出力

IMS Link は、シミュレータの出力から、IMS Screens 用のパターンファイルを簡単にGUIで作成するためのプログラムです。IMS Link が利用できるファイル形式にはAPTとVerilog値変更ダンプ(VCD)の二通りがありますが、ここでは、Verilog値変更ダンプを用います。VCD は、Verilog-XLで生成されるシミュレーションで設定したピン名やパターンデータの書かれたファイルです。例として、実習用チップの8bitカウンタで使用するテストベクトルと期待値のタイミングチャートを図3.1に、Verilog テストベンチと8bitカウンタの Verilog 動作記述をそれぞれリスト3.1、3.2に示します。count8_ld が、8bitカウンタのモジュール名です。

Timing Chart
図3.1 タイミングチャート

リスト3.1 8bitカウンタのテストベンチ

`timescale 1ns/1ns

module cnt8_test;

	reg        r_inc, r_clk, r_rst, r_ld;	
				// Incriment, Clock, Reset, Load
	reg  [7:0] r_d;		// Data
	wire       w_co;	// Carry
	wire [7:0] w_q;		// Output
	integer i;
	parameter cycle = 100;	// CLK Period = 10MHz

	count8_ld i0 (.d(r_d), .ci(r_inc), .clk(r_clk), .rst(r_rst), 
		      .ld(r_ld), .co(w_co), .q(w_q));

	initial begin
		r_clk <= 1'b0;				// Clock = 0
		forever #(cycle/2) r_clk <= ~r_clk;	// Clocking
	end

	initial begin
		#0		r_rst = 1'b1;
				r_ld  = 1'b0;
				r_inc = 1'b0;
				r_d   = 8'hf0;
		#(cycle*3/4)	r_rst = 1'b0;
		#(cycle*5/4)	r_rst = 1'b1;
				r_ld  = 1'b1;
		#(cycle)	r_inc = 1'b1;
				r_ld  = 1'b0;
		#(cycle*48)	$finish;
	end

	initial begin
		$monitor($time,, "clock = %b reset = %b data = %h ld = %b ci = %b q = %h co = %b",
		r_clk, r_rst, ww_d, r_ld, r_inc, ww_q, w_co);	// Monitor Output
	end

endmodule

リスト3.2 8bitカウンタの記述

module count8_ld (d, ci, clk, rst, ld, co, q);
	
	input [7:0]  d;                 // data
	input        ci;                // start
	input        clk, rst, ld;      // clock, cync-reset, load
	output       co;                // carrie
	output [7:0] q;                 // count out
	
	reg    [7:0] q;
	
	always @(posedge clk) begin
		if (rst == 1'b0) begin
			q <= 8'b00000000;
		end else if (ld == 1'b1) begin
			q <= d;
		end else begin
			q <= q + ci;
		end
	end
	
	assign co = &{q, ci};
	
endmodule

VCDを行うためには、テストベンチ内に、リスト3.3のような記述を追加します。
$dumpvars は、ダンプする変数名のリストです。最初の引数には、値の変化をモニタする階層を指定します。0の場合、全階層をモニタします。
$dumpfile は、ダンプ出力するためのファイル名を指定します。
※ 本来、VCD出力するためには、下記のassign文は必要ないのですが、何故かIMS Linkが上位ビットと下位ビットを反転させるので、これを防ぐためにビット単位でダンプさせるよう下記のような記述となっています。

リスト3.3 VCD出力のための追加記述

	wire [7:0] ww_d, ww_q;	// for IMS
	assign ww_d[0] = r_d[0];	// for IMS
	assign ww_d[1] = r_d[1];	// for IMS
	assign ww_d[2] = r_d[2];	// for IMS
	assign ww_d[3] = r_d[3];	// for IMS
	assign ww_d[4] = r_d[4];	// for IMS
	assign ww_d[5] = r_d[5];	// for IMS
	assign ww_d[6] = r_d[6];	// for IMS
	assign ww_d[7] = r_d[7];	// for IMS
	assign ww_q[0] = w_q[0];	// for IMS
	assign ww_q[1] = w_q[1];	// for IMS
	assign ww_q[2] = w_q[2];	// for IMS
	assign ww_q[3] = w_q[3];	// for IMS
	assign ww_q[4] = w_q[4];	// for IMS
	assign ww_q[5] = w_q[5];	// for IMS
	assign ww_q[6] = w_q[6];	// for IMS
	assign ww_q[7] = w_q[7];	// for IMS

	initial begin
		$dumpvars(0, r_clk, r_rst, ww_d, r_ld, r_inc, ww_q, w_co);	// VCD Signal Name
		$dumpfile("cnt8.vcd");						// VCD File Name
	end

実習では、VCDファイルが、実習用ディレクトリ ~/tutorial/ に用意してありますので、以下のコマンドを実行する必要はありませんが、練習のため実行してみてもかまいません。

cnt8_test.v がVCD出力用システムタスクを含むテストベンチ、cnt8.v が8bitカウンタの記述です。Verilog-XLを走らせて、VCD出力することができます。但し、vlsitest では、Verilog-XLは実行できませんので、必要なら、Verilog-XLが実行できるサーバにSSH接続して実行します。vlsitestでは、psftp(sftp), pscp(scp), plink(PuTTY) などが使用できます。以下の例では、vlsitest から vlsisv02 に ユーザ名 hogechan で接続しています。

HDLファイルの転送(通常は予め設計マシンにHDLファイルがあるはずなので、この操作は不要):
vlsitest> psftp vlsisv02.ec.t.kanazawa-u.ac.jp [RET]
sftp> put cnt8.v [RET]
sftp> put cnt8_test.v [RET]
sftp> bye [RET]

Verilog-XLの実行:
vlsitest> plink hogechan@vlsisv02.ec.t.kanazawa-u.ac.jp [RET]
vlsisv02> source /users/vdec/setlic [RET]
vlsisv02> verilog cnt8.v cnt8_test.v [RET]

vlsisv02> ls -l [RET]

以上で、cnt8.vcd というテキストファイルができていれば成功です。exit コマンドで、vlsitest に戻ってください。

ダンプリストの転送:
vlsitest> psftp vlsisv02.ec.t.kanazawa-u.ac.jp [RET]
sftp> get cnt8.vcd [RET]
sftp> bye [RET]

3.2 IMS Linkの起動

IMS Link の起動には、IMS Screens のプルダウンメニューから Utilities → Simulator Conversion Interface を選びます。または、下記のコマンドでも起動できます。

vlsitest> ims_link & [RET]

図3.1のようなウインドウが表示されます。このウインドウを元に作業を行うので、今後は、これをメインウインドウと呼ぶことにします。

IMS Link main window 1
図3.2 IMS Link メインウインドウ

メニューから、File → Import → Verilog VCD... を選択すると、ファイル選択ダイアログが表示されるので、VCDファイルを読み込ませます。図3.3のようにIMS Link メインウインドウの右側の欄に、Verilog HDLで定義された信号名が現れます。

IMS Link main window 2
図3.3 IMS Link にVCDを読み込んだ状態。r_d, w_q は、それぞれ assign 文で ww_d, ww_q に代入してから、VCD出力したため、ww_d[7] のように表示されていることに注意

ファイル名がNoName.ils になっていますので、気持ちの悪い人は、ここで設定をセーブしておきましょう。メニューから、File → Save as... を選び、ファイル選択ダイアログを表示させます。Fileのところに適当なファイル名を付けて、OKをクリックして保存します。IMS Link の設定ファイルの拡張子は、.ils にしておいたほうが後々分かりやすいでしょう。

3.3 ATS-100 構成の指定

測定に使用するテスタの構成を指定します。メニューから、View → Logic Master Configuration... を選択し、図3.4のようなウインドウを開きます。

Logic Master には、ATS 200 を選択します。次に、1〜7と9のスロットには、ATS Data 100 をマウスの右ボタンで設定します。最後に、Socket Card を Open I/O に指定します。File → Close で Logic Master Configuration ウインドウを閉じます。

IMS Link Configuration
図3.4 Logic Master Configuration ウインドウ

3.4 信号のデフォルト値の設定

メニューから、 Options → Default Group Settings... を選択し、図3.5のウインドウを表示させます。このウインドウでは、入力や出力、電源電圧のデフォルト値を設定できます。Force Groups の Low Drive と High Drive の設定をします。ここでは、Low Drive = 0V, High Drive = 5V, Low Threshold = 1V, High Threshold = 3.5V です。

IMS Link Default Group Settings
図3.5 Default Group Settings ウインドウ

3.5 グループの作成

データバスのように同じ設定でよい信号をまとめて、一つのグループにします。全てのピンは、グループに属さなくてはならないので、一つのグループの中に信号が一つだけという場合もあります。グループを作成するには、メニューから、Edit → Create Group... を選択し、図3.6のウインドウを表示します。Type を選択し、Group: 欄に新たに作成するグループ名を入力して、Apply をクリックします。Type の意味は、IMS Screens の場合と同じです。実習チップ用に、表3.1に示すようなグループを作成してください。

表3.1 グループ名と信号名
GroupType属する信号名
clkForcer_clk
rstForcer_rst
ldForcer_ld
cinForcer_inc
dataForceww_d[7]〜ww_d[0]
qoutCompareww_q[7]〜ww_q[0]
coutComparew_co

IMS Link Create Group
図3.6 Create Group ウインドウ

グループを作成したら、それぞれのグループにVCDファイルから読み込んだ信号を登録していきます。IMS Link メインウインドウの左側の Logic Master Group でグループを選択し、右側の Master Pin List で登録する信号名を選択し、中央の左矢印ボタンをクリックします。双方向バスの場合は、入力と出力の2つのグループに登録します。表3.1に従って、信号を全て登録してください。

IMS Link Group Assign
図3.7 グループへの信号の登録

3.6 ピンコントロールの割り当て

トライステートピンのように、信号が有効か無効かを制御する信号がある場合、被制御ピンがどの制御ピンによって制御されるのかを予め設定しておく必要があります。この設定を行うには、Master Pin List 欄から制御ピン(信号)と被制御ピン(信号)を選択し(CTRL + クリック)、右下のコントロールボタンをクリックします。図3.8のウインドウが現れます。

IMS Link Control Pins
図3.8 Control Pin ウインドウ

Signalsのリストボックスから被制御信号を選択し、Typeのところで種類を設定します。COntrol Parametersの欄のWhenの次のテキストボックスに制御信号の正確な名前(モジュール名.ピン名)を書き込んで、文章を完成させます。この例では、「モジュールcnt8_testの制御ピンr_rstが0のとき、モジュールcnt8_testの被制御ピンw_coが有効となる」としてあります。双方向の場合は、制御ピンが{0|1}のとき、方向は{入力|出力}となるといった設定になります。この設定を、行うと IMS Link メインウインドウの Master Pin List 欄の Control フィールドに、CやOの記号が現れますが、実習チップでは、ピンコントロールは必要ありませんので、ここでCancelしてください。もし、Applyしてしまったなら、Control Parameters欄のenableをnoneに変更してください。

3.7 グループの動作条件

メニューから、View → Grop Settings... を選択すると、図3.9のウインドウが現れます。ここでは、各グループの設定を個別に変更できます。電源とグランドは、IMS Screens の方で設定しますので、そのままにしておいてください。この実習では変更するところはありません。

IMS Link Group Settings
図3.9 Group Settings ウインドウ

3.8 IMS Screens 用のピン名の作成

IMS Screens 用のピン名を付けるには、一つ一つ書き込む方法と、自動でつけてもらう方法があります。ここでは、右下にある Auto Name ボタンをクリックして、自動でつけてもらいましょう。

IMS Link Auto Name
図3.10 IMS Link メインウインドウでピン名を付けたところ

3.9 チャネルの指定

IMS Link メインウインドウの右側のChannelを指定します。準備のページで作成した、信号(パッド名)とATS-100のチャネル名の表を見ながら、間違いの無いように入力してください。

IMS Link Channel Assign
図3.11 IMS Link メインウインドウでATS-100のチャネルを割り当てたところ

3.10 パターンファイル生成

IMS Link メインウインドウのメニューから、File → Generate... を選択すると、図3.12のウインドウが現れます。Format を選択して(ASCIIが便利)、左下のStartボタンをクリックすると、IMS Screens 用のファイルが生成されます。この例では、ATS-100 の Setupファイルを cnt84.set、パターンデータファイルを cnt84.mem というファイル名で出力しています。

IMS Link Generate
図3.12 IMS Link Generate ウインドウ

3.11 IMS Screens でのパターンファイルの読み込み

IMS Link で出力した、cnt84.set と cnt84.mem を IMS Screens に読み込みます。IMS Screens を起動し、メニューから、Screens → I/O Functions を選び、Operation: Restore fileとし、メニューから File → Select Filename で cnt84.setを選んでOKボタンをクリック。Start Save/Restore ボタンもクリックするのを忘れないように。同様にして、cnt84.mem も読み込みます。

3.12 電源の割り当て

メニューの Screens → Resource Assignment を選び、電源の設定を行います。設定内容は、IMS Screens による機能テストと同じですので、そちらを参考にしてください。設定が終わると図3.13のようになります。

Resource Assignment for 8bit Counter
図3.13 8bitカウンタのリソース割り当て

3.13 Operating Conditions の設定

  1. Cycle Time
    適当に調整
  2. Power Group
    VA = 0V に設定
  3. Compare Group
    Delay を調整する(判定ポイント)
通常、Delayのタイミングなどは、Cycle Time に合わせて調整します。これを自動的に行うためには、次のような方法があります。

  1. Operating Conditions ウインドウで変更したいCompareグループの信号をクリック
  2. Sub-Screens → Fomula Definition を選び、Fomula欄に period()*数値 または、period()/数値 を記入
  3. ESCキーで終了
period() は、Cycle Time の値を返す関数。実習では、period()/2 あたりに設定してみてください。

3.14 テストの実行

メニューから、Screens → Pattern Control を選び、Pattern Control ウインドウで、Start System ボタンをクリック。図3.14のような結果が得られます。

Function Test for 8bit Counter
図3.14 8bitカウンタの機能テスト結果

3.15 タイミングチャート表示

Pattern Control ウインドウのようなステート表示が分かりにくい場合には、タイミングチャート表示ができます。但し、タイミングチャート表示では、あまり多くの信号を同時に見ることはできません。

  1. メニューから、Screens Timing Diagrams を選択すると Timing Diagrams ウインドウが現れる
  2. Sub-Screens Timing Order を選ぶと、信号のリストが現れるので、Type, Name (Group), Pin Name(信号名)を表示したい順に選ぶ(右クリック)
  3. ESCキーで終了

Timing Order Setting for 8bit Counter
図3.15 タイミングチャート用の表示順序設定画面

Magnification で時間軸のすけーるを変更できます。スケールの部分をクリックすると、カーソルキーで、時間軸方向に移動できます。エラーの部分は、赤で表示されます。図3.16では、出力の立下り変化が少し遅れてエラーとなっています。カウンタが上手く動作していることを確認したら、ここまでの設定を、Screens → I/O Functions で保存しておいてください。設定ファイルの拡張子は、.ims としてください。

Timing Diagram for 8bit Counter
図3.16 8bitカウンタのタイミングチャート



お問い合わせはこちらまで: kitagawa@is.t.kanazawa-u.ac.jp

Copylight (C) 2001 Akio Kitagawa, Kanazawa Univ.