tb: Make touch_sense selftesting

- Check for expected word
- Exit with the right error code
This commit is contained in:
Daniel Jobson 2024-11-21 15:23:39 +01:00
parent c547042553
commit ac853c87ec
No known key found for this signature in database
GPG Key ID: 3707A9DBF4BB8F1A

View File

@ -206,6 +206,43 @@ module tb_touch_sense ();
endtask // read_word endtask // read_word
//----------------------------------------------------------------
// read_check_word()
//
// Read a data word from the given address in the DUT.
// the word read will be available in the global variable
// read_data.
//
// The function also checks that the data read matches
// the expected value or not.
//----------------------------------------------------------------
task read_check_word(input [7 : 0] address, input [31 : 0] expected);
begin : read_check_word
tb_address = address;
tb_cs = 1'h1;
#(CLK_PERIOD);
read_data = tb_read_data;
#(CLK_PERIOD);
tb_cs = 1'h0;
if (DEBUG) begin
if (read_data == expected) begin
$display("--- Reading 0x%08x from 0x%02x.", read_data, address);
end
else begin
$display("--- Error: Got 0x%08x when reading from 0x%02x, expected 0x%08x", read_data,
address, expected);
error_ctr = error_ctr + 1;
end
$display("");
end
end
endtask // read_check_word
//---------------------------------------------------------------- //----------------------------------------------------------------
// wait_ready() // wait_ready()
// //
@ -242,7 +279,7 @@ module tb_touch_sense ();
// Check status. // Check status.
#(CLK_PERIOD); #(CLK_PERIOD);
read_word(8'h09); read_check_word(ADDR_STATUS, 32'h00);
// Set touch event input to high. // Set touch event input to high.
$display("--- test1: Creating a touch event."); $display("--- test1: Creating a touch event.");
@ -250,21 +287,21 @@ module tb_touch_sense ();
$display("--- test1: Waiting for the event to be caught."); $display("--- test1: Waiting for the event to be caught.");
wait_ready(); wait_ready();
read_check_word(ADDR_STATUS, 32'h01);
$display("--- test1: Event has been seen."); $display("--- test1: Event has been seen.");
$display("--- test1: Dropping the event input."); $display("--- test1: Dropping the event input.");
tb_touch_event = 1'h0; tb_touch_event = 1'h0;
#(CLK_PERIOD); #(CLK_PERIOD);
$display("--- test1: Clearing the event."); $display("--- test1: Clearing the event.");
write_word(8'h09, 32'h0); write_word(ADDR_STATUS, 32'h0);
#(CLK_PERIOD); #(CLK_PERIOD);
// Check that the event is now removed. // Check that the event is now removed.
read_word(8'h09); read_check_word(ADDR_STATUS, 32'h00);
#(CLK_PERIOD); #(CLK_PERIOD);
$display("--- test1: Event has been cleared."); $display("--- test1: Event has been cleared.");
read_word(8'h09); read_check_word(ADDR_STATUS, 32'h00);
#(CLK_PERIOD); #(CLK_PERIOD);
$display("--- test1: completed."); $display("--- test1: completed.");
@ -273,6 +310,23 @@ module tb_touch_sense ();
endtask // test1 endtask // test1
//----------------------------------------------------------------
// exit_with_error_code()
//
// Exit with the right error code
//----------------------------------------------------------------
task exit_with_error_code;
begin
if (error_ctr == 0) begin
$finish(0);
end
else begin
$fatal(1);
end
end
endtask // exit_with_error_code
//---------------------------------------------------------------- //----------------------------------------------------------------
// touch_sense_test // touch_sense_test
//---------------------------------------------------------------- //----------------------------------------------------------------
@ -292,7 +346,7 @@ module tb_touch_sense ();
$display(" -= Testbench for touch_sense completed =-"); $display(" -= Testbench for touch_sense completed =-");
$display(" ======================================"); $display(" ======================================");
$display(""); $display("");
$finish; exit_with_error_code();
end // touch_sense_test end // touch_sense_test
endmodule // tb_touch_sense endmodule // tb_touch_sense