/**************************************************************************** +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ |F|u|n|c|t|i|o|n|a|l| |V|e|r|i|f|i|c|a|t|i|o|n| |o|f| |H|a|r|d|w|a|r|e| +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+ FILE i2c_test_top.sv DESCRIPTION top module - connects DUT and interface - generates clk and reset - runs UVM test ****************************************************************************/ `ifndef I2C_TEST_TOP_SV `define I2C_TEST_TOP_SV /** * Module: i2c_test_top */ module i2c_test_top; import uvm_pkg::*; // import the UVM library `include "uvm_macros.svh" // Include the UVM macros import i2c_pkg::*; // import the i2c pkg `include "i2c_test_lib.sv" `include "dut.sv" logic clock; logic reset; // interface i2c_if i2c_vif(clock, reset); // DUT dut #( .ADDR_WIDTH(7), .DATA_WIDTH(8) ) dut_inst ( .clk (clock), .rst (reset), .scl (i2c_vif.scl), .sda (i2c_vif.sda) ); // set interface in db; run UVM test initial begin uvm_config_db#(virtual i2c_if)::set(null,"uvm_test_top.*","i2c_if", i2c_vif); run_test(); end // initialize clock and reset initial begin clock <= 1'b0; reset <= 1'b1; #50 reset <= 1'b0; end // generate clock always #5 clock = ~clock; endmodule : i2c_test_top `endif