66
77// Environment for functional verification of encode.
88// This environment containts two mii agents.
9- class env # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , MFB_ITEM_WIDTH , CC_TDATA_WIDTH , CC_TUSER_WIDTH , STRADDLING ) extends uvm_env ;
9+ class env # (
10+ int unsigned MFB_REGIONS ,
11+ int unsigned MFB_REGION_SIZE ,
12+ int unsigned MFB_BLOCK_SIZE ,
13+ string DEVICE ,
14+ logic STRADDLING
15+ ) extends uvm_env ;
1016
11- `uvm_component_param_utils (uvm_pcie_cc_mfb2axi :: env # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , MFB_ITEM_WIDTH , CC_TDATA_WIDTH , CC_TUSER_WIDTH , STRADDLING ));
17+ `uvm_component_param_utils (uvm_pcie_cc_mfb2axi :: env # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , DEVICE , STRADDLING ));
1218
13- uvm_logic_vector_array_mfb :: env_rx # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , MFB_ITEM_WIDTH , 0 ) mfb_cc_env;
14- uvm_logic_vector_array_mfb :: config_item mfb_cc_cfg;
15- uvm_logic_vector_array_axi :: env_tx # (CC_TDATA_WIDTH , CC_TUSER_WIDTH , MFB_ITEM_WIDTH , MFB_REGIONS , MFB_BLOCK_SIZE , STRADDLING ) axi_cc_env;
16- uvm_logic_vector_array_axi :: config_item axi_cc_cfg;
19+ localparam ITEM_WIDTH = 32 ;
20+ localparam PCIE_ITEMS = MFB_REGIONS * MFB_REGION_SIZE * MFB_BLOCK_SIZE ;
1721
18- uvm_pcie_cc_mfb2axi :: virt_sequencer# (CC_TDATA_WIDTH , CC_TUSER_WIDTH , MFB_REGIONS , MFB_ITEM_WIDTH ) vscr;
22+ uvm_logic_vector_array_mfb :: env_rx # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , ITEM_WIDTH , 0 ) mfb_cc_env;
23+ uvm_pcie_axi :: env_tx # (PCIE_ITEMS , uvm_pcie_axi :: AXI_CC , DEVICE , STRADDLING ) axi_cc_env;
24+
25+ uvm_pcie_cc_mfb2axi :: virt_sequencer vscr;
1926 uvm_reset :: agent m_reset;
2027 uvm_reset :: config_item m_config_reset;
2128
22- scoreboard # ( MFB_ITEM_WIDTH ) m_scoreboard;
29+ scoreboard m_scoreboard;
2330
2431
2532 // Constructor of environment.
@@ -29,6 +36,8 @@ class env #(MFB_REGIONS, MFB_REGION_SIZE, MFB_BLOCK_SIZE, MFB_ITEM_WIDTH, CC_TDA
2936
3037 // Create base components of environment.
3138 function void build_phase (uvm_phase phase);
39+ uvm_logic_vector_array_mfb :: config_item mfb_cc_cfg;
40+ uvm_pcie :: config_item axi_cc_cfg;
3241
3342 axi_cc_cfg = new ;
3443 mfb_cc_cfg = new ;
@@ -50,28 +59,26 @@ class env #(MFB_REGIONS, MFB_REGION_SIZE, MFB_BLOCK_SIZE, MFB_ITEM_WIDTH, CC_TDA
5059 uvm_config_db # (uvm_reset :: config_item):: set (this , " m_reset" , " m_config" , m_config_reset);
5160 m_reset = uvm_reset :: agent :: type_id :: create (" m_reset" , this );
5261
53- uvm_config_db # (uvm_logic_vector_array_axi :: config_item):: set (this , " axi_cc_env" , " m_config" , axi_cc_cfg);
62+ uvm_config_db # (uvm_pcie :: config_item):: set (this , " axi_cc_env" , " m_config" , axi_cc_cfg);
5463 uvm_config_db # (uvm_logic_vector_array_mfb :: config_item):: set (this , " mfb_cc_env" , " m_config" , mfb_cc_cfg);
5564
56- axi_cc_env = uvm_logic_vector_array_axi :: env_tx # (CC_TDATA_WIDTH , CC_TUSER_WIDTH , MFB_ITEM_WIDTH , MFB_REGIONS , MFB_BLOCK_SIZE , STRADDLING ):: type_id :: create (" axi_cc_env" , this );
57- mfb_cc_env = uvm_logic_vector_array_mfb :: env_rx # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , MFB_ITEM_WIDTH , 0 ):: type_id :: create (" mfb_cc_env" , this );
65+ axi_cc_env = uvm_pcie_axi :: env_tx # (PCIE_ITEMS , uvm_pcie_axi :: AXI_CC , DEVICE , STRADDLING ):: type_id :: create (" axi_cc_env" , this );
66+ mfb_cc_env = uvm_logic_vector_array_mfb :: env_rx # (MFB_REGIONS , MFB_REGION_SIZE , MFB_BLOCK_SIZE , ITEM_WIDTH , 0 ):: type_id :: create (" mfb_cc_env" , this );
5867
59- m_scoreboard = scoreboard # ( MFB_ITEM_WIDTH ) :: type_id :: create (" m_scoreboard" , this );
60- vscr = uvm_pcie_cc_mfb2axi :: virt_sequencer# ( CC_TDATA_WIDTH , CC_TUSER_WIDTH , MFB_REGIONS , MFB_ITEM_WIDTH ) :: type_id :: create (" vscr" ,this );
68+ m_scoreboard = scoreboard :: type_id :: create (" m_scoreboard" , this );
69+ vscr = uvm_pcie_cc_mfb2axi :: virt_sequencer :: type_id :: create (" vscr" ,this );
6170 endfunction
6271
6372 // Connect agent's ports with ports from scoreboard.
6473 function void connect_phase (uvm_phase phase);
6574
6675 mfb_cc_env.analysis_port_data.connect (m_scoreboard.analysis_imp_mfb_cc);
67- axi_cc_env.analysis_port_data .connect (m_scoreboard.analysis_imp_axi_cc );
76+ axi_cc_env.analysis_port .connect (m_scoreboard.cmp.analysis_imp_dut );
6877
6978 m_reset.sync_connect (mfb_cc_env.reset_sync);
7079 m_reset.sync_connect (axi_cc_env.reset_sync);
7180
7281 vscr.m_reset = m_reset.m_sequencer;
7382 vscr.m_logic_vector_array_scr = mfb_cc_env.m_sequencer.m_data;
74- vscr.m_pcie = axi_cc_env.m_sequencer;
75-
7683 endfunction
7784endclass
0 commit comments