| 3 入力ベクタの作成 |
|---|
| 3.1 テストベンチの作成 |
テストベンチ記述上の注意点
テストベンチの記述例
`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
|
テストベンチが完成したら、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 に修正 |