blob: c9d6c4321052be002bd2192e7af73de0259e1aa1 [file] [log] [blame]
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -07001// Copyright lowRISC contributors.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5module tb;
6 // dep packages
7 import uvm_pkg::*;
Srikrishna Iyer61fc5132020-07-10 23:13:50 -07008 import top_pkg::*;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -07009 import dv_utils_pkg::*;
Srikrishna Iyer61fc5132020-07-10 23:13:50 -070010 import flash_ctrl_pkg::*;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -070011 import flash_ctrl_env_pkg::*;
12 import flash_ctrl_test_pkg::*;
Srikrishna Iyer59b74f62021-06-05 00:35:43 -070013 import mem_bkdr_util_pkg::mem_bkdr_util;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -070014
15 // macro includes
16 `include "uvm_macros.svh"
17 `include "dv_macros.svh"
18
Eitan Shapira040c4f72022-01-31 17:14:16 +020019 // TB base test ENV_T & CFG_T specification
20 //
21 // Specify the parameters for the flash_ctrl_base_test
22 // This will invoke the UVM registry and link this test type to
23 // the name 'flash_ctrl_base_test' as a test name passed by UVM_TESTNAME
24 //
25 // This is done explicitly only for the prim_pkg::ImplGeneric implementation
26 // since partner base tests inherit from flash_ctrl_base_test#(CFG_T, ENV_T) and
27 // specify directly (CFG_T, ENV_T) via the class extension and use a different
28 // UVM_TESTNAME
29 if (`PRIM_DEFAULT_IMPL==prim_pkg::ImplGeneric) begin : gen_spec_base_test_params
30 typedef flash_ctrl_base_test #(.CFG_T(flash_ctrl_env_cfg),
31 .ENV_T(flash_ctrl_env)) flash_ctrl_base_test_t;
32 end
33
Cindy Chen1c5b13c2021-11-12 16:39:57 -080034 wire clk, rst_n, rst_shadowed_n;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -070035 wire devmode;
36 wire intr_prog_empty;
37 wire intr_prog_lvl;
38 wire intr_rd_full;
39 wire intr_rd_lvl;
40 wire intr_op_done;
Srikrishna Iyer53118292021-06-17 00:50:00 -070041 wire intr_err;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -070042 wire [NUM_MAX_INTERRUPTS-1:0] interrupts;
43
44 // interfaces
Nikola Miladinovicae005eb2021-12-09 15:34:02 +000045 clk_rst_if clk_rst_if (
46 .clk (clk),
47 .rst_n(rst_n)
48 );
49 rst_shadowed_if rst_shadowed_if (
50 .rst_n(rst_n),
51 .rst_shadowed_n(rst_shadowed_n)
52 );
53 pins_if #(NUM_MAX_INTERRUPTS) intr_if (interrupts);
54 pins_if #(1) devmode_if (devmode);
55 tl_if tl_if (
56 .clk (clk),
57 .rst_n(rst_n)
58 );
59 tl_if eflash_tl_if (
60 .clk (clk),
61 .rst_n(rst_n)
62 );
Jaedon Kim4410d452022-08-03 23:30:30 +000063 tl_if prim_tl_if (
64 .clk (clk),
65 .rst_n(rst_n)
66 );
Nikola Miladinovicae005eb2021-12-09 15:34:02 +000067 flash_ctrl_if flash_ctrl_if ();
Jaedon Kimee48b8f2022-06-17 17:26:30 +000068 flash_phy_prim_if fpp_if (
69 .clk (clk),
70 .rst_n(rst_n)
71 );
72
73 `define FLASH_DEVICE_HIER tb.dut.u_eflash.u_flash
74 assign fpp_if.req = `FLASH_DEVICE_HIER.flash_req_i;
75 assign fpp_if.rsp = `FLASH_DEVICE_HIER.flash_rsp_o;
Jaedon Kim36188dd2022-08-20 07:55:46 +000076 for (genvar i = 0; i < flash_ctrl_pkg::NumBanks; i++) begin : gen_bank_loop
77 assign fpp_if.rreq[i] = tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.req_i;
78 assign fpp_if.rdy[i] = tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.rdy_o;
79
80 assign flash_ctrl_if.hazard[i] =
81 tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.data_hazard[3:0];
82 assign flash_ctrl_if.evict_prog[i] =
83 tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.prog_i;
84 assign flash_ctrl_if.evict_erase[i] =
85 tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.pg_erase_i;
86 for (genvar j = 0; j < flash_phy_pkg::NumBuf; j++) begin : gen_per_buffer
87 assign flash_ctrl_if.rd_buf[i][j] =
88 tb.dut.u_eflash.gen_flash_cores[i].u_core.u_rd.read_buf[j];
89 end
90 end
91 assign flash_ctrl_if.fatal_err = tb.dut.fatal_err;
Jaedon Kimee48b8f2022-06-17 17:26:30 +000092 `undef FLASH_DEVICE_HIER
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -070093
Timothy Chen06f78312021-01-20 18:43:27 -080094 `DV_ALERT_IF_CONNECT
95
TIM EWINS8ae9bce2022-02-02 15:32:36 +000096 // SIMPLE OTP KEY INTERFACE (Access via VIF)
97
Timothy Chenfb8a7842021-08-20 00:23:47 -070098 otp_ctrl_pkg::flash_otp_key_req_t otp_req;
99 otp_ctrl_pkg::flash_otp_key_rsp_t otp_rsp;
100
TIM EWINS8ae9bce2022-02-02 15:32:36 +0000101 assign flash_ctrl_if.otp_req.addr_req = otp_req.addr_req;
102 assign flash_ctrl_if.otp_req.data_req = otp_req.data_req;
103
TIM EWINSf6dbc052022-04-28 16:10:48 +0100104 assign otp_rsp.addr_ack = flash_ctrl_if.otp_rsp.addr_ack;
105 assign otp_rsp.data_ack = flash_ctrl_if.otp_rsp.data_ack;
106 assign otp_rsp.key = flash_ctrl_if.otp_rsp.key;
107 assign otp_rsp.rand_key = flash_ctrl_if.otp_rsp.rand_key;
108 assign otp_rsp.seed_valid = flash_ctrl_if.otp_rsp.seed_valid;
Timothy Chenfb8a7842021-08-20 00:23:47 -0700109
Jaedon Kim5fbaea12022-09-07 15:47:05 +0000110 assign flash_ctrl_if.rd_buf_en = tb.dut.u_flash_hw_if.rd_buf_en_o;
111 assign flash_ctrl_if.rma_state = tb.dut.u_flash_hw_if.rma_state_q;
112 assign flash_ctrl_if.prog_state0 =
Jaedon Kim514f1992022-08-24 21:01:17 +0000113 tb.dut.u_eflash.gen_flash_cores[0].u_core.gen_prog_data.u_prog.state_q;
Jaedon Kim5fbaea12022-09-07 15:47:05 +0000114 assign flash_ctrl_if.prog_state1 =
Jaedon Kim514f1992022-08-24 21:01:17 +0000115 tb.dut.u_eflash.gen_flash_cores[1].u_core.gen_prog_data.u_prog.state_q;
Jaedon Kim5fbaea12022-09-07 15:47:05 +0000116 assign flash_ctrl_if.lcmgr_state = tb.dut.u_flash_hw_if.state_q;
117 assign flash_ctrl_if.init = tb.dut.u_flash_hw_if.init_i;
Jaedon Kim514f1992022-08-24 21:01:17 +0000118
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000119 wire flash_test_v;
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000120 assign (pull1, pull0) flash_test_v = 1'b1;
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000121 wire [1:0] flash_test_mode_a;
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000122 assign (pull1, pull0) flash_test_mode_a = 2'h3;
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000123
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700124 // dut
Timothy Chen6dd70f72022-04-07 10:59:10 -0700125 flash_ctrl #(
126 .ProgFifoDepth(ProgFifoDepth),
127 .RdFifoDepth(ReadFifoDepth)
128 ) dut (
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000129 .clk_i (clk),
130 .rst_ni (rst_n),
131 .rst_shadowed_ni(rst_shadowed_n),
132 .clk_otp_i (clk),
133 .rst_otp_ni (rst_n),
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700134
Timothy Chenfb8a7842021-08-20 00:23:47 -0700135 // various tlul interfaces
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000136 .core_tl_i(tl_if.h2d),
137 .core_tl_o(tl_if.d2h),
Jaedon Kim4410d452022-08-03 23:30:30 +0000138 .prim_tl_i(prim_tl_if.h2d),
139 .prim_tl_o(prim_tl_if.d2h),
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000140 .mem_tl_i (eflash_tl_if.h2d),
141 .mem_tl_o (eflash_tl_if.d2h),
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700142
Timothy Chenfb8a7842021-08-20 00:23:47 -0700143 // otp interface
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000144 .otp_i(otp_rsp),
145 .otp_o(otp_req),
Timothy Chend2c9ff42020-11-19 16:03:54 -0800146
Timothy Chenfb8a7842021-08-20 00:23:47 -0700147 // various life cycle decode signals
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000148 .lc_creator_seed_sw_rw_en_i(flash_ctrl_if.lc_creator_seed_sw_rw_en),
149 .lc_owner_seed_sw_rw_en_i (flash_ctrl_if.lc_owner_seed_sw_rw_en),
150 .lc_iso_part_sw_rd_en_i (flash_ctrl_if.lc_iso_part_sw_rd_en),
151 .lc_iso_part_sw_wr_en_i (flash_ctrl_if.lc_iso_part_sw_wr_en),
152 .lc_seed_hw_rd_en_i (flash_ctrl_if.lc_seed_hw_rd_en),
153 .lc_nvm_debug_en_i (flash_ctrl_if.lc_nvm_debug_en),
154 .lc_escalate_en_i (flash_ctrl_if.lc_escalate_en),
Srikrishna Iyeraebf7c12020-07-24 11:02:23 -0700155
Timothy Chenfb8a7842021-08-20 00:23:47 -0700156 // life cycle rma handling
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000157 .rma_req_i (flash_ctrl_if.rma_req),
158 .rma_seed_i(flash_ctrl_if.rma_seed),
159 .rma_ack_o (flash_ctrl_if.rma_ack),
Timothy Chenfb8a7842021-08-20 00:23:47 -0700160
161 // power manager indication
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000162 .pwrmgr_o(flash_ctrl_if.pwrmgr),
163 .keymgr_o(flash_ctrl_if.keymgr),
Timothy Chenfb8a7842021-08-20 00:23:47 -0700164
165 // flash prim signals
Nikola Miladinovic1ea6e942022-06-01 17:21:17 +0100166 .flash_power_ready_h_i (flash_ctrl_if.power_ready_h),
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000167 .flash_power_down_h_i (flash_power_down_h),
Timothy Chenf4d5e9a2021-11-09 13:41:04 -0800168 .flash_bist_enable_i (prim_mubi_pkg::MuBi4False),
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000169 .flash_test_mode_a_io (flash_test_mode_a),
170 .flash_test_voltage_h_io(flash_test_v),
Timothy Chenfb8a7842021-08-20 00:23:47 -0700171
172 // test
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000173 .scanmode_i (prim_mubi_pkg::MuBi4False),
174 .scan_rst_ni('0),
175 .scan_en_i ('0),
Timothy Chenfb8a7842021-08-20 00:23:47 -0700176
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000177 // JTAG
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000178 .cio_tck_i (flash_ctrl_if.cio_tck),
179 .cio_tms_i (flash_ctrl_if.cio_tms),
180 .cio_tdi_i (flash_ctrl_if.cio_tdi),
181 .cio_tdo_en_o(flash_ctrl_if.cio_tdo_en),
182 .cio_tdo_o (flash_ctrl_if.cio_tdo),
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000183
Timothy Chenfb8a7842021-08-20 00:23:47 -0700184 // alerts and interrupts
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000185 .intr_prog_empty_o(intr_prog_empty),
186 .intr_prog_lvl_o (intr_prog_lvl),
187 .intr_rd_full_o (intr_rd_full),
188 .intr_rd_lvl_o (intr_rd_lvl),
189 .intr_op_done_o (intr_op_done),
190 .intr_corr_err_o (intr_err),
191 .alert_rx_i (alert_rx),
Michael Schaffner88829b62022-08-25 11:29:53 -0700192 .alert_tx_o (alert_tx)
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700193 );
194
Eitan Shapira11b04a92021-04-22 10:00:46 +0300195 // Create edge in flash_power_down_h_i, whenever reset is asserted
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200196 logic init;
197 assign flash_power_down_h = (init ? 1'b1 : 1'b0);
198 initial begin
Eitan Shapira11b04a92021-04-22 10:00:46 +0300199 forever begin
200 fork
201 begin : isolation_fork
202 if (rst_n === 1'b1) begin
203 // Fork off a thread to deassert init after 5 clocks.
204 fork
205 begin : deassert_init
206 clk_rst_if.wait_clks(5);
207 init = 1'b0;
208 end : deassert_init
209 join_none
210 end else begin
Eitan Shapira0e847a62022-01-27 15:48:32 +0200211 init = 1'b1;
Eitan Shapira11b04a92021-04-22 10:00:46 +0300212 end
213
214 // Wait for the rst_n to change.
215 @(rst_n);
216 disable fork;
217 end : isolation_fork
218 join
219 end
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200220 end
221
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700222 // Instantitate the memory backdoor util instances.
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200223 //
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700224 // This only applies to the generic eflash. A unique memory backdoor util instance is created for
225 // each type of flash partition in each bank.
226 //
227 // For eflash of a specific vendor implementation, set the hierarchy to the memory element
228 // correctly when creating these instances in the extended testbench.
Srikrishna Iyerfe8a53a2022-08-30 11:32:56 -0700229 `define FLASH_BANK_HIER(i) \
Timothy Chenfb8a7842021-08-20 00:23:47 -0700230 tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.gen_prim_flash_banks[i]. \
Srikrishna Iyerfe8a53a2022-08-30 11:32:56 -0700231 u_prim_flash_bank
232
233 `define FLASH_DATA_MEM_HIER(i) \
234 `FLASH_BANK_HIER(i).u_mem.gen_generic.u_impl_generic.mem
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200235
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700236 `define FLASH_DATA_MEM_HIER_STR(i) \
Timothy Chenfb8a7842021-08-20 00:23:47 -0700237 $sformatf({"tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.", \
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700238 "gen_prim_flash_banks[%0d].u_prim_flash_bank.u_mem.gen_generic.", \
239 "u_impl_generic.mem"}, i)
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700240
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700241 `define FLASH_INFO_MEM_HIER(i, j) \
Timothy Chenfb8a7842021-08-20 00:23:47 -0700242 tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.gen_prim_flash_banks[i]. \
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700243 u_prim_flash_bank.gen_info_types[j].u_info_mem.gen_generic.u_impl_generic.mem
Srikrishna Iyer6ff88ed2020-07-10 16:29:26 -0700244
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700245 `define FLASH_INFO_MEM_HIER_STR(i, j) \
Timothy Chenfb8a7842021-08-20 00:23:47 -0700246 $sformatf({"tb.dut.u_eflash.u_flash.gen_generic.u_impl_generic.", \
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700247 "gen_prim_flash_banks[%0d].u_prim_flash_bank.gen_info_types[%0d].", \
248 "u_info_mem.gen_generic.u_impl_generic.mem"}, i, j)
Srikrishna Iyer6ff88ed2020-07-10 16:29:26 -0700249
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700250 if (`PRIM_DEFAULT_IMPL == prim_pkg::ImplGeneric) begin : gen_generic
251 for (genvar i = 0; i < flash_ctrl_pkg::NumBanks; i++) begin : gen_each_bank
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200252 flash_dv_part_e part = part.first();
253
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200254 initial begin
Srikrishna Iyer20c31492022-01-31 12:17:57 -0800255 flash_mem_bkdr_util m_mem_bkdr_util;
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000256 m_mem_bkdr_util = new(
257 .name($sformatf("mem_bkdr_util[%0s][%0d]", part.name(), i)),
258 .path(`FLASH_DATA_MEM_HIER_STR(i)),
259 .depth($size(`FLASH_DATA_MEM_HIER(i))),
260 .n_bits($bits(`FLASH_DATA_MEM_HIER(i))),
261 .err_detection_scheme(mem_bkdr_util_pkg::EccHamming_76_68)
262 );
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700263 uvm_config_db#(mem_bkdr_util)::set(null, "*.env", m_mem_bkdr_util.get_name(),
264 m_mem_bkdr_util);
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200265 part = part.next();
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200266 end
267
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700268 for (genvar j = 0; j < flash_ctrl_pkg::InfoTypes; j++) begin : gen_each_info_type
269 initial begin
Srikrishna Iyer20c31492022-01-31 12:17:57 -0800270 flash_mem_bkdr_util m_mem_bkdr_util;
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000271 m_mem_bkdr_util = new(
272 .name($sformatf("mem_bkdr_util[%0s][%0d]", part.name(), i)),
273 .path(`FLASH_INFO_MEM_HIER_STR(i, j)),
274 .depth($size(`FLASH_INFO_MEM_HIER(i, j))),
275 .n_bits($bits(`FLASH_INFO_MEM_HIER(i, j))),
276 .err_detection_scheme(mem_bkdr_util_pkg::EccHamming_76_68)
277 );
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700278 uvm_config_db#(mem_bkdr_util)::set(null, "*.env", m_mem_bkdr_util.get_name(),
279 m_mem_bkdr_util);
280 part = part.next();
281 end
282 end : gen_each_info_type
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200283
Srikrishna Iyerfe8a53a2022-08-30 11:32:56 -0700284 bind `FLASH_BANK_HIER(i) flash_ctrl_mem_if flash_ctrl_mem_if (
285 .clk_i,
286 .rst_ni,
287 .data_mem_req,
288 .mem_wr,
289 .mem_addr,
290 .mem_wdata,
291 .mem_part,
292 .mem_info_sel,
293 .info0_mem_req (gen_info_types[0].info_mem_req),
294 .info1_mem_req (gen_info_types[1].info_mem_req),
295 .info2_mem_req (gen_info_types[2].info_mem_req)
296 );
297 initial begin
298 uvm_config_db#(virtual flash_ctrl_mem_if)::set(null, "*.env",
299 $sformatf("flash_ctrl_mem_vif[%0d]", i), `FLASH_BANK_HIER(i).flash_ctrl_mem_if);
300 end
301
Srikrishna Iyer59b74f62021-06-05 00:35:43 -0700302 end : gen_each_bank
303 end : gen_generic
Eitan Shapira0e0a74b2021-03-01 17:17:48 +0200304
Srikrishna Iyerfe8a53a2022-08-30 11:32:56 -0700305 `undef FLASH_BANK_HIER
Srikrishna Iyer6ff88ed2020-07-10 16:29:26 -0700306 `undef FLASH_DATA_MEM_HIER
307 `undef FLASH_INFO_MEM_HIER
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700308
309 // Connect the interrupts
310 assign interrupts[FlashCtrlIntrProgEmpty] = intr_prog_empty;
311 assign interrupts[FlashCtrlIntrProgLvl] = intr_prog_lvl;
312 assign interrupts[FlashCtrlIntrRdFull] = intr_rd_full;
313 assign interrupts[FlashCtrlIntrRdLvl] = intr_rd_lvl;
314 assign interrupts[FlashCtrlIntrOpDone] = intr_op_done;
Srikrishna Iyer53118292021-06-17 00:50:00 -0700315 assign interrupts[FlashCtrlIntrErr] = intr_err;
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700316
317 initial begin
318 // drive clk and rst_n from clk_if
319 clk_rst_if.set_active();
320 uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000321 uvm_config_db#(virtual clk_rst_if)::set(null, "*.env",
322 "clk_rst_vif_flash_ctrl_eflash_reg_block", clk_rst_if);
Jaedon Kim4410d452022-08-03 23:30:30 +0000323 uvm_config_db#(virtual clk_rst_if)::set(null, "*.env",
324 "clk_rst_vif_flash_ctrl_prim_reg_block", clk_rst_if);
325
Cindy Chen1c5b13c2021-11-12 16:39:57 -0800326 uvm_config_db#(virtual rst_shadowed_if)::set(null, "*.env", "rst_shadowed_vif",
327 rst_shadowed_if);
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700328 uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if);
329 uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);
Weicai Yanga1a444c2021-04-09 17:55:57 -0700330 uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent_flash_ctrl_core_reg_block*", "vif",
331 tl_if);
Nikola Miladinovicae005eb2021-12-09 15:34:02 +0000332 uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent_flash_ctrl_eflash_reg_block*", "vif",
333 eflash_tl_if);
Jaedon Kim4410d452022-08-03 23:30:30 +0000334 uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent_flash_ctrl_prim_reg_block*", "vif",
335 prim_tl_if);
Nikola Miladinovic537937a2021-11-22 15:42:23 +0000336 uvm_config_db#(virtual flash_ctrl_if)::set(null, "*.env", "flash_ctrl_vif", flash_ctrl_if);
Jaedon Kimee48b8f2022-06-17 17:26:30 +0000337 uvm_config_db#(virtual flash_phy_prim_if)::set(null, "*.env.m_fpp_agent*", "vif", fpp_if);
338 $timeformat(-9, 1, " ns", 9);
Srikrishna Iyerb29ebe82020-05-20 11:29:25 -0700339 run_test();
340 end
341
342endmodule