manta/test/functional_sim/uart_tb.sv

84 lines
1.3 KiB
Systemverilog

`default_nettype none
`timescale 1ns / 1ps
module uart_tb();
logic clk;
logic rst;
logic [7:0] tx_data;
logic tx_start;
// transmitters
logic tx_done_manta;
logic txd_manta;
uart_tx #(.CLOCKS_PER_BAUD(10)) tx_manta (
.clk(clk),
.data_i(tx_data),
.start_i(tx_start),
.done_o(tx_done_manta),
.tx(txd_manta));
logic tx_busy_zipcpu;
logic tx_done_zipcpu;
logic txd_zipcpu;
assign tx_done_zipcpu = ~tx_busy_zipcpu;
tx_uart #(.CLOCKS_PER_BAUD(10)) tx_zipcpu (
.i_clk(clk),
.i_wr(tx_start),
.i_data(tx_data),
.o_uart_tx(txd_zipcpu),
.o_busy(tx_busy_zipcpu));
// receivers
logic [7:0] rx_data_manta;
logic rx_valid_manta;
uart_rx #(.CLOCKS_PER_BAUD(10)) rx_manta (
.clk(clk),
.rx(txd_manta),
.data_o(rx_data_manta),
.valid_o(rx_valid_manta));
logic [7:0] rx_data_zipcpu;
logic rx_valid_zipcpu;
rx_uart #(.CLOCKS_PER_BAUD(10)) rx_zipcpu (
.i_clk(clk),
.i_uart_rx(txd_zipcpu),
.o_wr(rx_valid_zipcpu),
.o_data(rx_data_zipcpu));
always begin
#5;
clk = !clk;
end
initial begin
$dumpfile("uart.vcd");
$dumpvars(0, uart_tb);
clk = 0;
tx_data = 'hFF;
tx_start = 0;
#10;
rst = 0;
#10;
tx_start = 1;
#10;
tx_start = 0;
#10000;
// send another byte!
tx_data = 'b0100_1101;
tx_start = 1;
#3000;
tx_start = 0;
#10000;
$finish();
end
endmodule
`default_nettype wire