では、入力信号はどのようにして与えるのでしょうか。シミュレータのGUIを 用いて、各信号に対して値を設定することもできますが、非常に手間がかかり ます。そのため、本実験ではハードウェア記述言語によって与えます。使用す るハードウェア記述言語は事前に予習を行った Verilog HDL で、集積回路設 計に広く用いられています。ここではテストベクタを記述するのに必要最小限 な要点のみを解説します。
まず、テストベクタを入力するためのファイルを登録します。
デザインウィンドウのタブからDesignを選択します。
次にViewをSimulationに変更します。
Hierarchyからcounter(counter.sch)を選択します。
ここでマウスを右クリックし "New Source" を選択します。
下図のように、"Verilog Test Fixture" を選択し、テストベンチファイルと
して counter_test.v を入力し Next を押します。
続けて、Finish を押してファイルを登録します。
counter_test.v ファイルが作成されてエディタ上に表示されますが、 その際テストベンチの雛形が作成されています。
// Verilog test fixture created from schematic /user/staff/kuga/work/xilinx/jikken/4bit/sch/COUNTER/counter.sch - Tue Dec 13 13:42:06 2011
`timescale 1ns / 1ps
module counter_counter_sch_tb();
// Inputs
reg CE;
reg CLK;
reg RST;
// Output
wire Q3;
wire Q2;
wire Q1;
wire Q0;
// Bidirs
// Instantiate the UUT
counter UUT (
.CE(CE),
.CLK(CLK),
.RST(RST),
.Q3(Q3),
.Q2(Q2),
.Q1(Q1),
.Q0(Q0)
);
// Initialize Inputs
`ifdef auto_init
initial begin
CE = 0;
CLK = 0;
RST = 0;
`endif
endmodule
// Verilog test fixture created from schematic /user/staff/kuga/work/xilinx/jikken/4bit/sch/COUNTER/counter.sch - Tue Dec 13 13:42:06 2011
`timescale 1ns / 1ps
module counter_counter_sch_tb();
// Inputs
reg CE;
reg CLK;
reg RST;
// Output
wire Q3;
wire Q2;
wire Q1;
wire Q0;
wire [3:0] Q;
assign Q = { Q3, Q2, Q1, Q0 };
// Bidirs
// Instantiate the UUT
counter UUT (
.CE(CE),
.CLK(CLK),
.RST(RST),
.Q3(Q3),
.Q2(Q2),
.Q1(Q1),
.Q0(Q0)
);
// Initialize Inputs
integer i;
initial
begin
CLK = 1'b1;
for( i=0 ; i<60 ; i=i+1 )
CLK = #50 ~CLK;
$finish;
end
initial
begin
CE = 1'b1;
CE = #1075 1'b0;
CE = #200 1'b1;
end
initial
begin
RST = 1'b1;
RST = #175 1'b0;
RST = #375 1'b1;
RST = #225 1'b0;
end
endmodule
次は シミュレータの起動 です。