diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_env.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_env.yaml
new file mode 100644
index 00000000..8ab5da03
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_env.yaml
@@ -0,0 +1,84 @@
+uvmf:
+ benches:
+ "block_1" :
+ ## Specify the top-level block
+ top_env: "block_1"
+ clock_half_period: "5ns"
+ reset_assertion_level: "True"
+ reset_duration: "200ns"
+ active_passive:
+ - bfm_name: "apb_master"
+ value: "ACTIVE"
+ - bfm_name: "axi_master1"
+ value: "ACTIVE"
+ - bfm_name: "axi_master2"
+ value: "ACTIVE"
+ - bfm_name: "spi_slave"
+ value: "PASSIVE"
+ environments:
+ "block_1" :
+ agents :
+ - name: "apb_master"
+ type: "apb_m"
+ initiator_responder: "INITIATOR"
+
+ - name: "axi_master1"
+ type: "axi_m"
+ initiator_responder: "INITIATOR"
+
+ - name: "axi_master2"
+ type: "axi_m"
+ initiator_responder: "INITIATOR"
+
+ - name: "spi_slave"
+ type: "spi_s"
+ initiator_responder: "RESPONDER"
+
+ analysis_components :
+ - name: "block_1_pred"
+ type: "block_1_predictor"
+ - name: "block_1_sb"
+ type: "block_1_scoreboard"
+
+ analysis_ports :
+ - name: "apb_master_ap"
+ trans_type: "apb_m_transaction"
+ connected_to: "apb_master.monitored_ap"
+ - name: "axi_master1_ap"
+ trans_type: "axi_m_transaction"
+ connected_to: "axi_master1.monitored_ap"
+ - name: "axi_master2_ap"
+ trans_type: "axi_m_transaction"
+ connected_to: "axi_master2.monitored_ap"
+ - name: "spi_slave_ap"
+ trans_type: "spi_s_transaction"
+ connected_to: "spi_slave.monitored_ap"
+ # - name: "block_1_ap1"
+ # trans_type: "apb_m_transaction"
+ # connected_to: "apb_master.monitored_ap"
+ # - name: "block_1_ap2"
+ # trans_type: "axi_m_transaction"
+ # connected_to: "axi_master1.monitored_ap"
+ # - name: "block_1_ap3"
+ # trans_type: "axi_m_transaction"
+ # connected_to: "axi_master2.monitored_ap"
+ # - name: "block_2_ap1"
+ # trans_type: "spi_s_transaction"
+ # connected_to: "spi_slave.monitored_ap"
+
+ tlm_connections:
+ - driver: "spi_slave.monitored_ap"
+ receiver: "block_1_sb.spi_ae"
+ - driver: "apb_master.monitored_ap"
+ receiver: "block_1_pred.apb_ae"
+ - driver: "axi_master1.monitored_ap"
+ receiver: "block_1_pred.axi_1_ae"
+ - driver: "axi_master2.monitored_ap"
+ receiver: "block_1_pred.axi_2_ae"
+ - driver: "block_1_pred.pre_to_sco_ap"
+ receiver: "block_1_sb.sco_from_pre_ae"
+
+ config_vars :
+ - name: "has_scoreboard"
+ type : "bit"
+ isrand : "False"
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_util.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_util.yaml
new file mode 100644
index 00000000..bb4d18b6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block1_util.yaml
@@ -0,0 +1,22 @@
+uvmf:
+ util_components:
+ block_1_predictor:
+ analysis_exports:
+ - name: apb_ae
+ type: 'apb_m_transaction'
+ - name: axi_1_ae
+ type: 'axi_m_transaction'
+ - name: axi_2_ae
+ type: 'axi_m_transaction'
+ analysis_ports:
+ - name: pre_to_sco_ap
+ type: 'spi_s_transaction'
+ existing_library_component: 'True'
+ type: predictor
+ block_1_scoreboard:
+ analysis_exports:
+ - name: spi_ae
+ type: 'spi_s_transaction'
+ - name: sco_from_pre_ae
+ type: 'spi_s_transaction'
+ type: scoreboard
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block_1.csh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block_1.csh
new file mode 100644
index 00000000..a707f4b7
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/block_1.csh
@@ -0,0 +1,7 @@
+# Setting the path for making "make cli" command works fine.
+
+setenv UVMF_HOME /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/
+
+# This is the command to generate you block_1_level bench
+
+python ../../../UVMF_2022.3/scripts/yaml2uvmf.py ../intf/apb_m_intf.yaml ../intf/axi_m_intf.yaml ../intf/spi_s_intf.yaml ../block_1/block1_env.yaml ../block_1/block1_util.yaml
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.project
new file mode 100644
index 00000000..f8d875b5
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.project
@@ -0,0 +1,37 @@
+
+
+ block_1
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+ verification_ip
+ 2
+ UVMF_VIP_LIBRARY_HOME
+
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D/verification_ip
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.svproject
new file mode 100644
index 00000000..2bcfbf34
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/block_1_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/block_1_sve.F
new file mode 100644
index 00000000..08e278c3
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/block_1_sve.F
@@ -0,0 +1,29 @@
+
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
+// BFM Files
+-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/apb_m_pkg/apb_m_pkg_sve.F
+-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/axi_m_pkg/axi_m_pkg_sve.F
+-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/spi_s_pkg/spi_s_pkg_sve.F
+
+// Environment Files
+-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/block_1_env_pkg/block_1_env_pkg_sve.F
+
+// Bench Files
++incdir+./tb/tests
+./tb/tests/block_1_tests_pkg.sv
+
++incdir+./tb/sequences
+./tb/sequences/block_1_sequences_pkg.sv
+
++incdir+./tb/parameters
+./tb/parameters/block_1_parameters_pkg.sv
+
+./tb/testbench/hdl_top.sv
+./tb/testbench/hvl_top.sv
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/docs/interfaces.csv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/docs/interfaces.csv
new file mode 100644
index 00000000..784f480a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/docs/interfaces.csv
@@ -0,0 +1,16 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+,
+Interface Description, Interface Type, Interface Transaction, Interface Name,
+apb_master, apb_m_driver_bfm apb_m_monitor_bfm, apb_m_transaction, apb_m_pkg_apb_master_BFM,
+axi_master1, axi_m_driver_bfm axi_m_monitor_bfm, axi_m_transaction, axi_m_pkg_axi_master1_BFM,
+axi_master2, axi_m_driver_bfm axi_m_monitor_bfm, axi_m_transaction, axi_m_pkg_axi_master2_BFM,
+spi_slave, spi_s_driver_bfm spi_s_monitor_bfm, spi_s_transaction, spi_s_pkg_spi_slave_BFM,
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/dut.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/dut.compile
new file mode 100644
index 00000000..9b0008fc
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/dut.compile
@@ -0,0 +1,6 @@
+
+# pragma uvmf custom dut_compile_info begin
+src:
+ - ./vhdl/vhdl_dut.vhd
+ - ./verilog/verilog_dut.v
+# pragma uvmf custom dut_compile_info end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.v b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.v
new file mode 100644
index 00000000..96198441
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.v
@@ -0,0 +1,21 @@
+module verilog_dut(clk, rst, in_signal, out_signal);
+
+input clk;
+input rst;
+input in_signal;
+output out_signal;
+
+reg out_signal_o;
+
+always @(posedge clk) begin
+ if (rst) begin
+ out_signal_o <= 0;
+ end
+ else begin
+ out_signal_o <= ~in_signal;
+ end
+ end
+
+assign out_signal = out_signal_o;
+
+endmodule
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.vinfo
new file mode 100644
index 00000000..87e95f36
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/verilog/verilog_dut.vinfo
@@ -0,0 +1 @@
+verilog_dut.v
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/vhdl/vhdl_dut.vhd b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/vhdl/vhdl_dut.vhd
new file mode 100644
index 00000000..904aa37d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/rtl/vhdl/vhdl_dut.vhd
@@ -0,0 +1,21 @@
+library ieee;
+use ieee.std_logic_1164.all ;
+
+entity vhdl_dut is
+ port ( clk : in std_logic ;
+ rst : in std_logic ;
+ in_signal : in std_logic ;
+ out_signal :out std_logic
+ );
+end vhdl_dut;
+
+architecture rtl of vhdl_dut is
+ begin
+ P1: process
+ variable out_signal_o : std_logic;
+ begin
+ wait until clk'event and clk = '1';
+ out_signal_o := in_signal;
+ out_signal <= out_signal_o;
+ end process;
+ end rtl;
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/Makefile
new file mode 100644
index 00000000..8bf96331
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/Makefile
@@ -0,0 +1,200 @@
+
+#
+#----------------------------------------------------------------------
+#
+# DESCRIPTION: This makefile includes the shared makefile and contains
+# bench level make targets.
+#
+#----------------------------------------------------------------------
+
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+# *********************************************************************************************
+# UVMF library directory:
+# This variable points to the UVMF release where uvmf_base_pkg directory resides.
+# This variable points to release code that is not user modified.
+# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories.
+# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples.
+UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___
+
+# pragma uvmf custom exports begin
+#
+# Project(s) specific verification IP library:
+# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside.
+# This variable allows for your verification IP to reside independent of project bench and UVMF release directories.
+# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip
+export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip
+#
+# Project specific bench:
+# Directory where bench specific code is located.
+# This variable allows for project_benches to reside independent of verification IP and UVMF release directories.
+# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/
+export UVMF_PROJECT_DIR ?= $(PWD)/..
+#
+#
+# pragma uvmf custom exports end
+# *********************************************************************************************
+
+## Check PATH for required vinfo scripts
+PVAL := $(shell command -v make_filelist.py 2> /dev/null)
+ifndef PVAL
+ MFLIST = $(UVMF_HOME)/scripts/make_filelist.py
+else
+ MFLIST = make_filelist.py
+endif
+
+
+# Set test case specific Variables
+TEST_NAME ?= test_top
+
+TEST_SEED ?= random
+UVM_CLI_ARGS =
+
+# Usage of Veloce, etc. to be input by the user (subject to defaults)
+USE_VELOCE ?= 0
+
+# Usage of vinfo flow for generating file list
+USE_VINFO ?= 0
+
+# Usage of Veloce and Questa profilers
+USE_VELOCE_PROFILER ?= 0
+USE_QUESTA_PROFILER ?= 0
+
+
+# Set project Variables
+TEST_PLAN_NAME = block_1_TestPlan
+REPORTING_DO_FILE = block_1_reports_script
+
+
+# Include makefile that includes targets for UVM_VIP_Library packages
+include $(UVMF_HOME)/scripts/Makefile
+
+
+
+
+# Include all requisite interface package targets for this bench
+include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/Makefile
+include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/Makefile
+include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/Makefile
+
+# Include all requisite environment package targets for this bench
+include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg/Makefile
+
+
+
+# Add to default compile/load/run arguments
+VCOM_ARGS +=
+
+# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS
+
+VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD)
+
+VELANALYZE_ARGS +=
+VELANALYZE_HVL_ARGS +=
+
+BATCH_VOPT_ARGS +=
+DEBUG_VOPT_ARGS +=
+EXTRA_VOPT_TOPS +=
+COMMON_VSIM_ARGS +=
+COMMON_VSIM_ARGS +=
+
+
+BATCH_VSIM_ARGS += #-uvmcontrol=none
+DEBUG_VSIM_ARGS +=
+EXTRA_VSIM_TOPS +=
+
+# pragma uvmf custom additional_args begin
+# pragma uvmf custom additional_args end
+
+
+# Project bench package source
+block_1_PARAMETERS_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/parameters/block_1_parameters_pkg.sv
+
+
+block_1_SEQUENCES_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/sequences/block_1_sequences_pkg.sv
+
+
+block_1_TEST_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/tests/block_1_tests_pkg.sv
+
+# pragma uvmf custom dut_files begin
+# UVMF_CHANGE_ME : Reference Verilog DUT source.
+block_1_VERILOG_DUT ?=\
+$(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v
+
+# UVMF_CHANGE_ME : Reference VHDL DUT source.
+block_1_VHDL_DUT ?=\
+$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd
+# pragma uvmf custom dut_files end
+
+
+# Project bench package targets
+COMP_block_1_PARAMETERS_PKG_TGT_0 = q_comp_block_1_parameters_pkg
+COMP_block_1_PARAMETERS_PKG_TGT_1 = v_comp_block_1_parameters_pkg
+COMP_block_1_PARAMETERS_PKG_TGT = $(COMP_block_1_PARAMETERS_PKG_TGT_$(USE_VELOCE))
+
+comp_block_1_parameters_pkg: $(COMP_block_1_PARAMETERS_PKG_TGT)
+
+q_comp_block_1_parameters_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(block_1_PARAMETERS_PKG)
+
+v_comp_block_1_parameters_pkg: q_comp_block_1_parameters_pkg
+ $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(block_1_PARAMETERS_PKG)
+
+
+comp_block_1_sequence_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(block_1_SEQUENCES_PKG)
+
+comp_block_1_tests_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(block_1_TEST_PKG)
+
+# pragma uvmf custom dut_compile_make_target begin
+# UVMF_CHANGE_ME : Add make target to compile your verilog dut here
+comp_block_1_verilog_dut:
+ echo "Compile your verilog DUT here"
+ $(HDL_COMP_CMD) $(block_1_VERILOG_DUT)
+
+# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here
+comp_block_1_vhdl_dut:
+ echo "Compile your vhdl DUT here"
+ $(HDL_COMP_CMD_VHDL) $(block_1_VHDL_DUT)
+
+# UVMF_CHANGE_ME : Add make target to compile your dut here
+comp_block_1_dut: comp_block_1_vhdl_dut comp_block_1_verilog_dut
+# pragma uvmf custom dut_compile_make_target end
+
+
+BUILD_TGT_0 = make_build
+BUILD_TGT_1 = vinfo_build
+BUILD_TGT = $(BUILD_TGT_$(USE_VINFO))
+
+
+comp_hvl : comp_hvl_core
+
+
+comp_hvl_core : \
+ comp_apb_m_pkg comp_axi_m_pkg comp_spi_s_pkg \
+ comp_block_1_env_pkg \
+ comp_block_1_parameters_pkg comp_block_1_sequence_pkg comp_block_1_tests_pkg
+
+comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg
+
+make_build: comp_block_1_dut comp_uvmf_core comp_hvl comp_test_bench
+
+hvl_build: q_comp_apb_m_pkg q_comp_axi_m_pkg q_comp_spi_s_pkg comp_block_1_env_pkg comp_block_1_sequence_pkg comp_block_1_tests_pkg hvl_comp_testbench link optimize
+
+
+vinfo_build: comp_block_1_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT)
+
+ $(HDL_COMP_CMD) -F hdl.vf
+ $(VEL_COMP)
+
+build: $(BUILD_TGT)
+
+# pragma uvmf custom additional_targets begin
+# pragma uvmf custom additional_targets end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist
new file mode 100644
index 00000000..def2371e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist
@@ -0,0 +1,19 @@
+
+
+
+# Test list for use by RMDB file
+# File syntax is
+# TB_INFO { } { }
+# TB ## All subsequent tests will run on this bench until a different "TB" line is seen
+# TEST <1st_seed> ...
+# If not enough seeds are provided then random seeds are used to pad
+# If no repeat count is given, default is 1
+# pragma uvmf custom tb_info begin
+TB_INFO block_1 { } { }
+# pragma uvmf custom tb_info end
+TB block_1
+# pragma uvmf custom regression_suite begin
+TEST test_top 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist.yaml
new file mode 100644
index 00000000..e9f7fa3e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/bcr_testlist.yaml
@@ -0,0 +1,44 @@
+
+
+
+# YAML test list for use by RMDB file
+# File syntax is
+# uvmf_testlist:
+# testbenches:
+# - name:
+# extra_build_options:
+# extra_run_options:
+# - name:
+# ...
+# - name:
+# tests:
+# - name:
+# uvm_testname: (defaults to test_name)
+# testbench: (defaults to last tb name seen)
+# repeat: (defaults to 1)
+# seeds: [,,...,] (defaults to all random)
+# extra_test_options:
+# - name:
+# ...
+# - name:
+# include:
+# - (relative path reference is to the including YAML file)
+# -
+# ...
+# -
+
+uvmf_testlist:
+ testbenches:
+# pragma uvmf custom tb_info begin
+ - name: block_1
+ extra_build_options: ""
+ extra_run_options: ""
+# pragma uvmf custom tb_info end
+ tests:
+ - testbench: block_1
+# pragma uvmf custom regression_suite begin
+ - name: test_top
+ repeat: 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/compile.do
new file mode 100644
index 00000000..9f27636d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/compile.do
@@ -0,0 +1,72 @@
+
+
+##################################################################
+## ENVIRONMENT VARIABLES
+##################################################################
+quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip
+quietly set ::env(UVMF_PROJECT_DIR) ..
+
+## Using VRM means that the build is occuring several more directories deeper underneath
+## the sim directory, need to prepend some more '..'
+if {[info exists ::env(VRM_BUILD)]} {
+ quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)"
+ quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)"
+}
+quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)]
+quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)]
+quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)"
+quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)"
+
+
+###################################################################
+## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED
+###################################################################
+file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA
+file delete -force design.bin qwave.db dpiheader.h visualizer*.ses
+file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini
+file delete -force sv_connect.*
+
+###################################################################
+## COMPILE DUT SOURCE CODE
+###################################################################
+vlib work
+# pragma uvmf custom dut_compile_dofile_target begin
+# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v
+vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd
+# pragma uvmf custom dut_compile_dofile_target end
+
+###################################################################
+## COMPILE UVMF BASE/COMMON SOURCE CODE
+###################################################################
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f
+
+
+###################################################################
+## UVMF INTERFACE COMPILATION
+###################################################################
+do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/compile.do
+do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/compile.do
+do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/compile.do
+
+###################################################################
+## UVMF ENVIRONMENT COMPILATION
+###################################################################
+do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg/compile.do
+
+###################################################################
+## UVMF BENCHES COMPILATION
+###################################################################
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/block_1_parameters_pkg.sv
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/block_1_sequences_pkg.sv
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/block_1_tests_pkg.sv
+
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f
+
+###################################################################
+## OPTIMIZATION
+###################################################################
+vopt hvl_top hdl_top -o optimized_batch_top_tb
+vopt +acc hvl_top hdl_top -o optimized_debug_top_tb
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.compile
new file mode 100644
index 00000000..8e7bd41a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.compile
@@ -0,0 +1,5 @@
+needs:
+# pragma uvmf custom dut_compile_info begin
+ - ../rtl/dut.compile
+# pragma uvmf custom dut_compile_info end
+ - ../tb/testbench/hdl_top.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.vinfo
new file mode 100644
index 00000000..da27ec77
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hdl.vinfo
@@ -0,0 +1 @@
+@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.compile
new file mode 100644
index 00000000..ce952549
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.compile
@@ -0,0 +1,2 @@
+needs:
+ - ../tb/testbench/hvl_top.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.vinfo
new file mode 100644
index 00000000..d22eff33
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/hvl.vinfo
@@ -0,0 +1 @@
+@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/run.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/run.do
new file mode 100644
index 00000000..101ddc48
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/run.do
@@ -0,0 +1,21 @@
+
+
+quietly set svLibs ""
+quietly set extra_vsim_args ""
+
+###################################################################
+## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS
+###################################################################
+if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} {
+ echo "Adding more args to vsim command"
+ quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS)
+}
+
+##################################################################
+## Launch Questa : generate vsim command line and execute
+##################################################################
+# pragma uvmf custom dut_run_dofile_target begin
+# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test
+quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args]
+# pragma uvmf custom dut_run_dofile_target end
+eval $cmd
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/tbx.config b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/tbx.config
new file mode 100644
index 00000000..eec58168
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/tbx.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+comp -questa
+velsyn -D1S
+rtlc -allow_4ST
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist
new file mode 100644
index 00000000..5ca4f2cc
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist
@@ -0,0 +1,20 @@
+
+
+
+
+# Test list for use by RMDB file
+# File syntax is
+# TB_INFO { } { }
+# TB ## All subsequent tests will run on this bench until a different "TB" line is seen
+# TEST <1st_seed> ...
+# If not enough seeds are provided then random seeds are used to pad
+# If no repeat count is given, default is 1
+# pragma uvmf custom tb_info begin
+TB_INFO block_1 { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../block_1 } { }
+# pragma uvmf custom tb_info end
+TB block_1
+# pragma uvmf custom regression_suite begin
+TEST test_top 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist.yaml
new file mode 100644
index 00000000..113ec8a9
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/testlist.yaml
@@ -0,0 +1,44 @@
+
+
+
+# YAML test list for use by RMDB file
+# File syntax is
+# uvmf_testlist:
+# testbenches:
+# - name:
+# extra_build_options:
+# extra_run_options:
+# - name:
+# ...
+# - name:
+# tests:
+# - name:
+# uvm_testname: (defaults to test_name)
+# testbench: (defaults to last tb name seen)
+# repeat: (defaults to 1)
+# seeds: [,,...,] (defaults to all random)
+# extra_test_options:
+# - name:
+# ...
+# - name:
+# include:
+# - (relative path reference is to the including YAML file)
+# -
+# ...
+# -
+
+uvmf_testlist:
+ testbenches:
+# pragma uvmf custom tb_info begin
+ - name: block_1
+ extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../block_1"
+ extra_run_options: ""
+# pragma uvmf custom tb_info end
+ tests:
+ - testbench: block_1
+# pragma uvmf custom regression_suite begin
+ - name: test_top
+ repeat: 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/top.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/top.compile
new file mode 100644
index 00000000..efd51c07
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/top.compile
@@ -0,0 +1,3 @@
+needs:
+ - hvl.compile
+ - hdl.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/veloce.config b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/veloce.config
new file mode 100644
index 00000000..d0975155
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/veloce.config
@@ -0,0 +1,26 @@
+
+
+
+
+
+# pragma uvmf custom additional begin
+comp -num_boards 1
+comp -hvl questa
+# Please choose the correct emulator type code for
+# comp -platform command or else velcomp will fail
+# Available types are:
+# - Veloce2 Quattro: D2
+# - Veloce2 Maximus: D2M
+# - Veloce Strato TiL, Ti, and Mi: Strato
+# - Veloce Strato M and Strato T: StratoM
+# - comp -platform
+comp -platform Strato
+
+rtlc -enable_tbx_pragma_checks
+rtlc -allow_4ST
+rtlc -allow_MDR
+rtlc -compile_display
+rtlc -xwave_siglist xwaves.sigs
+# pragma uvmf custom additional end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/viswave.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/viswave.do
new file mode 100644
index 00000000..5e690492
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/viswave.do
@@ -0,0 +1,34 @@
+
+
+onerror resume
+wave tags F0
+wave update off
+
+wave spacer -backgroundcolor Salmon { apb_master }
+wave add uvm_test_top.environment.apb_master.apb_master_monitor.txn_stream -radix string -tag F0
+wave group apb_master_bus
+wave add -group apb_master_bus hdl_top.apb_master_bus.* -radix hexadecimal -tag F0
+wave group apb_master_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+wave spacer -backgroundcolor Salmon { axi_master1 }
+wave add uvm_test_top.environment.axi_master1.axi_master1_monitor.txn_stream -radix string -tag F0
+wave group axi_master1_bus
+wave add -group axi_master1_bus hdl_top.axi_master1_bus.* -radix hexadecimal -tag F0
+wave group axi_master1_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+wave spacer -backgroundcolor Salmon { axi_master2 }
+wave add uvm_test_top.environment.axi_master2.axi_master2_monitor.txn_stream -radix string -tag F0
+wave group axi_master2_bus
+wave add -group axi_master2_bus hdl_top.axi_master2_bus.* -radix hexadecimal -tag F0
+wave group axi_master2_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+wave spacer -backgroundcolor Salmon { spi_slave }
+wave add uvm_test_top.environment.spi_slave.spi_slave_monitor.txn_stream -radix string -tag F0
+wave group spi_slave_bus
+wave add -group spi_slave_bus hdl_top.spi_slave_bus.* -radix hexadecimal -tag F0
+wave group spi_slave_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+
+wave update on
+WaveSetStreamView
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/wave.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/wave.do
new file mode 100644
index 00000000..a290af05
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/wave.do
@@ -0,0 +1,36 @@
+
+
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+
+add wave -noupdate -divider apb_master
+add wave -noupdate /uvm_root/uvm_test_top/environment/apb_master/apb_master_monitor/txn_stream
+add wave -noupdate -group apb_master_bus /hdl_top/apb_master_bus/*
+add wave -noupdate -divider axi_master1
+add wave -noupdate /uvm_root/uvm_test_top/environment/axi_master1/axi_master1_monitor/txn_stream
+add wave -noupdate -group axi_master1_bus /hdl_top/axi_master1_bus/*
+add wave -noupdate -divider axi_master2
+add wave -noupdate /uvm_root/uvm_test_top/environment/axi_master2/axi_master2_monitor/txn_stream
+add wave -noupdate -group axi_master2_bus /hdl_top/axi_master2_bus/*
+add wave -noupdate -divider spi_slave
+add wave -noupdate /uvm_root/uvm_test_top/environment/spi_slave/spi_slave_monitor/txn_stream
+add wave -noupdate -group spi_slave_bus /hdl_top/spi_slave_bus/*
+
+TreeUpdate [SetDefaultTree]
+quietly wave cursor active 0
+configure wave -namecolwidth 472
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 0
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+configure wave -timelineunits ns
+update
+WaveRestoreZoom {27 ns} {168 ns}
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/xwaves.sigs b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/xwaves.sigs
new file mode 100644
index 00000000..d75f0a57
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/sim/xwaves.sigs
@@ -0,0 +1,17 @@
+
+
+
+
+
+# pragma uvmf custom additional begin
+
+Group All
+
+#Top level signals
+hdl_top.*
+#Add additional levels or individual signals as needed
+hdl_top.*.*
+
+# pragma uvmf custom additional end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.compile
new file mode 100644
index 00000000..e2a26586
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.compile
@@ -0,0 +1,4 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+src:
+ - block_1_parameters_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.sv
new file mode 100644
index 00000000..455ee2fb
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.sv
@@ -0,0 +1,40 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This package contains test level parameters
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+package block_1_parameters_pkg;
+
+ import uvmf_base_pkg_hdl::*;
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+
+ // These parameters are used to uniquely identify each interface. The monitor_bfm and
+ // driver_bfm are placed into and retrieved from the uvm_config_db using these string
+ // names as the field_name. The parameter is also used to enable transaction viewing
+ // from the command line for selected interfaces using the UVM command line processing.
+ parameter string apb_master_BFM = "apb_master_BFM"; /* [0] */
+ parameter string axi_master1_BFM = "axi_master1_BFM"; /* [1] */
+ parameter string axi_master2_BFM = "axi_master2_BFM"; /* [2] */
+ parameter string spi_slave_BFM = "spi_slave_BFM"; /* [3] */
+
+ // pragma uvmf custom package_item_additional begin
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.vinfo
new file mode 100644
index 00000000..8b0adcd9
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/parameters/block_1_parameters_pkg.vinfo
@@ -0,0 +1,2 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+block_1_parameters_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.compile
new file mode 100644
index 00000000..1497180c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.compile
@@ -0,0 +1,9 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ../../../../verification_ip/interface_packages/apb_m_pkg/apb_m.compile
+ - ../../../../verification_ip/interface_packages/axi_m_pkg/axi_m.compile
+ - ../../../../verification_ip/interface_packages/spi_s_pkg/spi_s.compile
+ - ../../../../verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.compile
+ - ../parameters/block_1_parameters_pkg.compile
+src:
+ - block_1_sequences_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.sv
new file mode 100644
index 00000000..983d03ec
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.sv
@@ -0,0 +1,53 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This package includes all high level sequence classes used
+// in the environment. These include utility sequences and top
+// level sequences.
+//
+// CONTAINS:
+// -
+// -
+//
+//----------------------------------------------------------------------
+//
+//----------------------------------------------------------------------
+//
+
+package block_1_sequences_pkg;
+ import uvm_pkg::*;
+ import uvmf_base_pkg::*;
+ import apb_m_pkg::*;
+ import apb_m_pkg_hdl::*;
+ import axi_m_pkg::*;
+ import axi_m_pkg_hdl::*;
+ import spi_s_pkg::*;
+ import spi_s_pkg_hdl::*;
+ import block_1_parameters_pkg::*;
+ import block_1_env_pkg::*;
+ `include "uvm_macros.svh"
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ `include "src/block_1_bench_sequence_base.svh"
+ `include "src/register_test_sequence.svh"
+ `include "src/example_derived_test_sequence.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new sequences to the src directory
+ // be sure to add the sequence file here so that it will be
+ // compiled as part of the sequence package. Be sure to place
+ // the new sequence after any base sequences of the new sequence.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.vinfo
new file mode 100644
index 00000000..b67a290f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/block_1_sequences_pkg.vinfo
@@ -0,0 +1,8 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/environment_packages/block_1_env_pkg/block_1_env_pkg.vinfo
+@use $UVMF_PROJECT_DIR/tb/parameters/block_1_parameters_pkg.vinfo
++incdir+@vinfodir
+block_1_sequences_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/block_1_bench_sequence_base.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/block_1_bench_sequence_base.svh
new file mode 100644
index 00000000..719d0905
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/block_1_bench_sequence_base.svh
@@ -0,0 +1,145 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// Description: This file contains the top level and utility sequences
+// used by test_top. It can be extended to create derivative top
+// level sequences.
+//
+//----------------------------------------------------------------------
+//
+//----------------------------------------------------------------------
+//
+
+
+typedef block_1_env_configuration block_1_env_configuration_t;
+
+class block_1_bench_sequence_base extends uvmf_sequence_base #(uvm_sequence_item);
+
+ `uvm_object_utils( block_1_bench_sequence_base );
+
+ // pragma uvmf custom sequences begin
+
+typedef block_1_env_sequence_base #(
+ .CONFIG_T(block_1_env_configuration_t)
+ )
+ block_1_env_sequence_base_t;
+rand block_1_env_sequence_base_t block_1_env_seq;
+
+
+
+ // UVMF_CHANGE_ME : Instantiate, construct, and start sequences as needed to create stimulus scenarios.
+ // Instantiate sequences here
+ typedef apb_m_random_sequence apb_master_random_seq_t;
+ apb_master_random_seq_t apb_master_random_seq;
+ typedef axi_m_random_sequence axi_master1_random_seq_t;
+ axi_master1_random_seq_t axi_master1_random_seq;
+ typedef axi_m_random_sequence axi_master2_random_seq_t;
+ axi_master2_random_seq_t axi_master2_random_seq;
+ // pragma uvmf custom sequences end
+
+ // Sequencer handles for each active interface in the environment
+ typedef apb_m_transaction apb_master_transaction_t;
+ uvm_sequencer #(apb_master_transaction_t) apb_master_sequencer;
+ typedef axi_m_transaction axi_master1_transaction_t;
+ uvm_sequencer #(axi_master1_transaction_t) axi_master1_sequencer;
+ typedef axi_m_transaction axi_master2_transaction_t;
+ uvm_sequencer #(axi_master2_transaction_t) axi_master2_sequencer;
+
+
+ // Top level environment configuration handle
+ block_1_env_configuration_t top_configuration;
+
+ // Configuration handles to access interface BFM's
+ apb_m_configuration apb_master_config;
+ axi_m_configuration axi_master1_config;
+ axi_m_configuration axi_master2_config;
+ spi_s_configuration spi_slave_config;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ function new( string name = "" );
+ super.new( name );
+ // Retrieve the configuration handles from the uvm_config_db
+
+ // Retrieve top level configuration handle
+ if ( !uvm_config_db#(block_1_env_configuration_t)::get(null,UVMF_CONFIGURATIONS, "TOP_ENV_CONFIG",top_configuration) ) begin
+ `uvm_info("CFG", "*** FATAL *** uvm_config_db::get can not find TOP_ENV_CONFIG. Are you using an older UVMF release than what was used to generate this bench?",UVM_NONE);
+ `uvm_fatal("CFG", "uvm_config_db#(block_1_env_configuration_t)::get cannot find resource TOP_ENV_CONFIG");
+ end
+
+ // Retrieve config handles for all agents
+ if( !uvm_config_db #( apb_m_configuration )::get( null , UVMF_CONFIGURATIONS , apb_master_BFM , apb_master_config ) )
+ `uvm_fatal("CFG" , "uvm_config_db #( apb_m_configuration )::get cannot find resource apb_master_BFM" )
+ if( !uvm_config_db #( axi_m_configuration )::get( null , UVMF_CONFIGURATIONS , axi_master1_BFM , axi_master1_config ) )
+ `uvm_fatal("CFG" , "uvm_config_db #( axi_m_configuration )::get cannot find resource axi_master1_BFM" )
+ if( !uvm_config_db #( axi_m_configuration )::get( null , UVMF_CONFIGURATIONS , axi_master2_BFM , axi_master2_config ) )
+ `uvm_fatal("CFG" , "uvm_config_db #( axi_m_configuration )::get cannot find resource axi_master2_BFM" )
+ if( !uvm_config_db #( spi_s_configuration )::get( null , UVMF_CONFIGURATIONS , spi_slave_BFM , spi_slave_config ) )
+ `uvm_fatal("CFG" , "uvm_config_db #( spi_s_configuration )::get cannot find resource spi_slave_BFM" )
+
+ // Assign the sequencer handles from the handles within agent configurations
+ apb_master_sequencer = apb_master_config.get_sequencer();
+ axi_master1_sequencer = axi_master1_config.get_sequencer();
+ axi_master2_sequencer = axi_master2_config.get_sequencer();
+
+
+
+ // pragma uvmf custom new begin
+ // pragma uvmf custom new end
+
+ endfunction
+
+ // ****************************************************************************
+ virtual task body();
+ // pragma uvmf custom body begin
+
+ // Construct sequences here
+
+ block_1_env_seq = block_1_env_sequence_base_t::type_id::create("block_1_env_seq");
+
+ apb_master_random_seq = apb_master_random_seq_t::type_id::create("apb_master_random_seq");
+ axi_master1_random_seq = axi_master1_random_seq_t::type_id::create("axi_master1_random_seq");
+ axi_master2_random_seq = axi_master2_random_seq_t::type_id::create("axi_master2_random_seq");
+ fork
+ apb_master_config.wait_for_reset();
+ axi_master1_config.wait_for_reset();
+ axi_master2_config.wait_for_reset();
+ spi_slave_config.wait_for_reset();
+ join
+ // Start RESPONDER sequences here
+ fork
+ join_none
+ // Start INITIATOR sequences here
+ fork
+ repeat (25) apb_master_random_seq.start(apb_master_sequencer);
+ repeat (25) axi_master1_random_seq.start(axi_master1_sequencer);
+ repeat (25) axi_master2_random_seq.start(axi_master2_sequencer);
+ join
+
+block_1_env_seq.start(top_configuration.vsqr);
+
+ // UVMF_CHANGE_ME : Extend the simulation XXX number of clocks after
+ // the last sequence to allow for the last sequence item to flow
+ // through the design.
+ fork
+ apb_master_config.wait_for_num_clocks(400);
+ axi_master1_config.wait_for_num_clocks(400);
+ axi_master2_config.wait_for_num_clocks(400);
+ spi_slave_config.wait_for_num_clocks(400);
+ join
+
+ // pragma uvmf custom body end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/example_derived_test_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/example_derived_test_sequence.svh
new file mode 100644
index 00000000..b4127d2f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/example_derived_test_sequence.svh
@@ -0,0 +1,30 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains the top level sequence used in example_derived_test.
+// It is an example of a sequence that is extended from %(benchName)_bench_sequence_base
+// and can override %(benchName)_bench_sequence_base.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class example_derived_test_sequence extends block_1_bench_sequence_base;
+
+ `uvm_object_utils( example_derived_test_sequence );
+
+ function new(string name = "" );
+ super.new(name);
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/register_test_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/register_test_sequence.svh
new file mode 100644
index 00000000..dd9e3574
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/sequences/src/register_test_sequence.svh
@@ -0,0 +1,59 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains the top level sequence used in register_test.
+// It uses the UVM built in register test. Specific UVM built-in tests can be
+// selected in the body task.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class register_test_sequence extends block_1_bench_sequence_base;
+
+ `uvm_object_utils( register_test_sequence );
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ function new(string name = "" );
+ super.new(name);
+ endfunction
+
+ // ****************************************************************************
+ virtual task body();
+
+ // Reset the DUT
+ fork
+ // pragma uvmf custom register_test_reset begin
+ // UVMF_CHANGE_ME
+ // Select the desired wait_for_reset or provide custom mechanism.
+ // fork-join for this code block may be unnecessary based on your situation.
+ apb_master_config.wait_for_reset();
+ axi_master1_config.wait_for_reset();
+ axi_master2_config.wait_for_reset();
+ spi_slave_config.wait_for_reset();
+ // pragma uvmf custom register_test_reset end
+ join
+
+ // pragma uvmf custom register_test_setup begin
+ // UVMF_CHANGE_ME perform potentially necessary operations before running the sequence.
+ // pragma uvmf custom register_test_setup end
+
+ // pragma uvmf custom register_test_operation begin
+ // UVMF_CHANGE_ME Perform your custom register test
+ // pragma uvmf custom register_test_operation end
+
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.compile
new file mode 100644
index 00000000..09b570fb
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.compile
@@ -0,0 +1,11 @@
+incdir:
+ - ${uvm_path}/src
+ - .
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+ - ../parameters/block_1_parameters_pkg.compile
+ - ../../../../verification_ip/interface_packages/apb_m_pkg/apb_m_hdl.compile
+ - ../../../../verification_ip/interface_packages/axi_m_pkg/axi_m_hdl.compile
+ - ../../../../verification_ip/interface_packages/spi_s_pkg/spi_s_hdl.compile
+src:
+ - hdl_top.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.sv
new file mode 100644
index 00000000..d8645a94
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.sv
@@ -0,0 +1,117 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// Description: This top level module instantiates all synthesizable
+// static content. This and tb_top.sv are the two top level modules
+// of the simulation.
+//
+// This module instantiates the following:
+// DUT: The Design Under Test
+// Interfaces: Signal bundles that contain signals connected to DUT
+// Driver BFM's: BFM's that actively drive interface signals
+// Monitor BFM's: BFM's that passively monitor interface signals
+//
+//----------------------------------------------------------------------
+
+//----------------------------------------------------------------------
+//
+
+module hdl_top;
+
+import block_1_parameters_pkg::*;
+import uvmf_base_pkg_hdl::*;
+
+ // pragma attribute hdl_top partition_module_xrtl
+// pragma uvmf custom clock_generator begin
+ bit clk;
+ // Instantiate a clk driver
+ // tbx clkgen
+ initial begin
+ clk = 0;
+ #9ns;
+ forever begin
+ clk = ~clk;
+ #5ns;
+ end
+ end
+// pragma uvmf custom clock_generator end
+
+// pragma uvmf custom reset_generator begin
+ bit rst;
+ // Instantiate a rst driver
+ // tbx clkgen
+ initial begin
+ rst = 1;
+ #200ns;
+ rst = 0;
+ end
+// pragma uvmf custom reset_generator end
+
+ // pragma uvmf custom module_item_additional begin
+ // pragma uvmf custom module_item_additional end
+
+ // Instantiate the signal bundle, monitor bfm and driver bfm for each interface.
+ // The signal bundle, _if, contains signals to be connected to the DUT.
+ // The monitor, monitor_bfm, observes the bus, _if, and captures transactions.
+ // The driver, driver_bfm, drives transactions onto the bus, _if.
+ apb_m_if apb_master_bus(
+ // pragma uvmf custom apb_master_bus_connections begin
+ .pclk(clk), .presetn(rst)
+ // pragma uvmf custom apb_master_bus_connections end
+ );
+ axi_m_if axi_master1_bus(
+ // pragma uvmf custom axi_master1_bus_connections begin
+ .axi_clk(clk), .rst(rst)
+ // pragma uvmf custom axi_master1_bus_connections end
+ );
+ axi_m_if axi_master2_bus(
+ // pragma uvmf custom axi_master2_bus_connections begin
+ .axi_clk(clk), .rst(rst)
+ // pragma uvmf custom axi_master2_bus_connections end
+ );
+ spi_s_if spi_slave_bus(
+ // pragma uvmf custom spi_slave_bus_connections begin
+ .sck(clk), .rst(rst)
+ // pragma uvmf custom spi_slave_bus_connections end
+ );
+ apb_m_monitor_bfm apb_master_mon_bfm(apb_master_bus.monitor_port);
+ axi_m_monitor_bfm axi_master1_mon_bfm(axi_master1_bus.monitor_port);
+ axi_m_monitor_bfm axi_master2_mon_bfm(axi_master2_bus.monitor_port);
+ spi_s_monitor_bfm spi_slave_mon_bfm(spi_slave_bus.monitor_port);
+ apb_m_driver_bfm apb_master_drv_bfm(apb_master_bus.initiator_port);
+ axi_m_driver_bfm axi_master1_drv_bfm(axi_master1_bus.initiator_port);
+ axi_m_driver_bfm axi_master2_drv_bfm(axi_master2_bus.initiator_port);
+
+ // pragma uvmf custom dut_instantiation begin
+ // UVMF_CHANGE_ME : Add DUT and connect to signals in _bus interfaces listed above
+ // Instantiate your DUT here
+ // These DUT's instantiated to show verilog and vhdl instantiation
+ verilog_dut dut_verilog( .clk(clk), .rst(rst), .in_signal(vhdl_to_verilog_signal), .out_signal(verilog_to_vhdl_signal));
+ vhdl_dut dut_vhdl ( .clk(clk), .rst(rst), .in_signal(verilog_to_vhdl_signal), .out_signal(vhdl_to_verilog_signal));
+ // pragma uvmf custom dut_instantiation end
+
+ initial begin // tbx vif_binding_block
+ import uvm_pkg::uvm_config_db;
+ // The monitor_bfm and driver_bfm for each interface is placed into the uvm_config_db.
+ // They are placed into the uvm_config_db using the string names defined in the parameters package.
+ // The string names are passed to the agent configurations by test_top through the top level configuration.
+ // They are retrieved by the agents configuration class for use by the agent.
+ uvm_config_db #( virtual apb_m_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , apb_master_BFM , apb_master_mon_bfm );
+ uvm_config_db #( virtual axi_m_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , axi_master1_BFM , axi_master1_mon_bfm );
+ uvm_config_db #( virtual axi_m_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , axi_master2_BFM , axi_master2_mon_bfm );
+ uvm_config_db #( virtual spi_s_monitor_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , spi_slave_BFM , spi_slave_mon_bfm );
+ uvm_config_db #( virtual apb_m_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , apb_master_BFM , apb_master_drv_bfm );
+ uvm_config_db #( virtual axi_m_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , axi_master1_BFM , axi_master1_drv_bfm );
+ uvm_config_db #( virtual axi_m_driver_bfm )::set( null , UVMF_VIRTUAL_INTERFACES , axi_master2_BFM , axi_master2_drv_bfm );
+ end
+
+endmodule
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.vinfo
new file mode 100644
index 00000000..43c7c76e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hdl_top.vinfo
@@ -0,0 +1,7 @@
+@use $UVMF_PROJECT_DIR/rtl/verilog/verilog_dut.vinfo
+@use $UVMF_PROJECT_DIR/tb/parameters/block_1_parameters_pkg.vinfo
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_bfm.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_bfm.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_bfm.vinfo
+hdl_top.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.compile
new file mode 100644
index 00000000..d8d273c1
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.compile
@@ -0,0 +1,7 @@
+incdir:
+ - ${uvm_path}/src
+ - .
+needs:
+ - ../tests/block_1_tests_pkg.compile
+src:
+ - hvl_top.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.sv
new file mode 100644
index 00000000..89ae61f4
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.sv
@@ -0,0 +1,33 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This module loads the test package and starts the UVM phases.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+module hvl_top;
+
+import uvm_pkg::*;
+import block_1_tests_pkg::*;
+
+ // pragma uvmf custom module_item_additional begin
+ // pragma uvmf custom module_item_additional end
+
+ initial begin
+ $timeformat(-9,3,"ns",5);
+ run_test();
+ end
+
+endmodule
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.vinfo
new file mode 100644
index 00000000..7bc43d3a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/hvl_top.vinfo
@@ -0,0 +1,2 @@
+@use $UVMF_PROJECT_DIR/tb/tests/block_1_tests_pkg.vinfo
+hvl_top.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hdl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hdl.f
new file mode 100644
index 00000000..1e9dab65
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hdl.f
@@ -0,0 +1,3 @@
+$UVMF_PROJECT_DIR/tb/testbench/hdl_top.sv
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hvl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hvl.f
new file mode 100644
index 00000000..42383ab2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/testbench/top_filelist_hvl.f
@@ -0,0 +1,3 @@
+$UVMF_PROJECT_DIR/tb/testbench/hvl_top.sv
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.compile
new file mode 100644
index 00000000..ccf235f0
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.compile
@@ -0,0 +1,10 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ../../../../verification_ip/interface_packages/apb_m_pkg/apb_m.compile
+ - ../../../../verification_ip/interface_packages/axi_m_pkg/axi_m.compile
+ - ../../../../verification_ip/interface_packages/spi_s_pkg/spi_s.compile
+ - ../../../../verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.compile
+ - ../parameters/block_1_parameters_pkg.compile
+ - ../sequences/block_1_sequences_pkg.compile
+src:
+ - block_1_tests_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.sv
new file mode 100644
index 00000000..933ace9a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.sv
@@ -0,0 +1,56 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This package contains all tests currently written for
+// the simulation project. Once compiled, any test can be selected
+// from the vsim command line using +UVM_TESTNAME=yourTestNameHere
+//
+// CONTAINS:
+// -
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+package block_1_tests_pkg;
+
+ import uvm_pkg::*;
+ import uvmf_base_pkg::*;
+ import block_1_parameters_pkg::*;
+ import block_1_env_pkg::*;
+ import block_1_sequences_pkg::*;
+ import apb_m_pkg::*;
+ import apb_m_pkg_hdl::*;
+ import axi_m_pkg::*;
+ import axi_m_pkg_hdl::*;
+ import spi_s_pkg::*;
+ import spi_s_pkg_hdl::*;
+
+
+ `include "uvm_macros.svh"
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ `include "src/test_top.svh"
+ `include "src/register_test.svh"
+ `include "src/example_derived_test.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new tests to the src directory
+ // be sure to add the test file here so that it will be
+ // compiled as part of the test package. Be sure to place
+ // the new test after any base tests of the new test.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.vinfo
new file mode 100644
index 00000000..9fe7bfbf
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/block_1_tests_pkg.vinfo
@@ -0,0 +1,9 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/environment_packages/block_1_env_pkg/block_1_env_pkg.vinfo
+@use $UVMF_PROJECT_DIR/tb/parameters/block_1_parameters_pkg.vinfo
+@use $UVMF_PROJECT_DIR/tb/sequences/block_1_sequences_pkg.vinfo
++incdir+@vinfodir
+block_1_tests_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/example_derived_test.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/example_derived_test.svh
new file mode 100644
index 00000000..346ac7c4
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/example_derived_test.svh
@@ -0,0 +1,43 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This test extends test_top and makes
+// changes to test_top using the UVM factory type_override:
+//
+// Test scenario:
+// This is a template test that can be used to create future tests.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class example_derived_test extends test_top;
+
+ `uvm_component_utils( example_derived_test );
+
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+ virtual function void build_phase(uvm_phase phase);
+ // The factory override below is an example of how to replace the block_1_bench_sequence_base
+ // sequence with the example_derived_test_sequence.
+ block_1_bench_sequence_base::type_id::set_type_override(example_derived_test_sequence::get_type());
+ // Execute the build_phase of test_top AFTER all factory overrides have been created.
+ super.build_phase(phase);
+ // pragma uvmf custom configuration_settings_post_randomize begin
+ // UVMF_CHANGE_ME Test specific configuration values can be set here.
+ // The configuration structure has already been randomized.
+ // pragma uvmf custom configuration_settings_post_randomize end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/register_test.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/register_test.svh
new file mode 100644
index 00000000..ae1d329c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/register_test.svh
@@ -0,0 +1,40 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This test extends test_top and makes
+// changes to test_top using the UVM factory type_override:
+//
+// Test scenario:
+// This is a template test that can be used to create future tests.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class register_test extends test_top;
+
+ `uvm_component_utils( register_test );
+
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+ virtual function void build_phase(uvm_phase phase);
+ // The factory override below replaces the block_1_bench_sequence_base
+ // sequence with the register_test_sequence.
+ block_1_bench_sequence_base::type_id::set_type_override(register_test_sequence::get_type());
+ // Execute the build_phase of test_top AFTER all factory overrides have been created.
+ super.build_phase(phase);
+ endfunction
+
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/test_top.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/test_top.svh
new file mode 100644
index 00000000..108d124e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/tb/tests/src/test_top.svh
@@ -0,0 +1,82 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+// Description: This top level UVM test is the base class for all
+// future tests created for this project.
+//
+// This test class contains:
+// Configuration: The top level configuration for the project.
+// Environment: The top level environment for the project.
+// Top_level_sequence: The top level sequence for the project.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+typedef block_1_env_configuration block_1_env_configuration_t;
+typedef block_1_environment block_1_environment_t;
+
+class test_top extends uvmf_test_base #(.CONFIG_T(block_1_env_configuration_t),
+ .ENV_T(block_1_environment_t),
+ .TOP_LEVEL_SEQ_T(block_1_bench_sequence_base));
+
+ `uvm_component_utils( test_top );
+
+
+
+ string interface_names[] = {
+ apb_master_BFM /* apb_master [0] */ ,
+ axi_master1_BFM /* axi_master1 [1] */ ,
+ axi_master2_BFM /* axi_master2 [2] */ ,
+ spi_slave_BFM /* spi_slave [3] */
+};
+
+uvmf_active_passive_t interface_activities[] = {
+ ACTIVE /* apb_master [0] */ ,
+ ACTIVE /* axi_master1 [1] */ ,
+ ACTIVE /* axi_master2 [2] */ ,
+ PASSIVE /* spi_slave [3] */ };
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ // FUNCTION: new()
+ // This is the standard systemVerilog constructor. All components are
+ // constructed in the build_phase to allow factory overriding.
+ //
+ function new( string name = "", uvm_component parent = null );
+ super.new( name ,parent );
+ endfunction
+
+
+
+ // ****************************************************************************
+ // FUNCTION: build_phase()
+ // The construction of the configuration and environment classes is done in
+ // the build_phase of uvmf_test_base. Once the configuraton and environment
+ // classes are built then the initialize call is made to perform the
+ // following:
+ // Monitor and driver BFM virtual interface handle passing into agents
+ // Set the active/passive state for each agent
+ // Once this build_phase completes, the build_phase of the environment is
+ // executed which builds the agents.
+ //
+ virtual function void build_phase(uvm_phase phase);
+// pragma uvmf custom build_phase_pre_super begin
+// pragma uvmf custom build_phase_pre_super end
+ super.build_phase(phase);
+ // pragma uvmf custom configuration_settings_post_randomize begin
+ // pragma uvmf custom configuration_settings_post_randomize end
+ configuration.initialize(NA, "uvm_test_top.environment", interface_names, null, interface_activities);
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/yaml/block_1_bench.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/yaml/block_1_bench.yaml
new file mode 100644
index 00000000..81d1e38d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/project_benches/block_1/yaml/block_1_bench.yaml
@@ -0,0 +1,21 @@
+uvmf:
+ benches:
+ block_1:
+ active_passive:
+ - bfm_name: apb_master
+ value: ACTIVE
+ - bfm_name: axi_master1
+ value: ACTIVE
+ - bfm_name: axi_master2
+ value: ACTIVE
+ - bfm_name: spi_slave
+ value: PASSIVE
+ active_passive_default: ACTIVE
+ clock_half_period: 5ns
+ clock_phase_offset: 9ns
+ existing_library_component: 'True'
+ interface_params: []
+ reset_assertion_level: 'True'
+ reset_duration: 200ns
+ top_env: block_1
+ use_dpi_link: 'False'
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.project
new file mode 100644
index 00000000..db755a2e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.project
@@ -0,0 +1,32 @@
+
+
+ block_1_env_pkg
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.svproject
new file mode 100644
index 00000000..148d5d69
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/Makefile
new file mode 100644
index 00000000..d0b7efd8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/Makefile
@@ -0,0 +1,56 @@
+# block_1 environment packages source and make target
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+# Include all requisite sub-environment package targets for this bench
+
+block_1_ENV_PKG =\
+ $(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg/block_1_env_pkg.sv
+
+COMP_block_1_PKG_TGT_0 = q_comp_block_1_env_pkg
+COMP_block_1_PKG_TGT_1 = v_comp_block_1_env_pkg
+COMP_block_1_PKG_TGT = $(COMP_block_1_PKG_TGT_$(USE_VELOCE))
+
+comp_block_1_env_pkg: $(COMP_block_1_PKG_TGT)
+
+q_comp_block_1_env_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg $(block_1_ENV_PKG)
+
+v_comp_block_1_env_pkg: q_comp_block_1_env_pkg
+ $(VELANALYZE_HVL_CMD) +incdir+$(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg $(block_1_ENV_PKG)
+
+
+
+ifeq ($(MTI_VCO_MODE),64)
+ GCC_COMP_ARCH = -m64
+else
+ GCC_COMP_ARCH = -m32
+endif
+
+export block_1_ENV_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_1_env_pkg/dpi
+
+C_FILE_COMPILE_LIST_block_1_env_pkg = \
+
+O_FILE_COMPILE_LIST_block_1_env_pkg = $(notdir $(C_FILE_COMPILE_LIST_block_1_env_pkg:.c=.o))
+
+GCC_COMP_ARGS_block_1_env_pkg += -I$(block_1_ENV_DPI_SRC) \
+ -fPIC
+
+GCC_COMP_ARGS_block_1_env_pkg += $(block_1_ENV_GCC_COMP_ARGUMENTS)
+
+GCC_LINK_ARGS_block_1_env_pkg += \
+ \
+ -o .so
+
+comp_block_1_env_pkg_c_files:
+ @echo "--------------------------------"
+ @echo "Compiling Environment C source"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_block_1_env_pkg) $(C_FILE_COMPILE_LIST_block_1_env_pkg)
+ @echo "--------------------------------"
+ @echo "Linking Environment C objects into a shared object"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_block_1_env_pkg) $(O_FILE_COMPILE_LIST_block_1_env_pkg)
+ @echo "--------------------------------"
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.compile
new file mode 100644
index 00000000..4c6f4844
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.compile
@@ -0,0 +1,9 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ../../../verification_ip/interface_packages/apb_m_pkg/apb_m_hvl.compile
+ - ../../../verification_ip/interface_packages/axi_m_pkg/axi_m_hvl.compile
+ - ../../../verification_ip/interface_packages/spi_s_pkg/spi_s_hvl.compile
+
+src:
+ - block_1_env_pkg.sv
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.sv
new file mode 100644
index 00000000..490ba8f1
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.sv
@@ -0,0 +1,63 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// environment package that will run on the host simulator.
+//
+// CONTAINS:
+// -
+// -
+// -
+// -
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package block_1_env_pkg;
+
+ import uvm_pkg::*;
+ `include "uvm_macros.svh"
+ import uvmf_base_pkg::*;
+ import apb_m_pkg::*;
+ import apb_m_pkg_hdl::*;
+ import axi_m_pkg::*;
+ import axi_m_pkg_hdl::*;
+ import spi_s_pkg::*;
+ import spi_s_pkg_hdl::*;
+
+ `uvm_analysis_imp_decl(_axi_2_ae)
+ `uvm_analysis_imp_decl(_apb_ae)
+ `uvm_analysis_imp_decl(_axi_1_ae)
+ `uvm_analysis_imp_decl(_sco_from_pre_ae)
+ `uvm_analysis_imp_decl(_spi_ae)
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ // Parameters defined as HVL parameters
+
+ `include "src/block_1_env_typedefs.svh"
+ `include "src/block_1_env_configuration.svh"
+ `include "src/block_1_predictor.svh"
+ `include "src/block_1_scoreboard.svh"
+ `include "src/block_1_environment.svh"
+ `include "src/block_1_env_sequence_base.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new environment level sequences to the src directory
+ // be sure to add the sequence file here so that it will be
+ // compiled as part of the environment package. Be sure to place
+ // the new sequence after any base sequence of the new sequence.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.vinfo
new file mode 100644
index 00000000..c2733a14
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg.vinfo
@@ -0,0 +1,6 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_pkg.vinfo
+@use $UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_pkg.vinfo
++incdir+@vinfodir
+block_1_env_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg_sve.F
new file mode 100644
index 00000000..c6edfc2e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/block_1_env_pkg_sve.F
@@ -0,0 +1,12 @@
+
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
+// Sub-Environments
+
++incdir+.
+./block_1_env_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/compile.do
new file mode 100644
index 00000000..bac5463f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/compile.do
@@ -0,0 +1,12 @@
+# Tcl do file for compile of block_1 interface
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+
+
+quietly set cmd [format "vlog -timescale 1ps/1ps +incdir+%s/environment_packages/block_1_env_pkg" $env(UVMF_VIP_LIBRARY_HOME)]
+quietly set cmd [format "%s %s/environment_packages/block_1_env_pkg/block_1_env_pkg.sv" $cmd $env(UVMF_VIP_LIBRARY_HOME)]
+eval $cmd
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_configuration.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_configuration.svh
new file mode 100644
index 00000000..56f80daa
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_configuration.svh
@@ -0,0 +1,162 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: THis is the configuration for the block_1 environment.
+// it contains configuration classes for each agent. It also contains
+// environment level configuration variables.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class block_1_env_configuration
+extends uvmf_environment_configuration_base;
+
+ `uvm_object_utils( block_1_env_configuration )
+
+ bit has_scoreboard;
+
+//Constraints for the configuration variables:
+
+
+ covergroup block_1_configuration_cg;
+ // pragma uvmf custom covergroup begin
+ option.auto_bin_max=1024;
+ coverpoint has_scoreboard;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+
+ typedef apb_m_configuration apb_master_config_t;
+ rand apb_master_config_t apb_master_config;
+
+ typedef axi_m_configuration axi_master1_config_t;
+ rand axi_master1_config_t axi_master1_config;
+
+ typedef axi_m_configuration axi_master2_config_t;
+ rand axi_master2_config_t axi_master2_config;
+
+ typedef spi_s_configuration spi_slave_config_t;
+ rand spi_slave_config_t spi_slave_config;
+
+
+
+
+ typedef uvmf_virtual_sequencer_base #(.CONFIG_T(block_1_env_configuration)) block_1_vsqr_t;
+ block_1_vsqr_t vsqr;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// FUNCTION : new()
+// This function is the standard SystemVerilog constructor.
+// This function constructs the configuration object for each agent in the environment.
+//
+ function new( string name = "" );
+ super.new( name );
+
+
+ apb_master_config = apb_master_config_t::type_id::create("apb_master_config");
+ axi_master1_config = axi_master1_config_t::type_id::create("axi_master1_config");
+ axi_master2_config = axi_master2_config_t::type_id::create("axi_master2_config");
+ spi_slave_config = spi_slave_config_t::type_id::create("spi_slave_config");
+
+
+ block_1_configuration_cg=new;
+ `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that configuration variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.")
+
+ // pragma uvmf custom new begin
+ // pragma uvmf custom new end
+ endfunction
+
+// ****************************************************************************
+// FUNCTION : set_vsqr()
+// This function is used to assign the vsqr handle.
+ virtual function void set_vsqr( block_1_vsqr_t vsqr);
+ this.vsqr = vsqr;
+ endfunction : set_vsqr
+
+// ****************************************************************************
+// FUNCTION: post_randomize()
+// This function is automatically called after the randomize() function
+// is executed.
+//
+ function void post_randomize();
+ super.post_randomize();
+ // pragma uvmf custom post_randomize begin
+ // pragma uvmf custom post_randomize end
+ endfunction
+
+// ****************************************************************************
+// FUNCTION: convert2string()
+// This function converts all variables in this class to a single string for
+// logfile reporting. This function concatenates the convert2string result for
+// each agent configuration in this configuration class.
+//
+ virtual function string convert2string();
+ // pragma uvmf custom convert2string begin
+ return {
+ $sformatf("has_scoreboard:0x%x ",has_scoreboard),
+ "\n", apb_master_config.convert2string,
+ "\n", axi_master1_config.convert2string,
+ "\n", axi_master2_config.convert2string,
+ "\n", spi_slave_config.convert2string
+
+
+ };
+ // pragma uvmf custom convert2string end
+ endfunction
+// ****************************************************************************
+// FUNCTION: initialize();
+// This function configures each interface agents configuration class. The
+// sim level determines the active/passive state of the agent. The environment_path
+// identifies the hierarchy down to and including the instantiation name of the
+// environment for this configuration class. Each instance of the environment
+// has its own configuration class. The string interface names are used by
+// the agent configurations to identify the virtual interface handle to pull from
+// the uvm_config_db.
+//
+ function void initialize(uvmf_sim_level_t sim_level,
+ string environment_path,
+ string interface_names[],
+ uvm_reg_block register_model = null,
+ uvmf_active_passive_t interface_activity[] = {}
+ );
+
+ super.initialize(sim_level, environment_path, interface_names, register_model, interface_activity);
+
+
+
+ // Interface initialization for local agents
+ apb_master_config.initialize( interface_activity[0], {environment_path,".apb_master"}, interface_names[0]);
+ apb_master_config.initiator_responder = INITIATOR;
+ // apb_master_config.has_coverage = 1;
+ axi_master1_config.initialize( interface_activity[1], {environment_path,".axi_master1"}, interface_names[1]);
+ axi_master1_config.initiator_responder = INITIATOR;
+ // axi_master1_config.has_coverage = 1;
+ axi_master2_config.initialize( interface_activity[2], {environment_path,".axi_master2"}, interface_names[2]);
+ axi_master2_config.initiator_responder = INITIATOR;
+ // axi_master2_config.has_coverage = 1;
+ spi_slave_config.initialize( interface_activity[3], {environment_path,".spi_slave"}, interface_names[3]);
+ spi_slave_config.initiator_responder = RESPONDER;
+ // spi_slave_config.has_coverage = 1;
+
+
+
+
+
+ // pragma uvmf custom initialize begin
+ // pragma uvmf custom initialize end
+
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_sequence_base.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_sequence_base.svh
new file mode 100644
index 00000000..949ecd3c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_sequence_base.svh
@@ -0,0 +1,83 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains environment level sequences that will
+// be reused from block to top level simulations.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class block_1_env_sequence_base #(
+ type CONFIG_T
+ ) extends uvmf_virtual_sequence_base #(.CONFIG_T(CONFIG_T));
+
+
+ `uvm_object_param_utils( block_1_env_sequence_base #(
+ CONFIG_T
+ ) );
+
+
+// This block_1_env_sequence_base contains a handle to a block_1_env_configuration object
+// named configuration. This configuration variable contains a handle to each
+// sequencer within each agent within this environment and any sub-environments.
+// The configuration object handle is automatically assigned in the pre_body in the
+// base class of this sequence. The configuration handle is retrieved from the
+// virtual sequencer that this sequence is started on.
+// Available sequencer handles within the environment configuration:
+
+ // Initiator agent sequencers in block_1_environment:
+ // configuration.apb_master_config.sequencer
+ // configuration.axi_master1_config.sequencer
+ // configuration.axi_master2_config.sequencer
+
+ // Responder agent sequencers in block_1_environment:
+ // configuration.spi_slave_config.sequencer
+
+
+ typedef apb_m_random_sequence apb_master_random_sequence_t;
+ apb_master_random_sequence_t apb_master_rand_seq;
+
+ typedef axi_m_random_sequence axi_master1_random_sequence_t;
+ axi_master1_random_sequence_t axi_master1_rand_seq;
+
+ typedef axi_m_random_sequence axi_master2_random_sequence_t;
+ axi_master2_random_sequence_t axi_master2_rand_seq;
+
+
+
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ function new(string name = "" );
+ super.new(name);
+ apb_master_rand_seq = apb_master_random_sequence_t::type_id::create("apb_master_rand_seq");
+ axi_master1_rand_seq = axi_master1_random_sequence_t::type_id::create("axi_master1_rand_seq");
+ axi_master2_rand_seq = axi_master2_random_sequence_t::type_id::create("axi_master2_rand_seq");
+
+
+ endfunction
+
+ virtual task body();
+
+ if ( configuration.apb_master_config.sequencer != null )
+ repeat (25) apb_master_rand_seq.start(configuration.apb_master_config.sequencer);
+ if ( configuration.axi_master1_config.sequencer != null )
+ repeat (25) axi_master1_rand_seq.start(configuration.axi_master1_config.sequencer);
+ if ( configuration.axi_master2_config.sequencer != null )
+ repeat (25) axi_master2_rand_seq.start(configuration.axi_master2_config.sequencer);
+
+
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_typedefs.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_typedefs.svh
new file mode 100644
index 00000000..9814bd58
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_env_typedefs.svh
@@ -0,0 +1,20 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the environment package.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+ // pragma uvmf custom additional begin
+ // pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_environment.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_environment.svh
new file mode 100644
index 00000000..f8fc649f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_environment.svh
@@ -0,0 +1,145 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This environment contains all agents, predictors and
+// scoreboards required for the block level design.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class block_1_environment extends uvmf_environment_base #(
+ .CONFIG_T( block_1_env_configuration
+ ));
+ `uvm_component_utils( block_1_environment )
+
+
+
+ uvm_analysis_port #(apb_m_transaction) apb_master_ap;
+ uvm_analysis_port #(axi_m_transaction) axi_master1_ap;
+ uvm_analysis_port #(axi_m_transaction) axi_master2_ap;
+ uvm_analysis_port #(spi_s_transaction) spi_slave_ap;
+
+
+ typedef apb_m_agent apb_master_t;
+ apb_master_t apb_master;
+
+ typedef axi_m_agent axi_master1_t;
+ axi_master1_t axi_master1;
+
+ typedef axi_m_agent axi_master2_t;
+ axi_master2_t axi_master2;
+
+ typedef spi_s_agent spi_slave_t;
+ spi_slave_t spi_slave;
+
+
+
+
+ typedef block_1_predictor #(
+ .CONFIG_T(CONFIG_T)
+ ) block_1_pred_t;
+ block_1_pred_t block_1_pred;
+ typedef block_1_scoreboard #(
+ .CONFIG_T(CONFIG_T)
+ ) block_1_sb_t;
+ block_1_sb_t block_1_sb;
+
+
+
+
+ typedef uvmf_virtual_sequencer_base #(.CONFIG_T(block_1_env_configuration)) block_1_vsqr_t;
+ block_1_vsqr_t vsqr;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// FUNCTION : new()
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// FUNCTION: build_phase()
+// This function builds all components within this environment.
+//
+ virtual function void build_phase(uvm_phase phase);
+// pragma uvmf custom build_phase_pre_super begin
+// pragma uvmf custom build_phase_pre_super end
+ super.build_phase(phase);
+ apb_master_ap = new("apb_master_ap",this);
+ axi_master1_ap = new("axi_master1_ap",this);
+ axi_master2_ap = new("axi_master2_ap",this);
+ spi_slave_ap = new("spi_slave_ap",this);
+ apb_master = apb_master_t::type_id::create("apb_master",this);
+ apb_master.set_config(configuration.apb_master_config);
+ axi_master1 = axi_master1_t::type_id::create("axi_master1",this);
+ axi_master1.set_config(configuration.axi_master1_config);
+ axi_master2 = axi_master2_t::type_id::create("axi_master2",this);
+ axi_master2.set_config(configuration.axi_master2_config);
+ spi_slave = spi_slave_t::type_id::create("spi_slave",this);
+ spi_slave.set_config(configuration.spi_slave_config);
+ block_1_pred = block_1_pred_t::type_id::create("block_1_pred",this);
+ block_1_pred.configuration = configuration;
+ block_1_sb = block_1_sb_t::type_id::create("block_1_sb",this);
+ block_1_sb.configuration = configuration;
+
+ vsqr = block_1_vsqr_t::type_id::create("vsqr", this);
+ vsqr.set_config(configuration);
+ configuration.set_vsqr(vsqr);
+
+ // pragma uvmf custom build_phase begin
+ // pragma uvmf custom build_phase end
+ endfunction
+
+// ****************************************************************************
+// FUNCTION: connect_phase()
+// This function makes all connections within this environment. Connections
+// typically inclue agent to predictor, predictor to scoreboard and scoreboard
+// to agent.
+//
+ virtual function void connect_phase(uvm_phase phase);
+// pragma uvmf custom connect_phase_pre_super begin
+// pragma uvmf custom connect_phase_pre_super end
+ super.connect_phase(phase);
+ spi_slave.monitored_ap.connect(block_1_sb.spi_ae);
+ apb_master.monitored_ap.connect(block_1_pred.apb_ae);
+ axi_master1.monitored_ap.connect(block_1_pred.axi_1_ae);
+ axi_master2.monitored_ap.connect(block_1_pred.axi_2_ae);
+ block_1_pred.pre_to_sco_ap.connect(block_1_sb.sco_from_pre_ae);
+ apb_master.monitored_ap.connect(apb_master_ap);
+ axi_master1.monitored_ap.connect(axi_master1_ap);
+ axi_master2.monitored_ap.connect(axi_master2_ap);
+ spi_slave.monitored_ap.connect(spi_slave_ap);
+ // pragma uvmf custom reg_model_connect_phase begin
+ // pragma uvmf custom reg_model_connect_phase end
+ endfunction
+
+// ****************************************************************************
+// FUNCTION: end_of_simulation_phase()
+// This function is executed just prior to executing run_phase. This function
+// was added to the environment to sample environment configuration settings
+// just before the simulation exits time 0. The configuration structure is
+// randomized in the build phase before the environment structure is constructed.
+// Configuration variables can be customized after randomization in the build_phase
+// of the extended test.
+// If a sequence modifies values in the configuration structure then the sequence is
+// responsible for sampling the covergroup in the configuration if required.
+//
+ virtual function void start_of_simulation_phase(uvm_phase phase);
+ configuration.block_1_configuration_cg.sample();
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_predictor.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_predictor.svh
new file mode 100644
index 00000000..c81a2e81
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_predictor.svh
@@ -0,0 +1,176 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This analysis component contains analysis_exports for receiving
+// data and analysis_ports for sending data.
+//
+// This analysis component has the following analysis_exports that receive the
+// listed transaction type.
+//
+// axi_2_ae receives transactions of type axi_m_transaction
+// apb_ae receives transactions of type apb_m_transaction
+// axi_1_ae receives transactions of type axi_m_transaction
+//
+// This analysis component has the following analysis_ports that can broadcast
+// the listed transaction type.
+//
+// pre_to_sco_ap broadcasts transactions of type spi_s_transaction
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+class block_1_predictor #(
+ type CONFIG_T,
+ type BASE_T = uvm_component
+ ) extends BASE_T;
+
+ // Factory registration of this class
+ `uvm_component_param_utils( block_1_predictor #(
+ CONFIG_T,
+ BASE_T
+ ))
+
+
+ // Instantiate a handle to the configuration of the environment in which this component resides
+ CONFIG_T configuration;
+
+
+ // Instantiate the analysis exports
+ uvm_analysis_imp_axi_2_ae #(axi_m_transaction, block_1_predictor #(
+ .CONFIG_T(CONFIG_T),
+ .BASE_T(BASE_T)
+ )) axi_2_ae;
+ uvm_analysis_imp_apb_ae #(apb_m_transaction, block_1_predictor #(
+ .CONFIG_T(CONFIG_T),
+ .BASE_T(BASE_T)
+ )) apb_ae;
+ uvm_analysis_imp_axi_1_ae #(axi_m_transaction, block_1_predictor #(
+ .CONFIG_T(CONFIG_T),
+ .BASE_T(BASE_T)
+ )) axi_1_ae;
+
+
+ // Instantiate the analysis ports
+ uvm_analysis_port #(spi_s_transaction) pre_to_sco_ap;
+
+
+ // Transaction variable for predicted values to be sent out pre_to_sco_ap
+ // Once a transaction is sent through an analysis_port, another transaction should
+ // be constructed for the next predicted transaction.
+ typedef spi_s_transaction pre_to_sco_ap_output_transaction_t;
+ pre_to_sco_ap_output_transaction_t pre_to_sco_ap_output_transaction;
+ // Code for sending output transaction out through pre_to_sco_ap
+ // pre_to_sco_ap.write(pre_to_sco_ap_output_transaction);
+
+ // Define transaction handles for debug visibility
+ axi_m_transaction axi_2_ae_debug;
+ apb_m_transaction apb_ae_debug;
+ axi_m_transaction axi_1_ae_debug;
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // FUNCTION: new
+ function new(string name, uvm_component parent);
+ super.new(name,parent);
+ `uvm_warning("PREDICTOR_REVIEW", "This predictor has been created either through generation or re-generation with merging. Remove this warning after the predictor has been reviewed.")
+ // pragma uvmf custom new begin
+ // pragma uvmf custom new end
+ endfunction
+
+ // FUNCTION: build_phase
+ virtual function void build_phase (uvm_phase phase);
+
+ axi_2_ae = new("axi_2_ae", this);
+ apb_ae = new("apb_ae", this);
+ axi_1_ae = new("axi_1_ae", this);
+ pre_to_sco_ap =new("pre_to_sco_ap", this );
+ // pragma uvmf custom build_phase begin
+ // pragma uvmf custom build_phase end
+ endfunction
+
+ // FUNCTION: write_axi_2_ae
+ // Transactions received through axi_2_ae initiate the execution of this function.
+ // This function performs prediction of DUT output values based on DUT input, configuration and state
+ virtual function void write_axi_2_ae(axi_m_transaction t);
+ // pragma uvmf custom axi_2_ae_predictor begin
+ axi_2_ae_debug = t;
+ `uvm_info("PRED", "Transaction Received through axi_2_ae", UVM_MEDIUM)
+ `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL)
+ // Construct one of each output transaction type.
+ pre_to_sco_ap_output_transaction = pre_to_sco_ap_output_transaction_t::type_id::create("pre_to_sco_ap_output_transaction");
+ // UVMF_CHANGE_ME: Implement predictor model here.
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The block_1_predictor::write_axi_2_ae function needs to be completed with DUT prediction model",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+
+ // Code for sending output transaction out through pre_to_sco_ap
+ // Please note that each broadcasted transaction should be a different object than previously
+ // broadcasted transactions. Creation of a different object is done by constructing the transaction
+ // using either new() or create(). Broadcasting a transaction object more than once to either the
+ // same subscriber or multiple subscribers will result in unexpected and incorrect behavior.
+ pre_to_sco_ap.write(pre_to_sco_ap_output_transaction);
+ // pragma uvmf custom axi_2_ae_predictor end
+ endfunction
+
+ // FUNCTION: write_apb_ae
+ // Transactions received through apb_ae initiate the execution of this function.
+ // This function performs prediction of DUT output values based on DUT input, configuration and state
+ virtual function void write_apb_ae(apb_m_transaction t);
+ // pragma uvmf custom apb_ae_predictor begin
+ apb_ae_debug = t;
+ `uvm_info("PRED", "Transaction Received through apb_ae", UVM_MEDIUM)
+ `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL)
+ // Construct one of each output transaction type.
+ pre_to_sco_ap_output_transaction = pre_to_sco_ap_output_transaction_t::type_id::create("pre_to_sco_ap_output_transaction");
+ // UVMF_CHANGE_ME: Implement predictor model here.
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The block_1_predictor::write_apb_ae function needs to be completed with DUT prediction model",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+
+ // Code for sending output transaction out through pre_to_sco_ap
+ // Please note that each broadcasted transaction should be a different object than previously
+ // broadcasted transactions. Creation of a different object is done by constructing the transaction
+ // using either new() or create(). Broadcasting a transaction object more than once to either the
+ // same subscriber or multiple subscribers will result in unexpected and incorrect behavior.
+ pre_to_sco_ap.write(pre_to_sco_ap_output_transaction);
+ // pragma uvmf custom apb_ae_predictor end
+ endfunction
+
+ // FUNCTION: write_axi_1_ae
+ // Transactions received through axi_1_ae initiate the execution of this function.
+ // This function performs prediction of DUT output values based on DUT input, configuration and state
+ virtual function void write_axi_1_ae(axi_m_transaction t);
+ // pragma uvmf custom axi_1_ae_predictor begin
+ axi_1_ae_debug = t;
+ `uvm_info("PRED", "Transaction Received through axi_1_ae", UVM_MEDIUM)
+ `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL)
+ // Construct one of each output transaction type.
+ pre_to_sco_ap_output_transaction = pre_to_sco_ap_output_transaction_t::type_id::create("pre_to_sco_ap_output_transaction");
+ // UVMF_CHANGE_ME: Implement predictor model here.
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "UVMF_CHANGE_ME: The block_1_predictor::write_axi_1_ae function needs to be completed with DUT prediction model",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_PREDICTOR_MODEL", "******************************************************************************************************",UVM_NONE)
+
+ // Code for sending output transaction out through pre_to_sco_ap
+ // Please note that each broadcasted transaction should be a different object than previously
+ // broadcasted transactions. Creation of a different object is done by constructing the transaction
+ // using either new() or create(). Broadcasting a transaction object more than once to either the
+ // same subscriber or multiple subscribers will result in unexpected and incorrect behavior.
+ pre_to_sco_ap.write(pre_to_sco_ap_output_transaction);
+ // pragma uvmf custom axi_1_ae_predictor end
+ endfunction
+
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_scoreboard.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_scoreboard.svh
new file mode 100644
index 00000000..46ee1bf8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/src/block_1_scoreboard.svh
@@ -0,0 +1,131 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This analysis component contains analysis_exports for receiving
+// data and analysis_ports for sending data.
+//
+// This analysis component has the following analysis_exports that receive the
+// listed transaction type.
+//
+// sco_from_pre_ae receives transactions of type spi_s_transaction
+// spi_ae receives transactions of type spi_s_transaction
+//
+// This analysis component has the following analysis_ports that can broadcast
+// the listed transaction type.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+class block_1_scoreboard #(
+ type CONFIG_T,
+ type BASE_T = uvm_component
+ ) extends BASE_T;
+
+ // Factory registration of this class
+ `uvm_component_param_utils( block_1_scoreboard #(
+ CONFIG_T,
+ BASE_T
+ ))
+
+
+ // Instantiate a handle to the configuration of the environment in which this component resides
+ CONFIG_T configuration;
+
+
+ // Instantiate the analysis exports
+ uvm_analysis_imp_sco_from_pre_ae #(spi_s_transaction, block_1_scoreboard #(
+ .CONFIG_T(CONFIG_T),
+ .BASE_T(BASE_T)
+ )) sco_from_pre_ae;
+ uvm_analysis_imp_spi_ae #(spi_s_transaction, block_1_scoreboard #(
+ .CONFIG_T(CONFIG_T),
+ .BASE_T(BASE_T)
+ )) spi_ae;
+
+
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // FUNCTION: new
+ function new(string name, uvm_component parent);
+ super.new(name,parent);
+ // pragma uvmf custom new begin
+ // pragma uvmf custom new end
+ endfunction
+
+ // FUNCTION: build_phase
+ virtual function void build_phase (uvm_phase phase);
+
+ sco_from_pre_ae = new("sco_from_pre_ae", this);
+ spi_ae = new("spi_ae", this);
+ // pragma uvmf custom build_phase begin
+ // pragma uvmf custom build_phase end
+ endfunction
+
+ // FUNCTION: write_sco_from_pre_ae
+ // Transactions received through sco_from_pre_ae initiate the execution of this function.
+ // This function performs prediction of DUT output values based on DUT input, configuration and state
+ virtual function void write_sco_from_pre_ae(spi_s_transaction t);
+ // pragma uvmf custom sco_from_pre_ae_scoreboard begin
+ `uvm_info("PRED", "Transaction Received through sco_from_pre_ae", UVM_MEDIUM)
+ `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL)
+ // UVMF_CHANGE_ME: Implement custom scoreboard here.
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The block_1_scoreboard::write_sco_from_pre_ae function needs to be completed with custom scoreboard functionality",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE)
+
+ // pragma uvmf custom sco_from_pre_ae_scoreboard end
+ endfunction
+
+ // FUNCTION: write_spi_ae
+ // Transactions received through spi_ae initiate the execution of this function.
+ // This function performs prediction of DUT output values based on DUT input, configuration and state
+ virtual function void write_spi_ae(spi_s_transaction t);
+ // pragma uvmf custom spi_ae_scoreboard begin
+ `uvm_info("PRED", "Transaction Received through spi_ae", UVM_MEDIUM)
+ `uvm_info("PRED", {" Data: ",t.convert2string()}, UVM_FULL)
+ // UVMF_CHANGE_ME: Implement custom scoreboard here.
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "UVMF_CHANGE_ME: The block_1_scoreboard::write_spi_ae function needs to be completed with custom scoreboard functionality",UVM_NONE)
+ `uvm_info("UNIMPLEMENTED_CUSTOM_SCOREBOARD", "******************************************************************************************************",UVM_NONE)
+
+ // pragma uvmf custom spi_ae_scoreboard end
+ endfunction
+
+
+
+ // FUNCTION: extract_phase
+ virtual function void extract_phase(uvm_phase phase);
+// pragma uvmf custom extract_phase begin
+ super.extract_phase(phase);
+// pragma uvmf custom extract_phase end
+ endfunction
+
+ // FUNCTION: check_phase
+ virtual function void check_phase(uvm_phase phase);
+// pragma uvmf custom check_phase begin
+ super.check_phase(phase);
+// pragma uvmf custom check_phase end
+ endfunction
+
+ // FUNCTION: report_phase
+ virtual function void report_phase(uvm_phase phase);
+// pragma uvmf custom report_phase begin
+ super.report_phase(phase);
+// pragma uvmf custom report_phase end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_environment.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_environment.yaml
new file mode 100644
index 00000000..e13560e8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_environment.yaml
@@ -0,0 +1,67 @@
+uvmf:
+ environments:
+ block_1:
+ agents:
+ - initiator_responder: INITIATOR
+ name: apb_master
+ type: apb_m
+ - initiator_responder: INITIATOR
+ name: axi_master1
+ type: axi_m
+ - initiator_responder: INITIATOR
+ name: axi_master2
+ type: axi_m
+ - initiator_responder: RESPONDER
+ name: spi_slave
+ type: spi_s
+ analysis_components:
+ - name: block_1_pred
+ parameters: []
+ type: block_1_predictor
+ - name: block_1_sb
+ parameters: []
+ type: block_1_scoreboard
+ analysis_exports: []
+ analysis_ports:
+ - connected_to: apb_master.monitored_ap
+ name: apb_master_ap
+ trans_type: apb_m_transaction
+ - connected_to: axi_master1.monitored_ap
+ name: axi_master1_ap
+ trans_type: axi_m_transaction
+ - connected_to: axi_master2.monitored_ap
+ name: axi_master2_ap
+ trans_type: axi_m_transaction
+ - connected_to: spi_slave.monitored_ap
+ name: spi_slave_ap
+ trans_type: spi_s_transaction
+ config_constraints: []
+ config_vars:
+ - comment: ''
+ isrand: 'False'
+ name: has_scoreboard
+ type: bit
+ value: ''
+ existing_library_component: 'True'
+ hvl_pkg_parameters: []
+ non_uvmf_components: []
+ parameters: []
+ qvip_memory_agents: []
+ scoreboards: []
+ subenvs: []
+ tlm_connections:
+ - driver: spi_slave.monitored_ap
+ receiver: block_1_sb.spi_ae
+ validate: 'True'
+ - driver: apb_master.monitored_ap
+ receiver: block_1_pred.apb_ae
+ validate: 'True'
+ - driver: axi_master1.monitored_ap
+ receiver: block_1_pred.axi_1_ae
+ validate: 'True'
+ - driver: axi_master2.monitored_ap
+ receiver: block_1_pred.axi_2_ae
+ validate: 'True'
+ - driver: block_1_pred.pre_to_sco_ap
+ receiver: block_1_sb.sco_from_pre_ae
+ validate: 'True'
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_predictor.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_predictor.yaml
new file mode 100644
index 00000000..ce520abe
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_predictor.yaml
@@ -0,0 +1,15 @@
+uvmf:
+ util_components:
+ block_1_predictor:
+ analysis_exports:
+ - name: axi_2_ae
+ type: axi_m_transaction
+ - name: apb_ae
+ type: apb_m_transaction
+ - name: axi_1_ae
+ type: axi_m_transaction
+ analysis_ports:
+ - name: pre_to_sco_ap
+ type: spi_s_transaction
+ existing_library_component: 'True'
+ type: predictor
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_scoreboard.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_scoreboard.yaml
new file mode 100644
index 00000000..e1fb20d8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/environment_packages/block_1_env_pkg/yaml/block_1_util_comp_block_1_scoreboard.yaml
@@ -0,0 +1,10 @@
+uvmf:
+ util_components:
+ block_1_scoreboard:
+ analysis_exports:
+ - name: sco_from_pre_ae
+ type: spi_s_transaction
+ - name: spi_ae
+ type: spi_s_transaction
+ existing_library_component: 'True'
+ type: scoreboard
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.project
new file mode 100644
index 00000000..6da82621
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.project
@@ -0,0 +1,30 @@
+
+
+ apb_m_pkg
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.svproject
new file mode 100644
index 00000000..e17b552f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/Makefile
new file mode 100644
index 00000000..eec7d999
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/Makefile
@@ -0,0 +1,66 @@
+# apb_m interface packages source
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+apb_m_PKG = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f
+
+apb_m_PKG_HDL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f
+
+apb_m_PKG_XRTL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_xrtl.f
+
+COMP_apb_m_PKG_TGT_0 = q_comp_apb_m_pkg
+COMP_apb_m_PKG_TGT_1 = v_comp_apb_m_pkg
+COMP_apb_m_PKG_TGT = $(COMP_apb_m_PKG_TGT_$(USE_VELOCE))
+
+comp_apb_m_pkg: $(COMP_apb_m_PKG_TGT)
+
+q_comp_apb_m_pkg:
+ $(HDL_COMP_CMD) $(apb_m_PKG_HDL)
+ $(HVL_COMP_CMD) $(apb_m_PKG)
+ $(HDL_COMP_CMD) $(apb_m_PKG_XRTL)
+
+v_comp_apb_m_pkg:
+ $(HVL_COMP_CMD) $(apb_m_PKG_HDL)
+ $(HVL_COMP_CMD) $(apb_m_PKG)
+ $(VELANALYZE_CMD) $(apb_m_PKG_HDL)
+ $(VELANALYZE_HVL_CMD) $(apb_m_PKG)
+ $(HDL_COMP_CMD) $(apb_m_PKG_XRTL)
+
+ifeq ($(MTI_VCO_MODE),64)
+ GCC_COMP_ARCH = -m64
+else
+ GCC_COMP_ARCH = -m32
+endif
+
+export apb_m_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/dpi
+
+C_FILE_COMPILE_LIST_apb_m_pkg = \
+
+O_FILE_COMPILE_LIST_apb_m_pkg = $(notdir $(C_FILE_COMPILE_LIST_apb_m_pkg:.c=.o))
+
+GCC_COMP_ARGS_apb_m_pkg += -I$(apb_m_IF_DPI_SRC) \
+ -fPIC
+
+GCC_COMP_ARGS_apb_m_pkg += $(apb_m_IF_GCC_COMP_ARGUMENTS)
+
+GCC_LINK_ARGS_apb_m_pkg += \
+ \
+ -o .so
+
+comp_apb_m_pkg_c_files:
+ @echo "--------------------------------"
+ @echo "Compiling Interface C source"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_apb_m_pkg) $(C_FILE_COMPILE_LIST_apb_m_pkg)
+ @echo "--------------------------------"
+ @echo "Linking Interface C objects into a shared object"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_apb_m_pkg) $(O_FILE_COMPILE_LIST_apb_m_pkg)
+ @echo "--------------------------------"
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m.compile
new file mode 100644
index 00000000..d77eb23e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m.compile
@@ -0,0 +1,3 @@
+needs:
+ - apb_m_hvl.compile
+ - apb_m_hdl.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_bfm.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_bfm.vinfo
new file mode 100644
index 00000000..8d4b80f9
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_bfm.vinfo
@@ -0,0 +1,6 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+@use apb_m_pkg_hdl.vinfo
++incdir+@vinfodir
+src/apb_m_if.sv
+src/apb_m_driver_bfm.sv
+src/apb_m_monitor_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_common.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_common.compile
new file mode 100644
index 00000000..26821a84
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_common.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+incdir:
+ - .
+ - ${uvm_path}/src
+src:
+ - apb_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f
new file mode 100644
index 00000000..0d2a4c9d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f
new file mode 100644
index 00000000..0d4b8d6b
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/apb_m_pkg.sv
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_xrtl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_xrtl.f
new file mode 100644
index 00000000..d2cef722
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_filelist_xrtl.f
@@ -0,0 +1,3 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/src/apb_m_if.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/src/apb_m_monitor_bfm.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/apb_m_pkg/src/apb_m_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hdl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hdl.compile
new file mode 100644
index 00000000..83ce2876
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hdl.compile
@@ -0,0 +1,9 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+ - ./apb_m_common.compile
+incdir:
+ - .
+src:
+ - src/apb_m_if.sv
+ - src/apb_m_monitor_bfm.sv
+ - src/apb_m_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hvl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hvl.compile
new file mode 100644
index 00000000..2b4533f6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_hvl.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ./apb_m_common.compile
+incdir:
+ - .
+src:
+ - apb_m_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.sv
new file mode 100644
index 00000000..453883f5
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.sv
@@ -0,0 +1,77 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that will run on the host simulator.
+//
+// CONTAINS:
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package apb_m_pkg;
+
+ import uvm_pkg::*;
+ import uvmf_base_pkg_hdl::*;
+ import uvmf_base_pkg::*;
+ import apb_m_pkg_hdl::*;
+
+ `include "uvm_macros.svh"
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+ `include "src/apb_m_macros.svh"
+
+ export apb_m_pkg_hdl::*;
+
+
+
+ // Parameters defined as HVL parameters
+
+ `include "src/apb_m_typedefs.svh"
+ `include "src/apb_m_transaction.svh"
+
+ `include "src/apb_m_configuration.svh"
+ `include "src/apb_m_driver.svh"
+ `include "src/apb_m_monitor.svh"
+
+ `include "src/apb_m_transaction_coverage.svh"
+ `include "src/apb_m_sequence_base.svh"
+ `include "src/apb_m_random_sequence.svh"
+
+ `include "src/apb_m_responder_sequence.svh"
+ `include "src/apb_m2reg_adapter.svh"
+
+ `include "src/apb_m_agent.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new interface sequences to the src directory
+ // be sure to add the sequence file here so that it will be
+ // compiled as part of the interface package. Be sure to place
+ // the new sequence after any base sequences of the new sequence.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.vinfo
new file mode 100644
index 00000000..e6a8b7c1
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg.vinfo
@@ -0,0 +1,4 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use apb_m_pkg_hdl.vinfo
++incdir+@vinfodir
+apb_m_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.sv
new file mode 100644
index 00000000..b657eb44
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.sv
@@ -0,0 +1,38 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that needs to be compiled and synthesized
+// for running on Veloce.
+//
+// CONTAINS:
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package apb_m_pkg_hdl;
+
+ import uvmf_base_pkg_hdl::*;
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ // Parameters defined as HDL parameters
+
+ `include "src/apb_m_typedefs_hdl.svh"
+ `include "src/apb_m_macros.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.vinfo
new file mode 100644
index 00000000..3e5dc166
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_hdl.vinfo
@@ -0,0 +1,2 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+apb_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_sve.F
new file mode 100644
index 00000000..b934c1a1
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/apb_m_pkg_sve.F
@@ -0,0 +1,10 @@
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
++incdir+.
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/compile.do
new file mode 100644
index 00000000..944fd712
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/compile.do
@@ -0,0 +1,14 @@
+# Tcl do file for compile of apb_m interface
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_hdl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_hvl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/apb_m_pkg/apb_m_filelist_xrtl.f
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m2reg_adapter.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m2reg_adapter.svh
new file mode 100644
index 00000000..bbbd0c42
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m2reg_adapter.svh
@@ -0,0 +1,118 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the UVM register adapter for the apb_m interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m2reg_adapter #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvm_reg_adapter;
+
+ `uvm_object_param_utils( apb_m2reg_adapter #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //--------------------------------------------------------------------
+ // new
+ //--------------------------------------------------------------------
+ function new (string name = "apb_m2reg_adapter" );
+ super.new(name);
+ // pragma uvmf custom new begin
+ // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response.
+
+ // Does the protocol the Agent is modeling support byte enables?
+ // 0 = NO
+ // 1 = YES
+ supports_byte_enable = 0;
+
+ // Does the Agent's Driver provide separate response sequence items?
+ // i.e. Does the driver call seq_item_port.put()
+ // and do the sequences call get_response()?
+ // 0 = NO
+ // 1 = YES
+ provides_responses = 0;
+ // pragma uvmf custom new end
+
+ endfunction: new
+
+ //--------------------------------------------------------------------
+ // reg2bus
+ //--------------------------------------------------------------------
+ virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
+
+ apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) trans_h = apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )::type_id::create("trans_h");
+
+ // pragma uvmf custom reg2bus begin
+ // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields.
+
+ //Adapt the following for your sequence item type
+ // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE;
+ //Copy over address
+ // trans_h.addr = rw.addr;
+ //Copy over write data
+ // trans_h.data = rw.data;
+
+ // pragma uvmf custom reg2bus end
+
+ // Return the adapted transaction
+ return trans_h;
+
+ endfunction: reg2bus
+
+ //--------------------------------------------------------------------
+ // bus2reg
+ //--------------------------------------------------------------------
+ virtual function void bus2reg(uvm_sequence_item bus_item,
+ ref uvm_reg_bus_op rw);
+ apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) trans_h;
+ if (!$cast(trans_h, bus_item)) begin
+ `uvm_fatal("ADAPT","Provided bus_item is not of the correct type")
+ return;
+ end
+ // pragma uvmf custom bus2reg begin
+ // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields.
+ //Adapt the following for your sequence item type
+ //Copy over instruction type
+ // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ;
+ //Copy over address
+ // rw.addr = trans_h.addr;
+ //Copy over read data
+ // rw.data = trans_h.data;
+ //Check for errors on the bus and return UVM_NOT_OK if there is an error
+ // rw.status = UVM_IS_OK;
+ // pragma uvmf custom bus2reg end
+
+ endfunction: bus2reg
+
+endclass : apb_m2reg_adapter
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_agent.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_agent.svh
new file mode 100644
index 00000000..8fbbff4d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_agent.svh
@@ -0,0 +1,81 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: Protocol specific agent class definition
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_agent #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_parameterized_agent #(
+ .CONFIG_T(apb_m_configuration #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .DRIVER_T(apb_m_driver #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .MONITOR_T(apb_m_monitor #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .COVERAGE_T(apb_m_transaction_coverage #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .TRANS_T(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ))
+ );
+
+ `uvm_component_param_utils( apb_m_agent #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// FUNCTION : new()
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+ // FUNCTION: build_phase
+ virtual function void build_phase(uvm_phase phase);
+// pragma uvmf custom build_phase_pre_super begin
+// pragma uvmf custom build_phase_pre_super end
+ super.build_phase(phase);
+ if (configuration.active_passive == ACTIVE) begin
+ // Place sequencer handle into configuration object
+ // so that it may be retrieved from configuration
+ // rather than using uvm_config_db
+ configuration.sequencer = this.sequencer;
+ end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_configuration.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_configuration.svh
new file mode 100644
index 00000000..e01c8416
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_configuration.svh
@@ -0,0 +1,211 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class contains all variables and functions used
+// to configure the apb_m agent and its bfm's. It gets the
+// bfm's from the uvm_config_db for use by the agent.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_configuration #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_parameterized_agent_configuration_base #(
+ .DRIVER_BFM_BIND_T(virtual apb_m_driver_bfm #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .MONITOR_BFM_BIND_T( virtual apb_m_monitor_bfm #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )));
+
+ `uvm_object_param_utils( apb_m_configuration #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+
+ // Sequencer handle populated by agent
+ uvm_sequencer #(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) ) sequencer;
+
+ //Constraints for the configuration variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ covergroup apb_m_configuration_cg;
+ // pragma uvmf custom covergroup begin
+ option.auto_bin_max=1024;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ //*******************************************************************
+ //*******************************************************************
+ // Structure used to pass configuration variables to monitor and driver BFM's.
+ // Use to_struct function to pack variables into structure.
+ // Use from_struct function to unpack variables from structure.
+ // This structure is defined in apb_m_macros.svh
+ `apb_m_CONFIGURATION_STRUCT
+ apb_m_configuration_s apb_m_configuration_struct;
+ //*******************************************************************
+ // FUNCTION: to_struct()
+ // This function packs variables into a apb_m_configuration_s
+ // structure. The function returns the handle to the apb_m_configuration_struct.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_CONFIGURATION_TO_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_struct()
+ // This function unpacks the struct provided as an argument into
+ // variables of this class.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_CONFIGURATION_FROM_STRUCT_FUNCTION
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ // Construct the covergroup for this configuration class
+ apb_m_configuration_cg = new;
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: post_randomize()
+ // This function is automatically called after the randomize() function
+ // is executed.
+ //
+ function void post_randomize();
+ super.post_randomize();
+ apb_m_configuration_cg.sample();
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: initialize
+ // This function causes the configuration to retrieve
+ // its virtual interface handle from the uvm_config_db.
+ // This function also makes itself available to its
+ // agent through the uvm_config_db.
+ //
+ // ARGUMENTS:
+ // uvmf_active_passive_t activity:
+ // This argument identifies the simulation level
+ // as either BLOCK, CHIP, SIMULATION, etc.
+ //
+ // AGENT_PATH:
+ // This argument identifies the path to this
+ // configurations agent. This configuration
+ // makes itself available to the agent specified
+ // by agent_path by placing itself into the
+ // uvm_config_db.
+ //
+ // INTERFACE_NAME:
+ // This argument identifies the string name of
+ // this configurations BFM's. This string
+ // name is used to retrieve the driver and
+ // monitor BFM from the uvm_config_db.
+ //
+ virtual function void initialize(uvmf_active_passive_t activity,
+ string agent_path,
+ string interface_name);
+
+ super.initialize( activity, agent_path, interface_name);
+ // The covergroup is given the same name as the interface
+ apb_m_configuration_cg.set_inst_name(interface_name);
+
+ // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve.
+ uvm_config_db #( apb_m_configuration #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )
+ )::set( null ,agent_path,UVMF_AGENT_CONFIG, this );
+
+ // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access
+ // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for
+ // accessingthe BFM when using Veloce
+ uvm_config_db #( apb_m_configuration #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )
+ )::set( null ,UVMF_CONFIGURATIONS, interface_name, this );
+
+ apb_m_configuration_cg.set_inst_name($sformatf("apb_m_configuration_cg_%s",get_full_name()));
+
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+ `uvm_info("CFG",
+ $psprintf("The agent at '%s' is using interface named %s has the following parameters: APB_ADDR_WIDTH=%x APB_DATA_WIDTH=%x STRB_LEN=%x ", agent_path, interface_name, APB_ADDR_WIDTH ,APB_DATA_WIDTH ,STRB_LEN ),
+ UVM_DEBUG)
+
+ // pragma uvmf custom initialize begin
+ // This controls whether or not the agent returns a transaction handle in the driver when calling
+ // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means
+ // the sequence on the other end must use the get_response() part of the driver/sequence API. If
+ // this doesn't occur, there will eventually be response_queue overflow errors during the test.
+ return_transaction_response = 1'b0;
+
+ // pragma uvmf custom initialize end
+
+ endfunction
+
+ // ****************************************************************************
+ // TASK: wait_for_reset
+ // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed
+ // by a task in the monitor bfm.
+ virtual task wait_for_reset();
+ monitor_bfm.wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ // TASK: wait_for_num_clocks
+ // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks
+ // operation is performed by a task in the monitor bfm.
+ virtual task wait_for_num_clocks(int clocks);
+ monitor_bfm.wait_for_num_clocks(clocks);
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : convert2string()
+ // This function is used to convert variables in this class into a string for log messaging.
+ //
+ virtual function string convert2string ();
+ // pragma uvmf custom convert2string begin
+ return $sformatf("");
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: get_sequencer
+ function uvm_sequencer #(apb_m_transaction#(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )) get_sequencer();
+ return sequencer;
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver.svh
new file mode 100644
index 00000000..0c3b8285
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver.svh
@@ -0,0 +1,115 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class passes transactions between the sequencer
+// and the BFM driver interface. It accesses the driver BFM
+// through the bfm handle. This driver
+// passes transactions to the driver BFM through the access
+// task.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_driver #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_driver_base #(
+ .CONFIG_T(apb_m_configuration #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) ),
+ .BFM_BIND_T(virtual apb_m_driver_bfm #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) ),
+ .REQ(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) ),
+ .RSP(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) ));
+
+ `uvm_component_param_utils( apb_m_driver #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+//*******************************************************************
+// Macros that define structs located in apb_m_macros.svh
+//*******************************************************************
+// Initiator macro used by apb_m_driver and apb_m_driver_bfm
+// to communicate initiator driven data to apb_m_driver_bfm.
+`apb_m_INITIATOR_STRUCT
+ apb_m_initiator_s apb_m_initiator_struct;
+//*******************************************************************
+// Responder macro used by apb_m_driver and apb_m_driver_bfm
+// to communicate Responder driven data to apb_m_driver_bfm.
+`apb_m_RESPONDER_STRUCT
+ apb_m_responder_s apb_m_responder_struct;
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent=null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the driver BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// driver BFM. This allows the driver BFM to call tasks and function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ****************************************************************************
+// This task is called by the run_phase in uvmf_driver_base.
+ virtual task access( inout REQ txn );
+// pragma uvmf custom access begin
+ if (configuration.initiator_responder==RESPONDER) begin
+ // Complete current transfer and wait for next transfer
+ bfm.respond_and_wait_for_next_transfer(
+ apb_m_initiator_struct,
+ txn.to_responder_struct()
+ );
+ // Unpack information about initiated transfer received by this responder
+ txn.from_initiator_struct(apb_m_initiator_struct);
+ end else begin
+ // Initiate a transfer and get response
+ bfm.initiate_and_get_response(
+ txn.to_initiator_struct(),
+ apb_m_responder_struct
+ );
+ // Unpack transfer response information received by this initiator
+ txn.from_responder_struct(apb_m_responder_struct);
+ end
+// pragma uvmf custom access end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver_bfm.sv
new file mode 100644
index 00000000..d4e614a4
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_driver_bfm.sv
@@ -0,0 +1,378 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This interface performs the apb_m signal driving. It is
+// accessed by the uvm apb_m driver through a virtual interface
+// handle in the apb_m configuration. It drives the singals passed
+// in through the port connection named bus of type apb_m_if.
+//
+// Input signals from the apb_m_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// This bfm drives signals with a _o suffix. These signals
+// are driven onto signals within apb_m_if based on INITIATOR/RESPONDER and/or
+// ARBITRATION/GRANT status.
+//
+// The output signal connections are as follows:
+// signal_o -> bus.signal
+//
+//
+// Interface functions and tasks used by UVM components:
+//
+// configure:
+// This function gets configuration attributes from the
+// UVM driver to set any required BFM configuration
+// variables such as 'initiator_responder'.
+//
+// initiate_and_get_response:
+// This task is used to perform signaling activity for initiating
+// a protocol transfer. The task initiates the transfer, using
+// input data from the initiator struct. Then the task captures
+// response data, placing the data into the response struct.
+// The response struct is returned to the driver class.
+//
+// respond_and_wait_for_next_transfer:
+// This task is used to complete a current transfer as a responder
+// and then wait for the initiator to start the next transfer.
+// The task uses data in the responder struct to drive protocol
+// signals to complete the transfer. The task then waits for
+// the next transfer. Once the next transfer begins, data from
+// the initiator is placed into the initiator struct and sent
+// to the responder sequence for processing to determine
+// what data to respond with.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import apb_m_pkg_hdl::*;
+`include "src/apb_m_macros.svh"
+
+interface apb_m_driver_bfm #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ )
+ (apb_m_if bus);
+ // The following pragma and additional ones in-lined further below are for running this BFM on Veloce
+ // pragma attribute apb_m_driver_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: APB_ADDR_WIDTH=%x APB_DATA_WIDTH=%x STRB_LEN=%x ", APB_ADDR_WIDTH,APB_DATA_WIDTH,STRB_LEN),
+ UVM_DEBUG)
+end
+`endif
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic pclk_i;
+ logic presetn_i;
+
+ // Signal list (all signals are capable of being inputs and outputs for the sake
+ // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that
+ // directionality in the config file was from the point-of-view of the INITIATOR
+
+ // INITIATOR mode input signals
+ tri [APB_DATA_WIDTH-1:0] prdata_i;
+ reg [APB_DATA_WIDTH-1:0] prdata_o = 'b0;
+ tri pready_i;
+ reg pready_o = 0;
+ tri pslverr_i;
+ reg pslverr_o = 0;
+
+ // INITIATOR mode output signals
+ tri [15:0] psel_i;
+ reg [15:0] psel_o = 'b0;
+ tri penable_i;
+ reg penable_o = 'b0;
+ tri [APB_ADDR_WIDTH-1:0] paddr_i;
+ reg [APB_ADDR_WIDTH-1:0] paddr_o = 'b0;
+ tri [APB_DATA_WIDTH-1:0] pwdata_i;
+ reg [APB_DATA_WIDTH-1:0] pwdata_o = 'b0;
+ tri pwrite_i;
+ reg pwrite_o = 'b0;
+ tri [STRB_LEN-1:0] pstrb_i;
+ reg [STRB_LEN-1:0] pstrb_o = 'b0;
+ tri [2:0] pprot_i;
+ reg [2:0] pprot_o = 'b0;
+
+ // Bi-directional signals
+
+
+ assign pclk_i = bus.pclk;
+ assign presetn_i = bus.presetn;
+
+ // These are signals marked as 'input' by the config file, but the signals will be
+ // driven by this BFM if put into RESPONDER mode (flipping all signal directions around)
+ assign prdata_i = bus.prdata;
+ assign bus.prdata = (initiator_responder == RESPONDER) ? prdata_o : 'bz;
+ assign pready_i = bus.pready;
+ assign bus.pready = (initiator_responder == RESPONDER) ? pready_o : 'bz;
+ assign pslverr_i = bus.pslverr;
+ assign bus.pslverr = (initiator_responder == RESPONDER) ? pslverr_o : 'bz;
+
+
+ // These are signals marked as 'output' by the config file, but the outputs will
+ // not be driven by this BFM unless placed in INITIATOR mode.
+ assign bus.psel = (initiator_responder == INITIATOR) ? psel_o : 'bz;
+ assign psel_i = bus.psel;
+ assign bus.penable = (initiator_responder == INITIATOR) ? penable_o : 'bz;
+ assign penable_i = bus.penable;
+ assign bus.paddr = (initiator_responder == INITIATOR) ? paddr_o : 'bz;
+ assign paddr_i = bus.paddr;
+ assign bus.pwdata = (initiator_responder == INITIATOR) ? pwdata_o : 'bz;
+ assign pwdata_i = bus.pwdata;
+ assign bus.pwrite = (initiator_responder == INITIATOR) ? pwrite_o : 'bz;
+ assign pwrite_i = bus.pwrite;
+ assign bus.pstrb = (initiator_responder == INITIATOR) ? pstrb_o : 'bz;
+ assign pstrb_i = bus.pstrb;
+ assign bus.pprot = (initiator_responder == INITIATOR) ? pprot_o : 'bz;
+ assign pprot_i = bus.pprot;
+
+ // Proxy handle to UVM driver
+ apb_m_pkg::apb_m_driver #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) proxy;
+ // pragma tbx oneway proxy.my_function_name_in_uvm_driver
+
+ // ****************************************************************************
+ // ****************************************************************************
+ // Macros that define structs located in apb_m_macros.svh
+ // ****************************************************************************
+ // Struct for passing configuration data from apb_m_driver to this BFM
+ // ****************************************************************************
+ `apb_m_CONFIGURATION_STRUCT
+ // ****************************************************************************
+ // Structs for INITIATOR and RESPONDER data flow
+ //*******************************************************************
+ // Initiator macro used by apb_m_driver and apb_m_driver_bfm
+ // to communicate initiator driven data to apb_m_driver_bfm.
+ `apb_m_INITIATOR_STRUCT
+ apb_m_initiator_s initiator_struct;
+ // Responder macro used by apb_m_driver and apb_m_driver_bfm
+ // to communicate Responder driven data to apb_m_driver_bfm.
+ `apb_m_RESPONDER_STRUCT
+ apb_m_responder_s responder_struct;
+
+ // ****************************************************************************
+// pragma uvmf custom reset_condition_and_response begin
+ // Always block used to return signals to reset value upon assertion of reset
+ always @( negedge presetn_i )
+ begin
+ // RESPONDER mode output signals
+ prdata_o <= 'b0;
+ pready_o <= 0;
+ pslverr_o <= 0;
+ // INITIATOR mode output signals
+ psel_o <= 'b0;
+ penable_o <= 'b0;
+ paddr_o <= 'b0;
+ pwdata_o <= 'b0;
+ pwrite_o <= 'b0;
+ pstrb_o <= 'b0;
+ pprot_o <= 'b0;
+ // Bi-directional signals
+
+ end
+// pragma uvmf custom reset_condition_and_response end
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the driver BFM. It is called by the driver within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the driver BFM needs to be aware of the new configuration
+ // variables.
+ //
+
+ function void configure(apb_m_configuration_s apb_m_configuration_arg); // pragma tbx xtf
+ initiator_responder = apb_m_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+// pragma uvmf custom initiate_and_get_response begin
+// ****************************************************************************
+// UVMF_CHANGE_ME
+// This task is used by an initator. The task first initiates a transfer then
+// waits for the responder to complete the transfer.
+ task initiate_and_get_response(
+ // This argument passes transaction variables used by an initiator
+ // to perform the initial part of a protocol transfer. The values
+ // come from a sequence item created in a sequence.
+ input apb_m_initiator_s apb_m_initiator_struct,
+ // This argument is used to send data received from the responder
+ // back to the sequence item. The sequence item is returned to the sequence.
+ output apb_m_responder_s apb_m_responder_struct
+ );// pragma tbx xtf
+ //
+ // Members within the apb_m_initiator_struct:
+ // bit psel ;
+ // bit penable ;
+ // bit [APB_ADDR_WIDTH-1:0] paddr ;
+ // bit [APB_DATA_WIDTH-1:0] pwdata ;
+ // bit pwrite ;
+ // bit [STRB_LEN:0] pstrb ;
+ // bit [3:0] pprot ;
+ // bit [APB_DATA_WIDTH-1:0] prdata ;
+ // bit pready ;
+ // bit pslverr ;
+ // Members within the apb_m_responder_struct:
+ // bit psel ;
+ // bit penable ;
+ // bit [APB_ADDR_WIDTH-1:0] paddr ;
+ // bit [APB_DATA_WIDTH-1:0] pwdata ;
+ // bit pwrite ;
+ // bit [STRB_LEN:0] pstrb ;
+ // bit [3:0] pprot ;
+ // bit [APB_DATA_WIDTH-1:0] prdata ;
+ // bit pready ;
+ // bit pslverr ;
+ initiator_struct = apb_m_initiator_struct;
+ //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge pclk_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available initiator input and inout signals listed.
+ // Initiator input signals
+ // apb_m_responder_struct.xyz = prdata_i; // [APB_DATA_WIDTH-1:0]
+ // apb_m_responder_struct.xyz = pready_i; //
+ // apb_m_responder_struct.xyz = pslverr_i; //
+ // Initiator inout signals
+ // How to assign a signal from an initiator struct member named xyz.
+ // All available initiator output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Initiator output signals
+ // psel_o <= apb_m_initiator_struct.xyz; // [15:0]
+ // penable_o <= apb_m_initiator_struct.xyz; //
+ // paddr_o <= apb_m_initiator_struct.xyz; // [APB_ADDR_WIDTH-1:0]
+ // pwdata_o <= apb_m_initiator_struct.xyz; // [APB_DATA_WIDTH-1:0]
+ // pwrite_o <= apb_m_initiator_struct.xyz; //
+ // pstrb_o <= apb_m_initiator_struct.xyz; // [STRB_LEN-1:0]
+ // pprot_o <= apb_m_initiator_struct.xyz; // [2:0]
+ // Initiator inout signals
+ // Initiate a transfer using the data received.
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ // Wait for the responder to complete the transfer then place the responder data into
+ // apb_m_responder_struct.
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ responder_struct = apb_m_responder_struct;
+ endtask
+// pragma uvmf custom initiate_and_get_response end
+
+// pragma uvmf custom respond_and_wait_for_next_transfer begin
+// ****************************************************************************
+// The first_transfer variable is used to prevent completing a transfer in the
+// first call to this task. For the first call to this task, there is not
+// current transfer to complete.
+bit first_transfer=1;
+
+// UVMF_CHANGE_ME
+// This task is used by a responder. The task first completes the current
+// transfer in progress then waits for the initiator to start the next transfer.
+ task respond_and_wait_for_next_transfer(
+ // This argument is used to send data received from the initiator
+ // back to the sequence item. The sequence determines how to respond.
+ output apb_m_initiator_s apb_m_initiator_struct,
+ // This argument passes transaction variables used by a responder
+ // to complete a protocol transfer. The values come from a sequence item.
+ input apb_m_responder_s apb_m_responder_struct
+ );// pragma tbx xtf
+ // Variables within the apb_m_initiator_struct:
+ // bit psel ;
+ // bit penable ;
+ // bit [APB_ADDR_WIDTH-1:0] paddr ;
+ // bit [APB_DATA_WIDTH-1:0] pwdata ;
+ // bit pwrite ;
+ // bit [STRB_LEN:0] pstrb ;
+ // bit [3:0] pprot ;
+ // bit [APB_DATA_WIDTH-1:0] prdata ;
+ // bit pready ;
+ // bit pslverr ;
+ // Variables within the apb_m_responder_struct:
+ // bit psel ;
+ // bit penable ;
+ // bit [APB_ADDR_WIDTH-1:0] paddr ;
+ // bit [APB_DATA_WIDTH-1:0] pwdata ;
+ // bit pwrite ;
+ // bit [STRB_LEN:0] pstrb ;
+ // bit [3:0] pprot ;
+ // bit [APB_DATA_WIDTH-1:0] prdata ;
+ // bit pready ;
+ // bit pslverr ;
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge pclk_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available responder input and inout signals listed.
+ // Responder input signals
+ // apb_m_responder_struct.xyz = psel_i; // [15:0]
+ // apb_m_responder_struct.xyz = penable_i; //
+ // apb_m_responder_struct.xyz = paddr_i; // [APB_ADDR_WIDTH-1:0]
+ // apb_m_responder_struct.xyz = pwdata_i; // [APB_DATA_WIDTH-1:0]
+ // apb_m_responder_struct.xyz = pwrite_i; //
+ // apb_m_responder_struct.xyz = pstrb_i; // [STRB_LEN-1:0]
+ // apb_m_responder_struct.xyz = pprot_i; // [2:0]
+ // Responder inout signals
+ // How to assign a signal, named xyz, from an initiator struct member.
+ // All available responder output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Responder output signals
+ // prdata_o <= apb_m_initiator_struct.xyz; // [APB_DATA_WIDTH-1:0]
+ // pready_o <= apb_m_initiator_struct.xyz; //
+ // pslverr_o <= apb_m_initiator_struct.xyz; //
+ // Responder inout signals
+
+ @(posedge pclk_i);
+ if (!first_transfer) begin
+ // Perform transfer response here.
+ // Reply using data recieved in the apb_m_responder_struct.
+ @(posedge pclk_i);
+ // Reply using data recieved in the transaction handle.
+ @(posedge pclk_i);
+ end
+ // Wait for next transfer then gather info from intiator about the transfer.
+ // Place the data into the apb_m_initiator_struct.
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ first_transfer = 0;
+ endtask
+// pragma uvmf custom respond_and_wait_for_next_transfer end
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_if.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_if.sv
new file mode 100644
index 00000000..6747ba27
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_if.sv
@@ -0,0 +1,113 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface contains the apb_m interface signals.
+// It is instantiated once per apb_m bus. Bus Functional Models,
+// BFM's named apb_m_driver_bfm, are used to drive signals on the bus.
+// BFM's named apb_m_monitor_bfm are used to monitor signals on the
+// bus. This interface signal bundle is passed in the port list of
+// the BFM in order to give the BFM access to the signals in this
+// interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// This template can be used to connect a DUT to these signals
+//
+// .dut_signal_port(apb_m_bus.psel), // Agent output
+// .dut_signal_port(apb_m_bus.penable), // Agent output
+// .dut_signal_port(apb_m_bus.paddr), // Agent output
+// .dut_signal_port(apb_m_bus.pwdata), // Agent output
+// .dut_signal_port(apb_m_bus.pwrite), // Agent output
+// .dut_signal_port(apb_m_bus.pstrb), // Agent output
+// .dut_signal_port(apb_m_bus.pprot), // Agent output
+// .dut_signal_port(apb_m_bus.prdata), // Agent input
+// .dut_signal_port(apb_m_bus.pready), // Agent input
+// .dut_signal_port(apb_m_bus.pslverr), // Agent input
+
+import uvmf_base_pkg_hdl::*;
+import apb_m_pkg_hdl::*;
+
+interface apb_m_if #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ )
+
+ (
+ input logic pclk,
+ input logic presetn,
+ output logic [15:0] psel,
+ output logic penable,
+ output logic [APB_ADDR_WIDTH-1:0] paddr,
+ output logic [APB_DATA_WIDTH-1:0] pwdata,
+ output logic pwrite,
+ output logic [STRB_LEN-1:0] pstrb,
+ output logic [2:0] pprot,
+ input logic [APB_DATA_WIDTH-1:0] prdata,
+ input logic pready,
+ input logic pslverr
+ );
+
+modport monitor_port
+ (
+ input pclk,
+ input presetn,
+ input psel,
+ input penable,
+ input paddr,
+ input pwdata,
+ input pwrite,
+ input pstrb,
+ input pprot,
+ input prdata,
+ input pready,
+ input pslverr
+ );
+
+modport initiator_port
+ (
+ input pclk,
+ input presetn,
+ output psel,
+ output penable,
+ output paddr,
+ output pwdata,
+ output pwrite,
+ output pstrb,
+ output pprot,
+ input prdata,
+ input pready,
+ input pslverr
+ );
+
+modport responder_port
+ (
+ input pclk,
+ input presetn,
+ input psel,
+ input penable,
+ input paddr,
+ input pwdata,
+ input pwrite,
+ input pstrb,
+ input pprot,
+ output prdata,
+ output pready,
+ output pslverr
+ );
+
+
+// pragma uvmf custom interface_item_additional begin
+// pragma uvmf custom interface_item_additional end
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_infact_coverage_strategy.csv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_infact_coverage_strategy.csv
new file mode 100644
index 00000000..1c218e14
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_infact_coverage_strategy.csv
@@ -0,0 +1,6 @@
+Global
+auto_bin_max, 64
+
+Name,Type,Include
+rand_fields,coverpoint,=rand *.**
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_macros.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_macros.svh
new file mode 100644
index 00000000..631c4b12
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_macros.svh
@@ -0,0 +1,202 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains macros used with the apb_m package.
+// These macros include packed struct definitions. These structs are
+// used to pass data between classes, hvl, and BFM's, hdl. Use of
+// structs are more efficient and simpler to modify.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_struct
+// and from_struct methods defined in the macros below that are used in
+// the apb_m_configuration class.
+//
+ `define apb_m_CONFIGURATION_STRUCT \
+typedef struct packed { \
+ uvmf_active_passive_t active_passive; \
+ uvmf_initiator_responder_t initiator_responder; \
+ } apb_m_configuration_s;
+
+ `define apb_m_CONFIGURATION_TO_STRUCT_FUNCTION \
+ virtual function apb_m_configuration_s to_struct();\
+ apb_m_configuration_struct = \
+ {\
+ this.active_passive,\
+ this.initiator_responder\
+ };\
+ return ( apb_m_configuration_struct );\
+ endfunction
+
+ `define apb_m_CONFIGURATION_FROM_STRUCT_FUNCTION \
+ virtual function void from_struct(apb_m_configuration_s apb_m_configuration_struct);\
+ {\
+ this.active_passive,\
+ this.initiator_responder \
+ } = apb_m_configuration_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_monitor_struct
+// and from_monitor_struct methods of the apb_m_transaction class.
+//
+ `define apb_m_MONITOR_STRUCT typedef struct packed { \
+ bit psel ; \
+ bit penable ; \
+ bit [APB_ADDR_WIDTH-1:0] paddr ; \
+ bit [APB_DATA_WIDTH-1:0] pwdata ; \
+ bit pwrite ; \
+ bit [STRB_LEN:0] pstrb ; \
+ bit [3:0] pprot ; \
+ bit [APB_DATA_WIDTH-1:0] prdata ; \
+ bit pready ; \
+ bit pslverr ; \
+ } apb_m_monitor_s;
+
+ `define apb_m_TO_MONITOR_STRUCT_FUNCTION \
+ virtual function apb_m_monitor_s to_monitor_struct();\
+ apb_m_monitor_struct = \
+ { \
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ };\
+ return ( apb_m_monitor_struct);\
+ endfunction\
+
+ `define apb_m_FROM_MONITOR_STRUCT_FUNCTION \
+ virtual function void from_monitor_struct(apb_m_monitor_s apb_m_monitor_struct);\
+ {\
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ } = apb_m_monitor_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_initiator_struct
+// and from_initiator_struct methods of the apb_m_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define apb_m_INITIATOR_STRUCT typedef struct packed { \
+ bit psel ; \
+ bit penable ; \
+ bit [APB_ADDR_WIDTH-1:0] paddr ; \
+ bit [APB_DATA_WIDTH-1:0] pwdata ; \
+ bit pwrite ; \
+ bit [STRB_LEN:0] pstrb ; \
+ bit [3:0] pprot ; \
+ bit [APB_DATA_WIDTH-1:0] prdata ; \
+ bit pready ; \
+ bit pslverr ; \
+ } apb_m_initiator_s;
+
+ `define apb_m_TO_INITIATOR_STRUCT_FUNCTION \
+ virtual function apb_m_initiator_s to_initiator_struct();\
+ apb_m_initiator_struct = \
+ {\
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ };\
+ return ( apb_m_initiator_struct);\
+ endfunction
+
+ `define apb_m_FROM_INITIATOR_STRUCT_FUNCTION \
+ virtual function void from_initiator_struct(apb_m_initiator_s apb_m_initiator_struct);\
+ {\
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ } = apb_m_initiator_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_responder_struct
+// and from_responder_struct methods of the apb_m_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define apb_m_RESPONDER_STRUCT typedef struct packed { \
+ bit psel ; \
+ bit penable ; \
+ bit [APB_ADDR_WIDTH-1:0] paddr ; \
+ bit [APB_DATA_WIDTH-1:0] pwdata ; \
+ bit pwrite ; \
+ bit [STRB_LEN:0] pstrb ; \
+ bit [3:0] pprot ; \
+ bit [APB_DATA_WIDTH-1:0] prdata ; \
+ bit pready ; \
+ bit pslverr ; \
+ } apb_m_responder_s;
+
+ `define apb_m_TO_RESPONDER_STRUCT_FUNCTION \
+ virtual function apb_m_responder_s to_responder_struct();\
+ apb_m_responder_struct = \
+ {\
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ };\
+ return ( apb_m_responder_struct);\
+ endfunction
+
+ `define apb_m_FROM_RESPONDER_STRUCT_FUNCTION \
+ virtual function void from_responder_struct(apb_m_responder_s apb_m_responder_struct);\
+ {\
+ this.psel , \
+ this.penable , \
+ this.paddr , \
+ this.pwdata , \
+ this.pwrite , \
+ this.pstrb , \
+ this.pprot , \
+ this.prdata , \
+ this.pready , \
+ this.pslverr \
+ } = apb_m_responder_struct;\
+ endfunction
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor.svh
new file mode 100644
index 00000000..7f0c5966
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor.svh
@@ -0,0 +1,107 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class receives apb_m transactions observed by the
+// apb_m monitor BFM and broadcasts them through the analysis port
+// on the agent. It accesses the monitor BFM through the monitor
+// task. This UVM component captures transactions
+// for viewing in the waveform viewer if the
+// enable_transaction_viewing flag is set in the configuration.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_monitor #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_monitor_base #(
+ .CONFIG_T(apb_m_configuration #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .BFM_BIND_T(virtual apb_m_monitor_bfm #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .TRANS_T(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )));
+
+ `uvm_component_param_utils( apb_m_monitor #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+// Structure used to pass data from monitor BFM to monitor class in agent.
+// Use to_monitor_struct function to pack transaction variables into structure.
+// Use from_monitor_struct function to unpack transaction variables from structure.
+`apb_m_MONITOR_STRUCT
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the monitor BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// monitor BFM. This allows the monitor BFM to call the notify_transaction
+// function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ***************************************************************************
+ virtual task run_phase(uvm_phase phase);
+ // Start monitor BFM thread and don't call super.run() in order to
+ // override the default monitor proxy 'pull' behavior with the more
+ // emulation-friendly BFM 'push' approach using the notify_transaction
+ // function below
+ bfm.start_monitoring();
+ endtask
+
+// **************************************************************************
+
+// This function is called by the monitor BFM. It receives data observed by the
+// monitor BFM. Data is passed using the apb_m_monitor_struct.
+ virtual function void notify_transaction(input apb_m_monitor_s apb_m_monitor_struct);
+
+
+ trans = new("trans");
+ trans.from_monitor_struct(apb_m_monitor_struct);
+ trans.start_time = time_stamp;
+ trans.end_time = $time;
+ time_stamp = trans.end_time;
+
+ analyze(trans);
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor_bfm.sv
new file mode 100644
index 00000000..c1f68c5a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_monitor_bfm.sv
@@ -0,0 +1,218 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface performs the apb_m signal monitoring.
+// It is accessed by the uvm apb_m monitor through a virtual
+// interface handle in the apb_m configuration. It monitors the
+// signals passed in through the port connection named bus of
+// type apb_m_if.
+//
+// Input signals from the apb_m_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// Interface functions and tasks used by UVM components:
+// monitor(inout TRANS_T txn);
+// This task receives the transaction, txn, from the
+// UVM monitor and then populates variables in txn
+// from values observed on bus activity. This task
+// blocks until an operation on the apb_m bus is complete.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import apb_m_pkg_hdl::*;
+`include "src/apb_m_macros.svh"
+
+
+interface apb_m_monitor_bfm #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ )
+ ( apb_m_if bus );
+ // The pragma below and additional ones in-lined further down are for running this BFM on Veloce
+ // pragma attribute apb_m_monitor_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: APB_ADDR_WIDTH=%x APB_DATA_WIDTH=%x STRB_LEN=%x ", APB_ADDR_WIDTH,APB_DATA_WIDTH,STRB_LEN),
+ UVM_DEBUG)
+end
+`endif
+
+
+ // Structure used to pass transaction data from monitor BFM to monitor class in agent.
+`apb_m_MONITOR_STRUCT
+ apb_m_monitor_s apb_m_monitor_struct;
+
+ // Structure used to pass configuration data from monitor class to monitor BFM.
+ `apb_m_CONFIGURATION_STRUCT
+
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic pclk_i;
+ logic presetn_i;
+ tri [15:0] psel_i;
+ tri penable_i;
+ tri [APB_ADDR_WIDTH-1:0] paddr_i;
+ tri [APB_DATA_WIDTH-1:0] pwdata_i;
+ tri pwrite_i;
+ tri [STRB_LEN-1:0] pstrb_i;
+ tri [2:0] pprot_i;
+ tri [APB_DATA_WIDTH-1:0] prdata_i;
+ tri pready_i;
+ tri pslverr_i;
+ assign pclk_i = bus.pclk;
+ assign presetn_i = bus.presetn;
+ assign psel_i = bus.psel;
+ assign penable_i = bus.penable;
+ assign paddr_i = bus.paddr;
+ assign pwdata_i = bus.pwdata;
+ assign pwrite_i = bus.pwrite;
+ assign pstrb_i = bus.pstrb;
+ assign pprot_i = bus.pprot;
+ assign prdata_i = bus.prdata;
+ assign pready_i = bus.pready;
+ assign pslverr_i = bus.pslverr;
+
+ // Proxy handle to UVM monitor
+ apb_m_pkg::apb_m_monitor #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) proxy;
+ // pragma tbx oneway proxy.notify_transaction
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ task wait_for_reset();// pragma tbx xtf
+ @(posedge pclk_i) ;
+ do_wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ task do_wait_for_reset();
+ // pragma uvmf custom reset_condition begin
+ wait ( presetn_i === 1 ) ;
+ @(posedge pclk_i) ;
+ // pragma uvmf custom reset_condition end
+ endtask
+
+ //******************************************************************
+
+ task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf
+ @(posedge pclk_i);
+
+ repeat (count-1) @(posedge pclk_i);
+ endtask
+
+ //******************************************************************
+ event go;
+ function void start_monitoring();// pragma tbx xtf
+ -> go;
+ endfunction
+
+ // ****************************************************************************
+ initial begin
+ @go;
+ forever begin
+ @(posedge pclk_i);
+ do_monitor( apb_m_monitor_struct );
+
+
+ proxy.notify_transaction( apb_m_monitor_struct );
+
+ end
+ end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the monitor BFM. It is called by the monitor within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the monitor BFM needs to be aware of the new configuration
+ // variables.
+ //
+ function void configure(apb_m_configuration_s apb_m_configuration_arg); // pragma tbx xtf
+ initiator_responder = apb_m_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+
+ // ****************************************************************************
+
+ task do_monitor(output apb_m_monitor_s apb_m_monitor_struct);
+ //
+ // Available struct members:
+ // // apb_m_monitor_struct.psel
+ // // apb_m_monitor_struct.penable
+ // // apb_m_monitor_struct.paddr
+ // // apb_m_monitor_struct.pwdata
+ // // apb_m_monitor_struct.pwrite
+ // // apb_m_monitor_struct.pstrb
+ // // apb_m_monitor_struct.pprot
+ // // apb_m_monitor_struct.prdata
+ // // apb_m_monitor_struct.pready
+ // // apb_m_monitor_struct.pslverr
+ // //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal === 1'b1) @(posedge pclk_i);
+ //
+ // How to assign a struct member, named xyz, from a signal.
+ // All available input signals listed.
+ // apb_m_monitor_struct.xyz = psel_i; // [15:0]
+ // apb_m_monitor_struct.xyz = penable_i; //
+ // apb_m_monitor_struct.xyz = paddr_i; // [APB_ADDR_WIDTH-1:0]
+ // apb_m_monitor_struct.xyz = pwdata_i; // [APB_DATA_WIDTH-1:0]
+ // apb_m_monitor_struct.xyz = pwrite_i; //
+ // apb_m_monitor_struct.xyz = pstrb_i; // [STRB_LEN-1:0]
+ // apb_m_monitor_struct.xyz = pprot_i; // [2:0]
+ // apb_m_monitor_struct.xyz = prdata_i; // [APB_DATA_WIDTH-1:0]
+ // apb_m_monitor_struct.xyz = pready_i; //
+ // apb_m_monitor_struct.xyz = pslverr_i; //
+ // pragma uvmf custom do_monitor begin
+ // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code
+ // below are examples of how to capture signal values and assign them to
+ // structure members. All available input signals are listed. The 'while'
+ // code example shows how to wait for a synchronous flow control signal. This
+ // task should return when a complete transfer has been observed. Once this task is
+ // exited with captured values, it is then called again to wait for and observe
+ // the next transfer. One clock cycle is consumed between calls to do_monitor.
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ @(posedge pclk_i);
+ // pragma uvmf custom do_monitor end
+ endtask
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_random_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_random_sequence.svh
new file mode 100644
index 00000000..6ad36e08
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_random_sequence.svh
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This sequences randomizes the apb_m transaction and sends it
+// to the UVM driver.
+//
+// This sequence constructs and randomizes a apb_m_transaction.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_random_sequence #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ )
+ extends apb_m_sequence_base #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ );
+
+ `uvm_object_param_utils( apb_m_random_sequence #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*****************************************************************
+ function new(string name = "");
+ super.new(name);
+ endfunction: new
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is automatically executed when this sequence is started using the
+ // start(sequencerHandle) task.
+ //
+ task body();
+
+ // Construct the transaction
+ req=apb_m_transaction#(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )::type_id::create("req");
+ start_item(req);
+ // Randomize the transaction
+ if(!req.randomize()) `uvm_fatal("SEQ", "apb_m_random_sequence::body()-apb_m_transaction randomization failed")
+ // Send the transaction to the apb_m_driver_bfm via the sequencer and apb_m_driver.
+ finish_item(req);
+ `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM)
+
+ endtask
+
+endclass: apb_m_random_sequence
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_responder_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_responder_sequence.svh
new file mode 100644
index 00000000..b493b9c2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_responder_sequence.svh
@@ -0,0 +1,65 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class can be used to provide stimulus when an interface
+// has been configured to run in a responder mode. It
+// will never finish by default, always going back to the driver
+// and driver BFM for the next transaction with which to respond.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_responder_sequence #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ )
+ extends apb_m_sequence_base #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ );
+
+ `uvm_object_param_utils( apb_m_responder_sequence #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ function new(string name = "apb_m_responder_sequence");
+ super.new(name);
+ endfunction
+
+ task body();
+ req=apb_m_transaction#(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )::type_id::create("req");
+ forever begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body begin
+ // UVMF_CHANGE_ME : Do something here with the resulting req item. The
+ // finish_item() call above will block until the req transaction is ready
+ // to be handled by the responder sequence.
+ // If this was an item that required a response, the expectation is
+ // that the response should be populated within this transaction now.
+ `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH)
+ // pragma uvmf custom body end
+ end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_sequence_base.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_sequence_base.svh
new file mode 100644
index 00000000..df1d671e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_sequence_base.svh
@@ -0,0 +1,120 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the class used as the base class for all sequences
+// for this interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_sequence_base #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_sequence_base #(
+ .REQ(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )),
+ .RSP(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )));
+
+ `uvm_object_param_utils( apb_m_sequence_base #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ // variables
+ typedef apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) apb_m_transaction_req_t;
+ apb_m_transaction_req_t req;
+ typedef apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) apb_m_transaction_rsp_t;
+ apb_m_transaction_rsp_t rsp;
+
+ // Event for identifying when a response was received from the sequencer
+ event new_rsp;
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ // TASK : get_responses()
+ // This task recursively gets sequence item responses from the sequencer.
+ //
+ virtual task get_responses();
+ fork
+ begin
+ // Block until new rsp available
+ get_response(rsp);
+ // New rsp received. Indicate to sequence using event.
+ ->new_rsp;
+ // Display the received response transaction
+ `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM)
+ end
+ join_none
+ endtask
+
+ // ****************************************************************************
+ // TASK : pre_body()
+ // This task is called automatically when start is called with call_pre_post set to 1 (default).
+ // By calling get_responses() within pre_body() any derived sequences are automatically
+ // processing response transactions. Only un-comment this call to get_responses() if you
+ // have configured the interface driver to utilize the response transaction path by setting
+ // the configuration variable "return_transaction_response" to 1. Otherwise it is possible
+ // to impact runtime performance and memory utilization.
+ //
+ virtual task pre_body();
+ // pragma uvmf custom pre_body begin
+// get_responses();
+ // pragma uvmf custom pre_body end
+ endtask
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is called automatically when start is called. This sequence sends
+ // a req sequence item to the sequencer identified as an argument in the call
+ // to start.
+ //
+ virtual task body();
+ // pragma uvmf custom body begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body end
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name ="");
+ super.new( name );
+ // pragma uvmf custom new begin
+ req = apb_m_transaction_req_t::type_id::create("req");
+ rsp = apb_m_transaction_rsp_t::type_id::create("rsp");
+ // pragma uvmf custom new end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction.svh
new file mode 100644
index 00000000..f254cabe
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction.svh
@@ -0,0 +1,233 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class defines the variables required for an apb_m
+// transaction. Class variables to be displayed in waveform transaction
+// viewing are added to the transaction viewing stream in the add_to_wave
+// function.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_transaction #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvmf_transaction_base;
+
+ `uvm_object_param_utils( apb_m_transaction #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ rand bit psel ;
+ rand bit penable ;
+ rand bit [APB_ADDR_WIDTH-1:0] paddr ;
+ rand bit [APB_DATA_WIDTH-1:0] pwdata ;
+ rand bit pwrite ;
+ rand bit [STRB_LEN:0] pstrb ;
+ rand bit [3:0] pprot ;
+ bit [APB_DATA_WIDTH-1:0] prdata ;
+ bit pready ;
+ bit pslverr ;
+
+ //Constraints for the transaction variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*******************************************************************
+ //*******************************************************************
+ // Macros that define structs and associated functions are
+ // located in apb_m_macros.svh
+
+ //*******************************************************************
+ // Monitor macro used by apb_m_monitor and apb_m_monitor_bfm
+ // This struct is defined in apb_m_macros.svh
+ `apb_m_MONITOR_STRUCT
+ apb_m_monitor_s apb_m_monitor_struct;
+ //*******************************************************************
+ // FUNCTION: to_monitor_struct()
+ // This function packs transaction variables into a apb_m_monitor_s
+ // structure. The function returns the handle to the apb_m_monitor_struct.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_TO_MONITOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_monitor_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_FROM_MONITOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Initiator macro used by apb_m_driver and apb_m_driver_bfm
+ // to communicate initiator driven data to apb_m_driver_bfm.
+ // This struct is defined in apb_m_macros.svh
+ `apb_m_INITIATOR_STRUCT
+ apb_m_initiator_s apb_m_initiator_struct;
+ //*******************************************************************
+ // FUNCTION: to_initiator_struct()
+ // This function packs transaction variables into a apb_m_initiator_s
+ // structure. The function returns the handle to the apb_m_initiator_struct.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_TO_INITIATOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_initiator_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_FROM_INITIATOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Responder macro used by apb_m_driver and apb_m_driver_bfm
+ // to communicate Responder driven data to apb_m_driver_bfm.
+ // This struct is defined in apb_m_macros.svh
+ `apb_m_RESPONDER_STRUCT
+ apb_m_responder_s apb_m_responder_struct;
+ //*******************************************************************
+ // FUNCTION: to_responder_struct()
+ // This function packs transaction variables into a apb_m_responder_s
+ // structure. The function returns the handle to the apb_m_responder_struct.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_TO_RESPONDER_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_responder_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in apb_m_macros.svh
+ `apb_m_FROM_RESPONDER_STRUCT_FUNCTION
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: convert2string()
+ // This function converts all variables in this class to a single string for
+ // logfile reporting.
+ //
+ virtual function string convert2string();
+ // pragma uvmf custom convert2string begin
+ // UVMF_CHANGE_ME : Customize format if desired.
+ return $sformatf("psel:0x%x penable:0x%x paddr:0x%x pwdata:0x%x pwrite:0x%x pstrb:0x%x pprot:0x%x prdata:0x%x pready:0x%x pslverr:0x%x ",psel,penable,paddr,pwdata,pwrite,pstrb,pprot,prdata,pready,pslverr);
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_print()
+ // This function is automatically called when the .print() function
+ // is called on this class.
+ //
+ virtual function void do_print(uvm_printer printer);
+ // pragma uvmf custom do_print begin
+ // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2.
+ // Update based on your own printing preference according to your preferred UVM version
+ $display(convert2string());
+ // pragma uvmf custom do_print end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_compare()
+ // This function is automatically called when the .compare() function
+ // is called on this class.
+ //
+ virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer);
+ apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) RHS;
+ if (!$cast(RHS,rhs)) return 0;
+ // pragma uvmf custom do_compare begin
+ // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare
+ return (super.do_compare(rhs,comparer)
+ &&(this.penable == RHS.penable)
+ &&(this.paddr == RHS.paddr)
+ &&(this.pwdata == RHS.pwdata)
+ &&(this.pwrite == RHS.pwrite)
+ &&(this.pstrb == RHS.pstrb)
+ &&(this.pprot == RHS.pprot)
+ &&(this.prdata == RHS.prdata)
+ &&(this.pready == RHS.pready)
+ &&(this.pslverr == RHS.pslverr)
+ );
+ // pragma uvmf custom do_compare end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_copy()
+ // This function is automatically called when the .copy() function
+ // is called on this class.
+ //
+ virtual function void do_copy (uvm_object rhs);
+ apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ ) RHS;
+ assert($cast(RHS,rhs));
+ // pragma uvmf custom do_copy begin
+ super.do_copy(rhs);
+ this.psel = RHS.psel;
+ this.penable = RHS.penable;
+ this.paddr = RHS.paddr;
+ this.pwdata = RHS.pwdata;
+ this.pwrite = RHS.pwrite;
+ this.pstrb = RHS.pstrb;
+ this.pprot = RHS.pprot;
+ this.prdata = RHS.prdata;
+ this.pready = RHS.pready;
+ this.pslverr = RHS.pslverr;
+ // pragma uvmf custom do_copy end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: add_to_wave()
+ // This function is used to display variables in this class in the waveform
+ // viewer. The start_time and end_time variables must be set before this
+ // function is called. If the start_time and end_time variables are not set
+ // the transaction will be hidden at 0ns on the waveform display.
+ //
+ virtual function void add_to_wave(int transaction_viewing_stream_h);
+ `ifdef QUESTA
+ if (transaction_view_h == 0) begin
+ transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"apb_m_transaction",start_time);
+ end
+ super.add_to_wave(transaction_view_h);
+ // pragma uvmf custom add_to_wave begin
+ // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below
+ // case()
+ // 1 : $add_color(transaction_view_h,"red");
+ // default : $add_color(transaction_view_h,"grey");
+ // endcase
+ // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer
+ $add_attribute(transaction_view_h,psel,"psel");
+ $add_attribute(transaction_view_h,penable,"penable");
+ $add_attribute(transaction_view_h,paddr,"paddr");
+ $add_attribute(transaction_view_h,pwdata,"pwdata");
+ $add_attribute(transaction_view_h,pwrite,"pwrite");
+ $add_attribute(transaction_view_h,pstrb,"pstrb");
+ $add_attribute(transaction_view_h,pprot,"pprot");
+ $add_attribute(transaction_view_h,prdata,"prdata");
+ $add_attribute(transaction_view_h,pready,"pready");
+ $add_attribute(transaction_view_h,pslverr,"pslverr");
+ // pragma uvmf custom add_to_wave end
+ $end_transaction(transaction_view_h,end_time);
+ $free_transaction(transaction_view_h);
+ `endif // QUESTA
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction_coverage.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction_coverage.svh
new file mode 100644
index 00000000..0d1b9c58
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_transaction_coverage.svh
@@ -0,0 +1,91 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class records apb_m transaction information using
+// a covergroup named apb_m_transaction_cg. An instance of this
+// coverage component is instantiated in the uvmf_parameterized_agent
+// if the has_coverage flag is set.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class apb_m_transaction_coverage #(
+ int APB_ADDR_WIDTH = 32,
+ int APB_DATA_WIDTH = 32,
+ int STRB_LEN = APB_ADDR_WIDTH/8
+ ) extends uvm_subscriber #(.T(apb_m_transaction #(
+ .APB_ADDR_WIDTH(APB_ADDR_WIDTH),
+ .APB_DATA_WIDTH(APB_DATA_WIDTH),
+ .STRB_LEN(STRB_LEN)
+ )));
+
+ `uvm_component_param_utils( apb_m_transaction_coverage #(
+ APB_ADDR_WIDTH,
+ APB_DATA_WIDTH,
+ STRB_LEN
+ ))
+
+ T coverage_trans;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ covergroup apb_m_transaction_cg;
+ // pragma uvmf custom covergroup begin
+ // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs.
+ option.auto_bin_max=1024;
+ option.per_instance=1;
+ psel: coverpoint coverage_trans.psel;
+ penable: coverpoint coverage_trans.penable;
+ paddr: coverpoint coverage_trans.paddr;
+ pwdata: coverpoint coverage_trans.pwdata;
+ pwrite: coverpoint coverage_trans.pwrite;
+ pstrb: coverpoint coverage_trans.pstrb;
+ pprot: coverpoint coverage_trans.pprot;
+ prdata: coverpoint coverage_trans.prdata;
+ pready: coverpoint coverage_trans.pready;
+ pslverr: coverpoint coverage_trans.pslverr;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new(string name="", uvm_component parent=null);
+ super.new(name,parent);
+ apb_m_transaction_cg=new;
+ `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.")
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION : build_phase()
+ // This function is the standard UVM build_phase.
+ //
+ function void build_phase(uvm_phase phase);
+ apb_m_transaction_cg.set_inst_name($sformatf("apb_m_transaction_cg_%s",get_full_name()));
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: write (T t)
+ // This function is automatically executed when a transaction arrives on the
+ // analysis_export. It copies values from the variables in the transaction
+ // to local variables used to collect functional coverage.
+ //
+ virtual function void write (T t);
+ `uvm_info("COV","Received transaction",UVM_HIGH);
+ coverage_trans = t;
+ apb_m_transaction_cg.sample();
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs.svh
new file mode 100644
index 00000000..43d85640
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs.svh
@@ -0,0 +1,20 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the host server when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs_hdl.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs_hdl.svh
new file mode 100644
index 00000000..74738c8c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/src/apb_m_typedefs_hdl.svh
@@ -0,0 +1,21 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the emulator when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/yaml/apb_m_interface.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/yaml/apb_m_interface.yaml
new file mode 100644
index 00000000..f49301e8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/apb_m_pkg/yaml/apb_m_interface.yaml
@@ -0,0 +1,128 @@
+uvmf:
+ interfaces:
+ apb_m:
+ clock: pclk
+ config_constraints: []
+ config_vars: []
+ existing_library_component: 'True'
+ gen_inbound_streaming_driver: 'False'
+ hdl_pkg_parameters: []
+ hdl_typedefs: []
+ hvl_pkg_parameters: []
+ hvl_typedefs: []
+ parameters:
+ - name: APB_ADDR_WIDTH
+ type: int
+ value: '32'
+ - name: APB_DATA_WIDTH
+ type: int
+ value: '32'
+ - name: STRB_LEN
+ type: int
+ value: APB_ADDR_WIDTH/8
+ ports:
+ - dir: output
+ name: psel
+ reset_value: '''b0'
+ width: '16'
+ - dir: output
+ name: penable
+ reset_value: '''b0'
+ width: '1'
+ - dir: output
+ name: paddr
+ reset_value: '''b0'
+ width: APB_ADDR_WIDTH
+ - dir: output
+ name: pwdata
+ reset_value: '''b0'
+ width: APB_DATA_WIDTH
+ - dir: output
+ name: pwrite
+ reset_value: '''b0'
+ width: '1'
+ - dir: output
+ name: pstrb
+ reset_value: '''b0'
+ width: STRB_LEN
+ - dir: output
+ name: pprot
+ reset_value: '''b0'
+ width: '3'
+ - dir: input
+ name: prdata
+ reset_value: '''b0'
+ width: APB_DATA_WIDTH
+ - dir: input
+ name: pready
+ reset_value: '0'
+ width: '1'
+ - dir: input
+ name: pslverr
+ reset_value: '0'
+ width: '1'
+ reset: presetn
+ reset_assertion_level: 'False'
+ transaction_constraints: []
+ transaction_vars:
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: psel
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: penable
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: paddr
+ type: bit [APB_ADDR_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: pwdata
+ type: bit [APB_DATA_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: pwrite
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: pstrb
+ type: bit [STRB_LEN:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: pprot
+ type: bit [3:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'False'
+ name: prdata
+ type: bit [APB_DATA_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'False'
+ name: pready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'False'
+ name: pslverr
+ type: bit
+ unpacked_dimension: ''
+ use_dpi_link: 'False'
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.project
new file mode 100644
index 00000000..7afbc306
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.project
@@ -0,0 +1,30 @@
+
+
+ axi_m_pkg
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.svproject
new file mode 100644
index 00000000..5c637646
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/Makefile
new file mode 100644
index 00000000..49510a8d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/Makefile
@@ -0,0 +1,66 @@
+# axi_m interface packages source
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+axi_m_PKG = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f
+
+axi_m_PKG_HDL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f
+
+axi_m_PKG_XRTL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_xrtl.f
+
+COMP_axi_m_PKG_TGT_0 = q_comp_axi_m_pkg
+COMP_axi_m_PKG_TGT_1 = v_comp_axi_m_pkg
+COMP_axi_m_PKG_TGT = $(COMP_axi_m_PKG_TGT_$(USE_VELOCE))
+
+comp_axi_m_pkg: $(COMP_axi_m_PKG_TGT)
+
+q_comp_axi_m_pkg:
+ $(HDL_COMP_CMD) $(axi_m_PKG_HDL)
+ $(HVL_COMP_CMD) $(axi_m_PKG)
+ $(HDL_COMP_CMD) $(axi_m_PKG_XRTL)
+
+v_comp_axi_m_pkg:
+ $(HVL_COMP_CMD) $(axi_m_PKG_HDL)
+ $(HVL_COMP_CMD) $(axi_m_PKG)
+ $(VELANALYZE_CMD) $(axi_m_PKG_HDL)
+ $(VELANALYZE_HVL_CMD) $(axi_m_PKG)
+ $(HDL_COMP_CMD) $(axi_m_PKG_XRTL)
+
+ifeq ($(MTI_VCO_MODE),64)
+ GCC_COMP_ARCH = -m64
+else
+ GCC_COMP_ARCH = -m32
+endif
+
+export axi_m_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/dpi
+
+C_FILE_COMPILE_LIST_axi_m_pkg = \
+
+O_FILE_COMPILE_LIST_axi_m_pkg = $(notdir $(C_FILE_COMPILE_LIST_axi_m_pkg:.c=.o))
+
+GCC_COMP_ARGS_axi_m_pkg += -I$(axi_m_IF_DPI_SRC) \
+ -fPIC
+
+GCC_COMP_ARGS_axi_m_pkg += $(axi_m_IF_GCC_COMP_ARGUMENTS)
+
+GCC_LINK_ARGS_axi_m_pkg += \
+ \
+ -o .so
+
+comp_axi_m_pkg_c_files:
+ @echo "--------------------------------"
+ @echo "Compiling Interface C source"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_axi_m_pkg) $(C_FILE_COMPILE_LIST_axi_m_pkg)
+ @echo "--------------------------------"
+ @echo "Linking Interface C objects into a shared object"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_axi_m_pkg) $(O_FILE_COMPILE_LIST_axi_m_pkg)
+ @echo "--------------------------------"
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m.compile
new file mode 100644
index 00000000..c1de0879
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m.compile
@@ -0,0 +1,3 @@
+needs:
+ - axi_m_hvl.compile
+ - axi_m_hdl.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_bfm.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_bfm.vinfo
new file mode 100644
index 00000000..69c6a9be
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_bfm.vinfo
@@ -0,0 +1,6 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+@use axi_m_pkg_hdl.vinfo
++incdir+@vinfodir
+src/axi_m_if.sv
+src/axi_m_driver_bfm.sv
+src/axi_m_monitor_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_common.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_common.compile
new file mode 100644
index 00000000..325f4c25
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_common.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+incdir:
+ - .
+ - ${uvm_path}/src
+src:
+ - axi_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f
new file mode 100644
index 00000000..af073f29
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f
new file mode 100644
index 00000000..0c583aa9
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/axi_m_pkg.sv
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_xrtl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_xrtl.f
new file mode 100644
index 00000000..0348c6ae
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_filelist_xrtl.f
@@ -0,0 +1,3 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/src/axi_m_if.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/src/axi_m_monitor_bfm.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/axi_m_pkg/src/axi_m_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hdl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hdl.compile
new file mode 100644
index 00000000..59f061bc
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hdl.compile
@@ -0,0 +1,9 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+ - ./axi_m_common.compile
+incdir:
+ - .
+src:
+ - src/axi_m_if.sv
+ - src/axi_m_monitor_bfm.sv
+ - src/axi_m_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hvl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hvl.compile
new file mode 100644
index 00000000..b72727cc
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_hvl.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ./axi_m_common.compile
+incdir:
+ - .
+src:
+ - axi_m_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.sv
new file mode 100644
index 00000000..4e2e996f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.sv
@@ -0,0 +1,77 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that will run on the host simulator.
+//
+// CONTAINS:
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package axi_m_pkg;
+
+ import uvm_pkg::*;
+ import uvmf_base_pkg_hdl::*;
+ import uvmf_base_pkg::*;
+ import axi_m_pkg_hdl::*;
+
+ `include "uvm_macros.svh"
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+ `include "src/axi_m_macros.svh"
+
+ export axi_m_pkg_hdl::*;
+
+
+
+ // Parameters defined as HVL parameters
+
+ `include "src/axi_m_typedefs.svh"
+ `include "src/axi_m_transaction.svh"
+
+ `include "src/axi_m_configuration.svh"
+ `include "src/axi_m_driver.svh"
+ `include "src/axi_m_monitor.svh"
+
+ `include "src/axi_m_transaction_coverage.svh"
+ `include "src/axi_m_sequence_base.svh"
+ `include "src/axi_m_random_sequence.svh"
+
+ `include "src/axi_m_responder_sequence.svh"
+ `include "src/axi_m2reg_adapter.svh"
+
+ `include "src/axi_m_agent.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new interface sequences to the src directory
+ // be sure to add the sequence file here so that it will be
+ // compiled as part of the interface package. Be sure to place
+ // the new sequence after any base sequences of the new sequence.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.vinfo
new file mode 100644
index 00000000..dae51d0c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg.vinfo
@@ -0,0 +1,4 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use axi_m_pkg_hdl.vinfo
++incdir+@vinfodir
+axi_m_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.sv
new file mode 100644
index 00000000..37e46870
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.sv
@@ -0,0 +1,38 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that needs to be compiled and synthesized
+// for running on Veloce.
+//
+// CONTAINS:
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package axi_m_pkg_hdl;
+
+ import uvmf_base_pkg_hdl::*;
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ // Parameters defined as HDL parameters
+
+ `include "src/axi_m_typedefs_hdl.svh"
+ `include "src/axi_m_macros.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.vinfo
new file mode 100644
index 00000000..4bcea0fb
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_hdl.vinfo
@@ -0,0 +1,2 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+axi_m_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_sve.F
new file mode 100644
index 00000000..fd118edd
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/axi_m_pkg_sve.F
@@ -0,0 +1,10 @@
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
++incdir+.
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/compile.do
new file mode 100644
index 00000000..ea448b12
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/compile.do
@@ -0,0 +1,14 @@
+# Tcl do file for compile of axi_m interface
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_hdl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_hvl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/axi_m_pkg/axi_m_filelist_xrtl.f
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m2reg_adapter.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m2reg_adapter.svh
new file mode 100644
index 00000000..5e9efca8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m2reg_adapter.svh
@@ -0,0 +1,123 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the UVM register adapter for the axi_m interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m2reg_adapter #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvm_reg_adapter;
+
+ `uvm_object_param_utils( axi_m2reg_adapter #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //--------------------------------------------------------------------
+ // new
+ //--------------------------------------------------------------------
+ function new (string name = "axi_m2reg_adapter" );
+ super.new(name);
+ // pragma uvmf custom new begin
+ // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response.
+
+ // Does the protocol the Agent is modeling support byte enables?
+ // 0 = NO
+ // 1 = YES
+ supports_byte_enable = 0;
+
+ // Does the Agent's Driver provide separate response sequence items?
+ // i.e. Does the driver call seq_item_port.put()
+ // and do the sequences call get_response()?
+ // 0 = NO
+ // 1 = YES
+ provides_responses = 0;
+ // pragma uvmf custom new end
+
+ endfunction: new
+
+ //--------------------------------------------------------------------
+ // reg2bus
+ //--------------------------------------------------------------------
+ virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
+
+ axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) trans_h = axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )::type_id::create("trans_h");
+
+ // pragma uvmf custom reg2bus begin
+ // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields.
+
+ //Adapt the following for your sequence item type
+ // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE;
+ //Copy over address
+ // trans_h.addr = rw.addr;
+ //Copy over write data
+ // trans_h.data = rw.data;
+
+ // pragma uvmf custom reg2bus end
+
+ // Return the adapted transaction
+ return trans_h;
+
+ endfunction: reg2bus
+
+ //--------------------------------------------------------------------
+ // bus2reg
+ //--------------------------------------------------------------------
+ virtual function void bus2reg(uvm_sequence_item bus_item,
+ ref uvm_reg_bus_op rw);
+ axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) trans_h;
+ if (!$cast(trans_h, bus_item)) begin
+ `uvm_fatal("ADAPT","Provided bus_item is not of the correct type")
+ return;
+ end
+ // pragma uvmf custom bus2reg begin
+ // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields.
+ //Adapt the following for your sequence item type
+ //Copy over instruction type
+ // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ;
+ //Copy over address
+ // rw.addr = trans_h.addr;
+ //Copy over read data
+ // rw.data = trans_h.data;
+ //Check for errors on the bus and return UVM_NOT_OK if there is an error
+ // rw.status = UVM_IS_OK;
+ // pragma uvmf custom bus2reg end
+
+ endfunction: bus2reg
+
+endclass : axi_m2reg_adapter
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_agent.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_agent.svh
new file mode 100644
index 00000000..6da6dbed
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_agent.svh
@@ -0,0 +1,88 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: Protocol specific agent class definition
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_agent #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_parameterized_agent #(
+ .CONFIG_T(axi_m_configuration #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .DRIVER_T(axi_m_driver #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .MONITOR_T(axi_m_monitor #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .COVERAGE_T(axi_m_transaction_coverage #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .TRANS_T(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ))
+ );
+
+ `uvm_component_param_utils( axi_m_agent #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// FUNCTION : new()
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+ // FUNCTION: build_phase
+ virtual function void build_phase(uvm_phase phase);
+// pragma uvmf custom build_phase_pre_super begin
+// pragma uvmf custom build_phase_pre_super end
+ super.build_phase(phase);
+ if (configuration.active_passive == ACTIVE) begin
+ // Place sequencer handle into configuration object
+ // so that it may be retrieved from configuration
+ // rather than using uvm_config_db
+ configuration.sequencer = this.sequencer;
+ end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_configuration.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_configuration.svh
new file mode 100644
index 00000000..2cecbe25
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_configuration.svh
@@ -0,0 +1,219 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class contains all variables and functions used
+// to configure the axi_m agent and its bfm's. It gets the
+// bfm's from the uvm_config_db for use by the agent.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_configuration #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_parameterized_agent_configuration_base #(
+ .DRIVER_BFM_BIND_T(virtual axi_m_driver_bfm #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .MONITOR_BFM_BIND_T( virtual axi_m_monitor_bfm #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )));
+
+ `uvm_object_param_utils( axi_m_configuration #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+
+ // Sequencer handle populated by agent
+ uvm_sequencer #(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) ) sequencer;
+
+ //Constraints for the configuration variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ covergroup axi_m_configuration_cg;
+ // pragma uvmf custom covergroup begin
+ option.auto_bin_max=1024;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ //*******************************************************************
+ //*******************************************************************
+ // Structure used to pass configuration variables to monitor and driver BFM's.
+ // Use to_struct function to pack variables into structure.
+ // Use from_struct function to unpack variables from structure.
+ // This structure is defined in axi_m_macros.svh
+ `axi_m_CONFIGURATION_STRUCT
+ axi_m_configuration_s axi_m_configuration_struct;
+ //*******************************************************************
+ // FUNCTION: to_struct()
+ // This function packs variables into a axi_m_configuration_s
+ // structure. The function returns the handle to the axi_m_configuration_struct.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_CONFIGURATION_TO_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_struct()
+ // This function unpacks the struct provided as an argument into
+ // variables of this class.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_CONFIGURATION_FROM_STRUCT_FUNCTION
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ // Construct the covergroup for this configuration class
+ axi_m_configuration_cg = new;
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: post_randomize()
+ // This function is automatically called after the randomize() function
+ // is executed.
+ //
+ function void post_randomize();
+ super.post_randomize();
+ axi_m_configuration_cg.sample();
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: initialize
+ // This function causes the configuration to retrieve
+ // its virtual interface handle from the uvm_config_db.
+ // This function also makes itself available to its
+ // agent through the uvm_config_db.
+ //
+ // ARGUMENTS:
+ // uvmf_active_passive_t activity:
+ // This argument identifies the simulation level
+ // as either BLOCK, CHIP, SIMULATION, etc.
+ //
+ // AGENT_PATH:
+ // This argument identifies the path to this
+ // configurations agent. This configuration
+ // makes itself available to the agent specified
+ // by agent_path by placing itself into the
+ // uvm_config_db.
+ //
+ // INTERFACE_NAME:
+ // This argument identifies the string name of
+ // this configurations BFM's. This string
+ // name is used to retrieve the driver and
+ // monitor BFM from the uvm_config_db.
+ //
+ virtual function void initialize(uvmf_active_passive_t activity,
+ string agent_path,
+ string interface_name);
+
+ super.initialize( activity, agent_path, interface_name);
+ // The covergroup is given the same name as the interface
+ axi_m_configuration_cg.set_inst_name(interface_name);
+
+ // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve.
+ uvm_config_db #( axi_m_configuration #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )
+ )::set( null ,agent_path,UVMF_AGENT_CONFIG, this );
+
+ // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access
+ // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for
+ // accessingthe BFM when using Veloce
+ uvm_config_db #( axi_m_configuration #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )
+ )::set( null ,UVMF_CONFIGURATIONS, interface_name, this );
+
+ axi_m_configuration_cg.set_inst_name($sformatf("axi_m_configuration_cg_%s",get_full_name()));
+
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+ `uvm_info("CFG",
+ $psprintf("The agent at '%s' is using interface named %s has the following parameters: AW_WIDTH=%x LEN=%x DATA_WIDTH=%x X=%x ", agent_path, interface_name, AW_WIDTH ,LEN ,DATA_WIDTH ,X ),
+ UVM_DEBUG)
+
+ // pragma uvmf custom initialize begin
+ // This controls whether or not the agent returns a transaction handle in the driver when calling
+ // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means
+ // the sequence on the other end must use the get_response() part of the driver/sequence API. If
+ // this doesn't occur, there will eventually be response_queue overflow errors during the test.
+ return_transaction_response = 1'b0;
+
+ // pragma uvmf custom initialize end
+
+ endfunction
+
+ // ****************************************************************************
+ // TASK: wait_for_reset
+ // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed
+ // by a task in the monitor bfm.
+ virtual task wait_for_reset();
+ monitor_bfm.wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ // TASK: wait_for_num_clocks
+ // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks
+ // operation is performed by a task in the monitor bfm.
+ virtual task wait_for_num_clocks(int clocks);
+ monitor_bfm.wait_for_num_clocks(clocks);
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : convert2string()
+ // This function is used to convert variables in this class into a string for log messaging.
+ //
+ virtual function string convert2string ();
+ // pragma uvmf custom convert2string begin
+ return $sformatf("");
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: get_sequencer
+ function uvm_sequencer #(axi_m_transaction#(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )) get_sequencer();
+ return sequencer;
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver.svh
new file mode 100644
index 00000000..aca314e5
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver.svh
@@ -0,0 +1,121 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class passes transactions between the sequencer
+// and the BFM driver interface. It accesses the driver BFM
+// through the bfm handle. This driver
+// passes transactions to the driver BFM through the access
+// task.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_driver #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_driver_base #(
+ .CONFIG_T(axi_m_configuration #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) ),
+ .BFM_BIND_T(virtual axi_m_driver_bfm #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) ),
+ .REQ(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) ),
+ .RSP(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) ));
+
+ `uvm_component_param_utils( axi_m_driver #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+//*******************************************************************
+// Macros that define structs located in axi_m_macros.svh
+//*******************************************************************
+// Initiator macro used by axi_m_driver and axi_m_driver_bfm
+// to communicate initiator driven data to axi_m_driver_bfm.
+`axi_m_INITIATOR_STRUCT
+ axi_m_initiator_s axi_m_initiator_struct;
+//*******************************************************************
+// Responder macro used by axi_m_driver and axi_m_driver_bfm
+// to communicate Responder driven data to axi_m_driver_bfm.
+`axi_m_RESPONDER_STRUCT
+ axi_m_responder_s axi_m_responder_struct;
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent=null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the driver BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// driver BFM. This allows the driver BFM to call tasks and function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ****************************************************************************
+// This task is called by the run_phase in uvmf_driver_base.
+ virtual task access( inout REQ txn );
+// pragma uvmf custom access begin
+ if (configuration.initiator_responder==RESPONDER) begin
+ // Complete current transfer and wait for next transfer
+ bfm.respond_and_wait_for_next_transfer(
+ axi_m_initiator_struct,
+ txn.to_responder_struct()
+ );
+ // Unpack information about initiated transfer received by this responder
+ txn.from_initiator_struct(axi_m_initiator_struct);
+ end else begin
+ // Initiate a transfer and get response
+ bfm.initiate_and_get_response(
+ txn.to_initiator_struct(),
+ axi_m_responder_struct
+ );
+ // Unpack transfer response information received by this initiator
+ txn.from_responder_struct(axi_m_responder_struct);
+ end
+// pragma uvmf custom access end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver_bfm.sv
new file mode 100644
index 00000000..79c5ef38
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_driver_bfm.sv
@@ -0,0 +1,765 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This interface performs the axi_m signal driving. It is
+// accessed by the uvm axi_m driver through a virtual interface
+// handle in the axi_m configuration. It drives the singals passed
+// in through the port connection named bus of type axi_m_if.
+//
+// Input signals from the axi_m_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// This bfm drives signals with a _o suffix. These signals
+// are driven onto signals within axi_m_if based on INITIATOR/RESPONDER and/or
+// ARBITRATION/GRANT status.
+//
+// The output signal connections are as follows:
+// signal_o -> bus.signal
+//
+//
+// Interface functions and tasks used by UVM components:
+//
+// configure:
+// This function gets configuration attributes from the
+// UVM driver to set any required BFM configuration
+// variables such as 'initiator_responder'.
+//
+// initiate_and_get_response:
+// This task is used to perform signaling activity for initiating
+// a protocol transfer. The task initiates the transfer, using
+// input data from the initiator struct. Then the task captures
+// response data, placing the data into the response struct.
+// The response struct is returned to the driver class.
+//
+// respond_and_wait_for_next_transfer:
+// This task is used to complete a current transfer as a responder
+// and then wait for the initiator to start the next transfer.
+// The task uses data in the responder struct to drive protocol
+// signals to complete the transfer. The task then waits for
+// the next transfer. Once the next transfer begins, data from
+// the initiator is placed into the initiator struct and sent
+// to the responder sequence for processing to determine
+// what data to respond with.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import axi_m_pkg_hdl::*;
+`include "src/axi_m_macros.svh"
+
+interface axi_m_driver_bfm #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ )
+ (axi_m_if bus);
+ // The following pragma and additional ones in-lined further below are for running this BFM on Veloce
+ // pragma attribute axi_m_driver_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: AW_WIDTH=%x LEN=%x DATA_WIDTH=%x X=%x ", AW_WIDTH,LEN,DATA_WIDTH,X),
+ UVM_DEBUG)
+end
+`endif
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic axi_clk_i;
+ logic rst_i;
+
+ // Signal list (all signals are capable of being inputs and outputs for the sake
+ // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that
+ // directionality in the config file was from the point-of-view of the INITIATOR
+
+ // INITIATOR mode input signals
+ tri awready_i;
+ reg awready_o = 'bz;
+ tri wready_i;
+ reg wready_o = 'bz;
+ tri bwvalid_i;
+ reg bwvalid_o = 'bz;
+ tri [1:0] bresp_i;
+ reg [1:0] bresp_o = 'bz;
+ tri [X-1:0] bid_i;
+ reg [X-1:0] bid_o = 'bz;
+ tri [X-1:0] buser_i;
+ reg [X-1:0] buser_o = 'bz;
+ tri aready_i;
+ reg aready_o = 'bz;
+ tri rvalid_i;
+ reg rvalid_o = 'bz;
+ tri rlast_i;
+ reg rlast_o = 'bz;
+ tri [DATA_WIDTH-1:0] rdata_i;
+ reg [DATA_WIDTH-1:0] rdata_o = 'bz;
+ tri [X-1:0] rid_i;
+ reg [X-1:0] rid_o = 'bz;
+ tri [X-1:0] ruser_i;
+ reg [X-1:0] ruser_o = 'bz;
+ tri [1:0] rresp_i;
+ reg [1:0] rresp_o = 'bz;
+
+ // INITIATOR mode output signals
+ tri awvalid_i;
+ reg awvalid_o = 'bz;
+ tri [AW_WIDTH-1:0] awaddr_i;
+ reg [AW_WIDTH-1:0] awaddr_o = 'bz;
+ tri [2:0] awsize_i;
+ reg [2:0] awsize_o = 'bz;
+ tri [1:0] awburst_i;
+ reg [1:0] awburst_o = 'bz;
+ tri [3:0] awcache_i;
+ reg [3:0] awcache_o = 'bz;
+ tri [2:0] awprot_i;
+ reg [2:0] awprot_o = 'bz;
+ tri [X-1:0] awid_i;
+ reg [X-1:0] awid_o = 'bz;
+ tri [LEN-1:0] awlen_i;
+ reg [LEN-1:0] awlen_o = 'bz;
+ tri awlock_i;
+ reg awlock_o = 'bz;
+ tri [3:0] awqos_i;
+ reg [3:0] awqos_o = 'bz;
+ tri [3:0] awregion_i;
+ reg [3:0] awregion_o = 'bz;
+ tri [X-1:0] awuser_i;
+ reg [X-1:0] awuser_o = 'bz;
+ tri wvalid_i;
+ reg wvalid_o = 'bz;
+ tri wlast_i;
+ reg wlast_o = 'bz;
+ tri [DATA_WIDTH-1:0] wdata_i;
+ reg [DATA_WIDTH-1:0] wdata_o = 'bz;
+ tri [DATA_WIDTH/8-1:0] wstrb_i;
+ reg [DATA_WIDTH/8-1:0] wstrb_o = 'bz;
+ tri [X-1:0] wid_i;
+ reg [X-1:0] wid_o = 'bz;
+ tri [X-1:0] wuser_i;
+ reg [X-1:0] wuser_o = 'bz;
+ tri bwready_i;
+ reg bwready_o = 'bz;
+ tri arvalid_i;
+ reg arvalid_o = 'bz;
+ tri [AW_WIDTH-1:0] araddr_i;
+ reg [AW_WIDTH-1:0] araddr_o = 'bz;
+ tri [2:0] arsize_i;
+ reg [2:0] arsize_o = 'bz;
+ tri [1:0] arburst_i;
+ reg [1:0] arburst_o = 'bz;
+ tri [3:0] arcache_i;
+ reg [3:0] arcache_o = 'bz;
+ tri [2:0] arprot_i;
+ reg [2:0] arprot_o = 'bz;
+ tri [X-1:0] arid_i;
+ reg [X-1:0] arid_o = 'bz;
+ tri [LEN-1:0] arlen_i;
+ reg [LEN-1:0] arlen_o = 'bz;
+ tri arlock_i;
+ reg arlock_o = 'bz;
+ tri [3:0] arqos_i;
+ reg [3:0] arqos_o = 'bz;
+ tri [3:0] aregion_i;
+ reg [3:0] aregion_o = 'bz;
+ tri [X-1:0] aruser_i;
+ reg [X-1:0] aruser_o = 'bz;
+ tri rready_i;
+ reg rready_o = 'bz;
+
+ // Bi-directional signals
+
+
+ assign axi_clk_i = bus.axi_clk;
+ assign rst_i = bus.rst;
+
+ // These are signals marked as 'input' by the config file, but the signals will be
+ // driven by this BFM if put into RESPONDER mode (flipping all signal directions around)
+ assign awready_i = bus.awready;
+ assign bus.awready = (initiator_responder == RESPONDER) ? awready_o : 'bz;
+ assign wready_i = bus.wready;
+ assign bus.wready = (initiator_responder == RESPONDER) ? wready_o : 'bz;
+ assign bwvalid_i = bus.bwvalid;
+ assign bus.bwvalid = (initiator_responder == RESPONDER) ? bwvalid_o : 'bz;
+ assign bresp_i = bus.bresp;
+ assign bus.bresp = (initiator_responder == RESPONDER) ? bresp_o : 'bz;
+ assign bid_i = bus.bid;
+ assign bus.bid = (initiator_responder == RESPONDER) ? bid_o : 'bz;
+ assign buser_i = bus.buser;
+ assign bus.buser = (initiator_responder == RESPONDER) ? buser_o : 'bz;
+ assign aready_i = bus.aready;
+ assign bus.aready = (initiator_responder == RESPONDER) ? aready_o : 'bz;
+ assign rvalid_i = bus.rvalid;
+ assign bus.rvalid = (initiator_responder == RESPONDER) ? rvalid_o : 'bz;
+ assign rlast_i = bus.rlast;
+ assign bus.rlast = (initiator_responder == RESPONDER) ? rlast_o : 'bz;
+ assign rdata_i = bus.rdata;
+ assign bus.rdata = (initiator_responder == RESPONDER) ? rdata_o : 'bz;
+ assign rid_i = bus.rid;
+ assign bus.rid = (initiator_responder == RESPONDER) ? rid_o : 'bz;
+ assign ruser_i = bus.ruser;
+ assign bus.ruser = (initiator_responder == RESPONDER) ? ruser_o : 'bz;
+ assign rresp_i = bus.rresp;
+ assign bus.rresp = (initiator_responder == RESPONDER) ? rresp_o : 'bz;
+
+
+ // These are signals marked as 'output' by the config file, but the outputs will
+ // not be driven by this BFM unless placed in INITIATOR mode.
+ assign bus.awvalid = (initiator_responder == INITIATOR) ? awvalid_o : 'bz;
+ assign awvalid_i = bus.awvalid;
+ assign bus.awaddr = (initiator_responder == INITIATOR) ? awaddr_o : 'bz;
+ assign awaddr_i = bus.awaddr;
+ assign bus.awsize = (initiator_responder == INITIATOR) ? awsize_o : 'bz;
+ assign awsize_i = bus.awsize;
+ assign bus.awburst = (initiator_responder == INITIATOR) ? awburst_o : 'bz;
+ assign awburst_i = bus.awburst;
+ assign bus.awcache = (initiator_responder == INITIATOR) ? awcache_o : 'bz;
+ assign awcache_i = bus.awcache;
+ assign bus.awprot = (initiator_responder == INITIATOR) ? awprot_o : 'bz;
+ assign awprot_i = bus.awprot;
+ assign bus.awid = (initiator_responder == INITIATOR) ? awid_o : 'bz;
+ assign awid_i = bus.awid;
+ assign bus.awlen = (initiator_responder == INITIATOR) ? awlen_o : 'bz;
+ assign awlen_i = bus.awlen;
+ assign bus.awlock = (initiator_responder == INITIATOR) ? awlock_o : 'bz;
+ assign awlock_i = bus.awlock;
+ assign bus.awqos = (initiator_responder == INITIATOR) ? awqos_o : 'bz;
+ assign awqos_i = bus.awqos;
+ assign bus.awregion = (initiator_responder == INITIATOR) ? awregion_o : 'bz;
+ assign awregion_i = bus.awregion;
+ assign bus.awuser = (initiator_responder == INITIATOR) ? awuser_o : 'bz;
+ assign awuser_i = bus.awuser;
+ assign bus.wvalid = (initiator_responder == INITIATOR) ? wvalid_o : 'bz;
+ assign wvalid_i = bus.wvalid;
+ assign bus.wlast = (initiator_responder == INITIATOR) ? wlast_o : 'bz;
+ assign wlast_i = bus.wlast;
+ assign bus.wdata = (initiator_responder == INITIATOR) ? wdata_o : 'bz;
+ assign wdata_i = bus.wdata;
+ assign bus.wstrb = (initiator_responder == INITIATOR) ? wstrb_o : 'bz;
+ assign wstrb_i = bus.wstrb;
+ assign bus.wid = (initiator_responder == INITIATOR) ? wid_o : 'bz;
+ assign wid_i = bus.wid;
+ assign bus.wuser = (initiator_responder == INITIATOR) ? wuser_o : 'bz;
+ assign wuser_i = bus.wuser;
+ assign bus.bwready = (initiator_responder == INITIATOR) ? bwready_o : 'bz;
+ assign bwready_i = bus.bwready;
+ assign bus.arvalid = (initiator_responder == INITIATOR) ? arvalid_o : 'bz;
+ assign arvalid_i = bus.arvalid;
+ assign bus.araddr = (initiator_responder == INITIATOR) ? araddr_o : 'bz;
+ assign araddr_i = bus.araddr;
+ assign bus.arsize = (initiator_responder == INITIATOR) ? arsize_o : 'bz;
+ assign arsize_i = bus.arsize;
+ assign bus.arburst = (initiator_responder == INITIATOR) ? arburst_o : 'bz;
+ assign arburst_i = bus.arburst;
+ assign bus.arcache = (initiator_responder == INITIATOR) ? arcache_o : 'bz;
+ assign arcache_i = bus.arcache;
+ assign bus.arprot = (initiator_responder == INITIATOR) ? arprot_o : 'bz;
+ assign arprot_i = bus.arprot;
+ assign bus.arid = (initiator_responder == INITIATOR) ? arid_o : 'bz;
+ assign arid_i = bus.arid;
+ assign bus.arlen = (initiator_responder == INITIATOR) ? arlen_o : 'bz;
+ assign arlen_i = bus.arlen;
+ assign bus.arlock = (initiator_responder == INITIATOR) ? arlock_o : 'bz;
+ assign arlock_i = bus.arlock;
+ assign bus.arqos = (initiator_responder == INITIATOR) ? arqos_o : 'bz;
+ assign arqos_i = bus.arqos;
+ assign bus.aregion = (initiator_responder == INITIATOR) ? aregion_o : 'bz;
+ assign aregion_i = bus.aregion;
+ assign bus.aruser = (initiator_responder == INITIATOR) ? aruser_o : 'bz;
+ assign aruser_i = bus.aruser;
+ assign bus.rready = (initiator_responder == INITIATOR) ? rready_o : 'bz;
+ assign rready_i = bus.rready;
+
+ // Proxy handle to UVM driver
+ axi_m_pkg::axi_m_driver #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) proxy;
+ // pragma tbx oneway proxy.my_function_name_in_uvm_driver
+
+ // ****************************************************************************
+ // ****************************************************************************
+ // Macros that define structs located in axi_m_macros.svh
+ // ****************************************************************************
+ // Struct for passing configuration data from axi_m_driver to this BFM
+ // ****************************************************************************
+ `axi_m_CONFIGURATION_STRUCT
+ // ****************************************************************************
+ // Structs for INITIATOR and RESPONDER data flow
+ //*******************************************************************
+ // Initiator macro used by axi_m_driver and axi_m_driver_bfm
+ // to communicate initiator driven data to axi_m_driver_bfm.
+ `axi_m_INITIATOR_STRUCT
+ axi_m_initiator_s initiator_struct;
+ // Responder macro used by axi_m_driver and axi_m_driver_bfm
+ // to communicate Responder driven data to axi_m_driver_bfm.
+ `axi_m_RESPONDER_STRUCT
+ axi_m_responder_s responder_struct;
+
+ // ****************************************************************************
+// pragma uvmf custom reset_condition_and_response begin
+ // Always block used to return signals to reset value upon assertion of reset
+ always @( negedge rst_i )
+ begin
+ // RESPONDER mode output signals
+ awready_o <= 'bz;
+ wready_o <= 'bz;
+ bwvalid_o <= 'bz;
+ bresp_o <= 'bz;
+ bid_o <= 'bz;
+ buser_o <= 'bz;
+ aready_o <= 'bz;
+ rvalid_o <= 'bz;
+ rlast_o <= 'bz;
+ rdata_o <= 'bz;
+ rid_o <= 'bz;
+ ruser_o <= 'bz;
+ rresp_o <= 'bz;
+ // INITIATOR mode output signals
+ awvalid_o <= 'bz;
+ awaddr_o <= 'bz;
+ awsize_o <= 'bz;
+ awburst_o <= 'bz;
+ awcache_o <= 'bz;
+ awprot_o <= 'bz;
+ awid_o <= 'bz;
+ awlen_o <= 'bz;
+ awlock_o <= 'bz;
+ awqos_o <= 'bz;
+ awregion_o <= 'bz;
+ awuser_o <= 'bz;
+ wvalid_o <= 'bz;
+ wlast_o <= 'bz;
+ wdata_o <= 'bz;
+ wstrb_o <= 'bz;
+ wid_o <= 'bz;
+ wuser_o <= 'bz;
+ bwready_o <= 'bz;
+ arvalid_o <= 'bz;
+ araddr_o <= 'bz;
+ arsize_o <= 'bz;
+ arburst_o <= 'bz;
+ arcache_o <= 'bz;
+ arprot_o <= 'bz;
+ arid_o <= 'bz;
+ arlen_o <= 'bz;
+ arlock_o <= 'bz;
+ arqos_o <= 'bz;
+ aregion_o <= 'bz;
+ aruser_o <= 'bz;
+ rready_o <= 'bz;
+ // Bi-directional signals
+
+ end
+// pragma uvmf custom reset_condition_and_response end
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the driver BFM. It is called by the driver within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the driver BFM needs to be aware of the new configuration
+ // variables.
+ //
+
+ function void configure(axi_m_configuration_s axi_m_configuration_arg); // pragma tbx xtf
+ initiator_responder = axi_m_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+// pragma uvmf custom initiate_and_get_response begin
+// ****************************************************************************
+// UVMF_CHANGE_ME
+// This task is used by an initator. The task first initiates a transfer then
+// waits for the responder to complete the transfer.
+ task initiate_and_get_response(
+ // This argument passes transaction variables used by an initiator
+ // to perform the initial part of a protocol transfer. The values
+ // come from a sequence item created in a sequence.
+ input axi_m_initiator_s axi_m_initiator_struct,
+ // This argument is used to send data received from the responder
+ // back to the sequence item. The sequence item is returned to the sequence.
+ output axi_m_responder_s axi_m_responder_struct
+ );// pragma tbx xtf
+ //
+ // Members within the axi_m_initiator_struct:
+ // bit awvalid ;
+ // bit awready ;
+ // bit [AW_WIDTH-1:0] awaddr ;
+ // bit awsize ;
+ // bit awburst ;
+ // bit awcache ;
+ // bit awprot ;
+ // bit [X-1:0] awid ;
+ // bit [LEN-1:0] awlen ;
+ // bit awlock ;
+ // bit awqos ;
+ // bit awregion ;
+ // bit [X-1:0] awuser ;
+ // bit wvalid ;
+ // bit wready ;
+ // bit wlast ;
+ // bit [DATA_WIDTH-1:0] wdata ;
+ // bit [DATA_WIDTH/8-1:0] wstrb ;
+ // bit [X-1:0] wid ;
+ // bit [X-1:0] wuser ;
+ // bit bwvalid ;
+ // bit bwready ;
+ // bit bresp ;
+ // bit [X-1:0] bid ;
+ // bit [X-1:0] buser ;
+ // bit arvalid ;
+ // bit aready ;
+ // bit [AW_WIDTH-1:0] araddr ;
+ // bit arsize ;
+ // bit arburst ;
+ // bit arcache ;
+ // bit arprot ;
+ // bit [X-1:0] arid ;
+ // bit [LEN-1:0] arlen ;
+ // bit arlock ;
+ // bit arqos ;
+ // bit aregion ;
+ // bit [X-1:0] aruser ;
+ // bit rvalid ;
+ // bit rready ;
+ // bit rlast ;
+ // bit [DATA_WIDTH-1:0] rdata ;
+ // bit [X-1:0] rid ;
+ // bit [X-1:0] ruser ;
+ // bit rresp ;
+ // Members within the axi_m_responder_struct:
+ // bit awvalid ;
+ // bit awready ;
+ // bit [AW_WIDTH-1:0] awaddr ;
+ // bit awsize ;
+ // bit awburst ;
+ // bit awcache ;
+ // bit awprot ;
+ // bit [X-1:0] awid ;
+ // bit [LEN-1:0] awlen ;
+ // bit awlock ;
+ // bit awqos ;
+ // bit awregion ;
+ // bit [X-1:0] awuser ;
+ // bit wvalid ;
+ // bit wready ;
+ // bit wlast ;
+ // bit [DATA_WIDTH-1:0] wdata ;
+ // bit [DATA_WIDTH/8-1:0] wstrb ;
+ // bit [X-1:0] wid ;
+ // bit [X-1:0] wuser ;
+ // bit bwvalid ;
+ // bit bwready ;
+ // bit bresp ;
+ // bit [X-1:0] bid ;
+ // bit [X-1:0] buser ;
+ // bit arvalid ;
+ // bit aready ;
+ // bit [AW_WIDTH-1:0] araddr ;
+ // bit arsize ;
+ // bit arburst ;
+ // bit arcache ;
+ // bit arprot ;
+ // bit [X-1:0] arid ;
+ // bit [LEN-1:0] arlen ;
+ // bit arlock ;
+ // bit arqos ;
+ // bit aregion ;
+ // bit [X-1:0] aruser ;
+ // bit rvalid ;
+ // bit rready ;
+ // bit rlast ;
+ // bit [DATA_WIDTH-1:0] rdata ;
+ // bit [X-1:0] rid ;
+ // bit [X-1:0] ruser ;
+ // bit rresp ;
+ initiator_struct = axi_m_initiator_struct;
+ //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge axi_clk_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available initiator input and inout signals listed.
+ // Initiator input signals
+ // axi_m_responder_struct.xyz = awready_i; //
+ // axi_m_responder_struct.xyz = wready_i; //
+ // axi_m_responder_struct.xyz = bwvalid_i; //
+ // axi_m_responder_struct.xyz = bresp_i; // [1:0]
+ // axi_m_responder_struct.xyz = bid_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = buser_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = aready_i; //
+ // axi_m_responder_struct.xyz = rvalid_i; //
+ // axi_m_responder_struct.xyz = rlast_i; //
+ // axi_m_responder_struct.xyz = rdata_i; // [DATA_WIDTH-1:0]
+ // axi_m_responder_struct.xyz = rid_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = ruser_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = rresp_i; // [1:0]
+ // Initiator inout signals
+ // How to assign a signal from an initiator struct member named xyz.
+ // All available initiator output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Initiator output signals
+ // awvalid_o <= axi_m_initiator_struct.xyz; //
+ // awaddr_o <= axi_m_initiator_struct.xyz; // [AW_WIDTH-1:0]
+ // awsize_o <= axi_m_initiator_struct.xyz; // [2:0]
+ // awburst_o <= axi_m_initiator_struct.xyz; // [1:0]
+ // awcache_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // awprot_o <= axi_m_initiator_struct.xyz; // [2:0]
+ // awid_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // awlen_o <= axi_m_initiator_struct.xyz; // [LEN-1:0]
+ // awlock_o <= axi_m_initiator_struct.xyz; //
+ // awqos_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // awregion_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // awuser_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // wvalid_o <= axi_m_initiator_struct.xyz; //
+ // wlast_o <= axi_m_initiator_struct.xyz; //
+ // wdata_o <= axi_m_initiator_struct.xyz; // [DATA_WIDTH-1:0]
+ // wstrb_o <= axi_m_initiator_struct.xyz; // [DATA_WIDTH/8-1:0]
+ // wid_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // wuser_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // bwready_o <= axi_m_initiator_struct.xyz; //
+ // arvalid_o <= axi_m_initiator_struct.xyz; //
+ // araddr_o <= axi_m_initiator_struct.xyz; // [AW_WIDTH-1:0]
+ // arsize_o <= axi_m_initiator_struct.xyz; // [2:0]
+ // arburst_o <= axi_m_initiator_struct.xyz; // [1:0]
+ // arcache_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // arprot_o <= axi_m_initiator_struct.xyz; // [2:0]
+ // arid_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // arlen_o <= axi_m_initiator_struct.xyz; // [LEN-1:0]
+ // arlock_o <= axi_m_initiator_struct.xyz; //
+ // arqos_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // aregion_o <= axi_m_initiator_struct.xyz; // [3:0]
+ // aruser_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // rready_o <= axi_m_initiator_struct.xyz; //
+ // Initiator inout signals
+ // Initiate a transfer using the data received.
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ // Wait for the responder to complete the transfer then place the responder data into
+ // axi_m_responder_struct.
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ responder_struct = axi_m_responder_struct;
+ endtask
+// pragma uvmf custom initiate_and_get_response end
+
+// pragma uvmf custom respond_and_wait_for_next_transfer begin
+// ****************************************************************************
+// The first_transfer variable is used to prevent completing a transfer in the
+// first call to this task. For the first call to this task, there is not
+// current transfer to complete.
+bit first_transfer=1;
+
+// UVMF_CHANGE_ME
+// This task is used by a responder. The task first completes the current
+// transfer in progress then waits for the initiator to start the next transfer.
+ task respond_and_wait_for_next_transfer(
+ // This argument is used to send data received from the initiator
+ // back to the sequence item. The sequence determines how to respond.
+ output axi_m_initiator_s axi_m_initiator_struct,
+ // This argument passes transaction variables used by a responder
+ // to complete a protocol transfer. The values come from a sequence item.
+ input axi_m_responder_s axi_m_responder_struct
+ );// pragma tbx xtf
+ // Variables within the axi_m_initiator_struct:
+ // bit awvalid ;
+ // bit awready ;
+ // bit [AW_WIDTH-1:0] awaddr ;
+ // bit awsize ;
+ // bit awburst ;
+ // bit awcache ;
+ // bit awprot ;
+ // bit [X-1:0] awid ;
+ // bit [LEN-1:0] awlen ;
+ // bit awlock ;
+ // bit awqos ;
+ // bit awregion ;
+ // bit [X-1:0] awuser ;
+ // bit wvalid ;
+ // bit wready ;
+ // bit wlast ;
+ // bit [DATA_WIDTH-1:0] wdata ;
+ // bit [DATA_WIDTH/8-1:0] wstrb ;
+ // bit [X-1:0] wid ;
+ // bit [X-1:0] wuser ;
+ // bit bwvalid ;
+ // bit bwready ;
+ // bit bresp ;
+ // bit [X-1:0] bid ;
+ // bit [X-1:0] buser ;
+ // bit arvalid ;
+ // bit aready ;
+ // bit [AW_WIDTH-1:0] araddr ;
+ // bit arsize ;
+ // bit arburst ;
+ // bit arcache ;
+ // bit arprot ;
+ // bit [X-1:0] arid ;
+ // bit [LEN-1:0] arlen ;
+ // bit arlock ;
+ // bit arqos ;
+ // bit aregion ;
+ // bit [X-1:0] aruser ;
+ // bit rvalid ;
+ // bit rready ;
+ // bit rlast ;
+ // bit [DATA_WIDTH-1:0] rdata ;
+ // bit [X-1:0] rid ;
+ // bit [X-1:0] ruser ;
+ // bit rresp ;
+ // Variables within the axi_m_responder_struct:
+ // bit awvalid ;
+ // bit awready ;
+ // bit [AW_WIDTH-1:0] awaddr ;
+ // bit awsize ;
+ // bit awburst ;
+ // bit awcache ;
+ // bit awprot ;
+ // bit [X-1:0] awid ;
+ // bit [LEN-1:0] awlen ;
+ // bit awlock ;
+ // bit awqos ;
+ // bit awregion ;
+ // bit [X-1:0] awuser ;
+ // bit wvalid ;
+ // bit wready ;
+ // bit wlast ;
+ // bit [DATA_WIDTH-1:0] wdata ;
+ // bit [DATA_WIDTH/8-1:0] wstrb ;
+ // bit [X-1:0] wid ;
+ // bit [X-1:0] wuser ;
+ // bit bwvalid ;
+ // bit bwready ;
+ // bit bresp ;
+ // bit [X-1:0] bid ;
+ // bit [X-1:0] buser ;
+ // bit arvalid ;
+ // bit aready ;
+ // bit [AW_WIDTH-1:0] araddr ;
+ // bit arsize ;
+ // bit arburst ;
+ // bit arcache ;
+ // bit arprot ;
+ // bit [X-1:0] arid ;
+ // bit [LEN-1:0] arlen ;
+ // bit arlock ;
+ // bit arqos ;
+ // bit aregion ;
+ // bit [X-1:0] aruser ;
+ // bit rvalid ;
+ // bit rready ;
+ // bit rlast ;
+ // bit [DATA_WIDTH-1:0] rdata ;
+ // bit [X-1:0] rid ;
+ // bit [X-1:0] ruser ;
+ // bit rresp ;
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge axi_clk_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available responder input and inout signals listed.
+ // Responder input signals
+ // axi_m_responder_struct.xyz = awvalid_i; //
+ // axi_m_responder_struct.xyz = awaddr_i; // [AW_WIDTH-1:0]
+ // axi_m_responder_struct.xyz = awsize_i; // [2:0]
+ // axi_m_responder_struct.xyz = awburst_i; // [1:0]
+ // axi_m_responder_struct.xyz = awcache_i; // [3:0]
+ // axi_m_responder_struct.xyz = awprot_i; // [2:0]
+ // axi_m_responder_struct.xyz = awid_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = awlen_i; // [LEN-1:0]
+ // axi_m_responder_struct.xyz = awlock_i; //
+ // axi_m_responder_struct.xyz = awqos_i; // [3:0]
+ // axi_m_responder_struct.xyz = awregion_i; // [3:0]
+ // axi_m_responder_struct.xyz = awuser_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = wvalid_i; //
+ // axi_m_responder_struct.xyz = wlast_i; //
+ // axi_m_responder_struct.xyz = wdata_i; // [DATA_WIDTH-1:0]
+ // axi_m_responder_struct.xyz = wstrb_i; // [DATA_WIDTH/8-1:0]
+ // axi_m_responder_struct.xyz = wid_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = wuser_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = bwready_i; //
+ // axi_m_responder_struct.xyz = arvalid_i; //
+ // axi_m_responder_struct.xyz = araddr_i; // [AW_WIDTH-1:0]
+ // axi_m_responder_struct.xyz = arsize_i; // [2:0]
+ // axi_m_responder_struct.xyz = arburst_i; // [1:0]
+ // axi_m_responder_struct.xyz = arcache_i; // [3:0]
+ // axi_m_responder_struct.xyz = arprot_i; // [2:0]
+ // axi_m_responder_struct.xyz = arid_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = arlen_i; // [LEN-1:0]
+ // axi_m_responder_struct.xyz = arlock_i; //
+ // axi_m_responder_struct.xyz = arqos_i; // [3:0]
+ // axi_m_responder_struct.xyz = aregion_i; // [3:0]
+ // axi_m_responder_struct.xyz = aruser_i; // [X-1:0]
+ // axi_m_responder_struct.xyz = rready_i; //
+ // Responder inout signals
+ // How to assign a signal, named xyz, from an initiator struct member.
+ // All available responder output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Responder output signals
+ // awready_o <= axi_m_initiator_struct.xyz; //
+ // wready_o <= axi_m_initiator_struct.xyz; //
+ // bwvalid_o <= axi_m_initiator_struct.xyz; //
+ // bresp_o <= axi_m_initiator_struct.xyz; // [1:0]
+ // bid_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // buser_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // aready_o <= axi_m_initiator_struct.xyz; //
+ // rvalid_o <= axi_m_initiator_struct.xyz; //
+ // rlast_o <= axi_m_initiator_struct.xyz; //
+ // rdata_o <= axi_m_initiator_struct.xyz; // [DATA_WIDTH-1:0]
+ // rid_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // ruser_o <= axi_m_initiator_struct.xyz; // [X-1:0]
+ // rresp_o <= axi_m_initiator_struct.xyz; // [1:0]
+ // Responder inout signals
+
+ @(posedge axi_clk_i);
+ if (!first_transfer) begin
+ // Perform transfer response here.
+ // Reply using data recieved in the axi_m_responder_struct.
+ @(posedge axi_clk_i);
+ // Reply using data recieved in the transaction handle.
+ @(posedge axi_clk_i);
+ end
+ // Wait for next transfer then gather info from intiator about the transfer.
+ // Place the data into the axi_m_initiator_struct.
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ first_transfer = 0;
+ endtask
+// pragma uvmf custom respond_and_wait_for_next_transfer end
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_if.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_if.sv
new file mode 100644
index 00000000..90295099
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_if.sv
@@ -0,0 +1,289 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface contains the axi_m interface signals.
+// It is instantiated once per axi_m bus. Bus Functional Models,
+// BFM's named axi_m_driver_bfm, are used to drive signals on the bus.
+// BFM's named axi_m_monitor_bfm are used to monitor signals on the
+// bus. This interface signal bundle is passed in the port list of
+// the BFM in order to give the BFM access to the signals in this
+// interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// This template can be used to connect a DUT to these signals
+//
+// .dut_signal_port(axi_m_bus.awvalid), // Agent output
+// .dut_signal_port(axi_m_bus.awready), // Agent input
+// .dut_signal_port(axi_m_bus.awaddr), // Agent output
+// .dut_signal_port(axi_m_bus.awsize), // Agent output
+// .dut_signal_port(axi_m_bus.awburst), // Agent output
+// .dut_signal_port(axi_m_bus.awcache), // Agent output
+// .dut_signal_port(axi_m_bus.awprot), // Agent output
+// .dut_signal_port(axi_m_bus.awid), // Agent output
+// .dut_signal_port(axi_m_bus.awlen), // Agent output
+// .dut_signal_port(axi_m_bus.awlock), // Agent output
+// .dut_signal_port(axi_m_bus.awqos), // Agent output
+// .dut_signal_port(axi_m_bus.awregion), // Agent output
+// .dut_signal_port(axi_m_bus.awuser), // Agent output
+// .dut_signal_port(axi_m_bus.wvalid), // Agent output
+// .dut_signal_port(axi_m_bus.wready), // Agent input
+// .dut_signal_port(axi_m_bus.wlast), // Agent output
+// .dut_signal_port(axi_m_bus.wdata), // Agent output
+// .dut_signal_port(axi_m_bus.wstrb), // Agent output
+// .dut_signal_port(axi_m_bus.wid), // Agent output
+// .dut_signal_port(axi_m_bus.wuser), // Agent output
+// .dut_signal_port(axi_m_bus.bwvalid), // Agent input
+// .dut_signal_port(axi_m_bus.bwready), // Agent output
+// .dut_signal_port(axi_m_bus.bresp), // Agent input
+// .dut_signal_port(axi_m_bus.bid), // Agent input
+// .dut_signal_port(axi_m_bus.buser), // Agent input
+// .dut_signal_port(axi_m_bus.arvalid), // Agent output
+// .dut_signal_port(axi_m_bus.aready), // Agent input
+// .dut_signal_port(axi_m_bus.araddr), // Agent output
+// .dut_signal_port(axi_m_bus.arsize), // Agent output
+// .dut_signal_port(axi_m_bus.arburst), // Agent output
+// .dut_signal_port(axi_m_bus.arcache), // Agent output
+// .dut_signal_port(axi_m_bus.arprot), // Agent output
+// .dut_signal_port(axi_m_bus.arid), // Agent output
+// .dut_signal_port(axi_m_bus.arlen), // Agent output
+// .dut_signal_port(axi_m_bus.arlock), // Agent output
+// .dut_signal_port(axi_m_bus.arqos), // Agent output
+// .dut_signal_port(axi_m_bus.aregion), // Agent output
+// .dut_signal_port(axi_m_bus.aruser), // Agent output
+// .dut_signal_port(axi_m_bus.rvalid), // Agent input
+// .dut_signal_port(axi_m_bus.rready), // Agent output
+// .dut_signal_port(axi_m_bus.rlast), // Agent input
+// .dut_signal_port(axi_m_bus.rdata), // Agent input
+// .dut_signal_port(axi_m_bus.rid), // Agent input
+// .dut_signal_port(axi_m_bus.ruser), // Agent input
+// .dut_signal_port(axi_m_bus.rresp), // Agent input
+
+import uvmf_base_pkg_hdl::*;
+import axi_m_pkg_hdl::*;
+
+interface axi_m_if #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ )
+
+ (
+ input logic axi_clk,
+ input logic rst,
+ output logic awvalid,
+ input logic awready,
+ output logic [AW_WIDTH-1:0] awaddr,
+ output logic [2:0] awsize,
+ output logic [1:0] awburst,
+ output logic [3:0] awcache,
+ output logic [2:0] awprot,
+ output logic [X-1:0] awid,
+ output logic [LEN-1:0] awlen,
+ output logic awlock,
+ output logic [3:0] awqos,
+ output logic [3:0] awregion,
+ output logic [X-1:0] awuser,
+ output logic wvalid,
+ input logic wready,
+ output logic wlast,
+ output logic [DATA_WIDTH-1:0] wdata,
+ output logic [DATA_WIDTH/8-1:0] wstrb,
+ output logic [X-1:0] wid,
+ output logic [X-1:0] wuser,
+ input logic bwvalid,
+ output logic bwready,
+ input logic [1:0] bresp,
+ input logic [X-1:0] bid,
+ input logic [X-1:0] buser,
+ output logic arvalid,
+ input logic aready,
+ output logic [AW_WIDTH-1:0] araddr,
+ output logic [2:0] arsize,
+ output logic [1:0] arburst,
+ output logic [3:0] arcache,
+ output logic [2:0] arprot,
+ output logic [X-1:0] arid,
+ output logic [LEN-1:0] arlen,
+ output logic arlock,
+ output logic [3:0] arqos,
+ output logic [3:0] aregion,
+ output logic [X-1:0] aruser,
+ input logic rvalid,
+ output logic rready,
+ input logic rlast,
+ input logic [DATA_WIDTH-1:0] rdata,
+ input logic [X-1:0] rid,
+ input logic [X-1:0] ruser,
+ input logic [1:0] rresp
+ );
+
+modport monitor_port
+ (
+ input axi_clk,
+ input rst,
+ input awvalid,
+ input awready,
+ input awaddr,
+ input awsize,
+ input awburst,
+ input awcache,
+ input awprot,
+ input awid,
+ input awlen,
+ input awlock,
+ input awqos,
+ input awregion,
+ input awuser,
+ input wvalid,
+ input wready,
+ input wlast,
+ input wdata,
+ input wstrb,
+ input wid,
+ input wuser,
+ input bwvalid,
+ input bwready,
+ input bresp,
+ input bid,
+ input buser,
+ input arvalid,
+ input aready,
+ input araddr,
+ input arsize,
+ input arburst,
+ input arcache,
+ input arprot,
+ input arid,
+ input arlen,
+ input arlock,
+ input arqos,
+ input aregion,
+ input aruser,
+ input rvalid,
+ input rready,
+ input rlast,
+ input rdata,
+ input rid,
+ input ruser,
+ input rresp
+ );
+
+modport initiator_port
+ (
+ input axi_clk,
+ input rst,
+ output awvalid,
+ input awready,
+ output awaddr,
+ output awsize,
+ output awburst,
+ output awcache,
+ output awprot,
+ output awid,
+ output awlen,
+ output awlock,
+ output awqos,
+ output awregion,
+ output awuser,
+ output wvalid,
+ input wready,
+ output wlast,
+ output wdata,
+ output wstrb,
+ output wid,
+ output wuser,
+ input bwvalid,
+ output bwready,
+ input bresp,
+ input bid,
+ input buser,
+ output arvalid,
+ input aready,
+ output araddr,
+ output arsize,
+ output arburst,
+ output arcache,
+ output arprot,
+ output arid,
+ output arlen,
+ output arlock,
+ output arqos,
+ output aregion,
+ output aruser,
+ input rvalid,
+ output rready,
+ input rlast,
+ input rdata,
+ input rid,
+ input ruser,
+ input rresp
+ );
+
+modport responder_port
+ (
+ input axi_clk,
+ input rst,
+ input awvalid,
+ output awready,
+ input awaddr,
+ input awsize,
+ input awburst,
+ input awcache,
+ input awprot,
+ input awid,
+ input awlen,
+ input awlock,
+ input awqos,
+ input awregion,
+ input awuser,
+ input wvalid,
+ output wready,
+ input wlast,
+ input wdata,
+ input wstrb,
+ input wid,
+ input wuser,
+ output bwvalid,
+ input bwready,
+ output bresp,
+ output bid,
+ output buser,
+ input arvalid,
+ output aready,
+ input araddr,
+ input arsize,
+ input arburst,
+ input arcache,
+ input arprot,
+ input arid,
+ input arlen,
+ input arlock,
+ input arqos,
+ input aregion,
+ input aruser,
+ output rvalid,
+ input rready,
+ output rlast,
+ output rdata,
+ output rid,
+ output ruser,
+ output rresp
+ );
+
+
+// pragma uvmf custom interface_item_additional begin
+// pragma uvmf custom interface_item_additional end
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_infact_coverage_strategy.csv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_infact_coverage_strategy.csv
new file mode 100644
index 00000000..1c218e14
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_infact_coverage_strategy.csv
@@ -0,0 +1,6 @@
+Global
+auto_bin_max, 64
+
+Name,Type,Include
+rand_fields,coverpoint,=rand *.**
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_macros.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_macros.svh
new file mode 100644
index 00000000..f04eaa78
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_macros.svh
@@ -0,0 +1,517 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains macros used with the axi_m package.
+// These macros include packed struct definitions. These structs are
+// used to pass data between classes, hvl, and BFM's, hdl. Use of
+// structs are more efficient and simpler to modify.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_struct
+// and from_struct methods defined in the macros below that are used in
+// the axi_m_configuration class.
+//
+ `define axi_m_CONFIGURATION_STRUCT \
+typedef struct packed { \
+ uvmf_active_passive_t active_passive; \
+ uvmf_initiator_responder_t initiator_responder; \
+ } axi_m_configuration_s;
+
+ `define axi_m_CONFIGURATION_TO_STRUCT_FUNCTION \
+ virtual function axi_m_configuration_s to_struct();\
+ axi_m_configuration_struct = \
+ {\
+ this.active_passive,\
+ this.initiator_responder\
+ };\
+ return ( axi_m_configuration_struct );\
+ endfunction
+
+ `define axi_m_CONFIGURATION_FROM_STRUCT_FUNCTION \
+ virtual function void from_struct(axi_m_configuration_s axi_m_configuration_struct);\
+ {\
+ this.active_passive,\
+ this.initiator_responder \
+ } = axi_m_configuration_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_monitor_struct
+// and from_monitor_struct methods of the axi_m_transaction class.
+//
+ `define axi_m_MONITOR_STRUCT typedef struct packed { \
+ bit awvalid ; \
+ bit awready ; \
+ bit [AW_WIDTH-1:0] awaddr ; \
+ bit awsize ; \
+ bit awburst ; \
+ bit awcache ; \
+ bit awprot ; \
+ bit [X-1:0] awid ; \
+ bit [LEN-1:0] awlen ; \
+ bit awlock ; \
+ bit awqos ; \
+ bit awregion ; \
+ bit [X-1:0] awuser ; \
+ bit wvalid ; \
+ bit wready ; \
+ bit wlast ; \
+ bit [DATA_WIDTH-1:0] wdata ; \
+ bit [DATA_WIDTH/8-1:0] wstrb ; \
+ bit [X-1:0] wid ; \
+ bit [X-1:0] wuser ; \
+ bit bwvalid ; \
+ bit bwready ; \
+ bit bresp ; \
+ bit [X-1:0] bid ; \
+ bit [X-1:0] buser ; \
+ bit arvalid ; \
+ bit aready ; \
+ bit [AW_WIDTH-1:0] araddr ; \
+ bit arsize ; \
+ bit arburst ; \
+ bit arcache ; \
+ bit arprot ; \
+ bit [X-1:0] arid ; \
+ bit [LEN-1:0] arlen ; \
+ bit arlock ; \
+ bit arqos ; \
+ bit aregion ; \
+ bit [X-1:0] aruser ; \
+ bit rvalid ; \
+ bit rready ; \
+ bit rlast ; \
+ bit [DATA_WIDTH-1:0] rdata ; \
+ bit [X-1:0] rid ; \
+ bit [X-1:0] ruser ; \
+ bit rresp ; \
+ } axi_m_monitor_s;
+
+ `define axi_m_TO_MONITOR_STRUCT_FUNCTION \
+ virtual function axi_m_monitor_s to_monitor_struct();\
+ axi_m_monitor_struct = \
+ { \
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ };\
+ return ( axi_m_monitor_struct);\
+ endfunction\
+
+ `define axi_m_FROM_MONITOR_STRUCT_FUNCTION \
+ virtual function void from_monitor_struct(axi_m_monitor_s axi_m_monitor_struct);\
+ {\
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ } = axi_m_monitor_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_initiator_struct
+// and from_initiator_struct methods of the axi_m_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define axi_m_INITIATOR_STRUCT typedef struct packed { \
+ bit awvalid ; \
+ bit awready ; \
+ bit [AW_WIDTH-1:0] awaddr ; \
+ bit awsize ; \
+ bit awburst ; \
+ bit awcache ; \
+ bit awprot ; \
+ bit [X-1:0] awid ; \
+ bit [LEN-1:0] awlen ; \
+ bit awlock ; \
+ bit awqos ; \
+ bit awregion ; \
+ bit [X-1:0] awuser ; \
+ bit wvalid ; \
+ bit wready ; \
+ bit wlast ; \
+ bit [DATA_WIDTH-1:0] wdata ; \
+ bit [DATA_WIDTH/8-1:0] wstrb ; \
+ bit [X-1:0] wid ; \
+ bit [X-1:0] wuser ; \
+ bit bwvalid ; \
+ bit bwready ; \
+ bit bresp ; \
+ bit [X-1:0] bid ; \
+ bit [X-1:0] buser ; \
+ bit arvalid ; \
+ bit aready ; \
+ bit [AW_WIDTH-1:0] araddr ; \
+ bit arsize ; \
+ bit arburst ; \
+ bit arcache ; \
+ bit arprot ; \
+ bit [X-1:0] arid ; \
+ bit [LEN-1:0] arlen ; \
+ bit arlock ; \
+ bit arqos ; \
+ bit aregion ; \
+ bit [X-1:0] aruser ; \
+ bit rvalid ; \
+ bit rready ; \
+ bit rlast ; \
+ bit [DATA_WIDTH-1:0] rdata ; \
+ bit [X-1:0] rid ; \
+ bit [X-1:0] ruser ; \
+ bit rresp ; \
+ } axi_m_initiator_s;
+
+ `define axi_m_TO_INITIATOR_STRUCT_FUNCTION \
+ virtual function axi_m_initiator_s to_initiator_struct();\
+ axi_m_initiator_struct = \
+ {\
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ };\
+ return ( axi_m_initiator_struct);\
+ endfunction
+
+ `define axi_m_FROM_INITIATOR_STRUCT_FUNCTION \
+ virtual function void from_initiator_struct(axi_m_initiator_s axi_m_initiator_struct);\
+ {\
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ } = axi_m_initiator_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_responder_struct
+// and from_responder_struct methods of the axi_m_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define axi_m_RESPONDER_STRUCT typedef struct packed { \
+ bit awvalid ; \
+ bit awready ; \
+ bit [AW_WIDTH-1:0] awaddr ; \
+ bit awsize ; \
+ bit awburst ; \
+ bit awcache ; \
+ bit awprot ; \
+ bit [X-1:0] awid ; \
+ bit [LEN-1:0] awlen ; \
+ bit awlock ; \
+ bit awqos ; \
+ bit awregion ; \
+ bit [X-1:0] awuser ; \
+ bit wvalid ; \
+ bit wready ; \
+ bit wlast ; \
+ bit [DATA_WIDTH-1:0] wdata ; \
+ bit [DATA_WIDTH/8-1:0] wstrb ; \
+ bit [X-1:0] wid ; \
+ bit [X-1:0] wuser ; \
+ bit bwvalid ; \
+ bit bwready ; \
+ bit bresp ; \
+ bit [X-1:0] bid ; \
+ bit [X-1:0] buser ; \
+ bit arvalid ; \
+ bit aready ; \
+ bit [AW_WIDTH-1:0] araddr ; \
+ bit arsize ; \
+ bit arburst ; \
+ bit arcache ; \
+ bit arprot ; \
+ bit [X-1:0] arid ; \
+ bit [LEN-1:0] arlen ; \
+ bit arlock ; \
+ bit arqos ; \
+ bit aregion ; \
+ bit [X-1:0] aruser ; \
+ bit rvalid ; \
+ bit rready ; \
+ bit rlast ; \
+ bit [DATA_WIDTH-1:0] rdata ; \
+ bit [X-1:0] rid ; \
+ bit [X-1:0] ruser ; \
+ bit rresp ; \
+ } axi_m_responder_s;
+
+ `define axi_m_TO_RESPONDER_STRUCT_FUNCTION \
+ virtual function axi_m_responder_s to_responder_struct();\
+ axi_m_responder_struct = \
+ {\
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ };\
+ return ( axi_m_responder_struct);\
+ endfunction
+
+ `define axi_m_FROM_RESPONDER_STRUCT_FUNCTION \
+ virtual function void from_responder_struct(axi_m_responder_s axi_m_responder_struct);\
+ {\
+ this.awvalid , \
+ this.awready , \
+ this.awaddr , \
+ this.awsize , \
+ this.awburst , \
+ this.awcache , \
+ this.awprot , \
+ this.awid , \
+ this.awlen , \
+ this.awlock , \
+ this.awqos , \
+ this.awregion , \
+ this.awuser , \
+ this.wvalid , \
+ this.wready , \
+ this.wlast , \
+ this.wdata , \
+ this.wstrb , \
+ this.wid , \
+ this.wuser , \
+ this.bwvalid , \
+ this.bwready , \
+ this.bresp , \
+ this.bid , \
+ this.buser , \
+ this.arvalid , \
+ this.aready , \
+ this.araddr , \
+ this.arsize , \
+ this.arburst , \
+ this.arcache , \
+ this.arprot , \
+ this.arid , \
+ this.arlen , \
+ this.arlock , \
+ this.arqos , \
+ this.aregion , \
+ this.aruser , \
+ this.rvalid , \
+ this.rready , \
+ this.rlast , \
+ this.rdata , \
+ this.rid , \
+ this.ruser , \
+ this.rresp \
+ } = axi_m_responder_struct;\
+ endfunction
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor.svh
new file mode 100644
index 00000000..c5f4c0df
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor.svh
@@ -0,0 +1,112 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class receives axi_m transactions observed by the
+// axi_m monitor BFM and broadcasts them through the analysis port
+// on the agent. It accesses the monitor BFM through the monitor
+// task. This UVM component captures transactions
+// for viewing in the waveform viewer if the
+// enable_transaction_viewing flag is set in the configuration.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_monitor #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_monitor_base #(
+ .CONFIG_T(axi_m_configuration #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .BFM_BIND_T(virtual axi_m_monitor_bfm #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .TRANS_T(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )));
+
+ `uvm_component_param_utils( axi_m_monitor #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+// Structure used to pass data from monitor BFM to monitor class in agent.
+// Use to_monitor_struct function to pack transaction variables into structure.
+// Use from_monitor_struct function to unpack transaction variables from structure.
+`axi_m_MONITOR_STRUCT
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the monitor BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// monitor BFM. This allows the monitor BFM to call the notify_transaction
+// function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ***************************************************************************
+ virtual task run_phase(uvm_phase phase);
+ // Start monitor BFM thread and don't call super.run() in order to
+ // override the default monitor proxy 'pull' behavior with the more
+ // emulation-friendly BFM 'push' approach using the notify_transaction
+ // function below
+ bfm.start_monitoring();
+ endtask
+
+// **************************************************************************
+
+// This function is called by the monitor BFM. It receives data observed by the
+// monitor BFM. Data is passed using the axi_m_monitor_struct.
+ virtual function void notify_transaction(input axi_m_monitor_s axi_m_monitor_struct);
+
+
+ trans = new("trans");
+ trans.from_monitor_struct(axi_m_monitor_struct);
+ trans.start_time = time_stamp;
+ trans.end_time = $time;
+ time_stamp = trans.end_time;
+
+ analyze(trans);
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor_bfm.sv
new file mode 100644
index 00000000..649ee7d6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_monitor_bfm.sv
@@ -0,0 +1,360 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface performs the axi_m signal monitoring.
+// It is accessed by the uvm axi_m monitor through a virtual
+// interface handle in the axi_m configuration. It monitors the
+// signals passed in through the port connection named bus of
+// type axi_m_if.
+//
+// Input signals from the axi_m_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// Interface functions and tasks used by UVM components:
+// monitor(inout TRANS_T txn);
+// This task receives the transaction, txn, from the
+// UVM monitor and then populates variables in txn
+// from values observed on bus activity. This task
+// blocks until an operation on the axi_m bus is complete.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import axi_m_pkg_hdl::*;
+`include "src/axi_m_macros.svh"
+
+
+interface axi_m_monitor_bfm #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ )
+ ( axi_m_if bus );
+ // The pragma below and additional ones in-lined further down are for running this BFM on Veloce
+ // pragma attribute axi_m_monitor_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: AW_WIDTH=%x LEN=%x DATA_WIDTH=%x X=%x ", AW_WIDTH,LEN,DATA_WIDTH,X),
+ UVM_DEBUG)
+end
+`endif
+
+
+ // Structure used to pass transaction data from monitor BFM to monitor class in agent.
+`axi_m_MONITOR_STRUCT
+ axi_m_monitor_s axi_m_monitor_struct;
+
+ // Structure used to pass configuration data from monitor class to monitor BFM.
+ `axi_m_CONFIGURATION_STRUCT
+
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic axi_clk_i;
+ logic rst_i;
+ tri awvalid_i;
+ tri awready_i;
+ tri [AW_WIDTH-1:0] awaddr_i;
+ tri [2:0] awsize_i;
+ tri [1:0] awburst_i;
+ tri [3:0] awcache_i;
+ tri [2:0] awprot_i;
+ tri [X-1:0] awid_i;
+ tri [LEN-1:0] awlen_i;
+ tri awlock_i;
+ tri [3:0] awqos_i;
+ tri [3:0] awregion_i;
+ tri [X-1:0] awuser_i;
+ tri wvalid_i;
+ tri wready_i;
+ tri wlast_i;
+ tri [DATA_WIDTH-1:0] wdata_i;
+ tri [DATA_WIDTH/8-1:0] wstrb_i;
+ tri [X-1:0] wid_i;
+ tri [X-1:0] wuser_i;
+ tri bwvalid_i;
+ tri bwready_i;
+ tri [1:0] bresp_i;
+ tri [X-1:0] bid_i;
+ tri [X-1:0] buser_i;
+ tri arvalid_i;
+ tri aready_i;
+ tri [AW_WIDTH-1:0] araddr_i;
+ tri [2:0] arsize_i;
+ tri [1:0] arburst_i;
+ tri [3:0] arcache_i;
+ tri [2:0] arprot_i;
+ tri [X-1:0] arid_i;
+ tri [LEN-1:0] arlen_i;
+ tri arlock_i;
+ tri [3:0] arqos_i;
+ tri [3:0] aregion_i;
+ tri [X-1:0] aruser_i;
+ tri rvalid_i;
+ tri rready_i;
+ tri rlast_i;
+ tri [DATA_WIDTH-1:0] rdata_i;
+ tri [X-1:0] rid_i;
+ tri [X-1:0] ruser_i;
+ tri [1:0] rresp_i;
+ assign axi_clk_i = bus.axi_clk;
+ assign rst_i = bus.rst;
+ assign awvalid_i = bus.awvalid;
+ assign awready_i = bus.awready;
+ assign awaddr_i = bus.awaddr;
+ assign awsize_i = bus.awsize;
+ assign awburst_i = bus.awburst;
+ assign awcache_i = bus.awcache;
+ assign awprot_i = bus.awprot;
+ assign awid_i = bus.awid;
+ assign awlen_i = bus.awlen;
+ assign awlock_i = bus.awlock;
+ assign awqos_i = bus.awqos;
+ assign awregion_i = bus.awregion;
+ assign awuser_i = bus.awuser;
+ assign wvalid_i = bus.wvalid;
+ assign wready_i = bus.wready;
+ assign wlast_i = bus.wlast;
+ assign wdata_i = bus.wdata;
+ assign wstrb_i = bus.wstrb;
+ assign wid_i = bus.wid;
+ assign wuser_i = bus.wuser;
+ assign bwvalid_i = bus.bwvalid;
+ assign bwready_i = bus.bwready;
+ assign bresp_i = bus.bresp;
+ assign bid_i = bus.bid;
+ assign buser_i = bus.buser;
+ assign arvalid_i = bus.arvalid;
+ assign aready_i = bus.aready;
+ assign araddr_i = bus.araddr;
+ assign arsize_i = bus.arsize;
+ assign arburst_i = bus.arburst;
+ assign arcache_i = bus.arcache;
+ assign arprot_i = bus.arprot;
+ assign arid_i = bus.arid;
+ assign arlen_i = bus.arlen;
+ assign arlock_i = bus.arlock;
+ assign arqos_i = bus.arqos;
+ assign aregion_i = bus.aregion;
+ assign aruser_i = bus.aruser;
+ assign rvalid_i = bus.rvalid;
+ assign rready_i = bus.rready;
+ assign rlast_i = bus.rlast;
+ assign rdata_i = bus.rdata;
+ assign rid_i = bus.rid;
+ assign ruser_i = bus.ruser;
+ assign rresp_i = bus.rresp;
+
+ // Proxy handle to UVM monitor
+ axi_m_pkg::axi_m_monitor #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) proxy;
+ // pragma tbx oneway proxy.notify_transaction
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ task wait_for_reset();// pragma tbx xtf
+ @(posedge axi_clk_i) ;
+ do_wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ task do_wait_for_reset();
+ // pragma uvmf custom reset_condition begin
+ wait ( rst_i === 1 ) ;
+ @(posedge axi_clk_i) ;
+ // pragma uvmf custom reset_condition end
+ endtask
+
+ //******************************************************************
+
+ task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf
+ @(posedge axi_clk_i);
+
+ repeat (count-1) @(posedge axi_clk_i);
+ endtask
+
+ //******************************************************************
+ event go;
+ function void start_monitoring();// pragma tbx xtf
+ -> go;
+ endfunction
+
+ // ****************************************************************************
+ initial begin
+ @go;
+ forever begin
+ @(posedge axi_clk_i);
+ do_monitor( axi_m_monitor_struct );
+
+
+ proxy.notify_transaction( axi_m_monitor_struct );
+
+ end
+ end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the monitor BFM. It is called by the monitor within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the monitor BFM needs to be aware of the new configuration
+ // variables.
+ //
+ function void configure(axi_m_configuration_s axi_m_configuration_arg); // pragma tbx xtf
+ initiator_responder = axi_m_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+
+ // ****************************************************************************
+
+ task do_monitor(output axi_m_monitor_s axi_m_monitor_struct);
+ //
+ // Available struct members:
+ // // axi_m_monitor_struct.awvalid
+ // // axi_m_monitor_struct.awready
+ // // axi_m_monitor_struct.awaddr
+ // // axi_m_monitor_struct.awsize
+ // // axi_m_monitor_struct.awburst
+ // // axi_m_monitor_struct.awcache
+ // // axi_m_monitor_struct.awprot
+ // // axi_m_monitor_struct.awid
+ // // axi_m_monitor_struct.awlen
+ // // axi_m_monitor_struct.awlock
+ // // axi_m_monitor_struct.awqos
+ // // axi_m_monitor_struct.awregion
+ // // axi_m_monitor_struct.awuser
+ // // axi_m_monitor_struct.wvalid
+ // // axi_m_monitor_struct.wready
+ // // axi_m_monitor_struct.wlast
+ // // axi_m_monitor_struct.wdata
+ // // axi_m_monitor_struct.wstrb
+ // // axi_m_monitor_struct.wid
+ // // axi_m_monitor_struct.wuser
+ // // axi_m_monitor_struct.bwvalid
+ // // axi_m_monitor_struct.bwready
+ // // axi_m_monitor_struct.bresp
+ // // axi_m_monitor_struct.bid
+ // // axi_m_monitor_struct.buser
+ // // axi_m_monitor_struct.arvalid
+ // // axi_m_monitor_struct.aready
+ // // axi_m_monitor_struct.araddr
+ // // axi_m_monitor_struct.arsize
+ // // axi_m_monitor_struct.arburst
+ // // axi_m_monitor_struct.arcache
+ // // axi_m_monitor_struct.arprot
+ // // axi_m_monitor_struct.arid
+ // // axi_m_monitor_struct.arlen
+ // // axi_m_monitor_struct.arlock
+ // // axi_m_monitor_struct.arqos
+ // // axi_m_monitor_struct.aregion
+ // // axi_m_monitor_struct.aruser
+ // // axi_m_monitor_struct.rvalid
+ // // axi_m_monitor_struct.rready
+ // // axi_m_monitor_struct.rlast
+ // // axi_m_monitor_struct.rdata
+ // // axi_m_monitor_struct.rid
+ // // axi_m_monitor_struct.ruser
+ // // axi_m_monitor_struct.rresp
+ // //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal === 1'b1) @(posedge axi_clk_i);
+ //
+ // How to assign a struct member, named xyz, from a signal.
+ // All available input signals listed.
+ // axi_m_monitor_struct.xyz = awvalid_i; //
+ // axi_m_monitor_struct.xyz = awready_i; //
+ // axi_m_monitor_struct.xyz = awaddr_i; // [AW_WIDTH-1:0]
+ // axi_m_monitor_struct.xyz = awsize_i; // [2:0]
+ // axi_m_monitor_struct.xyz = awburst_i; // [1:0]
+ // axi_m_monitor_struct.xyz = awcache_i; // [3:0]
+ // axi_m_monitor_struct.xyz = awprot_i; // [2:0]
+ // axi_m_monitor_struct.xyz = awid_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = awlen_i; // [LEN-1:0]
+ // axi_m_monitor_struct.xyz = awlock_i; //
+ // axi_m_monitor_struct.xyz = awqos_i; // [3:0]
+ // axi_m_monitor_struct.xyz = awregion_i; // [3:0]
+ // axi_m_monitor_struct.xyz = awuser_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = wvalid_i; //
+ // axi_m_monitor_struct.xyz = wready_i; //
+ // axi_m_monitor_struct.xyz = wlast_i; //
+ // axi_m_monitor_struct.xyz = wdata_i; // [DATA_WIDTH-1:0]
+ // axi_m_monitor_struct.xyz = wstrb_i; // [DATA_WIDTH/8-1:0]
+ // axi_m_monitor_struct.xyz = wid_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = wuser_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = bwvalid_i; //
+ // axi_m_monitor_struct.xyz = bwready_i; //
+ // axi_m_monitor_struct.xyz = bresp_i; // [1:0]
+ // axi_m_monitor_struct.xyz = bid_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = buser_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = arvalid_i; //
+ // axi_m_monitor_struct.xyz = aready_i; //
+ // axi_m_monitor_struct.xyz = araddr_i; // [AW_WIDTH-1:0]
+ // axi_m_monitor_struct.xyz = arsize_i; // [2:0]
+ // axi_m_monitor_struct.xyz = arburst_i; // [1:0]
+ // axi_m_monitor_struct.xyz = arcache_i; // [3:0]
+ // axi_m_monitor_struct.xyz = arprot_i; // [2:0]
+ // axi_m_monitor_struct.xyz = arid_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = arlen_i; // [LEN-1:0]
+ // axi_m_monitor_struct.xyz = arlock_i; //
+ // axi_m_monitor_struct.xyz = arqos_i; // [3:0]
+ // axi_m_monitor_struct.xyz = aregion_i; // [3:0]
+ // axi_m_monitor_struct.xyz = aruser_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = rvalid_i; //
+ // axi_m_monitor_struct.xyz = rready_i; //
+ // axi_m_monitor_struct.xyz = rlast_i; //
+ // axi_m_monitor_struct.xyz = rdata_i; // [DATA_WIDTH-1:0]
+ // axi_m_monitor_struct.xyz = rid_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = ruser_i; // [X-1:0]
+ // axi_m_monitor_struct.xyz = rresp_i; // [1:0]
+ // pragma uvmf custom do_monitor begin
+ // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code
+ // below are examples of how to capture signal values and assign them to
+ // structure members. All available input signals are listed. The 'while'
+ // code example shows how to wait for a synchronous flow control signal. This
+ // task should return when a complete transfer has been observed. Once this task is
+ // exited with captured values, it is then called again to wait for and observe
+ // the next transfer. One clock cycle is consumed between calls to do_monitor.
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ @(posedge axi_clk_i);
+ // pragma uvmf custom do_monitor end
+ endtask
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_random_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_random_sequence.svh
new file mode 100644
index 00000000..06a95ce8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_random_sequence.svh
@@ -0,0 +1,73 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This sequences randomizes the axi_m transaction and sends it
+// to the UVM driver.
+//
+// This sequence constructs and randomizes a axi_m_transaction.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_random_sequence #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ )
+ extends axi_m_sequence_base #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ );
+
+ `uvm_object_param_utils( axi_m_random_sequence #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*****************************************************************
+ function new(string name = "");
+ super.new(name);
+ endfunction: new
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is automatically executed when this sequence is started using the
+ // start(sequencerHandle) task.
+ //
+ task body();
+
+ // Construct the transaction
+ req=axi_m_transaction#(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )::type_id::create("req");
+ start_item(req);
+ // Randomize the transaction
+ if(!req.randomize()) `uvm_fatal("SEQ", "axi_m_random_sequence::body()-axi_m_transaction randomization failed")
+ // Send the transaction to the axi_m_driver_bfm via the sequencer and axi_m_driver.
+ finish_item(req);
+ `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM)
+
+ endtask
+
+endclass: axi_m_random_sequence
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_responder_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_responder_sequence.svh
new file mode 100644
index 00000000..caf31664
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_responder_sequence.svh
@@ -0,0 +1,69 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class can be used to provide stimulus when an interface
+// has been configured to run in a responder mode. It
+// will never finish by default, always going back to the driver
+// and driver BFM for the next transaction with which to respond.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_responder_sequence #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ )
+ extends axi_m_sequence_base #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ );
+
+ `uvm_object_param_utils( axi_m_responder_sequence #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ function new(string name = "axi_m_responder_sequence");
+ super.new(name);
+ endfunction
+
+ task body();
+ req=axi_m_transaction#(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )::type_id::create("req");
+ forever begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body begin
+ // UVMF_CHANGE_ME : Do something here with the resulting req item. The
+ // finish_item() call above will block until the req transaction is ready
+ // to be handled by the responder sequence.
+ // If this was an item that required a response, the expectation is
+ // that the response should be populated within this transaction now.
+ `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH)
+ // pragma uvmf custom body end
+ end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_sequence_base.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_sequence_base.svh
new file mode 100644
index 00000000..3924f333
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_sequence_base.svh
@@ -0,0 +1,126 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the class used as the base class for all sequences
+// for this interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_sequence_base #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_sequence_base #(
+ .REQ(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )),
+ .RSP(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )));
+
+ `uvm_object_param_utils( axi_m_sequence_base #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ // variables
+ typedef axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) axi_m_transaction_req_t;
+ axi_m_transaction_req_t req;
+ typedef axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) axi_m_transaction_rsp_t;
+ axi_m_transaction_rsp_t rsp;
+
+ // Event for identifying when a response was received from the sequencer
+ event new_rsp;
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ // TASK : get_responses()
+ // This task recursively gets sequence item responses from the sequencer.
+ //
+ virtual task get_responses();
+ fork
+ begin
+ // Block until new rsp available
+ get_response(rsp);
+ // New rsp received. Indicate to sequence using event.
+ ->new_rsp;
+ // Display the received response transaction
+ `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM)
+ end
+ join_none
+ endtask
+
+ // ****************************************************************************
+ // TASK : pre_body()
+ // This task is called automatically when start is called with call_pre_post set to 1 (default).
+ // By calling get_responses() within pre_body() any derived sequences are automatically
+ // processing response transactions. Only un-comment this call to get_responses() if you
+ // have configured the interface driver to utilize the response transaction path by setting
+ // the configuration variable "return_transaction_response" to 1. Otherwise it is possible
+ // to impact runtime performance and memory utilization.
+ //
+ virtual task pre_body();
+ // pragma uvmf custom pre_body begin
+// get_responses();
+ // pragma uvmf custom pre_body end
+ endtask
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is called automatically when start is called. This sequence sends
+ // a req sequence item to the sequencer identified as an argument in the call
+ // to start.
+ //
+ virtual task body();
+ // pragma uvmf custom body begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body end
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name ="");
+ super.new( name );
+ // pragma uvmf custom new begin
+ req = axi_m_transaction_req_t::type_id::create("req");
+ rsp = axi_m_transaction_rsp_t::type_id::create("rsp");
+ // pragma uvmf custom new end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction.svh
new file mode 100644
index 00000000..18c07970
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction.svh
@@ -0,0 +1,333 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class defines the variables required for an axi_m
+// transaction. Class variables to be displayed in waveform transaction
+// viewing are added to the transaction viewing stream in the add_to_wave
+// function.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_transaction #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvmf_transaction_base;
+
+ `uvm_object_param_utils( axi_m_transaction #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ bit awvalid ;
+ bit awready ;
+ rand bit [AW_WIDTH-1:0] awaddr ;
+ rand bit awsize ;
+ rand bit awburst ;
+ rand bit awcache ;
+ rand bit awprot ;
+ rand bit [X-1:0] awid ;
+ rand bit [LEN-1:0] awlen ;
+ rand bit awlock ;
+ rand bit awqos ;
+ rand bit awregion ;
+ rand bit [X-1:0] awuser ;
+ bit wvalid ;
+ bit wready ;
+ bit wlast ;
+ rand bit [DATA_WIDTH-1:0] wdata ;
+ rand bit [DATA_WIDTH/8-1:0] wstrb ;
+ bit [X-1:0] wid ;
+ rand bit [X-1:0] wuser ;
+ bit bwvalid ;
+ bit bwready ;
+ rand bit bresp ;
+ bit [X-1:0] bid ;
+ rand bit [X-1:0] buser ;
+ bit arvalid ;
+ bit aready ;
+ rand bit [AW_WIDTH-1:0] araddr ;
+ rand bit arsize ;
+ rand bit arburst ;
+ rand bit arcache ;
+ rand bit arprot ;
+ rand bit [X-1:0] arid ;
+ rand bit [LEN-1:0] arlen ;
+ rand bit arlock ;
+ rand bit arqos ;
+ rand bit aregion ;
+ rand bit [X-1:0] aruser ;
+ bit rvalid ;
+ bit rready ;
+ bit rlast ;
+ rand bit [DATA_WIDTH-1:0] rdata ;
+ rand bit [X-1:0] rid ;
+ rand bit [X-1:0] ruser ;
+ rand bit rresp ;
+
+ //Constraints for the transaction variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*******************************************************************
+ //*******************************************************************
+ // Macros that define structs and associated functions are
+ // located in axi_m_macros.svh
+
+ //*******************************************************************
+ // Monitor macro used by axi_m_monitor and axi_m_monitor_bfm
+ // This struct is defined in axi_m_macros.svh
+ `axi_m_MONITOR_STRUCT
+ axi_m_monitor_s axi_m_monitor_struct;
+ //*******************************************************************
+ // FUNCTION: to_monitor_struct()
+ // This function packs transaction variables into a axi_m_monitor_s
+ // structure. The function returns the handle to the axi_m_monitor_struct.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_TO_MONITOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_monitor_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_FROM_MONITOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Initiator macro used by axi_m_driver and axi_m_driver_bfm
+ // to communicate initiator driven data to axi_m_driver_bfm.
+ // This struct is defined in axi_m_macros.svh
+ `axi_m_INITIATOR_STRUCT
+ axi_m_initiator_s axi_m_initiator_struct;
+ //*******************************************************************
+ // FUNCTION: to_initiator_struct()
+ // This function packs transaction variables into a axi_m_initiator_s
+ // structure. The function returns the handle to the axi_m_initiator_struct.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_TO_INITIATOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_initiator_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_FROM_INITIATOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Responder macro used by axi_m_driver and axi_m_driver_bfm
+ // to communicate Responder driven data to axi_m_driver_bfm.
+ // This struct is defined in axi_m_macros.svh
+ `axi_m_RESPONDER_STRUCT
+ axi_m_responder_s axi_m_responder_struct;
+ //*******************************************************************
+ // FUNCTION: to_responder_struct()
+ // This function packs transaction variables into a axi_m_responder_s
+ // structure. The function returns the handle to the axi_m_responder_struct.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_TO_RESPONDER_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_responder_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in axi_m_macros.svh
+ `axi_m_FROM_RESPONDER_STRUCT_FUNCTION
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: convert2string()
+ // This function converts all variables in this class to a single string for
+ // logfile reporting.
+ //
+ virtual function string convert2string();
+ // pragma uvmf custom convert2string begin
+ // UVMF_CHANGE_ME : Customize format if desired.
+ return $sformatf("awvalid:0x%x awready:0x%x awaddr:0x%x awsize:0x%x awburst:0x%x awcache:0x%x awprot:0x%x awid:0x%x awlen:0x%x awlock:0x%x awqos:0x%x awregion:0x%x awuser:0x%x wvalid:0x%x wready:0x%x wlast:0x%x wdata:0x%x wstrb:0x%x wid:0x%x wuser:0x%x bwvalid:0x%x bwready:0x%x bresp:0x%x bid:0x%x buser:0x%x arvalid:0x%x aready:0x%x araddr:0x%x arsize:0x%x arburst:0x%x arcache:0x%x arprot:0x%x arid:0x%x arlen:0x%x arlock:0x%x arqos:0x%x aregion:0x%x aruser:0x%x rvalid:0x%x rready:0x%x rlast:0x%x rdata:0x%x rid:0x%x ruser:0x%x rresp:0x%x ",awvalid,awready,awaddr,awsize,awburst,awcache,awprot,awid,awlen,awlock,awqos,awregion,awuser,wvalid,wready,wlast,wdata,wstrb,wid,wuser,bwvalid,bwready,bresp,bid,buser,arvalid,aready,araddr,arsize,arburst,arcache,arprot,arid,arlen,arlock,arqos,aregion,aruser,rvalid,rready,rlast,rdata,rid,ruser,rresp);
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_print()
+ // This function is automatically called when the .print() function
+ // is called on this class.
+ //
+ virtual function void do_print(uvm_printer printer);
+ // pragma uvmf custom do_print begin
+ // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2.
+ // Update based on your own printing preference according to your preferred UVM version
+ $display(convert2string());
+ // pragma uvmf custom do_print end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_compare()
+ // This function is automatically called when the .compare() function
+ // is called on this class.
+ //
+ virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer);
+ axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) RHS;
+ if (!$cast(RHS,rhs)) return 0;
+ // pragma uvmf custom do_compare begin
+ // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare
+ return (super.do_compare(rhs,comparer)
+ );
+ // pragma uvmf custom do_compare end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_copy()
+ // This function is automatically called when the .copy() function
+ // is called on this class.
+ //
+ virtual function void do_copy (uvm_object rhs);
+ axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ ) RHS;
+ assert($cast(RHS,rhs));
+ // pragma uvmf custom do_copy begin
+ super.do_copy(rhs);
+ this.awvalid = RHS.awvalid;
+ this.awready = RHS.awready;
+ this.awaddr = RHS.awaddr;
+ this.awsize = RHS.awsize;
+ this.awburst = RHS.awburst;
+ this.awcache = RHS.awcache;
+ this.awprot = RHS.awprot;
+ this.awid = RHS.awid;
+ this.awlen = RHS.awlen;
+ this.awlock = RHS.awlock;
+ this.awqos = RHS.awqos;
+ this.awregion = RHS.awregion;
+ this.awuser = RHS.awuser;
+ this.wvalid = RHS.wvalid;
+ this.wready = RHS.wready;
+ this.wlast = RHS.wlast;
+ this.wdata = RHS.wdata;
+ this.wstrb = RHS.wstrb;
+ this.wid = RHS.wid;
+ this.wuser = RHS.wuser;
+ this.bwvalid = RHS.bwvalid;
+ this.bwready = RHS.bwready;
+ this.bresp = RHS.bresp;
+ this.bid = RHS.bid;
+ this.buser = RHS.buser;
+ this.arvalid = RHS.arvalid;
+ this.aready = RHS.aready;
+ this.araddr = RHS.araddr;
+ this.arsize = RHS.arsize;
+ this.arburst = RHS.arburst;
+ this.arcache = RHS.arcache;
+ this.arprot = RHS.arprot;
+ this.arid = RHS.arid;
+ this.arlen = RHS.arlen;
+ this.arlock = RHS.arlock;
+ this.arqos = RHS.arqos;
+ this.aregion = RHS.aregion;
+ this.aruser = RHS.aruser;
+ this.rvalid = RHS.rvalid;
+ this.rready = RHS.rready;
+ this.rlast = RHS.rlast;
+ this.rdata = RHS.rdata;
+ this.rid = RHS.rid;
+ this.ruser = RHS.ruser;
+ this.rresp = RHS.rresp;
+ // pragma uvmf custom do_copy end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: add_to_wave()
+ // This function is used to display variables in this class in the waveform
+ // viewer. The start_time and end_time variables must be set before this
+ // function is called. If the start_time and end_time variables are not set
+ // the transaction will be hidden at 0ns on the waveform display.
+ //
+ virtual function void add_to_wave(int transaction_viewing_stream_h);
+ `ifdef QUESTA
+ if (transaction_view_h == 0) begin
+ transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"axi_m_transaction",start_time);
+ end
+ super.add_to_wave(transaction_view_h);
+ // pragma uvmf custom add_to_wave begin
+ // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below
+ // case()
+ // 1 : $add_color(transaction_view_h,"red");
+ // default : $add_color(transaction_view_h,"grey");
+ // endcase
+ // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer
+ $add_attribute(transaction_view_h,awvalid,"awvalid");
+ $add_attribute(transaction_view_h,awready,"awready");
+ $add_attribute(transaction_view_h,awaddr,"awaddr");
+ $add_attribute(transaction_view_h,awsize,"awsize");
+ $add_attribute(transaction_view_h,awburst,"awburst");
+ $add_attribute(transaction_view_h,awcache,"awcache");
+ $add_attribute(transaction_view_h,awprot,"awprot");
+ $add_attribute(transaction_view_h,awid,"awid");
+ $add_attribute(transaction_view_h,awlen,"awlen");
+ $add_attribute(transaction_view_h,awlock,"awlock");
+ $add_attribute(transaction_view_h,awqos,"awqos");
+ $add_attribute(transaction_view_h,awregion,"awregion");
+ $add_attribute(transaction_view_h,awuser,"awuser");
+ $add_attribute(transaction_view_h,wvalid,"wvalid");
+ $add_attribute(transaction_view_h,wready,"wready");
+ $add_attribute(transaction_view_h,wlast,"wlast");
+ $add_attribute(transaction_view_h,wdata,"wdata");
+ $add_attribute(transaction_view_h,wstrb,"wstrb");
+ $add_attribute(transaction_view_h,wid,"wid");
+ $add_attribute(transaction_view_h,wuser,"wuser");
+ $add_attribute(transaction_view_h,bwvalid,"bwvalid");
+ $add_attribute(transaction_view_h,bwready,"bwready");
+ $add_attribute(transaction_view_h,bresp,"bresp");
+ $add_attribute(transaction_view_h,bid,"bid");
+ $add_attribute(transaction_view_h,buser,"buser");
+ $add_attribute(transaction_view_h,arvalid,"arvalid");
+ $add_attribute(transaction_view_h,aready,"aready");
+ $add_attribute(transaction_view_h,araddr,"araddr");
+ $add_attribute(transaction_view_h,arsize,"arsize");
+ $add_attribute(transaction_view_h,arburst,"arburst");
+ $add_attribute(transaction_view_h,arcache,"arcache");
+ $add_attribute(transaction_view_h,arprot,"arprot");
+ $add_attribute(transaction_view_h,arid,"arid");
+ $add_attribute(transaction_view_h,arlen,"arlen");
+ $add_attribute(transaction_view_h,arlock,"arlock");
+ $add_attribute(transaction_view_h,arqos,"arqos");
+ $add_attribute(transaction_view_h,aregion,"aregion");
+ $add_attribute(transaction_view_h,aruser,"aruser");
+ $add_attribute(transaction_view_h,rvalid,"rvalid");
+ $add_attribute(transaction_view_h,rready,"rready");
+ $add_attribute(transaction_view_h,rlast,"rlast");
+ $add_attribute(transaction_view_h,rdata,"rdata");
+ $add_attribute(transaction_view_h,rid,"rid");
+ $add_attribute(transaction_view_h,ruser,"ruser");
+ $add_attribute(transaction_view_h,rresp,"rresp");
+ // pragma uvmf custom add_to_wave end
+ $end_transaction(transaction_view_h,end_time);
+ $free_transaction(transaction_view_h);
+ `endif // QUESTA
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction_coverage.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction_coverage.svh
new file mode 100644
index 00000000..088ea2eb
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_transaction_coverage.svh
@@ -0,0 +1,129 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class records axi_m transaction information using
+// a covergroup named axi_m_transaction_cg. An instance of this
+// coverage component is instantiated in the uvmf_parameterized_agent
+// if the has_coverage flag is set.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class axi_m_transaction_coverage #(
+ int AW_WIDTH = 32,
+ int LEN = 8,
+ int DATA_WIDTH = 32,
+ int X = 16
+ ) extends uvm_subscriber #(.T(axi_m_transaction #(
+ .AW_WIDTH(AW_WIDTH),
+ .LEN(LEN),
+ .DATA_WIDTH(DATA_WIDTH),
+ .X(X)
+ )));
+
+ `uvm_component_param_utils( axi_m_transaction_coverage #(
+ AW_WIDTH,
+ LEN,
+ DATA_WIDTH,
+ X
+ ))
+
+ T coverage_trans;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ covergroup axi_m_transaction_cg;
+ // pragma uvmf custom covergroup begin
+ // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs.
+ option.auto_bin_max=1024;
+ option.per_instance=1;
+ awvalid: coverpoint coverage_trans.awvalid;
+ awready: coverpoint coverage_trans.awready;
+ awaddr: coverpoint coverage_trans.awaddr;
+ awsize: coverpoint coverage_trans.awsize;
+ awburst: coverpoint coverage_trans.awburst;
+ awcache: coverpoint coverage_trans.awcache;
+ awprot: coverpoint coverage_trans.awprot;
+ awid: coverpoint coverage_trans.awid;
+ awlen: coverpoint coverage_trans.awlen;
+ awlock: coverpoint coverage_trans.awlock;
+ awqos: coverpoint coverage_trans.awqos;
+ awregion: coverpoint coverage_trans.awregion;
+ awuser: coverpoint coverage_trans.awuser;
+ wvalid: coverpoint coverage_trans.wvalid;
+ wready: coverpoint coverage_trans.wready;
+ wlast: coverpoint coverage_trans.wlast;
+ wdata: coverpoint coverage_trans.wdata;
+ wstrb: coverpoint coverage_trans.wstrb;
+ wid: coverpoint coverage_trans.wid;
+ wuser: coverpoint coverage_trans.wuser;
+ bwvalid: coverpoint coverage_trans.bwvalid;
+ bwready: coverpoint coverage_trans.bwready;
+ bresp: coverpoint coverage_trans.bresp;
+ bid: coverpoint coverage_trans.bid;
+ buser: coverpoint coverage_trans.buser;
+ arvalid: coverpoint coverage_trans.arvalid;
+ aready: coverpoint coverage_trans.aready;
+ araddr: coverpoint coverage_trans.araddr;
+ arsize: coverpoint coverage_trans.arsize;
+ arburst: coverpoint coverage_trans.arburst;
+ arcache: coverpoint coverage_trans.arcache;
+ arprot: coverpoint coverage_trans.arprot;
+ arid: coverpoint coverage_trans.arid;
+ arlen: coverpoint coverage_trans.arlen;
+ arlock: coverpoint coverage_trans.arlock;
+ arqos: coverpoint coverage_trans.arqos;
+ aregion: coverpoint coverage_trans.aregion;
+ aruser: coverpoint coverage_trans.aruser;
+ rvalid: coverpoint coverage_trans.rvalid;
+ rready: coverpoint coverage_trans.rready;
+ rlast: coverpoint coverage_trans.rlast;
+ rdata: coverpoint coverage_trans.rdata;
+ rid: coverpoint coverage_trans.rid;
+ ruser: coverpoint coverage_trans.ruser;
+ rresp: coverpoint coverage_trans.rresp;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new(string name="", uvm_component parent=null);
+ super.new(name,parent);
+ axi_m_transaction_cg=new;
+ `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.")
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION : build_phase()
+ // This function is the standard UVM build_phase.
+ //
+ function void build_phase(uvm_phase phase);
+ axi_m_transaction_cg.set_inst_name($sformatf("axi_m_transaction_cg_%s",get_full_name()));
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: write (T t)
+ // This function is automatically executed when a transaction arrives on the
+ // analysis_export. It copies values from the variables in the transaction
+ // to local variables used to collect functional coverage.
+ //
+ virtual function void write (T t);
+ `uvm_info("COV","Received transaction",UVM_HIGH);
+ coverage_trans = t;
+ axi_m_transaction_cg.sample();
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs.svh
new file mode 100644
index 00000000..43d85640
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs.svh
@@ -0,0 +1,20 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the host server when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs_hdl.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs_hdl.svh
new file mode 100644
index 00000000..74738c8c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/src/axi_m_typedefs_hdl.svh
@@ -0,0 +1,21 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the emulator when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/yaml/axi_m_interface.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/yaml/axi_m_interface.yaml
new file mode 100644
index 00000000..98e0bca3
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/axi_m_pkg/yaml/axi_m_interface.yaml
@@ -0,0 +1,481 @@
+uvmf:
+ interfaces:
+ axi_m:
+ clock: axi_clk
+ config_constraints: []
+ config_vars: []
+ existing_library_component: 'True'
+ gen_inbound_streaming_driver: 'False'
+ hdl_pkg_parameters: []
+ hdl_typedefs: []
+ hvl_pkg_parameters: []
+ hvl_typedefs: []
+ parameters:
+ - name: AW_WIDTH
+ type: int
+ value: '32'
+ - name: LEN
+ type: int
+ value: '8'
+ - name: DATA_WIDTH
+ type: int
+ value: '32'
+ - name: X
+ type: int
+ value: '16'
+ ports:
+ - dir: output
+ name: awvalid
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: awready
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: awaddr
+ reset_value: '''bz'
+ width: AW_WIDTH
+ - dir: output
+ name: awsize
+ reset_value: '''bz'
+ width: '3'
+ - dir: output
+ name: awburst
+ reset_value: '''bz'
+ width: '2'
+ - dir: output
+ name: awcache
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: awprot
+ reset_value: '''bz'
+ width: '3'
+ - dir: output
+ name: awid
+ reset_value: '''bz'
+ width: X
+ - dir: output
+ name: awlen
+ reset_value: '''bz'
+ width: LEN
+ - dir: output
+ name: awlock
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: awqos
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: awregion
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: awuser
+ reset_value: '''bz'
+ width: X
+ - dir: output
+ name: wvalid
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: wready
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: wlast
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: wdata
+ reset_value: '''bz'
+ width: DATA_WIDTH
+ - dir: output
+ name: wstrb
+ reset_value: '''bz'
+ width: DATA_WIDTH/8
+ - dir: output
+ name: wid
+ reset_value: '''bz'
+ width: X
+ - dir: output
+ name: wuser
+ reset_value: '''bz'
+ width: X
+ - dir: input
+ name: bwvalid
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: bwready
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: bresp
+ reset_value: '''bz'
+ width: '2'
+ - dir: input
+ name: bid
+ reset_value: '''bz'
+ width: X
+ - dir: input
+ name: buser
+ reset_value: '''bz'
+ width: X
+ - dir: output
+ name: arvalid
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: aready
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: araddr
+ reset_value: '''bz'
+ width: AW_WIDTH
+ - dir: output
+ name: arsize
+ reset_value: '''bz'
+ width: '3'
+ - dir: output
+ name: arburst
+ reset_value: '''bz'
+ width: '2'
+ - dir: output
+ name: arcache
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: arprot
+ reset_value: '''bz'
+ width: '3'
+ - dir: output
+ name: arid
+ reset_value: '''bz'
+ width: X
+ - dir: output
+ name: arlen
+ reset_value: '''bz'
+ width: LEN
+ - dir: output
+ name: arlock
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: arqos
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: aregion
+ reset_value: '''bz'
+ width: '4'
+ - dir: output
+ name: aruser
+ reset_value: '''bz'
+ width: X
+ - dir: input
+ name: rvalid
+ reset_value: '''bz'
+ width: '1'
+ - dir: output
+ name: rready
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: rlast
+ reset_value: '''bz'
+ width: '1'
+ - dir: input
+ name: rdata
+ reset_value: '''bz'
+ width: DATA_WIDTH
+ - dir: input
+ name: rid
+ reset_value: '''bz'
+ width: X
+ - dir: input
+ name: ruser
+ reset_value: '''bz'
+ width: X
+ - dir: input
+ name: rresp
+ reset_value: '''bz'
+ width: '2'
+ reset: rst
+ reset_assertion_level: 'False'
+ transaction_constraints: []
+ transaction_vars:
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: awvalid
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: awready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awaddr
+ type: bit [AW_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awsize
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awburst
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awcache
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awprot
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awid
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awlen
+ type: bit [LEN-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awlock
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awqos
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awregion
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: awuser
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: wvalid
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: wready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: wlast
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: wdata
+ type: bit [DATA_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: wstrb
+ type: bit [DATA_WIDTH/8-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: wid
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: wuser
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: bwvalid
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: bwready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: bresp
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: bid
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: buser
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: arvalid
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: aready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: araddr
+ type: bit [AW_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arsize
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arburst
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arcache
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arprot
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arid
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arlen
+ type: bit [LEN-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arlock
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: arqos
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: aregion
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: aruser
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: rvalid
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: rready
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'False'
+ name: rlast
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: rdata
+ type: bit [DATA_WIDTH-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: rid
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: ruser
+ type: bit [X-1:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'False'
+ isrand: 'True'
+ name: rresp
+ type: bit
+ unpacked_dimension: ''
+ use_dpi_link: 'False'
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.project
new file mode 100644
index 00000000..548e937e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.project
@@ -0,0 +1,30 @@
+
+
+ spi_s_pkg
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.svproject
new file mode 100644
index 00000000..dbc66e83
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/Makefile
new file mode 100644
index 00000000..d4c678b7
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/Makefile
@@ -0,0 +1,66 @@
+# spi_s interface packages source
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+spi_s_PKG = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f
+
+spi_s_PKG_HDL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f
+
+spi_s_PKG_XRTL = \
+ +incdir+$(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_xrtl.f
+
+COMP_spi_s_PKG_TGT_0 = q_comp_spi_s_pkg
+COMP_spi_s_PKG_TGT_1 = v_comp_spi_s_pkg
+COMP_spi_s_PKG_TGT = $(COMP_spi_s_PKG_TGT_$(USE_VELOCE))
+
+comp_spi_s_pkg: $(COMP_spi_s_PKG_TGT)
+
+q_comp_spi_s_pkg:
+ $(HDL_COMP_CMD) $(spi_s_PKG_HDL)
+ $(HVL_COMP_CMD) $(spi_s_PKG)
+ $(HDL_COMP_CMD) $(spi_s_PKG_XRTL)
+
+v_comp_spi_s_pkg:
+ $(HVL_COMP_CMD) $(spi_s_PKG_HDL)
+ $(HVL_COMP_CMD) $(spi_s_PKG)
+ $(VELANALYZE_CMD) $(spi_s_PKG_HDL)
+ $(VELANALYZE_HVL_CMD) $(spi_s_PKG)
+ $(HDL_COMP_CMD) $(spi_s_PKG_XRTL)
+
+ifeq ($(MTI_VCO_MODE),64)
+ GCC_COMP_ARCH = -m64
+else
+ GCC_COMP_ARCH = -m32
+endif
+
+export spi_s_IF_DPI_SRC ?= $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/dpi
+
+C_FILE_COMPILE_LIST_spi_s_pkg = \
+
+O_FILE_COMPILE_LIST_spi_s_pkg = $(notdir $(C_FILE_COMPILE_LIST_spi_s_pkg:.c=.o))
+
+GCC_COMP_ARGS_spi_s_pkg += -I$(spi_s_IF_DPI_SRC) \
+ -fPIC
+
+GCC_COMP_ARGS_spi_s_pkg += $(spi_s_IF_GCC_COMP_ARGUMENTS)
+
+GCC_LINK_ARGS_spi_s_pkg += \
+ \
+ -o .so
+
+comp_spi_s_pkg_c_files:
+ @echo "--------------------------------"
+ @echo "Compiling Interface C source"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_COMP_ARGS_spi_s_pkg) $(C_FILE_COMPILE_LIST_spi_s_pkg)
+ @echo "--------------------------------"
+ @echo "Linking Interface C objects into a shared object"
+ @echo "--------------------------------"
+ gcc $(GCC_COMP_ARCH) $(GCC_LINK_ARGS_spi_s_pkg) $(O_FILE_COMPILE_LIST_spi_s_pkg)
+ @echo "--------------------------------"
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/compile.do
new file mode 100644
index 00000000..303c17b2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/compile.do
@@ -0,0 +1,14 @@
+# Tcl do file for compile of spi_s interface
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f
+
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 +incdir+$env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg \
+ -F $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_s_pkg/spi_s_filelist_xrtl.f
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s.compile
new file mode 100644
index 00000000..8b8aa6e2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s.compile
@@ -0,0 +1,3 @@
+needs:
+ - spi_s_hvl.compile
+ - spi_s_hdl.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_bfm.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_bfm.vinfo
new file mode 100644
index 00000000..0f12baaf
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_bfm.vinfo
@@ -0,0 +1,6 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+@use spi_s_pkg_hdl.vinfo
++incdir+@vinfodir
+src/spi_s_if.sv
+src/spi_s_driver_bfm.sv
+src/spi_s_monitor_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_common.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_common.compile
new file mode 100644
index 00000000..08bd125f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_common.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+incdir:
+ - .
+ - ${uvm_path}/src
+src:
+ - spi_s_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f
new file mode 100644
index 00000000..d7724020
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f
new file mode 100644
index 00000000..cbc4a9ef
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f
@@ -0,0 +1 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/spi_s_pkg.sv
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_xrtl.f b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_xrtl.f
new file mode 100644
index 00000000..175919ef
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_filelist_xrtl.f
@@ -0,0 +1,3 @@
+$UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/src/spi_s_if.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/src/spi_s_monitor_bfm.sv
+$UVMF_VIP_LIBRARY_HOME/interface_packages/spi_s_pkg/src/spi_s_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hdl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hdl.compile
new file mode 100644
index 00000000..e63a6a97
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hdl.compile
@@ -0,0 +1,9 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.compile
+ - ./spi_s_common.compile
+incdir:
+ - .
+src:
+ - src/spi_s_if.sv
+ - src/spi_s_monitor_bfm.sv
+ - src/spi_s_driver_bfm.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hvl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hvl.compile
new file mode 100644
index 00000000..569dc399
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_hvl.compile
@@ -0,0 +1,7 @@
+needs:
+ - $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.compile
+ - ./spi_s_common.compile
+incdir:
+ - .
+src:
+ - spi_s_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.sv
new file mode 100644
index 00000000..90ad9fe1
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.sv
@@ -0,0 +1,77 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that will run on the host simulator.
+//
+// CONTAINS:
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+// -
+
+// -
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package spi_s_pkg;
+
+ import uvm_pkg::*;
+ import uvmf_base_pkg_hdl::*;
+ import uvmf_base_pkg::*;
+ import spi_s_pkg_hdl::*;
+
+ `include "uvm_macros.svh"
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+ `include "src/spi_s_macros.svh"
+
+ export spi_s_pkg_hdl::*;
+
+
+
+ // Parameters defined as HVL parameters
+
+ `include "src/spi_s_typedefs.svh"
+ `include "src/spi_s_transaction.svh"
+
+ `include "src/spi_s_configuration.svh"
+ `include "src/spi_s_driver.svh"
+ `include "src/spi_s_monitor.svh"
+
+ `include "src/spi_s_transaction_coverage.svh"
+ `include "src/spi_s_sequence_base.svh"
+ `include "src/spi_s_random_sequence.svh"
+
+ `include "src/spi_s_responder_sequence.svh"
+ `include "src/spi_s2reg_adapter.svh"
+
+ `include "src/spi_s_agent.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // UVMF_CHANGE_ME : When adding new interface sequences to the src directory
+ // be sure to add the sequence file here so that it will be
+ // compiled as part of the interface package. Be sure to place
+ // the new sequence after any base sequences of the new sequence.
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.vinfo
new file mode 100644
index 00000000..b849145a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg.vinfo
@@ -0,0 +1,4 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg.vinfo
+@use spi_s_pkg_hdl.vinfo
++incdir+@vinfodir
+spi_s_pkg.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.sv
new file mode 100644
index 00000000..d2773bc0
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.sv
@@ -0,0 +1,38 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// PACKAGE: This file defines all of the files contained in the
+// interface package that needs to be compiled and synthesized
+// for running on Veloce.
+//
+// CONTAINS:
+// -
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+package spi_s_pkg_hdl;
+
+ import uvmf_base_pkg_hdl::*;
+
+ // pragma uvmf custom package_imports_additional begin
+ // pragma uvmf custom package_imports_additional end
+
+ // Parameters defined as HDL parameters
+
+ `include "src/spi_s_typedefs_hdl.svh"
+ `include "src/spi_s_macros.svh"
+
+ // pragma uvmf custom package_item_additional begin
+ // pragma uvmf custom package_item_additional end
+
+endpackage
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.vinfo
new file mode 100644
index 00000000..969589c7
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_hdl.vinfo
@@ -0,0 +1,2 @@
+@use $UVMF_HOME/uvmf_base_pkg/uvmf_base_pkg_hdl.vinfo
+spi_s_pkg_hdl.sv
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_sve.F
new file mode 100644
index 00000000..13508e71
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/spi_s_pkg_sve.F
@@ -0,0 +1,10 @@
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
++incdir+.
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/spi_s_pkg/spi_s_filelist_hdl.f
+-f ${UVMF_VIP_LIBRARY_HOME}/interface_packages/spi_s_pkg/spi_s_filelist_hvl.f
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s2reg_adapter.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s2reg_adapter.svh
new file mode 100644
index 00000000..f6ce4828
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s2reg_adapter.svh
@@ -0,0 +1,98 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the UVM register adapter for the spi_s interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s2reg_adapter extends uvm_reg_adapter;
+
+ `uvm_object_utils( spi_s2reg_adapter )
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //--------------------------------------------------------------------
+ // new
+ //--------------------------------------------------------------------
+ function new (string name = "spi_s2reg_adapter" );
+ super.new(name);
+ // pragma uvmf custom new begin
+ // UVMF_CHANGE_ME : Configure the adapter regarding byte enables and provides response.
+
+ // Does the protocol the Agent is modeling support byte enables?
+ // 0 = NO
+ // 1 = YES
+ supports_byte_enable = 0;
+
+ // Does the Agent's Driver provide separate response sequence items?
+ // i.e. Does the driver call seq_item_port.put()
+ // and do the sequences call get_response()?
+ // 0 = NO
+ // 1 = YES
+ provides_responses = 0;
+ // pragma uvmf custom new end
+
+ endfunction: new
+
+ //--------------------------------------------------------------------
+ // reg2bus
+ //--------------------------------------------------------------------
+ virtual function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
+
+ spi_s_transaction trans_h = spi_s_transaction ::type_id::create("trans_h");
+
+ // pragma uvmf custom reg2bus begin
+ // UVMF_CHANGE_ME : Fill in the reg2bus adapter mapping registe fields to protocol fields.
+
+ //Adapt the following for your sequence item type
+ // trans_h.op = (rw.kind == UVM_READ) ? WB_READ : WB_WRITE;
+ //Copy over address
+ // trans_h.addr = rw.addr;
+ //Copy over write data
+ // trans_h.data = rw.data;
+
+ // pragma uvmf custom reg2bus end
+
+ // Return the adapted transaction
+ return trans_h;
+
+ endfunction: reg2bus
+
+ //--------------------------------------------------------------------
+ // bus2reg
+ //--------------------------------------------------------------------
+ virtual function void bus2reg(uvm_sequence_item bus_item,
+ ref uvm_reg_bus_op rw);
+ spi_s_transaction trans_h;
+ if (!$cast(trans_h, bus_item)) begin
+ `uvm_fatal("ADAPT","Provided bus_item is not of the correct type")
+ return;
+ end
+ // pragma uvmf custom bus2reg begin
+ // UVMF_CHANGE_ME : Fill in the bus2reg adapter mapping protocol fields to register fields.
+ //Adapt the following for your sequence item type
+ //Copy over instruction type
+ // rw.kind = (trans_h.op == WB_WRITE) ? UVM_WRITE : UVM_READ;
+ //Copy over address
+ // rw.addr = trans_h.addr;
+ //Copy over read data
+ // rw.data = trans_h.data;
+ //Check for errors on the bus and return UVM_NOT_OK if there is an error
+ // rw.status = UVM_IS_OK;
+ // pragma uvmf custom bus2reg end
+
+ endfunction: bus2reg
+
+endclass : spi_s2reg_adapter
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_agent.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_agent.svh
new file mode 100644
index 00000000..9a9a24d8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_agent.svh
@@ -0,0 +1,53 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: Protocol specific agent class definition
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_agent extends uvmf_parameterized_agent #(
+ .CONFIG_T(spi_s_configuration ),
+ .DRIVER_T(spi_s_driver ),
+ .MONITOR_T(spi_s_monitor ),
+ .COVERAGE_T(spi_s_transaction_coverage ),
+ .TRANS_T(spi_s_transaction )
+ );
+
+ `uvm_component_utils( spi_s_agent )
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// FUNCTION : new()
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+ // FUNCTION: build_phase
+ virtual function void build_phase(uvm_phase phase);
+// pragma uvmf custom build_phase_pre_super begin
+// pragma uvmf custom build_phase_pre_super end
+ super.build_phase(phase);
+ if (configuration.active_passive == ACTIVE) begin
+ // Place sequencer handle into configuration object
+ // so that it may be retrieved from configuration
+ // rather than using uvm_config_db
+ configuration.sequencer = this.sequencer;
+ end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_configuration.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_configuration.svh
new file mode 100644
index 00000000..14c2735b
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_configuration.svh
@@ -0,0 +1,179 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class contains all variables and functions used
+// to configure the spi_s agent and its bfm's. It gets the
+// bfm's from the uvm_config_db for use by the agent.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_configuration extends uvmf_parameterized_agent_configuration_base #(
+ .DRIVER_BFM_BIND_T(virtual spi_s_driver_bfm ),
+ .MONITOR_BFM_BIND_T( virtual spi_s_monitor_bfm ));
+
+ `uvm_object_utils( spi_s_configuration )
+
+
+ // Sequencer handle populated by agent
+ uvm_sequencer #(spi_s_transaction ) sequencer;
+
+ //Constraints for the configuration variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ covergroup spi_s_configuration_cg;
+ // pragma uvmf custom covergroup begin
+ option.auto_bin_max=1024;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ //*******************************************************************
+ //*******************************************************************
+ // Structure used to pass configuration variables to monitor and driver BFM's.
+ // Use to_struct function to pack variables into structure.
+ // Use from_struct function to unpack variables from structure.
+ // This structure is defined in spi_s_macros.svh
+ `spi_s_CONFIGURATION_STRUCT
+ spi_s_configuration_s spi_s_configuration_struct;
+ //*******************************************************************
+ // FUNCTION: to_struct()
+ // This function packs variables into a spi_s_configuration_s
+ // structure. The function returns the handle to the spi_s_configuration_struct.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_CONFIGURATION_TO_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_struct()
+ // This function unpacks the struct provided as an argument into
+ // variables of this class.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_CONFIGURATION_FROM_STRUCT_FUNCTION
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ // Construct the covergroup for this configuration class
+ spi_s_configuration_cg = new;
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: post_randomize()
+ // This function is automatically called after the randomize() function
+ // is executed.
+ //
+ function void post_randomize();
+ super.post_randomize();
+ spi_s_configuration_cg.sample();
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: initialize
+ // This function causes the configuration to retrieve
+ // its virtual interface handle from the uvm_config_db.
+ // This function also makes itself available to its
+ // agent through the uvm_config_db.
+ //
+ // ARGUMENTS:
+ // uvmf_active_passive_t activity:
+ // This argument identifies the simulation level
+ // as either BLOCK, CHIP, SIMULATION, etc.
+ //
+ // AGENT_PATH:
+ // This argument identifies the path to this
+ // configurations agent. This configuration
+ // makes itself available to the agent specified
+ // by agent_path by placing itself into the
+ // uvm_config_db.
+ //
+ // INTERFACE_NAME:
+ // This argument identifies the string name of
+ // this configurations BFM's. This string
+ // name is used to retrieve the driver and
+ // monitor BFM from the uvm_config_db.
+ //
+ virtual function void initialize(uvmf_active_passive_t activity,
+ string agent_path,
+ string interface_name);
+
+ super.initialize( activity, agent_path, interface_name);
+ // The covergroup is given the same name as the interface
+ spi_s_configuration_cg.set_inst_name(interface_name);
+
+ // This configuration places itself into the uvm_config_db for the agent, identified by the agent_path variable, to retrieve.
+ uvm_config_db #( spi_s_configuration
+ )::set( null ,agent_path,UVMF_AGENT_CONFIG, this );
+
+ // This configuration also places itself in the config db using the same identifier used by the interface. This allows users to access
+ // configuration variables and the interface through the bfm api class rather than directly accessing the BFM. This is useful for
+ // accessingthe BFM when using Veloce
+ uvm_config_db #( spi_s_configuration
+ )::set( null ,UVMF_CONFIGURATIONS, interface_name, this );
+
+ spi_s_configuration_cg.set_inst_name($sformatf("spi_s_configuration_cg_%s",get_full_name()));
+
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+ `uvm_info("CFG",
+ $psprintf("The agent at '%s' is using interface named %s has the following parameters: ", agent_path, interface_name, ),
+ UVM_DEBUG)
+
+ // pragma uvmf custom initialize begin
+ // This controls whether or not the agent returns a transaction handle in the driver when calling
+ // item_done() back into the sequencer or not. If set to 1, a transaction is sent back which means
+ // the sequence on the other end must use the get_response() part of the driver/sequence API. If
+ // this doesn't occur, there will eventually be response_queue overflow errors during the test.
+ return_transaction_response = 1'b0;
+
+ // pragma uvmf custom initialize end
+
+ endfunction
+
+ // ****************************************************************************
+ // TASK: wait_for_reset
+ // *[Required]* Blocks until reset is released. The wait_for_reset operation is performed
+ // by a task in the monitor bfm.
+ virtual task wait_for_reset();
+ monitor_bfm.wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ // TASK: wait_for_num_clocks
+ // *[Required]* Blocks until specified number of clocks have elapsed. The wait_for_num_clocks
+ // operation is performed by a task in the monitor bfm.
+ virtual task wait_for_num_clocks(int clocks);
+ monitor_bfm.wait_for_num_clocks(clocks);
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : convert2string()
+ // This function is used to convert variables in this class into a string for log messaging.
+ //
+ virtual function string convert2string ();
+ // pragma uvmf custom convert2string begin
+ return $sformatf("");
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: get_sequencer
+ function uvm_sequencer #(spi_s_transaction) get_sequencer();
+ return sequencer;
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver.svh
new file mode 100644
index 00000000..2ef57307
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver.svh
@@ -0,0 +1,91 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class passes transactions between the sequencer
+// and the BFM driver interface. It accesses the driver BFM
+// through the bfm handle. This driver
+// passes transactions to the driver BFM through the access
+// task.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_driver extends uvmf_driver_base #(
+ .CONFIG_T(spi_s_configuration ),
+ .BFM_BIND_T(virtual spi_s_driver_bfm ),
+ .REQ(spi_s_transaction ),
+ .RSP(spi_s_transaction ));
+
+ `uvm_component_utils( spi_s_driver )
+//*******************************************************************
+// Macros that define structs located in spi_s_macros.svh
+//*******************************************************************
+// Initiator macro used by spi_s_driver and spi_s_driver_bfm
+// to communicate initiator driven data to spi_s_driver_bfm.
+`spi_s_INITIATOR_STRUCT
+ spi_s_initiator_s spi_s_initiator_struct;
+//*******************************************************************
+// Responder macro used by spi_s_driver and spi_s_driver_bfm
+// to communicate Responder driven data to spi_s_driver_bfm.
+`spi_s_RESPONDER_STRUCT
+ spi_s_responder_s spi_s_responder_struct;
+
+// pragma uvmf custom class_item_additional begin
+// pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent=null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the driver BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// driver BFM. This allows the driver BFM to call tasks and function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ****************************************************************************
+// This task is called by the run_phase in uvmf_driver_base.
+ virtual task access( inout REQ txn );
+// pragma uvmf custom access begin
+ if (configuration.initiator_responder==RESPONDER) begin
+ // Complete current transfer and wait for next transfer
+ bfm.respond_and_wait_for_next_transfer(
+ spi_s_initiator_struct,
+ txn.to_responder_struct()
+ );
+ // Unpack information about initiated transfer received by this responder
+ txn.from_initiator_struct(spi_s_initiator_struct);
+ end else begin
+ // Initiate a transfer and get response
+ bfm.initiate_and_get_response(
+ txn.to_initiator_struct(),
+ spi_s_responder_struct
+ );
+ // Unpack transfer response information received by this initiator
+ txn.from_responder_struct(spi_s_responder_struct);
+ end
+// pragma uvmf custom access end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver_bfm.sv
new file mode 100644
index 00000000..fe0026ab
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_driver_bfm.sv
@@ -0,0 +1,300 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This interface performs the spi_s signal driving. It is
+// accessed by the uvm spi_s driver through a virtual interface
+// handle in the spi_s configuration. It drives the singals passed
+// in through the port connection named bus of type spi_s_if.
+//
+// Input signals from the spi_s_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// This bfm drives signals with a _o suffix. These signals
+// are driven onto signals within spi_s_if based on INITIATOR/RESPONDER and/or
+// ARBITRATION/GRANT status.
+//
+// The output signal connections are as follows:
+// signal_o -> bus.signal
+//
+//
+// Interface functions and tasks used by UVM components:
+//
+// configure:
+// This function gets configuration attributes from the
+// UVM driver to set any required BFM configuration
+// variables such as 'initiator_responder'.
+//
+// initiate_and_get_response:
+// This task is used to perform signaling activity for initiating
+// a protocol transfer. The task initiates the transfer, using
+// input data from the initiator struct. Then the task captures
+// response data, placing the data into the response struct.
+// The response struct is returned to the driver class.
+//
+// respond_and_wait_for_next_transfer:
+// This task is used to complete a current transfer as a responder
+// and then wait for the initiator to start the next transfer.
+// The task uses data in the responder struct to drive protocol
+// signals to complete the transfer. The task then waits for
+// the next transfer. Once the next transfer begins, data from
+// the initiator is placed into the initiator struct and sent
+// to the responder sequence for processing to determine
+// what data to respond with.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import spi_s_pkg_hdl::*;
+`include "src/spi_s_macros.svh"
+
+interface spi_s_driver_bfm
+ (spi_s_if bus);
+ // The following pragma and additional ones in-lined further below are for running this BFM on Veloce
+ // pragma attribute spi_s_driver_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: ", ),
+ UVM_DEBUG)
+end
+`endif
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic sck_i;
+ logic rst_i;
+
+ // Signal list (all signals are capable of being inputs and outputs for the sake
+ // of supporting both INITIATOR and RESPONDER mode operation. Expectation is that
+ // directionality in the config file was from the point-of-view of the INITIATOR
+
+ // INITIATOR mode input signals
+ tri sclk_i;
+ reg sclk_o = 'b0;
+ tri ss_i;
+ reg ss_o = 'b0;
+ tri [7:0] mosi_i;
+ reg [7:0] mosi_o = 'b0;
+
+ // INITIATOR mode output signals
+ tri [7:0] miso_i;
+ reg [7:0] miso_o = 'b0;
+
+ // Bi-directional signals
+
+
+ assign sck_i = bus.sck;
+ assign rst_i = bus.rst;
+
+ // These are signals marked as 'input' by the config file, but the signals will be
+ // driven by this BFM if put into RESPONDER mode (flipping all signal directions around)
+ assign sclk_i = bus.sclk;
+ assign bus.sclk = (initiator_responder == RESPONDER) ? sclk_o : 'bz;
+ assign ss_i = bus.ss;
+ assign bus.ss = (initiator_responder == RESPONDER) ? ss_o : 'bz;
+ assign mosi_i = bus.mosi;
+ assign bus.mosi = (initiator_responder == RESPONDER) ? mosi_o : 'bz;
+
+
+ // These are signals marked as 'output' by the config file, but the outputs will
+ // not be driven by this BFM unless placed in INITIATOR mode.
+ assign bus.miso = (initiator_responder == INITIATOR) ? miso_o : 'bz;
+ assign miso_i = bus.miso;
+
+ // Proxy handle to UVM driver
+ spi_s_pkg::spi_s_driver proxy;
+ // pragma tbx oneway proxy.my_function_name_in_uvm_driver
+
+ // ****************************************************************************
+ // ****************************************************************************
+ // Macros that define structs located in spi_s_macros.svh
+ // ****************************************************************************
+ // Struct for passing configuration data from spi_s_driver to this BFM
+ // ****************************************************************************
+ `spi_s_CONFIGURATION_STRUCT
+ // ****************************************************************************
+ // Structs for INITIATOR and RESPONDER data flow
+ //*******************************************************************
+ // Initiator macro used by spi_s_driver and spi_s_driver_bfm
+ // to communicate initiator driven data to spi_s_driver_bfm.
+ `spi_s_INITIATOR_STRUCT
+ spi_s_initiator_s initiator_struct;
+ // Responder macro used by spi_s_driver and spi_s_driver_bfm
+ // to communicate Responder driven data to spi_s_driver_bfm.
+ `spi_s_RESPONDER_STRUCT
+ spi_s_responder_s responder_struct;
+
+ // ****************************************************************************
+// pragma uvmf custom reset_condition_and_response begin
+ // Always block used to return signals to reset value upon assertion of reset
+ always @( posedge rst_i )
+ begin
+ // RESPONDER mode output signals
+ sclk_o <= 'b0;
+ ss_o <= 'b0;
+ mosi_o <= 'b0;
+ // INITIATOR mode output signals
+ miso_o <= 'b0;
+ // Bi-directional signals
+
+ end
+// pragma uvmf custom reset_condition_and_response end
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the driver BFM. It is called by the driver within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the driver BFM needs to be aware of the new configuration
+ // variables.
+ //
+
+ function void configure(spi_s_configuration_s spi_s_configuration_arg); // pragma tbx xtf
+ initiator_responder = spi_s_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+// pragma uvmf custom initiate_and_get_response begin
+// ****************************************************************************
+// UVMF_CHANGE_ME
+// This task is used by an initator. The task first initiates a transfer then
+// waits for the responder to complete the transfer.
+ task initiate_and_get_response(
+ // This argument passes transaction variables used by an initiator
+ // to perform the initial part of a protocol transfer. The values
+ // come from a sequence item created in a sequence.
+ input spi_s_initiator_s spi_s_initiator_struct,
+ // This argument is used to send data received from the responder
+ // back to the sequence item. The sequence item is returned to the sequence.
+ output spi_s_responder_s spi_s_responder_struct
+ );// pragma tbx xtf
+ //
+ // Members within the spi_s_initiator_struct:
+ // bit ssel ;
+ // bit [7:0] mosi ;
+ // bit [7:0] miso ;
+ // Members within the spi_s_responder_struct:
+ // bit ssel ;
+ // bit [7:0] mosi ;
+ // bit [7:0] miso ;
+ initiator_struct = spi_s_initiator_struct;
+ //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge sck_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available initiator input and inout signals listed.
+ // Initiator input signals
+ // spi_s_responder_struct.xyz = sclk_i; //
+ // spi_s_responder_struct.xyz = ss_i; //
+ // spi_s_responder_struct.xyz = mosi_i; // [7:0]
+ // Initiator inout signals
+ // How to assign a signal from an initiator struct member named xyz.
+ // All available initiator output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Initiator output signals
+ // miso_o <= spi_s_initiator_struct.xyz; // [7:0]
+ // Initiator inout signals
+ // Initiate a transfer using the data received.
+ @(posedge sck_i);
+ @(posedge sck_i);
+ // Wait for the responder to complete the transfer then place the responder data into
+ // spi_s_responder_struct.
+ @(posedge sck_i);
+ @(posedge sck_i);
+ responder_struct = spi_s_responder_struct;
+ endtask
+// pragma uvmf custom initiate_and_get_response end
+
+// pragma uvmf custom respond_and_wait_for_next_transfer begin
+// ****************************************************************************
+// The first_transfer variable is used to prevent completing a transfer in the
+// first call to this task. For the first call to this task, there is not
+// current transfer to complete.
+bit first_transfer=1;
+
+// UVMF_CHANGE_ME
+// This task is used by a responder. The task first completes the current
+// transfer in progress then waits for the initiator to start the next transfer.
+ task respond_and_wait_for_next_transfer(
+ // This argument is used to send data received from the initiator
+ // back to the sequence item. The sequence determines how to respond.
+ output spi_s_initiator_s spi_s_initiator_struct,
+ // This argument passes transaction variables used by a responder
+ // to complete a protocol transfer. The values come from a sequence item.
+ input spi_s_responder_s spi_s_responder_struct
+ );// pragma tbx xtf
+ // Variables within the spi_s_initiator_struct:
+ // bit ssel ;
+ // bit [7:0] mosi ;
+ // bit [7:0] miso ;
+ // Variables within the spi_s_responder_struct:
+ // bit ssel ;
+ // bit [7:0] mosi ;
+ // bit [7:0] miso ;
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal == 1'b1) @(posedge sck_i);
+ //
+ // How to assign a responder struct member, named xyz, from a signal.
+ // All available responder input and inout signals listed.
+ // Responder input signals
+ // spi_s_responder_struct.xyz = miso_i; // [7:0]
+ // Responder inout signals
+ // How to assign a signal, named xyz, from an initiator struct member.
+ // All available responder output and inout signals listed.
+ // Notice the _o. Those are storage variables that allow for procedural assignment.
+ // Responder output signals
+ // sclk_o <= spi_s_initiator_struct.xyz; //
+ // ss_o <= spi_s_initiator_struct.xyz; //
+ // mosi_o <= spi_s_initiator_struct.xyz; // [7:0]
+ // Responder inout signals
+
+ @(posedge sck_i);
+ if (!first_transfer) begin
+ // Perform transfer response here.
+ // Reply using data recieved in the spi_s_responder_struct.
+ @(posedge sck_i);
+ // Reply using data recieved in the transaction handle.
+ @(posedge sck_i);
+ end
+ // Wait for next transfer then gather info from intiator about the transfer.
+ // Place the data into the spi_s_initiator_struct.
+ @(posedge sck_i);
+ @(posedge sck_i);
+ first_transfer = 0;
+ endtask
+// pragma uvmf custom respond_and_wait_for_next_transfer end
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_if.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_if.sv
new file mode 100644
index 00000000..47150e10
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_if.sv
@@ -0,0 +1,79 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface contains the spi_s interface signals.
+// It is instantiated once per spi_s bus. Bus Functional Models,
+// BFM's named spi_s_driver_bfm, are used to drive signals on the bus.
+// BFM's named spi_s_monitor_bfm are used to monitor signals on the
+// bus. This interface signal bundle is passed in the port list of
+// the BFM in order to give the BFM access to the signals in this
+// interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// This template can be used to connect a DUT to these signals
+//
+// .dut_signal_port(spi_s_bus.sclk), // Agent input
+// .dut_signal_port(spi_s_bus.ss), // Agent input
+// .dut_signal_port(spi_s_bus.mosi), // Agent input
+// .dut_signal_port(spi_s_bus.miso), // Agent output
+
+import uvmf_base_pkg_hdl::*;
+import spi_s_pkg_hdl::*;
+
+interface spi_s_if
+
+ (
+ input logic sck,
+ input logic rst,
+ input logic sclk,
+ input logic ss,
+ input logic [7:0] mosi,
+ output logic [7:0] miso
+ );
+
+modport monitor_port
+ (
+ input sck,
+ input rst,
+ input sclk,
+ input ss,
+ input mosi,
+ input miso
+ );
+
+modport initiator_port
+ (
+ input sck,
+ input rst,
+ input sclk,
+ input ss,
+ input mosi,
+ output miso
+ );
+
+modport responder_port
+ (
+ input sck,
+ input rst,
+ output sclk,
+ output ss,
+ output mosi,
+ input miso
+ );
+
+
+// pragma uvmf custom interface_item_additional begin
+// pragma uvmf custom interface_item_additional end
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_infact_coverage_strategy.csv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_infact_coverage_strategy.csv
new file mode 100644
index 00000000..1c218e14
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_infact_coverage_strategy.csv
@@ -0,0 +1,6 @@
+Global
+auto_bin_max, 64
+
+Name,Type,Include
+rand_fields,coverpoint,=rand *.**
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_macros.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_macros.svh
new file mode 100644
index 00000000..cbf12ff6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_macros.svh
@@ -0,0 +1,139 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This file contains macros used with the spi_s package.
+// These macros include packed struct definitions. These structs are
+// used to pass data between classes, hvl, and BFM's, hdl. Use of
+// structs are more efficient and simpler to modify.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_struct
+// and from_struct methods defined in the macros below that are used in
+// the spi_s_configuration class.
+//
+ `define spi_s_CONFIGURATION_STRUCT \
+typedef struct packed { \
+ uvmf_active_passive_t active_passive; \
+ uvmf_initiator_responder_t initiator_responder; \
+ } spi_s_configuration_s;
+
+ `define spi_s_CONFIGURATION_TO_STRUCT_FUNCTION \
+ virtual function spi_s_configuration_s to_struct();\
+ spi_s_configuration_struct = \
+ {\
+ this.active_passive,\
+ this.initiator_responder\
+ };\
+ return ( spi_s_configuration_struct );\
+ endfunction
+
+ `define spi_s_CONFIGURATION_FROM_STRUCT_FUNCTION \
+ virtual function void from_struct(spi_s_configuration_s spi_s_configuration_struct);\
+ {\
+ this.active_passive,\
+ this.initiator_responder \
+ } = spi_s_configuration_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_monitor_struct
+// and from_monitor_struct methods of the spi_s_transaction class.
+//
+ `define spi_s_MONITOR_STRUCT typedef struct packed { \
+ bit ssel ; \
+ bit [7:0] mosi ; \
+ bit [7:0] miso ; \
+ } spi_s_monitor_s;
+
+ `define spi_s_TO_MONITOR_STRUCT_FUNCTION \
+ virtual function spi_s_monitor_s to_monitor_struct();\
+ spi_s_monitor_struct = \
+ { \
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ };\
+ return ( spi_s_monitor_struct);\
+ endfunction\
+
+ `define spi_s_FROM_MONITOR_STRUCT_FUNCTION \
+ virtual function void from_monitor_struct(spi_s_monitor_s spi_s_monitor_struct);\
+ {\
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ } = spi_s_monitor_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_initiator_struct
+// and from_initiator_struct methods of the spi_s_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define spi_s_INITIATOR_STRUCT typedef struct packed { \
+ bit ssel ; \
+ bit [7:0] mosi ; \
+ bit [7:0] miso ; \
+ } spi_s_initiator_s;
+
+ `define spi_s_TO_INITIATOR_STRUCT_FUNCTION \
+ virtual function spi_s_initiator_s to_initiator_struct();\
+ spi_s_initiator_struct = \
+ {\
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ };\
+ return ( spi_s_initiator_struct);\
+ endfunction
+
+ `define spi_s_FROM_INITIATOR_STRUCT_FUNCTION \
+ virtual function void from_initiator_struct(spi_s_initiator_s spi_s_initiator_struct);\
+ {\
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ } = spi_s_initiator_struct;\
+ endfunction
+
+// ****************************************************************************
+// When changing the contents of this struct, be sure to update the to_responder_struct
+// and from_responder_struct methods of the spi_s_transaction class.
+// Also update the comments in the driver BFM.
+//
+ `define spi_s_RESPONDER_STRUCT typedef struct packed { \
+ bit ssel ; \
+ bit [7:0] mosi ; \
+ bit [7:0] miso ; \
+ } spi_s_responder_s;
+
+ `define spi_s_TO_RESPONDER_STRUCT_FUNCTION \
+ virtual function spi_s_responder_s to_responder_struct();\
+ spi_s_responder_struct = \
+ {\
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ };\
+ return ( spi_s_responder_struct);\
+ endfunction
+
+ `define spi_s_FROM_RESPONDER_STRUCT_FUNCTION \
+ virtual function void from_responder_struct(spi_s_responder_s spi_s_responder_struct);\
+ {\
+ this.ssel , \
+ this.mosi , \
+ this.miso \
+ } = spi_s_responder_struct;\
+ endfunction
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor.svh
new file mode 100644
index 00000000..31289dd6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor.svh
@@ -0,0 +1,87 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class receives spi_s transactions observed by the
+// spi_s monitor BFM and broadcasts them through the analysis port
+// on the agent. It accesses the monitor BFM through the monitor
+// task. This UVM component captures transactions
+// for viewing in the waveform viewer if the
+// enable_transaction_viewing flag is set in the configuration.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_monitor extends uvmf_monitor_base #(
+ .CONFIG_T(spi_s_configuration ),
+ .BFM_BIND_T(virtual spi_s_monitor_bfm ),
+ .TRANS_T(spi_s_transaction ));
+
+ `uvm_component_utils( spi_s_monitor )
+
+// Structure used to pass data from monitor BFM to monitor class in agent.
+// Use to_monitor_struct function to pack transaction variables into structure.
+// Use from_monitor_struct function to unpack transaction variables from structure.
+`spi_s_MONITOR_STRUCT
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+// ****************************************************************************
+// This function is the standard SystemVerilog constructor.
+//
+ function new( string name = "", uvm_component parent = null );
+ super.new( name, parent );
+ endfunction
+
+// ****************************************************************************
+// This function sends configuration object variables to the monitor BFM
+// using the configuration struct.
+//
+ virtual function void configure(input CONFIG_T cfg);
+ bfm.configure( cfg.to_struct() );
+
+ endfunction
+
+// ****************************************************************************
+// This function places a handle to this class in the proxy variable in the
+// monitor BFM. This allows the monitor BFM to call the notify_transaction
+// function within this class.
+//
+ virtual function void set_bfm_proxy_handle();
+ bfm.proxy = this; endfunction
+
+// ***************************************************************************
+ virtual task run_phase(uvm_phase phase);
+ // Start monitor BFM thread and don't call super.run() in order to
+ // override the default monitor proxy 'pull' behavior with the more
+ // emulation-friendly BFM 'push' approach using the notify_transaction
+ // function below
+ bfm.start_monitoring();
+ endtask
+
+// **************************************************************************
+
+// This function is called by the monitor BFM. It receives data observed by the
+// monitor BFM. Data is passed using the spi_s_monitor_struct.
+ virtual function void notify_transaction(input spi_s_monitor_s spi_s_monitor_struct);
+
+
+ trans = new("trans");
+ trans.from_monitor_struct(spi_s_monitor_struct);
+ trans.start_time = time_stamp;
+ trans.end_time = $time;
+ time_stamp = trans.end_time;
+
+ analyze(trans);
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor_bfm.sv b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor_bfm.sv
new file mode 100644
index 00000000..68438155
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_monitor_bfm.sv
@@ -0,0 +1,185 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This interface performs the spi_s signal monitoring.
+// It is accessed by the uvm spi_s monitor through a virtual
+// interface handle in the spi_s configuration. It monitors the
+// signals passed in through the port connection named bus of
+// type spi_s_if.
+//
+// Input signals from the spi_s_if are assigned to an internal input
+// signal with a _i suffix. The _i signal should be used for sampling.
+//
+// The input signal connections are as follows:
+// bus.signal -> signal_i
+//
+// Interface functions and tasks used by UVM components:
+// monitor(inout TRANS_T txn);
+// This task receives the transaction, txn, from the
+// UVM monitor and then populates variables in txn
+// from values observed on bus activity. This task
+// blocks until an operation on the spi_s bus is complete.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+import uvmf_base_pkg_hdl::*;
+import spi_s_pkg_hdl::*;
+`include "src/spi_s_macros.svh"
+
+
+interface spi_s_monitor_bfm
+ ( spi_s_if bus );
+ // The pragma below and additional ones in-lined further down are for running this BFM on Veloce
+ // pragma attribute spi_s_monitor_bfm partition_interface_xif
+
+`ifndef XRTL
+// This code is to aid in debugging parameter mismatches between the BFM and its corresponding agent.
+// Enable this debug by setting UVM_VERBOSITY to UVM_DEBUG
+// Setting UVM_VERBOSITY to UVM_DEBUG causes all BFM's and all agents to display their parameter settings.
+// All of the messages from this feature have a UVM messaging id value of "CFG"
+// The transcript or run.log can be parsed to ensure BFM parameter settings match its corresponding agents parameter settings.
+import uvm_pkg::*;
+`include "uvm_macros.svh"
+initial begin : bfm_vs_agent_parameter_debug
+ `uvm_info("CFG",
+ $psprintf("The BFM at '%m' has the following parameters: ", ),
+ UVM_DEBUG)
+end
+`endif
+
+
+ // Structure used to pass transaction data from monitor BFM to monitor class in agent.
+`spi_s_MONITOR_STRUCT
+ spi_s_monitor_s spi_s_monitor_struct;
+
+ // Structure used to pass configuration data from monitor class to monitor BFM.
+ `spi_s_CONFIGURATION_STRUCT
+
+
+ // Config value to determine if this is an initiator or a responder
+ uvmf_initiator_responder_t initiator_responder;
+ // Custom configuration variables.
+ // These are set using the configure function which is called during the UVM connect_phase
+
+ logic sck_i;
+ logic rst_i;
+ tri sclk_i;
+ tri ss_i;
+ tri [7:0] mosi_i;
+ tri [7:0] miso_i;
+ assign sck_i = bus.sck;
+ assign rst_i = bus.rst;
+ assign sclk_i = bus.sclk;
+ assign ss_i = bus.ss;
+ assign mosi_i = bus.mosi;
+ assign miso_i = bus.miso;
+
+ // Proxy handle to UVM monitor
+ spi_s_pkg::spi_s_monitor proxy;
+ // pragma tbx oneway proxy.notify_transaction
+
+ // pragma uvmf custom interface_item_additional begin
+ // pragma uvmf custom interface_item_additional end
+
+ //******************************************************************
+ task wait_for_reset();// pragma tbx xtf
+ @(posedge sck_i) ;
+ do_wait_for_reset();
+ endtask
+
+ // ****************************************************************************
+ task do_wait_for_reset();
+ // pragma uvmf custom reset_condition begin
+ wait ( rst_i === 0 ) ;
+ @(posedge sck_i) ;
+ // pragma uvmf custom reset_condition end
+ endtask
+
+ //******************************************************************
+
+ task wait_for_num_clocks(input int unsigned count); // pragma tbx xtf
+ @(posedge sck_i);
+
+ repeat (count-1) @(posedge sck_i);
+ endtask
+
+ //******************************************************************
+ event go;
+ function void start_monitoring();// pragma tbx xtf
+ -> go;
+ endfunction
+
+ // ****************************************************************************
+ initial begin
+ @go;
+ forever begin
+ @(posedge sck_i);
+ do_monitor( spi_s_monitor_struct );
+
+
+ proxy.notify_transaction( spi_s_monitor_struct );
+
+ end
+ end
+
+ //******************************************************************
+ // The configure() function is used to pass agent configuration
+ // variables to the monitor BFM. It is called by the monitor within
+ // the agent at the beginning of the simulation. It may be called
+ // during the simulation if agent configuration variables are updated
+ // and the monitor BFM needs to be aware of the new configuration
+ // variables.
+ //
+ function void configure(spi_s_configuration_s spi_s_configuration_arg); // pragma tbx xtf
+ initiator_responder = spi_s_configuration_arg.initiator_responder;
+ // pragma uvmf custom configure begin
+ // pragma uvmf custom configure end
+ endfunction
+
+
+ // ****************************************************************************
+
+ task do_monitor(output spi_s_monitor_s spi_s_monitor_struct);
+ //
+ // Available struct members:
+ // // spi_s_monitor_struct.ssel
+ // // spi_s_monitor_struct.mosi
+ // // spi_s_monitor_struct.miso
+ // //
+ // Reference code;
+ // How to wait for signal value
+ // while (control_signal === 1'b1) @(posedge sck_i);
+ //
+ // How to assign a struct member, named xyz, from a signal.
+ // All available input signals listed.
+ // spi_s_monitor_struct.xyz = sclk_i; //
+ // spi_s_monitor_struct.xyz = ss_i; //
+ // spi_s_monitor_struct.xyz = mosi_i; // [7:0]
+ // spi_s_monitor_struct.xyz = miso_i; // [7:0]
+ // pragma uvmf custom do_monitor begin
+ // UVMF_CHANGE_ME : Implement protocol monitoring. The commented reference code
+ // below are examples of how to capture signal values and assign them to
+ // structure members. All available input signals are listed. The 'while'
+ // code example shows how to wait for a synchronous flow control signal. This
+ // task should return when a complete transfer has been observed. Once this task is
+ // exited with captured values, it is then called again to wait for and observe
+ // the next transfer. One clock cycle is consumed between calls to do_monitor.
+ @(posedge sck_i);
+ @(posedge sck_i);
+ @(posedge sck_i);
+ @(posedge sck_i);
+ // pragma uvmf custom do_monitor end
+ endtask
+
+
+endinterface
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_random_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_random_sequence.svh
new file mode 100644
index 00000000..799ca4ff
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_random_sequence.svh
@@ -0,0 +1,53 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This sequences randomizes the spi_s transaction and sends it
+// to the UVM driver.
+//
+// This sequence constructs and randomizes a spi_s_transaction.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_random_sequence
+ extends spi_s_sequence_base ;
+
+ `uvm_object_utils( spi_s_random_sequence )
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*****************************************************************
+ function new(string name = "");
+ super.new(name);
+ endfunction: new
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is automatically executed when this sequence is started using the
+ // start(sequencerHandle) task.
+ //
+ task body();
+
+ // Construct the transaction
+ req=spi_s_transaction::type_id::create("req");
+ start_item(req);
+ // Randomize the transaction
+ if(!req.randomize()) `uvm_fatal("SEQ", "spi_s_random_sequence::body()-spi_s_transaction randomization failed")
+ // Send the transaction to the spi_s_driver_bfm via the sequencer and spi_s_driver.
+ finish_item(req);
+ `uvm_info("SEQ", {"Response:",req.convert2string()},UVM_MEDIUM)
+
+ endtask
+
+endclass: spi_s_random_sequence
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_responder_sequence.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_responder_sequence.svh
new file mode 100644
index 00000000..f7a9964e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_responder_sequence.svh
@@ -0,0 +1,49 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class can be used to provide stimulus when an interface
+// has been configured to run in a responder mode. It
+// will never finish by default, always going back to the driver
+// and driver BFM for the next transaction with which to respond.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_responder_sequence
+ extends spi_s_sequence_base ;
+
+ `uvm_object_utils( spi_s_responder_sequence )
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ function new(string name = "spi_s_responder_sequence");
+ super.new(name);
+ endfunction
+
+ task body();
+ req=spi_s_transaction::type_id::create("req");
+ forever begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body begin
+ // UVMF_CHANGE_ME : Do something here with the resulting req item. The
+ // finish_item() call above will block until the req transaction is ready
+ // to be handled by the responder sequence.
+ // If this was an item that required a response, the expectation is
+ // that the response should be populated within this transaction now.
+ `uvm_info("SEQ",$sformatf("Processed txn: %s",req.convert2string()),UVM_HIGH)
+ // pragma uvmf custom body end
+ end
+ endtask
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_sequence_base.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_sequence_base.svh
new file mode 100644
index 00000000..fca6ae59
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_sequence_base.svh
@@ -0,0 +1,96 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains the class used as the base class for all sequences
+// for this interface.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_sequence_base extends uvmf_sequence_base #(
+ .REQ(spi_s_transaction ),
+ .RSP(spi_s_transaction ));
+
+ `uvm_object_utils( spi_s_sequence_base )
+
+ // variables
+ typedef spi_s_transaction spi_s_transaction_req_t;
+ spi_s_transaction_req_t req;
+ typedef spi_s_transaction spi_s_transaction_rsp_t;
+ spi_s_transaction_rsp_t rsp;
+
+ // Event for identifying when a response was received from the sequencer
+ event new_rsp;
+
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ // TASK : get_responses()
+ // This task recursively gets sequence item responses from the sequencer.
+ //
+ virtual task get_responses();
+ fork
+ begin
+ // Block until new rsp available
+ get_response(rsp);
+ // New rsp received. Indicate to sequence using event.
+ ->new_rsp;
+ // Display the received response transaction
+ `uvm_info("SEQ", {"New response transaction:",rsp.convert2string()}, UVM_MEDIUM)
+ end
+ join_none
+ endtask
+
+ // ****************************************************************************
+ // TASK : pre_body()
+ // This task is called automatically when start is called with call_pre_post set to 1 (default).
+ // By calling get_responses() within pre_body() any derived sequences are automatically
+ // processing response transactions. Only un-comment this call to get_responses() if you
+ // have configured the interface driver to utilize the response transaction path by setting
+ // the configuration variable "return_transaction_response" to 1. Otherwise it is possible
+ // to impact runtime performance and memory utilization.
+ //
+ virtual task pre_body();
+ // pragma uvmf custom pre_body begin
+// get_responses();
+ // pragma uvmf custom pre_body end
+ endtask
+
+ // ****************************************************************************
+ // TASK : body()
+ // This task is called automatically when start is called. This sequence sends
+ // a req sequence item to the sequencer identified as an argument in the call
+ // to start.
+ //
+ virtual task body();
+ // pragma uvmf custom body begin
+ start_item(req);
+ finish_item(req);
+ // pragma uvmf custom body end
+ endtask
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name ="");
+ super.new( name );
+ // pragma uvmf custom new begin
+ req = spi_s_transaction_req_t::type_id::create("req");
+ rsp = spi_s_transaction_rsp_t::type_id::create("rsp");
+ // pragma uvmf custom new end
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction.svh
new file mode 100644
index 00000000..7edd633c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction.svh
@@ -0,0 +1,190 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class defines the variables required for an spi_s
+// transaction. Class variables to be displayed in waveform transaction
+// viewing are added to the transaction viewing stream in the add_to_wave
+// function.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_transaction extends uvmf_transaction_base;
+
+ `uvm_object_utils( spi_s_transaction )
+
+ bit ssel ;
+ bit [7:0] mosi ;
+ rand bit [7:0] miso ;
+
+ //Constraints for the transaction variables:
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ //*******************************************************************
+ //*******************************************************************
+ // Macros that define structs and associated functions are
+ // located in spi_s_macros.svh
+
+ //*******************************************************************
+ // Monitor macro used by spi_s_monitor and spi_s_monitor_bfm
+ // This struct is defined in spi_s_macros.svh
+ `spi_s_MONITOR_STRUCT
+ spi_s_monitor_s spi_s_monitor_struct;
+ //*******************************************************************
+ // FUNCTION: to_monitor_struct()
+ // This function packs transaction variables into a spi_s_monitor_s
+ // structure. The function returns the handle to the spi_s_monitor_struct.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_TO_MONITOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_monitor_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_FROM_MONITOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Initiator macro used by spi_s_driver and spi_s_driver_bfm
+ // to communicate initiator driven data to spi_s_driver_bfm.
+ // This struct is defined in spi_s_macros.svh
+ `spi_s_INITIATOR_STRUCT
+ spi_s_initiator_s spi_s_initiator_struct;
+ //*******************************************************************
+ // FUNCTION: to_initiator_struct()
+ // This function packs transaction variables into a spi_s_initiator_s
+ // structure. The function returns the handle to the spi_s_initiator_struct.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_TO_INITIATOR_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_initiator_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_FROM_INITIATOR_STRUCT_FUNCTION
+
+ //*******************************************************************
+ // Responder macro used by spi_s_driver and spi_s_driver_bfm
+ // to communicate Responder driven data to spi_s_driver_bfm.
+ // This struct is defined in spi_s_macros.svh
+ `spi_s_RESPONDER_STRUCT
+ spi_s_responder_s spi_s_responder_struct;
+ //*******************************************************************
+ // FUNCTION: to_responder_struct()
+ // This function packs transaction variables into a spi_s_responder_s
+ // structure. The function returns the handle to the spi_s_responder_struct.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_TO_RESPONDER_STRUCT_FUNCTION
+ //*******************************************************************
+ // FUNCTION: from_responder_struct()
+ // This function unpacks the struct provided as an argument into transaction
+ // variables of this class.
+ // This function is defined in spi_s_macros.svh
+ `spi_s_FROM_RESPONDER_STRUCT_FUNCTION
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new( string name = "" );
+ super.new( name );
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: convert2string()
+ // This function converts all variables in this class to a single string for
+ // logfile reporting.
+ //
+ virtual function string convert2string();
+ // pragma uvmf custom convert2string begin
+ // UVMF_CHANGE_ME : Customize format if desired.
+ return $sformatf("ssel:0x%x mosi:0x%x miso:0x%x ",ssel,mosi,miso);
+ // pragma uvmf custom convert2string end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_print()
+ // This function is automatically called when the .print() function
+ // is called on this class.
+ //
+ virtual function void do_print(uvm_printer printer);
+ // pragma uvmf custom do_print begin
+ // UVMF_CHANGE_ME : Current contents of do_print allows for the use of UVM 1.1d, 1.2 or P1800.2.
+ // Update based on your own printing preference according to your preferred UVM version
+ $display(convert2string());
+ // pragma uvmf custom do_print end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_compare()
+ // This function is automatically called when the .compare() function
+ // is called on this class.
+ //
+ virtual function bit do_compare (uvm_object rhs, uvm_comparer comparer);
+ spi_s_transaction RHS;
+ if (!$cast(RHS,rhs)) return 0;
+ // pragma uvmf custom do_compare begin
+ // UVMF_CHANGE_ME : Eliminate comparison of variables not to be used for compare
+ return (super.do_compare(rhs,comparer)
+ &&(this.ssel == RHS.ssel)
+ &&(this.mosi == RHS.mosi)
+ &&(this.miso == RHS.miso)
+ );
+ // pragma uvmf custom do_compare end
+ endfunction
+
+ //*******************************************************************
+ // FUNCTION: do_copy()
+ // This function is automatically called when the .copy() function
+ // is called on this class.
+ //
+ virtual function void do_copy (uvm_object rhs);
+ spi_s_transaction RHS;
+ assert($cast(RHS,rhs));
+ // pragma uvmf custom do_copy begin
+ super.do_copy(rhs);
+ this.ssel = RHS.ssel;
+ this.mosi = RHS.mosi;
+ this.miso = RHS.miso;
+ // pragma uvmf custom do_copy end
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: add_to_wave()
+ // This function is used to display variables in this class in the waveform
+ // viewer. The start_time and end_time variables must be set before this
+ // function is called. If the start_time and end_time variables are not set
+ // the transaction will be hidden at 0ns on the waveform display.
+ //
+ virtual function void add_to_wave(int transaction_viewing_stream_h);
+ `ifdef QUESTA
+ if (transaction_view_h == 0) begin
+ transaction_view_h = $begin_transaction(transaction_viewing_stream_h,"spi_s_transaction",start_time);
+ end
+ super.add_to_wave(transaction_view_h);
+ // pragma uvmf custom add_to_wave begin
+ // UVMF_CHANGE_ME : Color can be applied to transaction entries based on content, example below
+ // case()
+ // 1 : $add_color(transaction_view_h,"red");
+ // default : $add_color(transaction_view_h,"grey");
+ // endcase
+ // UVMF_CHANGE_ME : Eliminate transaction variables not wanted in transaction viewing in the waveform viewer
+ $add_attribute(transaction_view_h,ssel,"ssel");
+ $add_attribute(transaction_view_h,mosi,"mosi");
+ $add_attribute(transaction_view_h,miso,"miso");
+ // pragma uvmf custom add_to_wave end
+ $end_transaction(transaction_view_h,end_time);
+ $free_transaction(transaction_view_h);
+ `endif // QUESTA
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction_coverage.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction_coverage.svh
new file mode 100644
index 00000000..cbde0275
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_transaction_coverage.svh
@@ -0,0 +1,72 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION: This class records spi_s transaction information using
+// a covergroup named spi_s_transaction_cg. An instance of this
+// coverage component is instantiated in the uvmf_parameterized_agent
+// if the has_coverage flag is set.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+class spi_s_transaction_coverage extends uvm_subscriber #(.T(spi_s_transaction ));
+
+ `uvm_component_utils( spi_s_transaction_coverage )
+
+ T coverage_trans;
+
+ // pragma uvmf custom class_item_additional begin
+ // pragma uvmf custom class_item_additional end
+
+ // ****************************************************************************
+ covergroup spi_s_transaction_cg;
+ // pragma uvmf custom covergroup begin
+ // UVMF_CHANGE_ME : Add coverage bins, crosses, exclusions, etc. according to coverage needs.
+ option.auto_bin_max=1024;
+ option.per_instance=1;
+ ssel: coverpoint coverage_trans.ssel;
+ mosi: coverpoint coverage_trans.mosi;
+ miso: coverpoint coverage_trans.miso;
+ // pragma uvmf custom covergroup end
+ endgroup
+
+ // ****************************************************************************
+ // FUNCTION : new()
+ // This function is the standard SystemVerilog constructor.
+ //
+ function new(string name="", uvm_component parent=null);
+ super.new(name,parent);
+ spi_s_transaction_cg=new;
+ `uvm_warning("COVERAGE_MODEL_REVIEW", "A covergroup has been constructed which may need review because of either generation or re-generation with merging. Please note that transaction variables added as a result of re-generation and merging are not automatically added to the covergroup. Remove this warning after the covergroup has been reviewed.")
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION : build_phase()
+ // This function is the standard UVM build_phase.
+ //
+ function void build_phase(uvm_phase phase);
+ spi_s_transaction_cg.set_inst_name($sformatf("spi_s_transaction_cg_%s",get_full_name()));
+ endfunction
+
+ // ****************************************************************************
+ // FUNCTION: write (T t)
+ // This function is automatically executed when a transaction arrives on the
+ // analysis_export. It copies values from the variables in the transaction
+ // to local variables used to collect functional coverage.
+ //
+ virtual function void write (T t);
+ `uvm_info("COV","Received transaction",UVM_HIGH);
+ coverage_trans = t;
+ spi_s_transaction_cg.sample();
+ endfunction
+
+endclass
+
+// pragma uvmf custom external begin
+// pragma uvmf custom external end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs.svh
new file mode 100644
index 00000000..43d85640
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs.svh
@@ -0,0 +1,20 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the host server when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs_hdl.svh b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs_hdl.svh
new file mode 100644
index 00000000..74738c8c
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/src/spi_s_typedefs_hdl.svh
@@ -0,0 +1,21 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+// DESCRIPTION:
+// This file contains defines and typedefs to be compiled for use in
+// the simulation running on the emulator when using Veloce.
+//
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+
+
+// pragma uvmf custom additional begin
+// pragma uvmf custom additional end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/yaml/spi_s_interface.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/yaml/spi_s_interface.yaml
new file mode 100644
index 00000000..b00c98ca
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_1/uvmf_template_output/verification_ip/interface_packages/spi_s_pkg/yaml/spi_s_interface.yaml
@@ -0,0 +1,53 @@
+uvmf:
+ interfaces:
+ spi_s:
+ clock: sck
+ config_constraints: []
+ config_vars: []
+ existing_library_component: 'True'
+ gen_inbound_streaming_driver: 'False'
+ hdl_pkg_parameters: []
+ hdl_typedefs: []
+ hvl_pkg_parameters: []
+ hvl_typedefs: []
+ parameters: []
+ ports:
+ - dir: input
+ name: sclk
+ reset_value: '''b0'
+ width: '1'
+ - dir: input
+ name: ss
+ reset_value: '''b0'
+ width: '1'
+ - dir: input
+ name: mosi
+ reset_value: '''b0'
+ width: '8'
+ - dir: output
+ name: miso
+ reset_value: '''b0'
+ width: '8'
+ reset: rst
+ reset_assertion_level: 'True'
+ transaction_constraints: []
+ transaction_vars:
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'False'
+ name: ssel
+ type: bit
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'False'
+ name: mosi
+ type: bit [7:0]
+ unpacked_dimension: ''
+ - comment: ''
+ iscompare: 'True'
+ isrand: 'True'
+ name: miso
+ type: bit [7:0]
+ unpacked_dimension: ''
+ use_dpi_link: 'False'
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_env.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_env.yaml
new file mode 100644
index 00000000..1ae94aaa
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_env.yaml
@@ -0,0 +1,44 @@
+uvmf:
+ benches:
+ "block_2" :
+ top_env: "block_2"
+ clock_half_period: "5ns"
+ reset_assertion_level: "True"
+ reset_duration: "200ns"
+ active_passive:
+ - bfm_name: "spi_master"
+ value: "ACTIVE"
+ - bfm_name: "wb_slave"
+ value: "PASSIVE"
+ environments:
+ "block_2" :
+ agents :
+ - name: "spi_master"
+ type: "spi_m"
+ initiator_responder: "INITIATOR"
+ - name: "wb_slave"
+ type: "wb_s"
+ initiator_responder: "RESPONDER"
+ analysis_components :
+ - name: "block_2_pred"
+ type: "block_2_predictor"
+ - name: "block_2_sb"
+ type: "block_2_scoreboard"
+ analysis_ports :
+ - name: "spi_master_ap"
+ trans_type: "spi_m_transaction"
+ connected_to: "spi_master.monitored_ap"
+ - name: "wb_slave_ap"
+ trans_type: "wb_s_transaction"
+ connected_to: "wb_slave.monitored_ap"
+ tlm_connections:
+ - driver: "spi_master.monitored_ap"
+ receiver: "block_2_pred.spi_ae"
+ - driver: "wb_slave.monitored_ap"
+ receiver: "block_2_sb.wb_ae"
+ - driver: "block_2_pred.pre_to_sco_ap"
+ receiver: "block_2_sb.sco_from_pre_ae"
+ config_vars :
+ - name: "has_scoreboard"
+ type : "bit"
+ isrand : "False"
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_util.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_util.yaml
new file mode 100644
index 00000000..ebf62361
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block2_util.yaml
@@ -0,0 +1,18 @@
+uvmf:
+ util_components:
+ block_2_predictor:
+ analysis_exports:
+ - name: spi_ae
+ type: 'spi_m_transaction'
+ analysis_ports:
+ - name: pre_to_sco_ap
+ type: 'wb_s_transaction'
+ existing_library_component: 'True'
+ type: predictor
+ block_2_scoreboard:
+ analysis_exports:
+ - name: wb_ae
+ type: 'wb_s_transaction'
+ - name: sco_from_pre_ae
+ type: 'wb_s_transaction'
+ type: scoreboard
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block_2.csh b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block_2.csh
new file mode 100644
index 00000000..cdb2ebf2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/block_2.csh
@@ -0,0 +1,7 @@
+# Setting the path for making "make cli" command works fine.
+
+setenv UVMF_HOME /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/
+
+# This is the command to generate you block_2_level bench
+
+python ../../../UVMF_2022.3/scripts/yaml2uvmf.py ../intf/spi_m_intf.yaml ../intf/wb_s_intf.yaml ../block_2/block2_env.yaml ../block_2/block2_util.yaml
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.project b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.project
new file mode 100644
index 00000000..e070225f
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.project
@@ -0,0 +1,37 @@
+
+
+ block_2
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+ net.sf.sveditor.core.SVProjectBuilder
+
+
+
+
+
+ net.sf.sveditor.core.SVNature
+ org.python.pydev.pythonNature
+
+
+
+ verification_ip
+ 2
+ UVMF_VIP_LIBRARY_HOME
+
+
+
+
+ UVMF_VIP_LIBRARY_HOME
+ $%7BPARENT-2-PROJECT_LOC%7D/verification_ip
+
+
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.svproject b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.svproject
new file mode 100644
index 00000000..b5a7f95a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/.svproject
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/block_2_sve.F b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/block_2_sve.F
new file mode 100644
index 00000000..83f3e49e
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/block_2_sve.F
@@ -0,0 +1,28 @@
+
+// UVM
++incdir+${UVM_HOME}/src
+${UVM_HOME}/src/uvm_pkg.sv
+
+// Common UVMF files
+-f ${UVMF_HOME}/common/common_sve.f
+
+// BFM Files
+-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/spi_m_pkg/spi_m_pkg_sve.F
+-F ${UVMF_VIP_LIBRARY_HOME}/interface_packages/wb_s_pkg/wb_s_pkg_sve.F
+
+// Environment Files
+-F ${UVMF_VIP_LIBRARY_HOME}/environment_packages/block_2_env_pkg/block_2_env_pkg_sve.F
+
+// Bench Files
++incdir+./tb/tests
+./tb/tests/block_2_tests_pkg.sv
+
++incdir+./tb/sequences
+./tb/sequences/block_2_sequences_pkg.sv
+
++incdir+./tb/parameters
+./tb/parameters/block_2_parameters_pkg.sv
+
+./tb/testbench/hdl_top.sv
+./tb/testbench/hvl_top.sv
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/docs/interfaces.csv b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/docs/interfaces.csv
new file mode 100644
index 00000000..de1a17a2
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/docs/interfaces.csv
@@ -0,0 +1,14 @@
+//----------------------------------------------------------------------
+// Created with uvmf_gen version 2022.3
+//----------------------------------------------------------------------
+// pragma uvmf custom header begin
+// pragma uvmf custom header end
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+//
+
+,
+Interface Description, Interface Type, Interface Transaction, Interface Name,
+spi_master, spi_m_driver_bfm spi_m_monitor_bfm, spi_m_transaction, spi_m_pkg_spi_master_BFM,
+wb_slave, wb_s_driver_bfm wb_s_monitor_bfm, wb_s_transaction, wb_s_pkg_wb_slave_BFM,
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/dut.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/dut.compile
new file mode 100644
index 00000000..9b0008fc
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/dut.compile
@@ -0,0 +1,6 @@
+
+# pragma uvmf custom dut_compile_info begin
+src:
+ - ./vhdl/vhdl_dut.vhd
+ - ./verilog/verilog_dut.v
+# pragma uvmf custom dut_compile_info end
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.v b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.v
new file mode 100644
index 00000000..96198441
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.v
@@ -0,0 +1,21 @@
+module verilog_dut(clk, rst, in_signal, out_signal);
+
+input clk;
+input rst;
+input in_signal;
+output out_signal;
+
+reg out_signal_o;
+
+always @(posedge clk) begin
+ if (rst) begin
+ out_signal_o <= 0;
+ end
+ else begin
+ out_signal_o <= ~in_signal;
+ end
+ end
+
+assign out_signal = out_signal_o;
+
+endmodule
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.vinfo
new file mode 100644
index 00000000..87e95f36
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/verilog/verilog_dut.vinfo
@@ -0,0 +1 @@
+verilog_dut.v
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/vhdl/vhdl_dut.vhd b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/vhdl/vhdl_dut.vhd
new file mode 100644
index 00000000..904aa37d
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/rtl/vhdl/vhdl_dut.vhd
@@ -0,0 +1,21 @@
+library ieee;
+use ieee.std_logic_1164.all ;
+
+entity vhdl_dut is
+ port ( clk : in std_logic ;
+ rst : in std_logic ;
+ in_signal : in std_logic ;
+ out_signal :out std_logic
+ );
+end vhdl_dut;
+
+architecture rtl of vhdl_dut is
+ begin
+ P1: process
+ variable out_signal_o : std_logic;
+ begin
+ wait until clk'event and clk = '1';
+ out_signal_o := in_signal;
+ out_signal <= out_signal_o;
+ end process;
+ end rtl;
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/Makefile b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/Makefile
new file mode 100644
index 00000000..4bea4673
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/Makefile
@@ -0,0 +1,199 @@
+
+#
+#----------------------------------------------------------------------
+#
+# DESCRIPTION: This makefile includes the shared makefile and contains
+# bench level make targets.
+#
+#----------------------------------------------------------------------
+
+
+# pragma uvmf custom additional begin
+# pragma uvmf custom additional end
+
+# *********************************************************************************************
+# UVMF library directory:
+# This variable points to the UVMF release where uvmf_base_pkg directory resides.
+# This variable points to release code that is not user modified.
+# This variable allows for UVMF release directories to reside independent of project related verification IP and project bench directories.
+# This code below looks "upward" for directory starting with UVMF_* and returns first match for use with the release examples.
+UVMF_HOME ?= ___PLEASE_SET_AN_ENVIRONMENT_VARIABLE_NAMED_UVMF_HOME_TO_POINT_TO_THE_UVMF_INSTALLATION___
+
+# pragma uvmf custom exports begin
+#
+# Project(s) specific verification IP library:
+# Directory where reusable verification packages for interfaces, environments, utilities, etc. reside.
+# This variable allows for your verification IP to reside independent of project bench and UVMF release directories.
+# For examples deployed with UVMF this will be $(UVMF_HOME)//verification_ip
+export UVMF_VIP_LIBRARY_HOME ?= $(PWD)/../../../verification_ip
+#
+# Project specific bench:
+# Directory where bench specific code is located.
+# This variable allows for project_benches to reside independent of verification IP and UVMF release directories.
+# For examples deployed with UVMF this will be $(UVMF_HOME)//project_benches/
+export UVMF_PROJECT_DIR ?= $(PWD)/..
+#
+#
+# pragma uvmf custom exports end
+# *********************************************************************************************
+
+## Check PATH for required vinfo scripts
+PVAL := $(shell command -v make_filelist.py 2> /dev/null)
+ifndef PVAL
+ MFLIST = $(UVMF_HOME)/scripts/make_filelist.py
+else
+ MFLIST = make_filelist.py
+endif
+
+
+# Set test case specific Variables
+TEST_NAME ?= test_top
+
+TEST_SEED ?= random
+UVM_CLI_ARGS =
+
+# Usage of Veloce, etc. to be input by the user (subject to defaults)
+USE_VELOCE ?= 0
+
+# Usage of vinfo flow for generating file list
+USE_VINFO ?= 0
+
+# Usage of Veloce and Questa profilers
+USE_VELOCE_PROFILER ?= 0
+USE_QUESTA_PROFILER ?= 0
+
+
+# Set project Variables
+TEST_PLAN_NAME = block_2_TestPlan
+REPORTING_DO_FILE = block_2_reports_script
+
+
+# Include makefile that includes targets for UVM_VIP_Library packages
+include $(UVMF_HOME)/scripts/Makefile
+
+
+
+
+# Include all requisite interface package targets for this bench
+include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_m_pkg/Makefile
+include $(UVMF_VIP_LIBRARY_HOME)/interface_packages/wb_s_pkg/Makefile
+
+# Include all requisite environment package targets for this bench
+include $(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_2_env_pkg/Makefile
+
+
+
+# Add to default compile/load/run arguments
+VCOM_ARGS +=
+
+# Note: vsim-3009 error can be eliminated by adding -timescale 1ps/1ps to VLOG_ARGS
+
+VLOG_ARGS += $(UVM_DISABLE_FILE_LINE_CMD)
+
+VELANALYZE_ARGS +=
+VELANALYZE_HVL_ARGS +=
+
+BATCH_VOPT_ARGS +=
+DEBUG_VOPT_ARGS +=
+EXTRA_VOPT_TOPS +=
+COMMON_VSIM_ARGS +=
+COMMON_VSIM_ARGS +=
+
+
+BATCH_VSIM_ARGS += #-uvmcontrol=none
+DEBUG_VSIM_ARGS +=
+EXTRA_VSIM_TOPS +=
+
+# pragma uvmf custom additional_args begin
+# pragma uvmf custom additional_args end
+
+
+# Project bench package source
+block_2_PARAMETERS_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/parameters/block_2_parameters_pkg.sv
+
+
+block_2_SEQUENCES_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/sequences/block_2_sequences_pkg.sv
+
+
+block_2_TEST_PKG ?=\
+$(UVMF_PROJECT_DIR)/tb/tests/block_2_tests_pkg.sv
+
+# pragma uvmf custom dut_files begin
+# UVMF_CHANGE_ME : Reference Verilog DUT source.
+block_2_VERILOG_DUT ?=\
+$(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v
+
+# UVMF_CHANGE_ME : Reference VHDL DUT source.
+block_2_VHDL_DUT ?=\
+$(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd
+# pragma uvmf custom dut_files end
+
+
+# Project bench package targets
+COMP_block_2_PARAMETERS_PKG_TGT_0 = q_comp_block_2_parameters_pkg
+COMP_block_2_PARAMETERS_PKG_TGT_1 = v_comp_block_2_parameters_pkg
+COMP_block_2_PARAMETERS_PKG_TGT = $(COMP_block_2_PARAMETERS_PKG_TGT_$(USE_VELOCE))
+
+comp_block_2_parameters_pkg: $(COMP_block_2_PARAMETERS_PKG_TGT)
+
+q_comp_block_2_parameters_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(block_2_PARAMETERS_PKG)
+
+v_comp_block_2_parameters_pkg: q_comp_block_2_parameters_pkg
+ $(HDL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/parameters $(block_2_PARAMETERS_PKG)
+
+
+comp_block_2_sequence_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/sequences $(block_2_SEQUENCES_PKG)
+
+comp_block_2_tests_pkg:
+ $(HVL_COMP_CMD) +incdir+$(UVMF_PROJECT_DIR)/tb/tests $(block_2_TEST_PKG)
+
+# pragma uvmf custom dut_compile_make_target begin
+# UVMF_CHANGE_ME : Add make target to compile your verilog dut here
+comp_block_2_verilog_dut:
+ echo "Compile your verilog DUT here"
+ $(HDL_COMP_CMD) $(block_2_VERILOG_DUT)
+
+# UVMF_CHANGE_ME : Add make target to compile your vhdl dut here
+comp_block_2_vhdl_dut:
+ echo "Compile your vhdl DUT here"
+ $(HDL_COMP_CMD_VHDL) $(block_2_VHDL_DUT)
+
+# UVMF_CHANGE_ME : Add make target to compile your dut here
+comp_block_2_dut: comp_block_2_vhdl_dut comp_block_2_verilog_dut
+# pragma uvmf custom dut_compile_make_target end
+
+
+BUILD_TGT_0 = make_build
+BUILD_TGT_1 = vinfo_build
+BUILD_TGT = $(BUILD_TGT_$(USE_VINFO))
+
+
+comp_hvl : comp_hvl_core
+
+
+comp_hvl_core : \
+ comp_spi_m_pkg comp_wb_s_pkg \
+ comp_block_2_env_pkg \
+ comp_block_2_parameters_pkg comp_block_2_sequence_pkg comp_block_2_tests_pkg
+
+comp_uvmf_core : comp_uvm_pkg comp_uvmf_base_pkg
+
+make_build: comp_block_2_dut comp_uvmf_core comp_hvl comp_test_bench
+
+hvl_build: q_comp_spi_m_pkg q_comp_wb_s_pkg comp_block_2_env_pkg comp_block_2_sequence_pkg comp_block_2_tests_pkg hvl_comp_testbench link optimize
+
+
+vinfo_build: comp_block_2_vhdl_dut build_hdl_vinfo build_hvl_vinfo $(VINFO_TGT)
+
+ $(HDL_COMP_CMD) -F hdl.vf
+ $(VEL_COMP)
+
+build: $(BUILD_TGT)
+
+# pragma uvmf custom additional_targets begin
+# pragma uvmf custom additional_targets end
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist
new file mode 100644
index 00000000..5c61ad72
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist
@@ -0,0 +1,19 @@
+
+
+
+# Test list for use by RMDB file
+# File syntax is
+# TB_INFO { } { }
+# TB ## All subsequent tests will run on this bench until a different "TB" line is seen
+# TEST <1st_seed> ...
+# If not enough seeds are provided then random seeds are used to pad
+# If no repeat count is given, default is 1
+# pragma uvmf custom tb_info begin
+TB_INFO block_2 { } { }
+# pragma uvmf custom tb_info end
+TB block_2
+# pragma uvmf custom regression_suite begin
+TEST test_top 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist.yaml
new file mode 100644
index 00000000..1a81a584
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/bcr_testlist.yaml
@@ -0,0 +1,44 @@
+
+
+
+# YAML test list for use by RMDB file
+# File syntax is
+# uvmf_testlist:
+# testbenches:
+# - name:
+# extra_build_options:
+# extra_run_options:
+# - name:
+# ...
+# - name:
+# tests:
+# - name:
+# uvm_testname: (defaults to test_name)
+# testbench: (defaults to last tb name seen)
+# repeat: (defaults to 1)
+# seeds: [,,...,] (defaults to all random)
+# extra_test_options:
+# - name:
+# ...
+# - name:
+# include:
+# - (relative path reference is to the including YAML file)
+# -
+# ...
+# -
+
+uvmf_testlist:
+ testbenches:
+# pragma uvmf custom tb_info begin
+ - name: block_2
+ extra_build_options: ""
+ extra_run_options: ""
+# pragma uvmf custom tb_info end
+ tests:
+ - testbench: block_2
+# pragma uvmf custom regression_suite begin
+ - name: test_top
+ repeat: 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/compile.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/compile.do
new file mode 100644
index 00000000..74950ae6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/compile.do
@@ -0,0 +1,71 @@
+
+
+##################################################################
+## ENVIRONMENT VARIABLES
+##################################################################
+quietly set ::env(UVMF_VIP_LIBRARY_HOME) ../../../verification_ip
+quietly set ::env(UVMF_PROJECT_DIR) ..
+
+## Using VRM means that the build is occuring several more directories deeper underneath
+## the sim directory, need to prepend some more '..'
+if {[info exists ::env(VRM_BUILD)]} {
+ quietly set ::env(UVMF_VIP_LIBRARY_HOME) "../../../../../$::env(UVMF_VIP_LIBRARY_HOME)"
+ quietly set ::env(UVMF_PROJECT_DIR) "../../../../../$::env(UVMF_PROJECT_DIR)"
+}
+quietly set ::env(UVMF_VIP_LIBRARY_HOME) [file normalize $::env(UVMF_VIP_LIBRARY_HOME)]
+quietly set ::env(UVMF_PROJECT_DIR) [file normalize $::env(UVMF_PROJECT_DIR)]
+quietly echo "UVMF_VIP_LIBRARY_HOME = $::env(UVMF_VIP_LIBRARY_HOME)"
+quietly echo "UVMF_PROJECT_DIR = $::env(UVMF_PROJECT_DIR)"
+
+
+###################################################################
+## HOUSEKEEPING : DELETE FILES THAT WILL BE REGENERATED
+###################################################################
+file delete -force *~ *.ucdb vsim.dbg *.vstf *.log work *.mem *.transcript.txt certe_dump.xml *.wlf covhtmlreport VRMDATA
+file delete -force design.bin qwave.db dpiheader.h visualizer*.ses
+file delete -force veloce.med veloce.wave veloce.map tbxbindings.h edsenv velrunopts.ini
+file delete -force sv_connect.*
+
+###################################################################
+## COMPILE DUT SOURCE CODE
+###################################################################
+vlib work
+# pragma uvmf custom dut_compile_dofile_target begin
+# UVMF_CHANGE_ME : Add commands to compile your dut here, replacing the default examples
+vlog -sv -timescale 1ps/1ps -suppress 2223,2286 $env(UVMF_PROJECT_DIR)/rtl/verilog/verilog_dut.v
+vcom $env(UVMF_PROJECT_DIR)/rtl/vhdl/vhdl_dut.vhd
+# pragma uvmf custom dut_compile_dofile_target end
+
+###################################################################
+## COMPILE UVMF BASE/COMMON SOURCE CODE
+###################################################################
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hdl.f
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_HOME)/uvmf_base_pkg -F $env(UVMF_HOME)/uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f
+
+
+###################################################################
+## UVMF INTERFACE COMPILATION
+###################################################################
+do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/spi_m_pkg/compile.do
+do $env(UVMF_VIP_LIBRARY_HOME)/interface_packages/wb_s_pkg/compile.do
+
+###################################################################
+## UVMF ENVIRONMENT COMPILATION
+###################################################################
+do $env(UVMF_VIP_LIBRARY_HOME)/environment_packages/block_2_env_pkg/compile.do
+
+###################################################################
+## UVMF BENCHES COMPILATION
+###################################################################
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/parameters $env(UVMF_PROJECT_DIR)/tb/parameters/block_2_parameters_pkg.sv
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/sequences $env(UVMF_PROJECT_DIR)/tb/sequences/block_2_sequences_pkg.sv
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/tests $env(UVMF_PROJECT_DIR)/tb/tests/block_2_tests_pkg.sv
+
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hdl.f
+vlog -sv -timescale 1ps/1ps -suppress 2223 -suppress 2286 +incdir+$env(UVMF_PROJECT_DIR)/tb/testbench -F $env(UVMF_PROJECT_DIR)/tb/testbench/top_filelist_hvl.f
+
+###################################################################
+## OPTIMIZATION
+###################################################################
+vopt hvl_top hdl_top -o optimized_batch_top_tb
+vopt +acc hvl_top hdl_top -o optimized_debug_top_tb
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.compile
new file mode 100644
index 00000000..8e7bd41a
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.compile
@@ -0,0 +1,5 @@
+needs:
+# pragma uvmf custom dut_compile_info begin
+ - ../rtl/dut.compile
+# pragma uvmf custom dut_compile_info end
+ - ../tb/testbench/hdl_top.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.vinfo
new file mode 100644
index 00000000..da27ec77
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hdl.vinfo
@@ -0,0 +1 @@
+@use $UVMF_PROJECT_DIR/tb/testbench/hdl_top.vinfo
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.compile
new file mode 100644
index 00000000..ce952549
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.compile
@@ -0,0 +1,2 @@
+needs:
+ - ../tb/testbench/hvl_top.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.vinfo b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.vinfo
new file mode 100644
index 00000000..d22eff33
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/hvl.vinfo
@@ -0,0 +1 @@
+@use $UVMF_PROJECT_DIR/tb/testbench/hvl_top.vinfo
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/run.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/run.do
new file mode 100644
index 00000000..101ddc48
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/run.do
@@ -0,0 +1,21 @@
+
+
+quietly set svLibs ""
+quietly set extra_vsim_args ""
+
+###################################################################
+## Check for additional vsim arguments passed using env var $UVMF_EXTRA_VSIM_ARGS
+###################################################################
+if {[info exists ::env(UVMF_EXTRA_VSIM_ARGS)]} {
+ echo "Adding more args to vsim command"
+ quietly set extra_vsim_args $::env(UVMF_EXTRA_VSIM_ARGS)
+}
+
+##################################################################
+## Launch Questa : generate vsim command line and execute
+##################################################################
+# pragma uvmf custom dut_run_dofile_target begin
+# UVMF_CHANGE_ME : Change the UVM_TESTNAME plusarg to run a different test
+quietly set cmd [format "vsim -i -sv_seed random +UVM_TESTNAME=test_top +UVM_VERBOSITY=UVM_HIGH -permit_unmatched_virtual_intf +notimingchecks -suppress 8887 %s %s -uvmcontrol=all -msgmode both -classdebug -assertdebug +uvm_set_config_int=*,enable_transaction_viewing,1 -do { set NoQuitOnFinish 1; onbreak {resume}; run 0; do wave.do; set PrefSource(OpenOnBreak) 0; radix hex showbase; } optimized_debug_top_tb" $svLibs $extra_vsim_args]
+# pragma uvmf custom dut_run_dofile_target end
+eval $cmd
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/tbx.config b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/tbx.config
new file mode 100644
index 00000000..eec58168
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/tbx.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+comp -questa
+velsyn -D1S
+rtlc -allow_4ST
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist
new file mode 100644
index 00000000..f92fb15b
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist
@@ -0,0 +1,20 @@
+
+
+
+
+# Test list for use by RMDB file
+# File syntax is
+# TB_INFO { } { }
+# TB ## All subsequent tests will run on this bench until a different "TB" line is seen
+# TEST <1st_seed> ...
+# If not enough seeds are provided then random seeds are used to pad
+# If no repeat count is given, default is 1
+# pragma uvmf custom tb_info begin
+TB_INFO block_2 { UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../block_2 } { }
+# pragma uvmf custom tb_info end
+TB block_2
+# pragma uvmf custom regression_suite begin
+TEST test_top 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist.yaml b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist.yaml
new file mode 100644
index 00000000..f6cabad6
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/testlist.yaml
@@ -0,0 +1,44 @@
+
+
+
+# YAML test list for use by RMDB file
+# File syntax is
+# uvmf_testlist:
+# testbenches:
+# - name:
+# extra_build_options:
+# extra_run_options:
+# - name:
+# ...
+# - name:
+# tests:
+# - name:
+# uvm_testname: (defaults to test_name)
+# testbench: (defaults to last tb name seen)
+# repeat: (defaults to 1)
+# seeds: [,,...,] (defaults to all random)
+# extra_test_options:
+# - name:
+# ...
+# - name:
+# include:
+# - (relative path reference is to the including YAML file)
+# -
+# ...
+# -
+
+uvmf_testlist:
+ testbenches:
+# pragma uvmf custom tb_info begin
+ - name: block_2
+ extra_build_options: "UVMF_VIP_LIBRARY_HOME=../../../../../../../../verification_ip UVMF_PROJECT_DIR=../../../../../../../block_2"
+ extra_run_options: ""
+# pragma uvmf custom tb_info end
+ tests:
+ - testbench: block_2
+# pragma uvmf custom regression_suite begin
+ - name: test_top
+ repeat: 3
+# pragma uvmf custom regression_suite end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/top.compile b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/top.compile
new file mode 100644
index 00000000..efd51c07
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/top.compile
@@ -0,0 +1,3 @@
+needs:
+ - hvl.compile
+ - hdl.compile
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/veloce.config b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/veloce.config
new file mode 100644
index 00000000..d0975155
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/veloce.config
@@ -0,0 +1,26 @@
+
+
+
+
+
+# pragma uvmf custom additional begin
+comp -num_boards 1
+comp -hvl questa
+# Please choose the correct emulator type code for
+# comp -platform command or else velcomp will fail
+# Available types are:
+# - Veloce2 Quattro: D2
+# - Veloce2 Maximus: D2M
+# - Veloce Strato TiL, Ti, and Mi: Strato
+# - Veloce Strato M and Strato T: StratoM
+# - comp -platform
+comp -platform Strato
+
+rtlc -enable_tbx_pragma_checks
+rtlc -allow_4ST
+rtlc -allow_MDR
+rtlc -compile_display
+rtlc -xwave_siglist xwaves.sigs
+# pragma uvmf custom additional end
+
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/viswave.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/viswave.do
new file mode 100644
index 00000000..e6989769
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/viswave.do
@@ -0,0 +1,22 @@
+
+
+onerror resume
+wave tags F0
+wave update off
+
+wave spacer -backgroundcolor Salmon { spi_master }
+wave add uvm_test_top.environment.spi_master.spi_master_monitor.txn_stream -radix string -tag F0
+wave group spi_master_bus
+wave add -group spi_master_bus hdl_top.spi_master_bus.* -radix hexadecimal -tag F0
+wave group spi_master_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+wave spacer -backgroundcolor Salmon { wb_slave }
+wave add uvm_test_top.environment.wb_slave.wb_slave_monitor.txn_stream -radix string -tag F0
+wave group wb_slave_bus
+wave add -group wb_slave_bus hdl_top.wb_slave_bus.* -radix hexadecimal -tag F0
+wave group wb_slave_bus -collapse
+wave insertion [expr [wave index insertpoint] +1]
+
+wave update on
+WaveSetStreamView
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/wave.do b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/wave.do
new file mode 100644
index 00000000..128637c8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/wave.do
@@ -0,0 +1,30 @@
+
+
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+
+add wave -noupdate -divider spi_master
+add wave -noupdate /uvm_root/uvm_test_top/environment/spi_master/spi_master_monitor/txn_stream
+add wave -noupdate -group spi_master_bus /hdl_top/spi_master_bus/*
+add wave -noupdate -divider wb_slave
+add wave -noupdate /uvm_root/uvm_test_top/environment/wb_slave/wb_slave_monitor/txn_stream
+add wave -noupdate -group wb_slave_bus /hdl_top/wb_slave_bus/*
+
+TreeUpdate [SetDefaultTree]
+quietly wave cursor active 0
+configure wave -namecolwidth 472
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 0
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+configure wave -timelineunits ns
+update
+WaveRestoreZoom {27 ns} {168 ns}
+
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_info b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_info
new file mode 100644
index 00000000..52ae9b87
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_info
@@ -0,0 +1,960 @@
+m255
+K4
+z2
+13
+!s112 1.1
+!i10d 8192
+!i10e 25
+!i10f 100
+cModel Technology
+Z0 d/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim
+Xblock_2_env_pkg
+Z1 DXx6 sv_std 3 std 0 22 AD7iAPLo6nTIKkLE6@MJe7=2><1
+Z3 DXx4 work 17 uvmf_base_pkg_hdl 0 22 Z;A99Pd_PV@@j:?c3
+Z5 DXx4 work 13 spi_m_pkg_hdl 0 22 6GRL^W=nTJ?J`bPhiDP7z1
+Z6 DXx4 work 9 spi_m_pkg 0 22 zdWd]a@SHa1@eQ3of`eXX2
+Z7 DXx4 work 12 wb_s_pkg_hdl 0 22 m[Gh>N=XQ?a_A2WS69?660
+Z8 DXx4 work 8 wb_s_pkg 0 22 eF3]XALE8C2a=APgJR8Pi3
+Z9 !s110 1672041000
+!i10b 1
+!s100 EoDe4JW]`?]WN6hH7z[DO0
+I@cE8@AT?4T?;fNT3Y30KR2
+V@cE8@AT?4T?;fNT3Y30KR2
+S1
+R0
+Z10 w1672040982
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/block_2_env_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/block_2_env_pkg.sv
+Z11 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh
+Z12 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh
+Z13 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh
+Z14 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh
+Z15 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh
+Z16 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh
+Z17 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh
+Z18 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh
+Z19 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh
+Z20 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh
+Z21 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh
+Z22 F/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_typedefs.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_configuration.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_predictor.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_environment.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_sequence_base.svh
+Z23 L0 22
+Z24 OE;L;10.6c;65
+r1
+!s85 0
+31
+!s108 1672040999.000000
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_sequence_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_environment.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_predictor.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_configuration.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/src/block_2_env_typedefs.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/block_2_env_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg/block_2_env_pkg.sv|
+!i113 0
+Z25 o-suppress 2223 -suppress 2286 -sv -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+!s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/environment_packages/block_2_env_pkg -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+Z26 tCvgOpt 0
+Xblock_2_parameters_pkg
+R1
+R3
+R9
+!i10b 1
+!s100 gU3<]Cbk4MamOlm8:HENO1
+IQM>^f4d>Mda5Fd7ngSC_J3
+VQM>^f4d>Mda5Fd7ngSC_J3
+S1
+R0
+R10
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters/block_2_parameters_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters/block_2_parameters_pkg.sv
+Z27 L0 16
+R24
+r1
+!s85 0
+31
+Z28 !s108 1672041000.000000
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters/block_2_parameters_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters/block_2_parameters_pkg.sv|
+!i113 0
+R25
+!s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/parameters -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Xblock_2_sequences_pkg
+R1
+R2
+R3
+R4
+R5
+R6
+R7
+R8
+Z29 DXx4 work 22 block_2_parameters_pkg 0 22 QM>^f4d>Mda5Fd7ngSC_J3
+Z30 DXx4 work 15 block_2_env_pkg 0 22 @cE8@AT?4T?;fNT3Y30KR2
+Z31 !s110 1672041001
+!i10b 1
+!s100 06dU;DJ_;]nI;QnQ7S>le3
+I2YM3IHII92f2_:NkzdF?h3
+V2YM3IHII92f2_:NkzdF?h3
+S1
+R0
+R10
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/block_2_sequences_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/block_2_sequences_pkg.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/block_2_bench_sequence_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/register_test_sequence.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/example_derived_test_sequence.svh
+R23
+R24
+r1
+!s85 0
+31
+R28
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/example_derived_test_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/register_test_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/src/block_2_bench_sequence_base.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/block_2_sequences_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences/block_2_sequences_pkg.sv|
+!i113 0
+R25
+!s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/sequences -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Xblock_2_tests_pkg
+R1
+R2
+R3
+R4
+R29
+R5
+R6
+R7
+R8
+R30
+Z32 DXx4 work 21 block_2_sequences_pkg 0 22 2YM3IHII92f2_:NkzdF?h3
+R31
+!i10b 1
+!s100 bj4`K:?RXLOM;[@FKMDh6E6ZkNUWBOZ1
+V7Ed@TDKn>h6E6ZkNUWBOZ1
+S1
+R0
+R10
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/block_2_tests_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/block_2_tests_pkg.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/test_top.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/register_test.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/example_derived_test.svh
+L0 21
+R24
+r1
+!s85 0
+31
+Z33 !s108 1672041001.000000
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/example_derived_test.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/register_test.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/src/test_top.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/block_2_tests_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests/block_2_tests_pkg.sv|
+!i113 0
+R25
+!s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/tests -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+vhdl_top
+R1
+R3
+R29
+R2
+Z34 !s110 1672041002
+!i10b 1
+!s100 gJLXf4>Y]9mL=>`D]5AnM3
+IHGdoh6E6ZkNUWBOZ1
+R34
+!i10b 1
+!s100 dHWSiO?bzz9E3o0HXk96>1
+Id;:WkZ1Y[G_7Lh9z@iooP1
+R35
+!s105 hvl_top_sv_unit
+S1
+R0
+R10
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench/hvl_top.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench/hvl_top.sv
+R27
+R24
+r1
+!s85 0
+31
+R33
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench/hvl_top.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/questa_mvc_src/sv|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench/top_filelist_hvl.f|
+!i113 0
+R25
+!s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/questa_mvc_src/sv +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../tb/testbench -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Toptimized_batch_top_tb
+!s110 1672041003
+V2Kbdk55cGb^MlO_MJKUBR3
+Z36 04 7 4 work hvl_top fast 0
+Z37 04 7 4 work hdl_top fast 0
+o
+R26
+noptimized_batch_top_tb
+Z38 OE;O;10.6c;65
+R0
+Toptimized_debug_top_tb
+!s110 1672041006
+VE13D8>=I<6AXDRL2
+R36
+R37
+o+acc
+R26
+noptimized_debug_top_tb
+R38
+Yspi_m_driver_bfm
+R1
+R3
+R5
+DXx4 work 24 spi_m_driver_bfm_sv_unit 0 22 FMfb6JO]keVijVni0Vn^f2
+R2
+R4
+R6
+R35
+r1
+!s85 0
+31
+!i10b 1
+!s100 EhV6BeBCVCm^9jWBi_@ZZ2
+IOnBFhNOW1oD33ZGBbN=O]2
+!s105 spi_m_driver_bfm_sv_unit
+S1
+R0
+Z39 w1672040981
+Z40 8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_driver_bfm.sv
+Z41 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_driver_bfm.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+Z42 L0 60
+R24
+Z43 !s108 1672040996.000000
+Z44 !s107 /tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_driver_bfm.sv|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_monitor_bfm.sv|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_if.sv|
+Z45 !s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_filelist_xrtl.f|
+!i113 0
+R25
+Z46 !s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Xspi_m_driver_bfm_sv_unit
+R1
+R3
+R5
+VFMfb6JO]keVijVni0Vn^f2
+r1
+!s85 0
+31
+!i10b 1
+!s100 om=fogKFBFb:`m3EELZGE0
+IFMfb6JO]keVijVni0Vn^f2
+!i103 1
+S1
+R0
+R39
+R40
+R41
+Z47 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_macros.svh
+Z48 L0 56
+R24
+R43
+R44
+R45
+!i113 0
+R25
+R46
+R26
+Yspi_m_if
+R1
+R3
+R5
+DXx4 work 16 spi_m_if_sv_unit 0 22 0HgTDWKcQm=HdDYajT6gI1
+R35
+r1
+!s85 0
+31
+!i10b 1
+!s100 ONGKTVnNf@BHVO9lJ<35L2
+Io4V1:hXR?0VlOBUHH?4I_2
+!s105 spi_m_if_sv_unit
+S1
+R0
+Z49 w1672040980
+Z50 8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_if.sv
+Z51 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_if.sv
+L0 30
+R24
+R43
+R44
+R45
+!i113 0
+R25
+R46
+R26
+Xspi_m_if_sv_unit
+R1
+R3
+R5
+V0HgTDWKcQm=HdDYajT6gI1
+r1
+!s85 0
+31
+!i10b 1
+!s100 FzQ@RRdj;DGEmaClVXo>93
+I0HgTDWKcQm=HdDYajT6gI1
+!i103 1
+S1
+R0
+R49
+R50
+R51
+L0 27
+R24
+R43
+R44
+R45
+!i113 0
+R25
+R46
+R26
+Yspi_m_monitor_bfm
+R1
+R3
+R5
+DXx4 work 25 spi_m_monitor_bfm_sv_unit 0 22 n9MJl2E5kPE8KWR>@NeZ]1
+R2
+R4
+R6
+R35
+r1
+!s85 0
+31
+!i10b 1
+!s100 XDjIL]C>?]n;oEW=3EY8P3
+Io9?F;g7A9Pc7e?ak;U:0O3
+!s105 spi_m_monitor_bfm_sv_unit
+S1
+R0
+R49
+Z52 8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_monitor_bfm.sv
+Z53 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_monitor_bfm.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+Z54 L0 36
+R24
+R43
+R44
+R45
+!i113 0
+R25
+R46
+R26
+Xspi_m_monitor_bfm_sv_unit
+R1
+R3
+R5
+Vn9MJl2E5kPE8KWR>@NeZ]1
+r1
+!s85 0
+31
+!i10b 1
+!s100 R86fbRSEA;]?B5Da5ziZ@3
+In9MJl2E5kPE8KWR>@NeZ]1
+!i103 1
+S1
+R0
+R49
+R52
+R53
+R47
+Z55 L0 31
+R24
+R43
+R44
+R45
+!i113 0
+R25
+R46
+R26
+Xspi_m_pkg
+!s115 spi_m_monitor_bfm
+!s115 spi_m_driver_bfm
+R1
+R2
+R3
+R4
+R5
+!s110 1672040996
+!i10b 1
+!s100 3SV5fSZh6m@WVmX:nGE1E1
+IzdWd]a@SHa1@eQ3of`eXX2
+VzdWd]a@SHa1@eQ3of`eXX2
+S1
+R0
+R39
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+R47
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_typedefs.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_transaction.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_configuration.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_driver.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_monitor.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_transaction_coverage.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_sequence_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_random_sequence.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_responder_sequence.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m2reg_adapter.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_agent.svh
+R55
+R24
+r1
+!s85 0
+31
+Z56 !s108 1672040995.000000
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_agent.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m2reg_adapter.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_responder_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_random_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_sequence_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_transaction_coverage.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_monitor.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_driver.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_configuration.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_transaction.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_typedefs.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_macros.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_filelist_hvl.f|
+!i113 0
+R25
+R46
+R26
+Xspi_m_pkg_hdl
+R1
+R3
+Z57 !s110 1672040995
+!i10b 1
+!s100 [LeaZI[OU:Ai@clz9aM:K2
+I6GRL^W=nTJ?J`bPhiDP7z1
+V6GRL^W=nTJ?J`bPhiDP7z1
+S1
+R0
+R39
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg_hdl.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg_hdl.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_typedefs_hdl.svh
+R47
+Z58 L0 19
+R24
+r1
+!s85 0
+31
+R56
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/src/spi_m_typedefs_hdl.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_pkg_hdl.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/spi_m_pkg/spi_m_filelist_hdl.f|
+!i113 0
+R25
+R46
+R26
+Xuvmf_base_pkg
+R1
+R2
+R3
+R57
+!i10b 1
+!s100 aZaFYJKjJI1f]L:MSl:9<2
+IDi`43ijd2B>d_PV@@j:?c3
+VDi`43ijd2B>d_PV@@j:?c3
+S1
+R0
+Z59 w1671874424
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/uvmf_base_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/uvmf_base_pkg.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_version.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_base_typedefs.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_transaction_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_sequence_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_scoreboard_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_race_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_race_scoreboard_array.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_out_of_order_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_out_of_order_race_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_scoreboard_array.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_catapult_scoreboard.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_predictor_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_sorting_predictor_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_agent_configuration_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_driver_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_monitor_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_agent.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_virtual_sequencer_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_virtual_sequence_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_environment_configuration_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_environment_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_simplex_environment.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_1agent_environment.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_2agent_environment.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_3agent_environment.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_test_base.svh
+L0 65
+R24
+r1
+!s85 0
+31
+R56
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_test_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_3agent_environment.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_2agent_environment.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_1agent_environment.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_simplex_environment.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_environment_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_environment_configuration_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_virtual_sequence_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_virtual_sequencer_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_agent.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_monitor_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_driver_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_parameterized_agent_configuration_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_sorting_predictor_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_predictor_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_catapult_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_scoreboard_array.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_out_of_order_race_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_out_of_order_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_race_scoreboard_array.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_race_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_in_order_scoreboard.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_scoreboard_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_sequence_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_transaction_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_base_typedefs.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/src/uvmf_version.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/uvmf_base_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg/uvmf_base_pkg_filelist_hvl.f|
+!i113 0
+R25
+Z60 !s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3//uvmf_base_pkg -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Xuvmf_base_pkg_hdl
+R1
+R57
+!i10b 1
+!s100 N^6_:OJbGdi2
+!s105 wb_s_driver_bfm_sv_unit
+S1
+R0
+Z71 w1672040979
+Z72 8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_driver_bfm.sv
+Z73 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_driver_bfm.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+R42
+R24
+Z74 !s108 1672040998.000000
+Z75 !s107 /tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_driver_bfm.sv|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_monitor_bfm.sv|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_if.sv|
+Z76 !s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_filelist_xrtl.f|
+!i113 0
+R25
+Z77 !s92 -suppress 2223 -suppress 2286 -sv +define+UVM_REPORT_DISABLE_FILE_LINE +define+UVM_REPORT_DISABLE_FILE_LINE +incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact
+R26
+Xwb_s_driver_bfm_sv_unit
+R1
+R3
+R7
+V5T5Y01UMPOEG47@Ea_h?l1
+r1
+!s85 0
+31
+!i10b 1
+!s100 g1ieFI1?jkj4lM18ZmC@U1
+I5T5Y01UMPOEG47@Ea_h?l1
+!i103 1
+S1
+R0
+R71
+R72
+R73
+Z78 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_macros.svh
+R48
+R24
+R74
+R75
+R76
+!i113 0
+R25
+R77
+R26
+Ywb_s_if
+R1
+R3
+R7
+DXx4 work 15 wb_s_if_sv_unit 0 22 B4;OLGRn]hb=nOWE5]3iG2
+R35
+r1
+!s85 0
+31
+!i10b 1
+!s100 kbP0>d_PE4zdh22n;NhDQ3
+ISBHZ=9]NJ98P;a0
+R2
+R4
+R8
+R35
+r1
+!s85 0
+31
+!i10b 1
+!s100 Nom@]c9icF<65D;MH[B4k3
+I`^m<<5K2mWbd]QP?]SiDR0
+!s105 wb_s_monitor_bfm_sv_unit
+S1
+R0
+R71
+Z81 8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_monitor_bfm.sv
+Z82 F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_monitor_bfm.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+R54
+R24
+R74
+R75
+R76
+!i113 0
+R25
+R77
+R26
+Xwb_s_monitor_bfm_sv_unit
+R1
+R3
+R7
+V_Q90
+r1
+!s85 0
+31
+!i10b 1
+!s100 1=05X5FH@^0
+!i103 1
+S1
+R0
+R71
+R81
+R82
+R78
+R55
+R24
+R74
+R75
+R76
+!i113 0
+R25
+R77
+R26
+Xwb_s_pkg
+!s115 wb_s_monitor_bfm
+!s115 wb_s_driver_bfm
+R1
+R2
+R3
+R4
+R7
+!s110 1672040998
+!i10b 1
+!s100 ]5O_o=8KQ5eLf;1ck1_j;0
+IeF3]XALE8C2a=APgJR8Pi3
+VeF3]XALE8C2a=APgJR8Pi3
+S1
+R0
+R49
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg.sv
+R11
+R12
+R13
+R14
+R15
+R16
+R17
+R18
+R19
+R20
+R21
+R22
+R78
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_typedefs.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_transaction.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_configuration.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_driver.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_monitor.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_transaction_coverage.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_sequence_base.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_random_sequence.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_responder_sequence.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s2reg_adapter.svh
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_agent.svh
+R55
+R24
+r1
+!s85 0
+31
+Z83 !s108 1672040997.000000
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_agent.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s2reg_adapter.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_responder_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_random_sequence.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_sequence_base.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_transaction_coverage.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_monitor.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_driver.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_configuration.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_transaction.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_typedefs.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_macros.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_deprecated_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_reg_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_callback_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_sequence_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/tlm1/uvm_tlm_imps.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_tlm_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_printer_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_object_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_phase_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_message_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/macros/uvm_version_defines.svh|/tools/mentor/questasim_10.6c/questasim/uvm-1.1d/../verilog_src/uvm-1.1d/src/uvm_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_filelist_hvl.f|
+!i113 0
+R25
+R77
+R26
+Xwb_s_pkg_hdl
+R1
+R3
+!s110 1672040997
+!i10b 1
+!s100 7=f:;PX[le8Z;^:l:MGVi3
+Im[Gh>N=XQ?a_A2WS69?660
+Vm[Gh>N=XQ?a_A2WS69?660
+S1
+R0
+R49
+8/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg_hdl.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg_hdl.sv
+F/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_typedefs_hdl.svh
+R78
+R58
+R24
+r1
+!s85 0
+31
+R83
+!s107 /hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_macros.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/src/wb_s_typedefs_hdl.svh|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_pkg_hdl.sv|
+!s90 -sv|-suppress|2223|-suppress|2286|+define+UVM_REPORT_DISABLE_FILE_LINE|+define+UVM_REPORT_DISABLE_FILE_LINE|+incdir+/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg|-F|/hwetools/work_area/frontend/vinay_B7/UVMF/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/../../../verification_ip/interface_packages/wb_s_pkg/wb_s_filelist_hdl.f|
+!i113 0
+R25
+R77
+R26
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib.qdb
new file mode 100644
index 00000000..621cc1f8
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qdb
new file mode 100644
index 00000000..31b4fd4c
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qpg
new file mode 100644
index 00000000..0c73a156
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qpg differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qtl
new file mode 100644
index 00000000..92199d6b
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_lib1_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_vmake b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_vmake
new file mode 100644
index 00000000..37aa36a8
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/_vmake
@@ -0,0 +1,4 @@
+m255
+K4
+z0
+cModel Technology
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_dpi/dpi.tfdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_dpi/dpi.tfdb
new file mode 100644
index 00000000..0e1ebdbd
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_dpi/dpi.tfdb
@@ -0,0 +1,777 @@
+VERSION 10 1 1
+SYM_BEGIN 270
+74 13
+uvm_reg_bd_cb
+252 15
+uvm_dpi_regexec
+185 23
+uvm_pkg::uvm_config_int
+19 34
+uvm_pkg::uvm_tlm_response_status_e
+49 12
+uvm_access_e
+190 19
+uvm_objection_cbs_t
+172 13
+uvm_report_cb
+120 16
+uvm_barrier_pool
+53 13
+uvm_predict_e
+91 23
+uvm_pkg::
+36 4
+size
+134 5
+level
+14 32
+uvm_default_sequencer_param_type
+194 21
+uvm_reg_field_cb_iter
+131 27
+uvm_pkg::uvm_config_wrapper
+266 15
+uvm_hdl_release
+187 26
+uvm_pkg::uvm_config_string
+52 19
+uvm_pkg::uvm_hier_e
+264 13
+uvm_hdl_force
+211 53
+uvm_pkg::
+45 16
+uvm_endianness_e
+241 23
+uvm_pkg::uvm_config_seq
+215 49
+uvm_pkg::
+149 14
+begin_elements
+5 56
+uvm_pkg::
+230 53
+
+81 24
+uvm_pkg::uvm_mem_cb_iter
+168 11
+value_width
+253 4
+preg
+29 26
+uvm_pkg::uvm_reg_byte_en_t
+99 22
+uvm_pkg::uvm_verbosity
+88 23
+uvm_active_passive_enum
+69 50
+uvm_pkg::
+188 17
+uvm_config_object
+178 17
+uvm_id_file_array
+235 57
+uvm_pkg::
+226 48
+
+82 16
+uvm_reg_field_cb
+242 21
+uvm_virtual_sequencer
+16 17
+uvm_tlm_command_e
+66 7
+byte_en
+55 22
+uvm_reg_map_addr_range
+132 20
+uvm_printer_row_info
+6 43
+
+243 30
+uvm_pkg::uvm_virtual_sequencer
+256 17
+uvm_dump_re_cache
+129 45
+uvm_pkg::
+77 27
+uvm_pkg::uvm_reg_bd_cb_iter
+227 57
+uvm_pkg::
+146 10
+identifier
+234 48
+
+100 15
+uvm_port_type_e
+27 29
+uvm_pkg::uvm_reg_addr_logic_t
+196 17
+uvm_vreg_field_cb
+210 44
+
+255 15
+uvm_dpi_regfree
+202 11
+uvm_vreg_cb
+247 46
+verilog_src/uvm-1.1d/src/dpi/uvm_svcmd_dpi.svh
+25 28
+uvm_pkg::uvm_reg_mem_tests_e
+60 14
+uvm_reg_bus_op
+263 5
+value
+17 26
+uvm_pkg::uvm_tlm_command_e
+118 13
+uvm_apprepend
+116 19
+uvm_objection_event
+22 14
+uvm_tlm_sync_e
+23 23
+uvm_pkg::uvm_tlm_sync_e
+160 9
+oct_radix
+39 12
+uvm_status_e
+93 26
+uvm_pkg::uvm_severity_type
+63 4
+addr
+267 24
+uvm_hdl_release_and_read
+35 6
+offset
+20 15
+uvm_tlm_phase_e
+193 34
+uvm_pkg::uvm_recursion_policy_enum
+54 22
+uvm_pkg::uvm_predict_e
+67 6
+status
+184 14
+uvm_config_int
+3 23
+uvm_pkg::uvm_radix_enum
+135 4
+name
+24 19
+uvm_reg_mem_tests_e
+8 25
+uvm_default_sequence_type
+97 24
+uvm_pkg::uvm_action_type
+236 19
+uvm_heartbeat_modes
+213 55
+uvm_pkg::
+102 12
+SEQ_ARB_TYPE
+125 44
+uvm_pkg::
+166 10
+type_width
+170 20
+uvm_pack_bitstream_t
+113 29
+uvm_pkg::uvm_phase_transition
+2 14
+uvm_radix_enum
+139 31
+uvm_pkg::uvm_tree_printer_knobs
+76 18
+uvm_reg_bd_cb_iter
+244 42
+
+50 21
+uvm_pkg::uvm_access_e
+228 49
+
+217 57
+uvm_pkg::
+200 49
+
+181 33
+uvm_pkg::uvm_id_verbosities_array
+28 17
+uvm_reg_byte_en_t
+162 9
+hex_radix
+232 47
+
+214 40
+
+180 24
+uvm_id_verbosities_array
+156 10
+show_radix
+259 4
+glob
+73 24
+uvm_pkg::uvm_reg_cb_iter
+46 25
+uvm_pkg::uvm_endianness_e
+112 20
+uvm_phase_transition
+96 15
+uvm_action_type
+152 6
+indent
+37 19
+uvm_reg_cvr_rsrc_db
+246 22
+uvm_dpi_get_next_arg_c
+171 29
+uvm_pkg::uvm_pack_bitstream_t
+90 14
+
+219 51
+uvm_pkg::
+110 15
+uvm_phase_state
+80 15
+uvm_mem_cb_iter
+7 52
+uvm_pkg::
+173 22
+uvm_pkg::uvm_report_cb
+197 26
+uvm_pkg::uvm_vreg_field_cb
+155 9
+separator
+108 14
+uvm_phase_type
+86 14
+
+61 23
+uvm_pkg::uvm_reg_bus_op
+136 9
+type_name
+179 26
+uvm_pkg::uvm_id_file_array
+21 24
+uvm_pkg::uvm_tlm_phase_e
+209 59
+uvm_pkg::
+208 50
+
+205 25
+uvm_pkg::uvm_vreg_cb_iter
+174 18
+uvm_report_cb_iter
+84 14
+uvm_hdl_data_t
+140 6
+#vtbl#
+192 25
+uvm_recursion_policy_enum
+165 10
+name_width
+269 2
+re
+239 28
+uvm_pkg::uvm_heartbeat_cbs_t
+220 48
+
+218 42
+
+111 24
+uvm_pkg::uvm_phase_state
+130 18
+uvm_config_wrapper
+147 5
+depth
+64 4
+data
+245 51
+uvm_pkg::
+191 28
+uvm_pkg::uvm_objection_cbs_t
+201 58
+uvm_pkg::
+163 9
+max_width
+32 18
+uvm_hdl_path_slice
+175 27
+uvm_pkg::uvm_report_cb_iter
+216 48
+
+143 6
+header
+10 26
+uvm_default_sequencer_type
+34 4
+path
+62 4
+kind
+167 10
+size_width
+41 10
+uvm_path_e
+251 5
+regex
+153 9
+show_root
+4 47
+
+65 6
+n_bits
+87 23
+uvm_pkg::
+261 40
+verilog_src/uvm-1.1d/src/dpi/uvm_hdl.svh
+56 31
+uvm_pkg::uvm_reg_map_addr_range
+114 11
+uvm_wait_op
+95 23
+uvm_pkg::
+249 26
+uvm_dpi_get_tool_version_c
+9 34
+uvm_pkg::uvm_default_sequence_type
+44 20
+uvm_pkg::uvm_check_e
+43 11
+uvm_check_e
+158 9
+dec_radix
+123 23
+uvm_pkg::uvm_event_pool
+104 23
+uvm_sequence_state_enum
+40 21
+uvm_pkg::uvm_status_e
+260 18
+uvm_hdl_check_path
+59 6
+stride
+212 46
+
+240 14
+uvm_config_seq
+117 28
+uvm_pkg::uvm_objection_event
+224 46
+
+124 35
+
+78 10
+uvm_mem_cb
+154 3
+mcd
+121 25
+uvm_pkg::uvm_barrier_pool
+107 30
+uvm_pkg::uvm_sequence_lib_mode
+58 3
+max
+30 20
+uvm_coverage_model_e
+189 26
+uvm_pkg::uvm_config_object
+128 36
+
+85 23
+uvm_pkg::uvm_hdl_data_t
+89 32
+uvm_pkg::uvm_active_passive_enum
+18 25
+uvm_tlm_response_status_e
+79 19
+uvm_pkg::uvm_mem_cb
+237 28
+uvm_pkg::uvm_heartbeat_modes
+11 35
+uvm_pkg::uvm_default_sequencer_type
+1 23
+uvm_pkg::
+75 22
+uvm_pkg::uvm_reg_bd_cb
+109 23
+uvm_pkg::uvm_phase_type
+126 38
+
+159 9
+bin_radix
+0 14
+
+142 6
+#ciid#
+221 57
+uvm_pkg::
+119 22
+uvm_pkg::uvm_apprepend
+186 17
+uvm_config_string
+257 42
+verilog_src/uvm-1.1d/src/dpi/uvm_regex.svh
+222 42
+
+157 13
+default_radix
+33 27
+uvm_pkg::uvm_hdl_path_slice
+151 6
+prefix
+248 23
+uvm_dpi_get_tool_name_c
+225 55
+uvm_pkg::
+138 22
+uvm_tree_printer_knobs
+223 51
+uvm_pkg::
+233 56
+uvm_pkg::
+38 28
+uvm_pkg::uvm_reg_cvr_rsrc_db
+83 25
+uvm_pkg::uvm_reg_field_cb
+115 20
+uvm_pkg::uvm_wait_op
+15 41
+uvm_pkg::uvm_default_sequencer_param_type
+177 29
+uvm_pkg::uvm_id_actions_array
+198 22
+uvm_vreg_field_cb_iter
+150 12
+end_elements
+258 14
+uvm_glob_to_re
+161 14
+unsigned_radix
+94 14
+
+127 47
+uvm_pkg::
+48 24
+uvm_pkg::uvm_elem_kind_e
+72 15
+uvm_reg_cb_iter
+199 31
+uvm_pkg::uvm_vreg_field_cb_iter
+98 13
+uvm_verbosity
+169 6
+sprint
+265 12
+uvm_hdl_read
+144 6
+footer
+250 15
+uvm_dpi_regcomp
+176 20
+uvm_id_actions_array
+47 15
+uvm_elem_kind_e
+203 20
+uvm_pkg::uvm_vreg_cb
+68 41
+
+238 19
+uvm_heartbeat_cbs_t
+71 19
+uvm_pkg::uvm_reg_cb
+183 31
+uvm_pkg::uvm_sev_override_array
+26 20
+uvm_reg_addr_logic_t
+229 58
+uvm_pkg::
+204 16
+uvm_vreg_cb_iter
+57 3
+min
+207 52
+uvm_pkg::
+164 10
+truncation
+92 17
+uvm_severity_type
+254 3
+str
+133 29
+uvm_pkg::uvm_printer_row_info
+195 30
+uvm_pkg::uvm_reg_field_cb_iter
+231 62
+uvm_pkg::
+105 32
+uvm_pkg::uvm_sequence_state_enum
+103 21
+uvm_pkg::SEQ_ARB_TYPE
+137 3
+val
+31 29
+uvm_pkg::uvm_coverage_model_e
+106 21
+uvm_sequence_lib_mode
+13 32
+uvm_pkg::uvm_default_driver_type
+12 23
+uvm_default_driver_type
+70 10
+uvm_reg_cb
+206 43
+
+51 10
+uvm_hier_e
+122 14
+uvm_event_pool
+101 24
+uvm_pkg::uvm_port_type_e
+141 12
+#rand_state#
+182 22
+uvm_sev_override_array
+262 15
+uvm_hdl_deposit
+268 12
+uvm_re_match
+145 9
+full_name
+42 19
+uvm_pkg::uvm_path_e
+148 9
+reference
+SYM_END
+TYPEDEF_BEGIN 100
+0 52
+0 -1 1 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 1 0
+2 56
+2 -1 3 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 2 0
+4 81
+4 -1 5 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 3 0
+6 81
+6 -1 7 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 4 0
+8 81
+8 -1 9 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 5 0
+10 83
+10 -1 11 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 6 0
+12 83
+12 -1 13 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 7 0
+14 83
+14 -1 15 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 8 0
+16 58
+16 -1 17 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 9 0
+18 59
+18 -1 19 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 10 0
+20 59
+20 -1 21 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 11 0
+22 59
+22 -1 23 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 12 0
+24 59
+24 -1 25 0x0 1 0 12 0 -1 8 262185 64 0 63 63 0 64 0x1 13 0
+26 60
+26 -1 27 0x0 1 0 10 0 -1 16 262153 64 0 63 63 0 64 0x1 14 0
+28 55
+28 -1 29 0x0 1 0 12 0 -1 1 262185 8 0 7 7 0 8 0x1 15 0
+30 59
+30 -1 31 0x0 1 0 12 0 -1 4 262185 32 0 31 31 0 32 0x1 16 0
+32 233
+32 -1 33 0x0 1 0 2 0 0 12 1 64 3 3 0 0 0x2 1 3 34 0 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 35 4 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 36 8 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 0x3 0x1 17 0
+37 84
+37 -1 38 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 18 0
+39 59
+39 -1 40 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 19 0
+41 59
+41 -1 42 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 20 0
+43 59
+43 -1 44 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 21 0
+45 59
+45 -1 46 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 22 0
+47 59
+47 -1 48 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 23 0
+49 59
+49 -1 50 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 24 0
+51 59
+51 -1 52 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 25 0
+53 59
+53 -1 54 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 26 0
+55 241
+55 -1 56 0x0 1 0 2 0 0 20 41 160 3 3 0 0 0x2 1 3 57 96 0x0 1 0 12 0 -1 8 262185 64 0 63 63 0 64 0x1 0 0 0 -1 58 32 0x0 1 0 12 0 -1 8 262185 64 0 63 63 0 64 0x1 0 0 0 -1 59 0 0x0 1 0 12 0 -1 4 278569 32 0 31 31 0 32 0x1 0 0 0 -1 0x3 0x1 27 0
+60 415
+60 -1 61 0x0 1 0 2 0 0 40 1 232 6 6 0 0 0x2 1 6 62 0 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 63 8 0x0 1 0 12 0 -1 8 262185 64 0 63 63 0 64 0x1 0 0 0 -1 64 16 0x0 1 0 12 0 -1 8 262185 64 0 63 63 0 64 0x1 0 0 0 -1 65 24 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 66 28 0x0 1 0 12 0 -1 1 262185 8 0 7 7 0 8 0x1 0 0 0 -1 67 32 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 0x3 0x1 28 0
+68 84
+68 -1 69 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 29 0
+70 84
+70 -1 71 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 30 0
+72 84
+72 -1 73 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 31 0
+74 84
+74 -1 75 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 32 0
+76 84
+76 -1 77 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 33 0
+78 84
+78 -1 79 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 34 0
+80 84
+80 -1 81 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 35 0
+82 84
+82 -1 83 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 36 0
+84 69
+84 -1 85 0x0 1 0 10 0 -1 256 262153 1024 0 1023 1023 0 1024 0x1 37 0
+86 70
+86 -1 87 0x0 1 0 10 0 -1 1024 262155 4096 0 4095 4095 0 4096 0x1 38 0
+88 50
+88 -1 89 0x0 1 0 12 0 1 4 41 1 0 0 0 0 1 0x1 39 0
+90 55
+90 -1 91 0x0 1 0 12 0 -1 1 262185 2 0 1 1 0 2 0x1 40 0
+92 55
+92 -1 93 0x0 1 0 12 0 -1 4 262185 2 0 1 1 0 2 0x1 41 0
+94 59
+94 -1 95 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 42 0
+96 59
+96 -1 97 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 43 0
+98 59
+98 -1 99 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 44 0
+100 61
+100 -1 101 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 45 0
+102 61
+102 -1 103 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 46 0
+104 61
+104 -1 105 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 47 0
+106 61
+106 -1 107 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 48 0
+108 61
+108 -1 109 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 49 0
+110 61
+110 -1 111 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 50 0
+112 61
+112 -1 113 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 51 0
+114 61
+114 -1 115 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 52 0
+116 61
+116 -1 117 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 53 0
+118 61
+118 -1 119 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 54 0
+120 86
+120 -1 121 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 55 0
+122 86
+122 -1 123 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 56 0
+124 86
+124 -1 125 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 57 0
+126 86
+126 -1 127 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 58 0
+128 86
+128 -1 129 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 59 0
+130 86
+130 -1 131 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 60 0
+132 347
+132 -1 133 0x0 1 0 2 0 0 20 1 32 5 5 0 0 0x2 1 5 134 0 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 135 4 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 136 8 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 36 12 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 137 16 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 0x3 0x1 61 0
+138 1932
+138 -1 139 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 2 0 0 120 1 490 32 32 0 0 0x2 1 32 140 0 0x0 1 0 25 0 -1 4 278561 32 0 31 31 0 32 0x1 0 0 0 -1 141 4 0x0 1 0 25 0 -1 4 278561 32 0 31 31 0 32 0x1 0 0 0 -1 142 8 0x0 1 0 12 0 -1 8 278571 64 0 63 63 0 64 0x1 0 0 0 -1 143 16 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 144 17 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 145 18 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 146 19 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 136 20 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 36 21 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 147 24 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 148 28 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 149 32 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 150 36 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 151 40 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 152 44 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 153 48 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 154 52 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 155 56 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 156 60 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 157 64 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 158 68 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 159 72 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 160 76 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 161 80 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 162 84 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 163 88 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 164 92 0x0 1 0 52 16 1 4 17413 0 0 0 -1 0 0 0x1 0 0 0 -1 165 96 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 166 100 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 167 104 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 168 108 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 0 0 0 -1 169 112 0x0 1 0 12 0 1 1 41 1 0 0 0 0 1 0x1 0 0 0 -1 0x3 0x1 0x1 62 0
+170 76
+170 -1 171 0x0 1 0 12 0 -1 4096 262187 32768 0 32767 32767 0 32768 0x1 63 0
+172 86
+172 -1 173 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 64 0
+174 86
+174 -1 175 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 65 0
+176 86
+176 -1 177 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 66 0
+178 86
+178 -1 179 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 67 0
+180 86
+180 -1 181 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 68 0
+182 86
+182 -1 183 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 69 0
+184 86
+184 -1 185 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 70 0
+186 86
+186 -1 187 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 71 0
+188 86
+188 -1 189 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 72 0
+190 86
+190 -1 191 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 73 0
+192 61
+192 -1 193 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 74 0
+194 86
+194 -1 195 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 75 0
+196 86
+196 -1 197 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 76 0
+198 86
+198 -1 199 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 77 0
+200 86
+200 -1 201 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 78 0
+202 86
+202 -1 203 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 79 0
+204 86
+204 -1 205 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 80 0
+206 86
+206 -1 207 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 81 0
+208 86
+208 -1 209 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 82 0
+210 86
+210 -1 211 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 83 0
+212 86
+212 -1 213 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 84 0
+214 86
+214 -1 215 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 85 0
+216 86
+216 -1 217 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 86 0
+218 86
+218 -1 219 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 87 0
+220 86
+220 -1 221 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 88 0
+222 86
+222 -1 223 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 89 0
+224 86
+224 -1 225 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 90 0
+226 86
+226 -1 227 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 91 0
+228 86
+228 -1 229 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 92 0
+230 86
+230 -1 231 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 93 0
+232 86
+232 -1 233 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 94 0
+234 86
+234 -1 235 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 95 0
+236 61
+236 -1 237 0x0 1 0 12 0 -1 4 278571 32 0 31 31 0 32 0x1 96 0
+238 86
+238 -1 239 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 97 0
+240 86
+240 -1 241 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 98 0
+242 86
+242 -1 243 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 99 0
+244 87
+244 -1 245 0x0 1 0 24 0 1 4 33 32 0 0 0 0 0x0 1 0 22 0 1 8 9 1 0 0 0 0 1 0x1 0x1 100 0
+TYPEDEF_END
+TF_BEGIN 15
+246 41
+246 -1 -1 4 0 1 0 0x0 1 1 1 0x1 1 247 27
+248 41
+248 -1 -1 4 0 1 0 0x0 1 1 1 0x1 1 247 28
+249 41
+249 -1 -1 4 0 1 0 0x0 1 1 1 0x1 1 247 29
+250 94
+250 -1 -1 4 1 1 0 0x0 1 0 25 0 -1 4 278561 32 0 31 31 0 32 0x1 0 251 0x0 1 1 1 0x1 1 1 247 43
+252 117
+252 -1 -1 4 2 1 0 0x0 1 1 42 0x1 0 253 0x0 1 0 25 0 -1 4 278561 32 0 31 31 0 32 0x1 1 0 254 0x0 1 1 1 0x1 1 1 247 44
+255 90
+255 -1 -1 4 1 1 0 0x0 0 0x1 0 253 0x0 1 0 25 0 -1 4 278561 32 0 31 31 0 32 0x1 1 1 247 45
+256 37
+256 -1 -1 4 0 1 0 0x0 0 0x1 1 257 24
+258 63
+258 -1 -1 4 1 1 0 0x0 1 1 1 0x1 0 259 0x0 1 1 1 0x1 1 1 257 25
+260 63
+260 -1 -1 6 1 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 1 261 59
+262 86
+262 -1 -1 6 2 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 0 263 0x0 1 1 37 0x1 1 1 261 67
+264 86
+264 -1 -1 6 2 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 0 263 0x0 1 1 37 0x1 1 1 261 74
+265 87
+265 -1 -1 6 2 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 0 263 0x0 1 1 37 0x1 2 1 261 121
+266 64
+266 -1 -1 6 1 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 1 261 113
+267 87
+267 -1 -1 6 2 1 0 0x0 1 1 42 0x1 0 34 0x0 1 1 1 0x1 1 0 263 0x0 1 1 37 0x1 3 1 261 105
+268 86
+268 -1 -1 4 2 1 0 0x0 1 1 42 0x1 0 269 0x0 1 1 1 0x1 1 0 254 0x0 1 1 1 0x1 1 1 257 23
+TF_END
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib.qdb
new file mode 100644
index 00000000..f039f4d1
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qdb
new file mode 100644
index 00000000..251fd45c
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qpg
new file mode 100644
index 00000000..c6189541
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qpg differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qtl
new file mode 100644
index 00000000..6f5c0fb3
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib1_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qdb
new file mode 100644
index 00000000..f5f2cd0c
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qpg
new file mode 100644
index 00000000..799be024
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qpg differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qtl
new file mode 100644
index 00000000..c5da6f72
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib2_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qdb
new file mode 100644
index 00000000..96834e5a
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qpg
new file mode 100644
index 00000000..57538eae
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qpg differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qtl
new file mode 100644
index 00000000..49eb87a9
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib3_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qdb
new file mode 100644
index 00000000..7262f1be
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qpg
new file mode 100644
index 00000000..7a6d127f
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qpg differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qtl
new file mode 100644
index 00000000..eeed9c01
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib4_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qdb
new file mode 100644
index 00000000..948929e9
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qdb differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qpg b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qpg
new file mode 100644
index 00000000..e69de29b
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qtl b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qtl
new file mode 100644
index 00000000..69d31ea0
Binary files /dev/null and b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_batch_top_tb/_lib5_0.qtl differ
diff --git a/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_debug_top_tb/_dpi/dpi.tfdb b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_debug_top_tb/_dpi/dpi.tfdb
new file mode 100644
index 00000000..f0673a17
--- /dev/null
+++ b/UVM_Framework/UVMF_2022.3/challenge_3/block_2/uvmf_template_output/project_benches/block_2/sim/work/optimized_debug_top_tb/_dpi/dpi.tfdb
@@ -0,0 +1,777 @@
+VERSION 10 1 1
+SYM_BEGIN 270
+54 13
+uvm_reg_bd_cb
+252 15
+uvm_dpi_regexec
+193 23
+uvm_pkg::uvm_config_int
+32 19
+uvm_pkg::uvm_hier_e
+29 12
+uvm_access_e
+198 19
+uvm_objection_cbs_t
+180 13
+uvm_report_cb
+115 23
+uvm_pkg::uvm_config_seq
+33 13
+uvm_predict_e
+117 30
+uvm_pkg::uvm_virtual_sequencer
+7 4
+size
+128 23
+uvm_default_driver_type
+130 32
+uvm_default_sequencer_param_type
+100 53
+
+109 27
+uvm_pkg::uvm_config_wrapper
+266 15
+uvm_hdl_release
+195 26
+uvm_pkg::uvm_config_string
+135 34
+uvm_pkg::uvm_tlm_response_status_e
+264 13
+uvm_hdl_force
+81 53
+uvm_pkg::
+25 16
+uvm_endianness_e
+240 16
+uvm_barrier_pool
+85 49
+uvm_pkg::
+157 14
+begin_elements
+105 57
+uvm_pkg::
+156 9
+reference
+61 24
+uvm_pkg::uvm_mem_cb_iter
+176 11
+value_width
+253 4
+preg
+145 26
+uvm_pkg::uvm_reg_byte_en_t
+219 22
+uvm_pkg::uvm_verbosity
+2 20
+uvm_printer_row_info
+49 50
+uvm_pkg::
+196 17
+uvm_config_object
+186 17
+uvm_id_file_array
+121 56
+uvm_pkg::
+96 48
+
+62 16
+uvm_reg_field_cb
+116 21
+uvm_virtual_sequencer
+132 17
+uvm_tlm_command_e
+46 7
+byte_en
+35 22
+uvm_reg_map_addr_range
+208 23
+uvm_active_passive_enum
+122 43
+
+211 23
+uvm_pkg::
+256 17
+uvm_dump_re_cache
+107 45
+uvm_pkg::
+57 27
+uvm_pkg::uvm_reg_bd_cb_iter
+97 57
+uvm_pkg::
+154 10
+identifier
+104 48
+
+189 33
+uvm_pkg::uvm_id_verbosities_array
+143 29
+uvm_pkg::uvm_reg_addr_logic_t
+66 17
+uvm_vreg_field_cb
+80 44
+
+255 15
+uvm_dpi_regfree
+72 11
+uvm_vreg_cb
+247 46
+verilog_src/uvm-1.1d/src/dpi/uvm_svcmd_dpi.svh
+110 19
+uvm_heartbeat_modes
+40 14
+uvm_reg_bus_op
+263 5
+value
+133 26
+uvm_pkg::uvm_tlm_command_e
+238 13
+uvm_apprepend
+236 19
+uvm_objection_event
+138 14
+uvm_tlm_sync_e
+139 23
+uvm_pkg::uvm_tlm_sync_e
+168 9
+oct_radix
+19 12
+uvm_status_e
+141 28
+uvm_pkg::uvm_reg_mem_tests_e
+43 4
+addr
+267 24
+uvm_hdl_release_and_read
+16 6
+offset
+136 15
+uvm_tlm_phase_e
+207 34
+uvm_pkg::uvm_recursion_policy_enum
+34 22
+uvm_pkg::uvm_predict_e
+47 6
+status
+192 14
+uvm_config_int
+205 23
+uvm_pkg::uvm_radix_enum
+5 4
+name
+140 19
+uvm_reg_mem_tests_e
+30 21
+uvm_pkg::uvm_access_e
+217 24
+uvm_pkg::uvm_action_type
+213 26
+uvm_pkg::uvm_severity_type
+83 55
+uvm_pkg::
+70 49
+
+245 44
+uvm_pkg::
+174 10
+type_width
+178 20
+uvm_pack_bitstream_t
+170 9
+hex_radix
+204 14
+uvm_radix_enum
+147 31
+uvm_pkg::uvm_tree_printer_knobs
+56 18
+uvm_reg_bd_cb_iter
+118 42
+
+79 59
+uvm_pkg::
+98 49
+
+87 57
+uvm_pkg::
+222 12
+SEQ_ARB_TYPE
+220 15
+uvm_port_type_e
+144 17
+uvm_reg_byte_en_t
+179 29
+uvm_pkg::uvm_pack_bitstream_t
+102 47
+
+84 40
+
+188 24
+uvm_id_verbosities_array
+164 10
+show_radix
+259 4
+glob
+53 24
+uvm_pkg::uvm_reg_cb_iter
+26 25
+uvm_pkg::uvm_endianness_e
+124 25
+uvm_default_sequence_type
+216 15
+uvm_action_type
+75 25
+uvm_pkg::uvm_vreg_cb_iter
+17 19
+uvm_reg_cvr_rsrc_db
+246 22
+uvm_dpi_get_next_arg_c
+206 25
+uvm_recursion_policy_enum
+173 10
+name_width
+89 51
+uvm_pkg::
+230 15
+uvm_phase_state
+60 15
+uvm_mem_cb_iter
+113 28
+uvm_pkg::uvm_heartbeat_cbs_t
+181 22
+uvm_pkg::uvm_report_cb
+67 26
+uvm_pkg::uvm_vreg_field_cb
+163 9
+separator
+86 48
+
+202 14
+
+41 23
+uvm_pkg::uvm_reg_bus_op
+6 9
+type_name
+187 26
+uvm_pkg::uvm_id_file_array
+123 52
+uvm_pkg::
+232 20
+uvm_phase_transition
+78 50
+
+88 42
+
+182 18
+uvm_report_cb_iter
+200 14
+uvm_hdl_data_t
+148 6
+#vtbl#
+233 29
+uvm_pkg::uvm_phase_transition
+210 14
+
+269 2
+re
+137 24
+uvm_pkg::uvm_tlm_phase_e
+90 48
+
+160 6
+indent
+231 24
+uvm_pkg::uvm_phase_state
+91 57
+uvm_pkg::
+155 5
+depth
+44 4
+data
+119 51
+uvm_pkg::
+199 28
+uvm_pkg::uvm_objection_cbs_t
+71 58
+uvm_pkg::
+171 9
+max_width
+13 18
+uvm_hdl_path_slice
+183 27
+uvm_pkg::uvm_report_cb_iter
+108 18
+uvm_config_wrapper
+111 28
+uvm_pkg::uvm_heartbeat_modes
+36 31
+uvm_pkg::uvm_reg_map_addr_range
+15 4
+path
+42 4
+kind
+175 10
+size_width
+21 10
+uvm_path_e
+251 5
+regex
+161 9
+show_root
+120 47
+
+45 6
+n_bits
+203 23
+uvm_pkg::
+261 40
+verilog_src/uvm-1.1d/src/dpi/uvm_hdl.svh
+126 26
+uvm_default_sequencer_type
+82 46
+
+215 23
+uvm_pkg::
+249 26
+uvm_dpi_get_tool_version_c
+94 46
+
+24 20
+uvm_pkg::uvm_check_e
+23 11
+uvm_check_e
+166 9
+dec_radix
+243 23
+uvm_pkg::uvm_event_pool
+224 23
+uvm_sequence_state_enum
+9 38
+