mirror of
https://github.com/lowobservable/coax.git
synced 2026-01-26 12:21:59 +00:00
187 lines
2.8 KiB
Verilog
187 lines
2.8 KiB
Verilog
`default_nettype none
|
|
|
|
`include "assert.v"
|
|
|
|
module control_tb;
|
|
reg clk = 0;
|
|
|
|
initial
|
|
begin
|
|
forever
|
|
begin
|
|
#1 clk <= ~clk;
|
|
end
|
|
end
|
|
|
|
reg reset = 0;
|
|
|
|
reg spi_cs_n = 1;
|
|
reg [7:0] spi_rx_data;
|
|
reg spi_rx_strobe = 0;
|
|
|
|
wire tx_reset;
|
|
wire tx_active;
|
|
wire [9:0] tx_data;
|
|
wire tx_load_strobe;
|
|
wire tx_start_strobe;
|
|
wire tx_empty;
|
|
wire tx_full;
|
|
wire tx_ready;
|
|
|
|
coax_buffered_tx #(
|
|
.CLOCKS_PER_BIT(8),
|
|
.DEPTH(8)
|
|
) coax_buffered_tx (
|
|
.clk(clk),
|
|
.reset(reset),
|
|
.active(tx_active),
|
|
.data(tx_data),
|
|
.load_strobe(tx_load_strobe),
|
|
.start_strobe(tx_start_strobe),
|
|
.empty(tx_empty),
|
|
.full(tx_full),
|
|
.ready(tx_ready)
|
|
);
|
|
|
|
reg rx_active = 0;
|
|
reg rx_error = 0;
|
|
reg [9:0] rx_data = 0;
|
|
reg rx_empty = 1;
|
|
|
|
control dut (
|
|
.clk(clk),
|
|
.reset(reset),
|
|
|
|
.spi_cs_n(spi_cs_n),
|
|
.spi_rx_data(spi_rx_data),
|
|
.spi_rx_strobe(spi_rx_strobe),
|
|
|
|
.tx_reset(tx_reset),
|
|
.tx_active(tx_active),
|
|
.tx_data(tx_data),
|
|
.tx_load_strobe(tx_load_strobe),
|
|
.tx_start_strobe(tx_start_strobe),
|
|
.tx_empty(tx_empty),
|
|
.tx_full(tx_full),
|
|
.tx_ready(tx_ready),
|
|
|
|
.rx_active(rx_active),
|
|
.rx_error(rx_error),
|
|
.rx_data(rx_data),
|
|
.rx_empty(rx_empty)
|
|
);
|
|
|
|
initial
|
|
begin
|
|
$dumpfile("control_tb.vcd");
|
|
$dumpvars(0, control_tb);
|
|
|
|
test_1;
|
|
test_2;
|
|
|
|
$finish;
|
|
end
|
|
|
|
task test_1;
|
|
begin
|
|
$display("START: test_1");
|
|
|
|
dut_reset;
|
|
|
|
#2;
|
|
|
|
rx_data = 10'b1111111111;
|
|
rx_empty = 0;
|
|
|
|
spi_cs_n = 0;
|
|
|
|
spi_send(8'h05); // RX
|
|
|
|
#16;
|
|
|
|
spi_send(8'h00);
|
|
|
|
#16;
|
|
|
|
rx_data = 10'b0000000000;
|
|
rx_empty = 1;
|
|
|
|
spi_send(8'h00);
|
|
|
|
#16;
|
|
|
|
repeat (8)
|
|
begin
|
|
spi_send(8'h00);
|
|
|
|
#16;
|
|
|
|
spi_send(8'h00);
|
|
|
|
#16;
|
|
end
|
|
|
|
spi_cs_n = 1;
|
|
|
|
#64;
|
|
|
|
$display("END: test_1");
|
|
end
|
|
endtask
|
|
|
|
task test_2;
|
|
begin
|
|
$display("START: test_2");
|
|
|
|
dut_reset;
|
|
|
|
#2;
|
|
|
|
spi_cs_n = 0;
|
|
|
|
spi_send(8'h04); // TX
|
|
|
|
#16;
|
|
|
|
spi_send(8'b00000011);
|
|
|
|
#16;
|
|
|
|
spi_send(8'b11111111);
|
|
|
|
#16;
|
|
|
|
#16;
|
|
|
|
spi_cs_n = 1;
|
|
|
|
#500;
|
|
|
|
dut_reset;
|
|
|
|
#20;
|
|
|
|
$display("END: test_2");
|
|
end
|
|
endtask
|
|
|
|
task dut_reset;
|
|
begin
|
|
reset = 1;
|
|
#2;
|
|
reset = 0;
|
|
end
|
|
endtask
|
|
|
|
task spi_send (
|
|
input [7:0] data
|
|
);
|
|
begin
|
|
spi_rx_data = data;
|
|
spi_rx_strobe = 1;
|
|
#2;
|
|
spi_rx_strobe = 0;
|
|
end
|
|
endtask
|
|
endmodule
|