Skip to content

Commit

Permalink
remove local overrides, the core cntrl config object will configure I…
Browse files Browse the repository at this point in the history
…SS based on design parameters

Signed-off-by: Steve Richmond <Steve.Richmond@silabs.com>
  • Loading branch information
strichmo committed Jul 22, 2021
1 parent c019c49 commit 00c2317
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 28 deletions.
22 changes: 1 addition & 21 deletions cv32e40x/tests/cfg/pma.yaml
Expand Up @@ -4,24 +4,4 @@ compile_flags:
+define+PMA_CUSTOM_CFG
ovpsim: >
--override root/cpu/misa_Extensions=0x001104
--override root/cpu/marchid=20
--override root/cpu/noinhibit_mask=0xFFFFFFF0
--override root/cpu/extension/PMA_NUM_REGIONS=3
--override root/cpu/extension/word_addr_low2=0
--override root/cpu/extension/word_addr_high2=0x06844204
--override root/cpu/extension/main2=0
--override root/cpu/extension/bufferable2=0
--override root/cpu/extension/cacheable2=0
--override root/cpu/extension/atomic2=0
--override root/cpu/extension/word_addr_low1=0
--override root/cpu/extension/word_addr_high1=0x06844204
--override root/cpu/extension/main1=1
--override root/cpu/extension/bufferable1=1
--override root/cpu/extension/cacheable1=1
--override root/cpu/extension/atomic1=1
--override root/cpu/extension/word_addr_low0=0x06844400
--override root/cpu/extension/word_addr_high0=0xFFFFFFFF
--override root/cpu/extension/main0=1
--override root/cpu/extension/bufferable0=0
--override root/cpu/extension/cacheable0=0
--override root/cpu/extension/atomic0=1
--override root/cpu/marchid=20
51 changes: 44 additions & 7 deletions lib/uvm_agents/uvma_core_cntrl/uvma_core_cntrl_pma_region.sv
Expand Up @@ -49,13 +49,13 @@
rand bit atomic;

`uvm_object_utils_begin(uvma_core_cntrl_pma_region_c);
`uvm_field_enum(corev_mxl_t, xlen , UVM_DEFAULT)
`uvm_field_int( word_addr_low , UVM_DEFAULT)
`uvm_field_int( word_addr_high , UVM_DEFAULT)
`uvm_field_int( main , UVM_DEFAULT)
`uvm_field_int( bufferable , UVM_DEFAULT)
`uvm_field_int( cacheable , UVM_DEFAULT)
`uvm_field_int( atomic , UVM_DEFAULT)
`uvm_field_enum(corev_mxl_t, xlen , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( word_addr_low , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( word_addr_high , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( main , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( bufferable , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( cacheable , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_int( atomic , UVM_DEFAULT | UVM_NOPRINT)
`uvm_field_utils_end

constraint addr_range_cons {
Expand All @@ -77,11 +77,21 @@
*/
extern function new(string name="uvma_core_cntrl_pma_region_c");

/**
* Custom prints
*/
extern function void do_print(uvm_printer printer);

/**
* Simple lookup if address is in region
*/
extern function bit is_addr_in_region(bit [MAX_XLEN-1:0] byte_addr);

/**
* Convert word address to byte address
*/
extern function bit [MAX_XLEN-1:0] get_byte_addr(bit [MAX_XLEN-1:0] word_addr);

endclass : uvma_core_cntrl_pma_region_c

function uvma_core_cntrl_pma_region_c::new(string name="uvma_core_cntrl_pma_region_c");
Expand All @@ -90,6 +100,20 @@ function uvma_core_cntrl_pma_region_c::new(string name="uvma_core_cntrl_pma_regi

endfunction : new

function void uvma_core_cntrl_pma_region_c::do_print(uvm_printer printer);

super.do_print(printer);

printer.print_string("xlen", xlen.name());
printer.print_field("main", main, 1);
printer.print_string("word_addr_low", $sformatf("0x%08x (0x%08x)", word_addr_low, get_byte_addr(word_addr_low)));
printer.print_string("word_addr_high", $sformatf("0x%08x (0x%08x)", word_addr_high, get_byte_addr(word_addr_high)));
printer.print_field("bufferable", bufferable, 1);
printer.print_field("cacheable", cacheable, 1);
printer.print_field("atomic", atomic, 1);

endfunction : do_print

function bit uvma_core_cntrl_pma_region_c::is_addr_in_region(bit [MAX_XLEN-1:0] byte_addr);

if (((byte_addr >> 2) >= word_addr_low) &&
Expand All @@ -100,4 +124,17 @@ function bit uvma_core_cntrl_pma_region_c::is_addr_in_region(bit [MAX_XLEN-1:0]

endfunction : is_addr_in_region

function bit [MAX_XLEN-1:0] uvma_core_cntrl_pma_region_c::get_byte_addr(bit [MAX_XLEN-1:0] word_addr);
bit [MAX_XLEN-1:0] byte_addr = word_addr << 2;

case (xlen)
MXL_32: return byte_addr[31:0];
MXL_64: return byte_addr[63:0];
MXL_128: return byte_addr[127:0];
endcase

`uvm_fatal("PMA", "Should not fall through to here");

endfunction : get_byte_addr

`endif // __UVMA_CORE_CNTRL_PMA_REGION_SV__

0 comments on commit 00c2317

Please sign in to comment.