// ********************************************************************************************* // Project Version : v1.0 // Project : [BCDC] Microtec Academy Course: Building a RISC-V CPU with SystemVerilog // ----- // Copyright (c) : 2025 Fraunhofer IIS, Department IDS // Created : 15.Oct.2025 by Bomin Kim // Last Modified : 23.Oct.2025 by Bomin Kim [commit 2f8f03d] // ----- // HISTORY : Date By Comments // ----------- --------- ------------------------------------------------- // ********************************************************************************************* `timescale 1ns/1ns module pc_tb (); // Local Signals logic[31:0] CurrentPC; logic[31:0] JumpOrBranchPC; logic JumpOrBranch; logic[31:0] NextPC; logic reset; logic clk; // Toplevel instance (DUT) pc u_pc ( .CurrentPC(CurrentPC), .JumpOrBranchPC(JumpOrBranchPC), .JumpOrBranch(JumpOrBranch), .NextPC(NextPC), .reset(reset), .clk(clk) ); // Clock generation always #20 clk = ~clk; // Initialization and run simulation initial begin dumpWave("wave.vcd"); clk = 0; JumpOrBranchPC = 32'h8; JumpOrBranch = 0; reset = 0; #100; reset = 1; #100; reset = 0; #490; JumpOrBranch = 1; #60; JumpOrBranch = 0; #500; $finish; end // NextPC Monitor initial begin $monitor("time=%0t clk=%b reset=%b JumpOrBranch=%0h CurrentPC=%0h NextPC=%0h", $time, clk, reset, JumpOrBranch, CurrentPC, NextPC); end // Wave Dump Helper Task task dumpWave(string fileName); // Open wave file and dump all signals (2D arrays not included) $display("\nTime = %0dns \t : Opening wave file '%s'", $time, fileName); $dumpfile(fileName); $display("Time = %0dns \t : Dumping all %s signals in wave file (2D arrays not included)", $time, "pc_tb"); $dumpvars(0, pc_tb); endtask: dumpWave endmodule