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カウンタのモジュール名です。
図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のようなウインドウが表示されます。このウインドウを元に作業を行うので、今後は、これをメインウインドウと呼ぶことにします。
図3.2 IMS Link メインウインドウ |
メニューから、File → Import → Verilog VCD... を選択すると、ファイル選択ダイアログが表示されるので、VCDファイルを読み込ませます。図3.3のようにIMS Link メインウインドウの右側の欄に、Verilog HDLで定義された信号名が現れます。
図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 ウインドウを閉じます。
図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 です。
図3.5 Default Group Settings ウインドウ |
3.5 グループの作成 |
データバスのように同じ設定でよい信号をまとめて、一つのグループにします。全てのピンは、グループに属さなくてはならないので、一つのグループの中に信号が一つだけという場合もあります。グループを作成するには、メニューから、Edit → Create Group... を選択し、図3.6のウインドウを表示します。Type を選択し、Group: 欄に新たに作成するグループ名を入力して、Apply をクリックします。Type の意味は、IMS Screens の場合と同じです。実習チップ用に、表3.1に示すようなグループを作成してください。
表3.1 グループ名と信号名
Group | Type | 属する信号名 |
---|---|---|
clk | Force | r_clk |
rst | Force | r_rst |
ld | Force | r_ld |
cin | Force | r_inc |
data | Force | ww_d[7]〜ww_d[0] |
qout | Compare | ww_q[7]〜ww_q[0] |
cout | Compare | w_co |
図3.6 Create Group ウインドウ |
グループを作成したら、それぞれのグループにVCDファイルから読み込んだ信号を登録していきます。IMS Link メインウインドウの左側の Logic Master Group でグループを選択し、右側の Master Pin List で登録する信号名を選択し、中央の左矢印ボタンをクリックします。双方向バスの場合は、入力と出力の2つのグループに登録します。表3.1に従って、信号を全て登録してください。
図3.7 グループへの信号の登録 |
3.6 ピンコントロールの割り当て |
トライステートピンのように、信号が有効か無効かを制御する信号がある場合、被制御ピンがどの制御ピンによって制御されるのかを予め設定しておく必要があります。この設定を行うには、Master Pin List 欄から制御ピン(信号)と被制御ピン(信号)を選択し(CTRL + クリック)、右下のコントロールボタンをクリックします。図3.8のウインドウが現れます。
図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 の方で設定しますので、そのままにしておいてください。この実習では変更するところはありません。
図3.9 Group Settings ウインドウ |
3.8 IMS Screens 用のピン名の作成 |
IMS Screens 用のピン名を付けるには、一つ一つ書き込む方法と、自動でつけてもらう方法があります。ここでは、右下にある Auto Name ボタンをクリックして、自動でつけてもらいましょう。
図3.10 IMS Link メインウインドウでピン名を付けたところ |
3.9 チャネルの指定 |
IMS Link メインウインドウの右側のChannelを指定します。準備のページで作成した、信号(パッド名)とATS-100のチャネル名の表を見ながら、間違いの無いように入力してください。
図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 というファイル名で出力しています。
図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のようになります。
図3.13 8bitカウンタのリソース割り当て |
3.13 Operating Conditions の設定 |
3.14 テストの実行 |
メニューから、Screens → Pattern Control を選び、Pattern Control ウインドウで、Start System ボタンをクリック。図3.14のような結果が得られます。
図3.14 8bitカウンタの機能テスト結果 |
3.15 タイミングチャート表示 |
Pattern Control ウインドウのようなステート表示が分かりにくい場合には、タイミングチャート表示ができます。但し、タイミングチャート表示では、あまり多くの信号を同時に見ることはできません。
図3.15 タイミングチャート用の表示順序設定画面 |
Magnification で時間軸のすけーるを変更できます。スケールの部分をクリックすると、カーソルキーで、時間軸方向に移動できます。エラーの部分は、赤で表示されます。図3.16では、出力の立下り変化が少し遅れてエラーとなっています。カウンタが上手く動作していることを確認したら、ここまでの設定を、Screens → I/O Functions で保存しておいてください。設定ファイルの拡張子は、.ims としてください。
図3.16 8bitカウンタのタイミングチャート |
Copylight (C) 2001 Akio Kitagawa, Kanazawa Univ.