Test Bench
Test Bench
// Testbench parameters
localparam CLK_PERIOD = 10; // 100 MHz clock
// Test signals
reg clk;
reg rst_n;
reg [7:0] rx_data;
reg rx_valid;
wire rx_ready;
wire [7:0] tx_data;
wire tx_valid;
reg tx_ready;
reg [7:0] ctrl_data;
reg ctrl_valid;
wire ctrl_ready;
wire [7:0] status;
wire [7:0] led;
// Clock generation
initial begin
clk = 0;
forever #(CLK_PERIOD/2) clk = ~clk;
end
// End packet
@(posedge clk);
rx_valid = 1'b0;
@(posedge clk);
end
endtask
j = 0;
error = 0;
// Check value
if (tx_data !== expected[j]) begin
$display("ERROR: Packet byte %0d mismatch. Expected: %h, Got:
%h",
j, expected[j], tx_data);
error = 1;
error_count = error_count + 1;
end
// Next byte
tx_ready = 1'b1;
@(posedge clk);
end
// Display result
if (!error) begin
$display("INFO: Packet correctly forwarded");
end
end
endtask
timeout = 0;
tx_ready = 1'b1;
// Check result
if (tx_valid) begin
$display("ERROR: Packet was forwarded when it should have been
dropped");
error_count = error_count + 1;
end else begin
$display("INFO: Packet correctly dropped");
end
end
endtask
// Finish simulation
#100;
$finish;
end
endmodule