/**** * playback_controller_tb.sv - a testbench for the playback_controller.sv * module. * * @author: Dilanthi Prentice * @date: [unsure of due date] * * */ `ifdef VERILATOR `include "sdvd_defs.sv" `endif import sdvd_defs::SPEED; module playback_controller_tb; logic clk, reset; logic play, ff; SPEED speed; int errors; //instatiate the dut playback_controller dut(clk, reset, play, ff, speed); //clock generation initial clk = 0; always #5 clk = ~clk; //play button press task press_play(); play = 1; @(posedge clk); play = 0; @(posedge clk); endtask //ff button press task press_ff(); ff = 1; @(posedge clk); ff = 0; @(posedge clk); endtask initial begin @(posedge clk); play = 0; ff = 0; reset = 1; @(posedge clk); reset = 0; @(posedge clk); assert (speed === 0) else begin $error("Speed not zero after reset"); errors++; end @(posedge clk); press_play(); assert (speed === 1) else begin $error("Play not working"); errors++; end press_play(); assert (speed === 0) else begin $error("Pause not working"); errors++; end press_ff(); assert (speed === 2) else begin $error("Not in FF2 after ff btn pressed once"); errors++; end press_ff(); assert (speed === 4) else begin $error("Not in FF4 after ff btn pressed twice"); errors++; end press_ff(); assert (speed === 8) else begin $error("Not in FF8 after ff btn pressed thrice"); errors++; end press_play(); assert (speed === 0) else begin $error("Unsuccessful return to pause after play btn pressed from a FF state"); errors++; end if (errors === 0) $display("No errors detected in playback_controller"); $finish; end endmodule