blob: a7658ab02be43aa325876094f14a392f883595d8 [file] [log] [blame]
// SPDX-FileCopyrightText: © 2022 Leo Moser <https://codeberg.org/mole99>
// SPDX-License-Identifier: GPL-3.0-or-later
module my_uart_rx_tb ();
timeunit 1ns;
timeprecision 1ps;
parameter int FREQUENCY = 1_000_000;
parameter int BAUDRATE = 9600;
parameter int BAUDRATE_WAIT = 1.0 / BAUDRATE * 1e9;
logic clk;
logic rst;
initial begin
$dumpfile("uart_rx.vcd");
$dumpvars(0, my_uart_rx_tb);
end
initial begin
clk <= 0;
rst <= 1;
#10;
rst <= 0;
end
always begin
#(1.0 / FREQUENCY / 2 * 1e9);
clk <= ~clk;
end
logic rx;
logic [7:0] data;
logic valid;
my_uart_rx #(
.FREQUENCY(FREQUENCY),
.BAUDRATE (BAUDRATE)
) my_uart_rx (
.clk(clk),
.rst(rst),
.rx(rx),
.data(data),
.valid(valid)
);
task automatic send_byte_ser(input bit [7:0] data);
$display("sending: %h ", data);
// Start bit
rx = 0;
#BAUDRATE_WAIT;
// Send data LSB first
for (int i = 0; i < 8; i++) begin
rx = data[i];
#BAUDRATE_WAIT;
end
// Stop bit
rx = 1;
#BAUDRATE_WAIT;
endtask
bit [7:0] random_value;
initial begin
rx = 1;
for (int i = 0; i < 10; i++) begin
#BAUDRATE_WAIT;
random_value = $urandom_range(0, 255);
send_byte_ser(random_value);
assert (random_value == data)
else $display("%h != %h", random_value, data);
end
$finish;
end
endmodule