129 lines
2.7 KiB
Systemverilog
129 lines
2.7 KiB
Systemverilog
`timescale 1ns / 1ps
|
|
|
|
module generator_tb;
|
|
|
|
parameter DATA_WIDTH = 14;
|
|
parameter ZERO_LEVEL = 0;
|
|
parameter CLK_PERIOD = 8;
|
|
|
|
logic clk;
|
|
logic rst;
|
|
logic start;
|
|
|
|
logic [31:0] pulse_width;
|
|
logic [31:0] pulse_period;
|
|
logic [DATA_WIDTH-1:0] pulse_height;
|
|
logic [15:0] pulse_num;
|
|
|
|
wire pulse;
|
|
wire [DATA_WIDTH-1:0] dac_out;
|
|
wire sample_done;
|
|
logic sample_req;
|
|
|
|
// DUT
|
|
generator #(
|
|
.DATA_WIDTH(DATA_WIDTH),
|
|
.ZERO_LEVEL(ZERO_LEVEL)
|
|
) dut (
|
|
.clk_dac(clk),
|
|
.rst(rst),
|
|
.start(start),
|
|
.pulse_width(pulse_width),
|
|
.pulse_period(pulse_period),
|
|
.pulse_height(pulse_height),
|
|
.pulse_num(pulse_num),
|
|
.dac_wrt(pulse),
|
|
.dac_out(dac_out),
|
|
.done(sample_done),
|
|
.request(sample_req)
|
|
);
|
|
|
|
// Clock
|
|
initial begin
|
|
clk = 0;
|
|
forever #(CLK_PERIOD/2) clk = ~clk;
|
|
end
|
|
|
|
initial begin
|
|
$display("\n=== GENERATOR TEST ===\n");
|
|
|
|
rst = 1;
|
|
start = 0;
|
|
|
|
pulse_width = 0;
|
|
pulse_period = 0;
|
|
pulse_height = 0;
|
|
pulse_num = 0;
|
|
sample_req = 0;
|
|
|
|
repeat(5) @(posedge clk);
|
|
rst = 0;
|
|
|
|
repeat(2) @(posedge clk);
|
|
pulse_width = 0;
|
|
pulse_period = 20;
|
|
pulse_num = 4;
|
|
pulse_height = 1024;
|
|
|
|
// startup signal
|
|
#1;
|
|
start = 1;
|
|
@(posedge clk);
|
|
#1;
|
|
start = 0;
|
|
|
|
repeat(pulse_num) begin
|
|
// syncronization
|
|
wait(sample_done == 1);
|
|
repeat(4) @(posedge clk);
|
|
sample_req = 1;
|
|
repeat(2) @(posedge clk);
|
|
sample_req = 0;
|
|
end
|
|
wait(sample_done == 1);
|
|
// // --- Test 2 ---
|
|
// $display("\n--- SECOND RUN ---\n");
|
|
|
|
// @(posedge clk);
|
|
// pulse_width = 2;
|
|
// pulse_period = 5;
|
|
// pulse_num = 3;
|
|
// pulse_height = 14'h155;
|
|
// start = 1;
|
|
|
|
// @(posedge clk);
|
|
// start = 0;
|
|
|
|
// repeat(40) @(posedge clk);
|
|
|
|
// pulse_width = 3;
|
|
// pulse_period = 8;
|
|
// pulse_num = 4;
|
|
// pulse_height = 14'h3FF;
|
|
// start = 1;
|
|
|
|
// repeat(1) @(posedge clk);
|
|
// start = 0;
|
|
|
|
// repeat(5) @(posedge clk);
|
|
// start = 1;
|
|
// pulse_height = 14'h155;
|
|
|
|
// repeat(1) @(posedge clk);
|
|
// start = 0;
|
|
|
|
// repeat(50) @(posedge clk);
|
|
|
|
|
|
// $display("\n=== TEST FINISHED ===");
|
|
#100;
|
|
$finish;
|
|
end
|
|
|
|
// // Display
|
|
// always @(posedge clk) begin
|
|
// $display("t=%0t | pulse=%0b | height=%h",
|
|
// $time, pulse, pulse_height_out);
|
|
// end
|
|
|
|
endmodule |