|
@ -54,6 +54,7 @@ module tb_uart_loop; |
|
|
// Testbench variables |
|
|
// Testbench variables |
|
|
reg [7:0] tx_data = 8'h0; |
|
|
reg [7:0] tx_data = 8'h0; |
|
|
reg [7:0] rx_data = 8'h0; |
|
|
reg [7:0] rx_data = 8'h0; |
|
|
|
|
|
reg [7:0] ref_data [0:15]; |
|
|
|
|
|
|
|
|
// Testbench 1/2 clock period |
|
|
// Testbench 1/2 clock period |
|
|
localparam clk_half_period = 50; |
|
|
localparam clk_half_period = 50; |
|
@ -85,12 +86,13 @@ module tb_uart_loop; |
|
|
forever @(posedge rst_n) begin |
|
|
forever @(posedge rst_n) begin |
|
|
uart_rx = 1'b1; |
|
|
uart_rx = 1'b1; |
|
|
#uart_bit_period; |
|
|
#uart_bit_period; |
|
|
for (integer tx = 0; tx < 32; tx = tx + 1) begin |
|
|
|
|
|
tx_data = tx; |
|
|
|
|
|
|
|
|
for (integer i = 0; i < $size(ref_data); i = i + 1) begin |
|
|
|
|
|
tx_data = {$random} % 255; |
|
|
|
|
|
ref_data[i] = tx_data; |
|
|
$display ("UART send: 0x%h", tx_data); |
|
|
$display ("UART send: 0x%h", tx_data); |
|
|
uart_rx = 1'b0; |
|
|
uart_rx = 1'b0; |
|
|
#uart_bit_period; |
|
|
#uart_bit_period; |
|
|
for (integer i = 0; i < 7; i = i + 1) begin |
|
|
|
|
|
|
|
|
for (integer i = 0; i <= 7; i = i + 1) begin |
|
|
uart_rx = tx_data[i]; |
|
|
uart_rx = tx_data[i]; |
|
|
#uart_bit_period; |
|
|
#uart_bit_period; |
|
|
end |
|
|
end |
|
@ -104,18 +106,18 @@ module tb_uart_loop; |
|
|
// Checker |
|
|
// Checker |
|
|
initial begin |
|
|
initial begin |
|
|
@(posedge rst_n) |
|
|
@(posedge rst_n) |
|
|
for (reg [7:0] rx = 0; rx < 32; rx = rx + 1) begin |
|
|
|
|
|
|
|
|
for (integer i = 0; i < $size(ref_data); i = i + 1) begin |
|
|
@(negedge uart_tx) |
|
|
@(negedge uart_tx) |
|
|
#uart_bit_period; |
|
|
#uart_bit_period; |
|
|
#uart_bit_half_period; |
|
|
#uart_bit_half_period; |
|
|
for (integer i = 0; i < 7; i = i + 1) begin |
|
|
|
|
|
|
|
|
for (integer i = 0; i <= 7; i = i + 1) begin |
|
|
rx_data[i] = uart_tx; |
|
|
rx_data[i] = uart_tx; |
|
|
#uart_bit_period; |
|
|
#uart_bit_period; |
|
|
end |
|
|
end |
|
|
assert (rx_data == rx) |
|
|
|
|
|
|
|
|
assert (rx_data == ref_data[i]) |
|
|
$display("UART recv: 0x%h", rx_data); |
|
|
$display("UART recv: 0x%h", rx_data); |
|
|
else |
|
|
else |
|
|
$warning("UART receive error, got 0x%h, expected 0x%h", rx_data, rx); |
|
|
|
|
|
|
|
|
$error("UART receive error, got 0x%h, expected 0x%h", rx_data, ref_data[i]); |
|
|
end |
|
|
end |
|
|
$display ("UART tests finished"); |
|
|
$display ("UART tests finished"); |
|
|
$finish; |
|
|
$finish; |
|
|