blob: 0be5183a39003a2e62b5a116c2bdc1a1b3a2fba7 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
module tb;
// dep packages
import uvm_pkg::*;
import dv_utils_pkg::*;
import rom_ctrl_env_pkg::*;
import rom_ctrl_test_pkg::*;
import mem_bkdr_util_pkg::mem_bkdr_util;
// macro includes
`include "uvm_macros.svh"
`include "dv_macros.svh"
wire clk, rst_n;
wire devmode;
kmac_pkg::app_rsp_t kmac_data_in;
kmac_pkg::app_req_t kmac_data_out;
rom_ctrl_pkg::pwrmgr_data_t pwrmgr_data;
rom_ctrl_pkg::keymgr_data_t keymgr_data;
// interfaces
clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n));
pins_if #(1) devmode_if(devmode);
tl_if tl_rom_if(.clk(clk), .rst_n(rst_n));
tl_if tl_if(.clk(clk), .rst_n(rst_n));
kmac_app_intf kmac_app_if(.clk(clk), .rst_n(rst_n));
rom_ctrl_if rom_ctrl_if();
`DV_ALERT_IF_CONNECT
assign kmac_app_if.kmac_data_req = kmac_data_out;
assign kmac_data_in = kmac_app_if.kmac_data_rsp;
assign rom_ctrl_if.pwrmgr_data = pwrmgr_data;
assign rom_ctrl_if.keymgr_data = keymgr_data;
// dut
rom_ctrl #(
.RndCnstScrNonce (RND_CNST_SCR_NONCE),
.RndCnstScrKey (RND_CNST_SCR_KEY)
) dut (
.clk_i (clk),
.rst_ni (rst_n),
.rom_cfg_i (prim_rom_pkg::rom_cfg_t'('0)),
.rom_tl_i (tl_rom_if.h2d),
.rom_tl_o (tl_rom_if.d2h),
.regs_tl_i (tl_if.h2d),
.regs_tl_o (tl_if.d2h),
.alert_rx_i (alert_rx),
.alert_tx_o (alert_tx),
.pwrmgr_data_o (pwrmgr_data),
.keymgr_data_o (keymgr_data),
.kmac_data_i (kmac_data_in),
.kmac_data_o (kmac_data_out)
);
// Instantitate the memory backdoor util instance.
`define ROM_CTRL_MEM_HIER \
tb.dut.u_rom.u_rom.u_prim_rom.gen_generic.u_impl_generic.mem
initial begin
mem_bkdr_util m_mem_bkdr_util;
m_mem_bkdr_util = new(.name ("mem_bkdr_util"),
.path (`DV_STRINGIFY(`ROM_CTRL_MEM_HIER)),
.depth ($size(`ROM_CTRL_MEM_HIER)),
.n_bits($bits(`ROM_CTRL_MEM_HIER)),
.parity(1'b0),
.ecc (prim_secded_pkg::Secded_39_32));
// drive clk and rst_n from clk_if
clk_rst_if.set_active();
uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);
uvm_config_db#(virtual tl_if)::set(null, "*.env.m_rom_tl_agent*", "vif", tl_rom_if);
uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent*", "vif", tl_if);
uvm_config_db#(mem_bkdr_util)::set(null, "*.env", "mem_bkdr_util", m_mem_bkdr_util);
uvm_config_db#(virtual kmac_app_intf)::set(null, "*.env.m_kmac_agent*", "vif", kmac_app_if);
uvm_config_db#(rom_ctrl_vif)::set(null, "*.env", "rom_ctrl_vif", rom_ctrl_if);
$timeformat(-12, 0, " ps", 12);
run_test();
end
`undef ROM_CTRL_MEM_HIER
endmodule