3 入力ベクタの作成

3.1 テストベンチの作成

テストベンチ記述上の注意点

  1. テストベンチの'timescale 記述とMU200クロック周波数は関係がありません。"#時間" で指定される単位時間を1クロック周期とし、測定時のクロック周期は、MU200のボード上のクロック切り替えスイッチ(SW23)によって決められます。
  2. VCDファイルにベクトル表記された信号を出力すると、PM200のロジアナソフトに無視されるようなので、ビット毎に変数をばらしておく必要があります。
  3. VCD出力変数のリスト($dumpvars)の順序が、FPGAロジアナのポート変数 probe_out[i], probe_in[j] の i および j の順序(昇順)になるので注意が必要。テスト対象の信号を変更する際、ここでミスって時間を費やす羽目になることが多いので特に注意が必要。inとoutはVCD中に明示します。

テストベンチの記述例
`timescale 1ns/1ns

module cnt8_test;

	reg        en, clk, rst, ld;	
				// Incriment, Clock, Reset, Load
	reg  [7:0] r_d;		// Data
	wire       cout;	// Carry
	wire [7:0] w_q;		// Output

	//for PowerMedusa
	wire d7, d6, d5, d4, d3, d2, d1, d0;
	wire q7, q6, q5, q4, q3, q2, q1, q0;
	assign {d7, d6, d5, d4, d3, d2, d1, d0} = r_d;
	assign {q7, q6, q5, q4, q3, q2, q1, q0} = w_q;

	integer i;
	parameter cycle = 100;	// CLK Period = 10MHz

	count8_ld i0 (.d(r_d), .ci(en), .clk(clk), .rst(rst), 
		      .ld(ld), .co(cout), .q(w_q));

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

	initial begin
		#0		rst = 1'b1;
				ld  = 1'b0;
				en  = 1'b0;
				d   = 8'hf0;
		#(cycle*3/4)	rst = 1'b0;
		#(cycle*5/4)	rst = 1'b1;
				ld  = 1'b1;
		#(cycle)	en  = 1'b1;
				ld  = 1'b0;
		#(cycle*48)	$finish;
	end

	initial begin
		// Monitor Output
		$monitor($time,, "data = %h clock = %b reset = %b 
                 ld = %b ci = %b q = %h co = %b", 
                 r_d, clk, rst, ld, en, w_q, cout);
	end

	initial begin

		// VCD File Name
		$dumpfile("cnt8.vcd");					

		// VCD Signal Name
		$dumpvars(0, d7, d6, d5, d4, d3, d2, d1, d0, clk, 
                 rst, ld, en, q7, q6, q5, q4, q3, q2, q1, q0, cout);
	end
endmodule


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
(注) 通常、テストベンチの信号は、DUTへの入力をregで宣言し、DUTからの出力をwireで宣言します。ただし、VCD出力用の信号は、assign文によりreg型のベクトルからリダイレクトするため、wire型として宣言しています。

テストベンチが完成したら、VDEC設計室へ転送して、ncverilog を実行。$dumpfile で指定したvcdファイルが作成されますので、MU200-SXを接続しているPCに持ち帰ってください。verilog-XLを使用すると、変数の順序が自動変更されたりして、失敗することがあります。

3.2 VCDファイルの編集

VCDファイルに in/out の記述を書き込みます。VCDファイルはテキストファイルです。

入力VCDファイルの修正内容
FPGA -> DUT 方向の信号reg または wire -> in に修正
DUT -> FPGA 方向の信号wire または reg -> out に修正


up next