では、入力信号はどのようにして与えるのでしょうか。シミュレータの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
次は シミュレータの起動 です。