blob: e6655cda0903d35e64ecdda5182185de0189250e [file]
// Copyright 2022 Google LLC.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// UVM Registers auto-generated by `reggen` containing data structure
package ml_top_core_ral_pkg;
// dep packages
import uvm_pkg::*;
import dv_base_reg_pkg::*;
// macro includes
`include "uvm_macros.svh"
// Forward declare all register/memory/block classes
typedef class ml_top_core_reg_ctrl;
typedef class ml_top_core_reg_memory_bank_ctrl;
typedef class ml_top_core_reg_error_status;
typedef class ml_top_core_reg_init_start;
typedef class ml_top_core_reg_init_end;
typedef class ml_top_core_reg_init_status;
typedef class ml_top_core_reg_block;
class ml_top_core_reg_ctrl extends dv_base_reg;
// fields
rand dv_base_reg_field freeze;
rand dv_base_reg_field ml_reset;
rand dv_base_reg_field pc_start;
`uvm_object_utils(ml_top_core_reg_ctrl)
function new(string name = "ml_top_core_reg_ctrl",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
// create fields
freeze = (dv_base_reg_field::
type_id::create("freeze"));
freeze.configure(
.parent(this),
.size(1),
.lsb_pos(0),
.access("RW"),
.volatile(0),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
freeze.set_original_access("RW");
ml_reset = (dv_base_reg_field::
type_id::create("ml_reset"));
ml_reset.configure(
.parent(this),
.size(1),
.lsb_pos(1),
.access("RW"),
.volatile(0),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
ml_reset.set_original_access("RW");
pc_start = (dv_base_reg_field::
type_id::create("pc_start"));
pc_start.configure(
.parent(this),
.size(17),
.lsb_pos(2),
.access("RW"),
.volatile(0),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
pc_start.set_original_access("RW");
endfunction : build
endclass : ml_top_core_reg_ctrl
class ml_top_core_reg_memory_bank_ctrl extends dv_base_reg;
// fields
rand dv_base_reg_field d_mem_enable;
`uvm_object_utils(ml_top_core_reg_memory_bank_ctrl)
function new(string name = "ml_top_core_reg_memory_bank_ctrl",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
d_mem_enable = (dv_base_reg_field::
type_id::create("d_mem_enable"));
d_mem_enable.configure(
.parent(this),
.size(7),
.lsb_pos(0),
.access("RO"),
.volatile(0),
.reset(32'hff),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
d_mem_enable.set_original_access("RO");
endfunction : build
endclass : ml_top_core_reg_memory_bank_ctrl
class ml_top_core_reg_error_status extends dv_base_reg;
// fields
rand dv_base_reg_field i_mem_out_of_range;
rand dv_base_reg_field d_mem_out_of_range;
rand dv_base_reg_field i_mem_disable_access;
rand dv_base_reg_field d_mem_disable_access;
`uvm_object_utils(ml_top_core_reg_error_status)
function new(string name = "ml_top_core_reg_error_status",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
// create fields
i_mem_out_of_range = (dv_base_reg_field::
type_id::create("i_mem_out_of_range"));
i_mem_out_of_range.configure(
.parent(this),
.size(1),
.lsb_pos(0),
.access("RC"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
i_mem_out_of_range.set_original_access("RC");
d_mem_out_of_range = (dv_base_reg_field::
type_id::create("d_mem_out_of_range"));
d_mem_out_of_range.configure(
.parent(this),
.size(1),
.lsb_pos(1),
.access("RC"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
d_mem_out_of_range.set_original_access("RC");
i_mem_disable_access = (dv_base_reg_field::
type_id::create("i_mem_disable_access"));
i_mem_disable_access.configure(
.parent(this),
.size(4),
.lsb_pos(2),
.access("RC"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
i_mem_disable_access.set_original_access("RC");
d_mem_disable_access = (dv_base_reg_field::
type_id::create("d_mem_disable_access"));
d_mem_disable_access.configure(
.parent(this),
.size(8),
.lsb_pos(6),
.access("RC"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
d_mem_disable_access.set_original_access("RC");
endfunction : build
endclass : ml_top_core_reg_error_status
class ml_top_core_reg_init_start extends dv_base_reg;
// fields
rand dv_base_reg_field address;
rand dv_base_reg_field dmem_sel;
`uvm_object_utils(ml_top_core_reg_init_start)
function new(string name = "ml_top_core_reg_init_start",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
// create fields
address = (dv_base_reg_field::
type_id::create("address"));
address.configure(
.parent(this),
.size(22),
.lsb_pos(0),
.access("RW"),
.volatile(0),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
address.set_original_access("RW");
dmem_sel = (dv_base_reg_field::
type_id::create("dmem_sel"));
dmem_sel.configure(
.parent(this),
.size(1),
.lsb_pos(22),
.access("RW"),
.volatile(0),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
dmem_sel.set_original_access("RW");
endfunction : build
endclass : ml_top_core_reg_init_start
class ml_top_core_reg_init_end extends dv_base_reg;
// fields
rand dv_base_reg_field address;
rand dv_base_reg_field valid;
`uvm_object_utils(ml_top_core_reg_init_end)
function new(string name = "ml_top_core_reg_init_end",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
// create fields
address = (dv_base_reg_field::
type_id::create("address"));
address.configure(
.parent(this),
.size(22),
.lsb_pos(0),
.access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
address.set_original_access("RW");
valid = (dv_base_reg_field::
type_id::create("valid"));
valid.configure(
.parent(this),
.size(1),
.lsb_pos(22),
.access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
valid.set_original_access("RW");
endfunction : build
endclass : ml_top_core_reg_init_end
class ml_top_core_reg_init_status extends dv_base_reg;
// fields
rand dv_base_reg_field init_pending;
rand dv_base_reg_field init_done;
`uvm_object_utils(ml_top_core_reg_init_status)
function new(string name = "ml_top_core_reg_init_status",
int unsigned n_bits = 32,
int has_coverage = UVM_NO_COVERAGE);
super.new(name, n_bits, has_coverage);
endfunction : new
virtual function void build(csr_excl_item csr_excl = null);
// create fields
init_pending = (dv_base_reg_field::
type_id::create("init_pending"));
init_pending.configure(
.parent(this),
.size(1),
.lsb_pos(0),
.access("RO"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
init_pending.set_original_access("RO");
init_done = (dv_base_reg_field::
type_id::create("init_done"));
init_done.configure(
.parent(this),
.size(1),
.lsb_pos(1),
.access("RC"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
init_done.set_original_access("RC");
endfunction : build
endclass : ml_top_core_reg_init_status
class ml_top_core_reg_block extends dv_base_reg_block;
// registers
rand ml_top_core_reg_ctrl ctrl;
rand ml_top_core_reg_memory_bank_ctrl memory_bank_ctrl;
rand ml_top_core_reg_error_status error_status;
rand ml_top_core_reg_init_start init_start;
rand ml_top_core_reg_init_end init_end;
rand ml_top_core_reg_init_status init_status;
`uvm_object_utils(ml_top_core_reg_block)
function new(string name = "ml_top_core_reg_block",
int has_coverage = UVM_NO_COVERAGE);
super.new(name, has_coverage);
endfunction : new
virtual function void build(uvm_reg_addr_t base_addr,
csr_excl_item csr_excl = null);
// create default map
this.default_map = create_map(.name("default_map"),
.base_addr(base_addr),
.n_bytes(4),
.endian(UVM_LITTLE_ENDIAN));
if (csr_excl == null) begin
csr_excl = csr_excl_item::type_id::create("csr_excl");
this.csr_excl = csr_excl;
end
set_hdl_path_root("tb.dut", "BkdrRegPathRtl");
set_hdl_path_root("tb.dut", "BkdrRegPathRtlCommitted");
set_hdl_path_root("tb.dut", "BkdrRegPathRtlShadow");
// create registers
ctrl = (ml_top_core_reg_ctrl::
type_id::create("ctrl"));
ctrl.configure(.blk_parent(this));
ctrl.build(csr_excl);
default_map.add_reg(.rg(ctrl),
.offset(32'h0));
ctrl.add_hdl_path_slice(
"u_reg_csr.u_ctrl_freeze.q",
0, 1, 0, "BkdrRegPathRtl");
ctrl.add_hdl_path_slice(
"u_reg_csr.u_ctrl_ml_reset.q",
1, 1, 0, "BkdrRegPathRtl");
ctrl.add_hdl_path_slice(
"u_reg_csr.u_ctrl_pc_start.q",
2, 17, 0, "BkdrRegPathRtl");
memory_bank_ctrl = (ml_top_core_reg_memory_bank_ctrl::
type_id::create("memory_bank_ctrl"));
memory_bank_ctrl.configure(.blk_parent(this));
memory_bank_ctrl.build(csr_excl);
default_map.add_reg(.rg(memory_bank_ctrl),
.offset(32'h4));
memory_bank_ctrl.add_hdl_path_slice(
"u_reg_csr.u_memory_bank_ctrl_d_mem_enable.q",
0, 7, 0, "BkdrRegPathRtl");
error_status = (ml_top_core_reg_error_status::
type_id::create("error_status"));
error_status.configure(.blk_parent(this));
error_status.build(csr_excl);
default_map.add_reg(.rg(error_status),
.offset(32'h8));
error_status.add_hdl_path_slice(
"u_reg_csr.u_error_status_i_mem_out_of_range.q",
0, 1, 0, "BkdrRegPathRtl");
error_status.add_hdl_path_slice(
"u_reg_csr.u_error_status_d_mem_out_of_range.q",
1, 1, 0, "BkdrRegPathRtl");
error_status.add_hdl_path_slice(
"u_reg_csr.u_error_status_i_mem_disable_access.q",
2, 4, 0, "BkdrRegPathRtl");
error_status.add_hdl_path_slice(
"u_reg_csr.u_error_status_d_mem_disable_access.q",
6, 8, 0, "BkdrRegPathRtl");
init_start = (ml_top_core_reg_init_start::
type_id::create("init_start"));
init_start.configure(.blk_parent(this));
init_start.build(csr_excl);
default_map.add_reg(.rg(init_start),
.offset(32'hc));
init_start.add_hdl_path_slice(
"u_reg_csr.u_init_start_address.q",
0, 22, 0, "BkdrRegPathRtl");
init_start.add_hdl_path_slice(
"u_reg_csr.u_init_start_dmem_sel.q",
22, 1, 0, "BkdrRegPathRtl");
init_end = (ml_top_core_reg_init_end::
type_id::create("init_end"));
init_end.configure(.blk_parent(this));
init_end.build(csr_excl);
default_map.add_reg(.rg(init_end),
.offset(32'h10));
init_end.add_hdl_path_slice(
"u_reg_csr.u_init_end_address.q",
0, 22, 0, "BkdrRegPathRtl");
init_end.add_hdl_path_slice(
"u_reg_csr.u_init_end_valid.q",
22, 1, 0, "BkdrRegPathRtl");
init_status = (ml_top_core_reg_init_status::
type_id::create("init_status"));
init_status.configure(.blk_parent(this));
init_status.build(csr_excl);
default_map.add_reg(.rg(init_status),
.offset(32'h14));
init_status.add_hdl_path_slice(
"u_reg_csr.u_init_status_init_pending.q",
0, 1, 0, "BkdrRegPathRtl");
init_status.add_hdl_path_slice(
"u_reg_csr.u_init_status_init_done.q",
1, 1, 0, "BkdrRegPathRtl");
endfunction : build
endclass : ml_top_core_reg_block
endpackage