Files
reflectometer_fpga_project/rtl/generator/tests/generator_tb.sv
2026-06-09 13:08:51 +03:00

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