module psychic_tester_tb (); logic clk, rst, submit_ext, psychic; logic [3:0] guess_ext; // instantiate device under test psychic_tester dut (.*); // generate simulated clock parameter T = 20; // clock period initial clk = 0; always #(T/2) clk <= ~clk; // initial block initial begin // test case 0: verify reset behavior {rst, submit_ext, guess_ext} <= 6'b1_0_0000; @(posedge clk);// reset {rst, submit_ext, guess_ext} <= 6'b0_0_0000; @(posedge clk);// reset // test case 1: user inputs guesses but did not trigger submit button // guess will not submit even if the guess matches the correct pattern {submit_ext, guess_ext} <= 5'b0_0000; @(posedge clk); {submit_ext, guess_ext} <= 5'b0_0001; @(posedge clk); @(posedge clk); // test case 2: user guesses wrong in their 5th try // count_correct should be cleared and psychic signal should be false {submit_ext, guess_ext} <= 5'b0_0000; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (0) {submit_ext, guess_ext} <= 5'b0_0001; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (1) {submit_ext, guess_ext} <= 5'b0_0011; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (2) {submit_ext, guess_ext} <= 5'b0_0111; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (3) {submit_ext, guess_ext} <= 5'b0_1111; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// wrong guess @(posedge clk); // test case 3: Reset and user guesses correctly 8 times // psychic signal should be triggered to true {rst, submit_ext, guess_ext} <= 6'b1_0_0000; @(posedge clk);// reset {rst, submit_ext, guess_ext} <= 6'b0_0_0000; @(posedge clk);// reset {submit_ext, guess_ext} <= 5'b0_0000; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (1) {submit_ext, guess_ext} <= 5'b0_0001; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (2) {submit_ext, guess_ext} <= 5'b0_0011; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (3) {submit_ext, guess_ext} <= 5'b0_0111; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (4) {submit_ext, guess_ext} <= 5'b0_1110; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (5) {submit_ext, guess_ext} <= 5'b0_1101; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (6) {submit_ext, guess_ext} <= 5'b0_1011; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (7) {submit_ext, guess_ext} <= 5'b0_0110; @(posedge clk); submit_ext <= 1'b1; @(posedge clk);// correct (8) submit_ext <= 1'b0; @(posedge clk); @(posedge clk); @(posedge clk); @(posedge clk);// psychic is HIGH $stop; end endmodule // psychic_tester_tb