[cosim] Pass SecureIbex and ICache paramters through to cosim

This commit is contained in:
Greg Chadwick 2022-09-09 13:50:37 +01:00 committed by Greg Chadwick
parent 02ccf9e5d0
commit 06fece4640
6 changed files with 29 additions and 6 deletions

View file

@ -11,6 +11,8 @@ class core_ibex_cosim_cfg extends uvm_object;
bit [31:0] pmp_num_regions;
bit [31:0] pmp_granularity;
bit relax_cosim_check;
bit secure_ibex;
bit icache;
`uvm_object_utils_begin(core_ibex_cosim_cfg)
`uvm_field_string(isa_string, UVM_DEFAULT)
@ -20,6 +22,8 @@ class core_ibex_cosim_cfg extends uvm_object;
`uvm_field_string(log_file, UVM_DEFAULT)
`uvm_field_int(pmp_num_regions, UVM_DEFAULT)
`uvm_field_int(pmp_granularity, UVM_DEFAULT)
`uvm_field_int(secure_ibex, UVM_DEFAULT)
`uvm_field_int(icache, UVM_DEFAULT)
`uvm_object_utils_end
`uvm_object_new

View file

@ -62,7 +62,7 @@ class ibex_cosim_scoreboard extends uvm_scoreboard;
// TODO: Ensure log file on reset gets append rather than overwrite?
cosim_handle = spike_cosim_init(cfg.isa_string, cfg.start_pc, cfg.start_mtvec, cfg.log_file,
cfg.pmp_num_regions, cfg.pmp_granularity);
cfg.pmp_num_regions, cfg.pmp_granularity, cfg.secure_ibex, cfg.icache);
if (cosim_handle == null) begin
`uvm_fatal(`gfn, "Could not initialise cosim")

View file

@ -3,6 +3,7 @@
// SPDX-License-Identifier: Apache-2.0
#include <svdpi.h>
#include <cassert>
#include "cosim.h"
@ -12,7 +13,8 @@ extern "C" {
void *spike_cosim_init(const char *isa_string, svBitVecVal *start_pc,
svBitVecVal *start_mtvec, const char *log_file_path_cstr,
svBitVecVal *pmp_num_regions,
svBitVecVal *pmp_granularity) {
svBitVecVal *pmp_granularity, svBit secure_ibex,
svBit icache) {
assert(isa_string);
std::string log_file_path;
@ -21,9 +23,9 @@ void *spike_cosim_init(const char *isa_string, svBitVecVal *start_pc,
log_file_path = log_file_path_cstr;
}
SpikeCosim *cosim =
new SpikeCosim(isa_string, start_pc[0], start_mtvec[0], log_file_path,
false, true, pmp_num_regions[0], pmp_granularity[0]);
SpikeCosim *cosim = new SpikeCosim(isa_string, start_pc[0], start_mtvec[0],
log_file_path, secure_ibex, icache,
pmp_num_regions[0], pmp_granularity[0]);
cosim->add_memory(0x80000000, 0x80000000);
cosim->add_memory(0x00000000, 0x80000000);
return static_cast<Cosim *>(cosim);

View file

@ -11,7 +11,9 @@ import "DPI-C" function
bit [31:0] start_mtvec,
string log_file_path,
bit [31:0] pmp_num_regions,
bit [31:0] pmp_granularity);
bit [31:0] pmp_granularity,
bit secure_ibex,
bit icache);
import "DPI-C" function void spike_cosim_release(chandle cosim_handle);

View file

@ -297,6 +297,9 @@ module core_ibex_tb_top;
uvm_config_db#(bit [31:0])::set(null, "*", "PMPGranularity", 0);
end
uvm_config_db#(bit)::set(null, "*", "SecureIbex", SecureIbex);
uvm_config_db#(bit)::set(null, "*", "ICache", ICache);
run_test();
end

View file

@ -81,6 +81,8 @@ class core_ibex_base_test extends uvm_test;
string cosim_log_file;
bit [31:0] pmp_num_regions;
bit [31:0] pmp_granularity;
bit secure_ibex;
bit icache;
super.build_phase(phase);
$value$plusargs("timeout_in_cycles=%0d", timeout_in_cycles);
@ -119,9 +121,19 @@ class core_ibex_base_test extends uvm_test;
pmp_granularity = '0;
end
if (!uvm_config_db#(bit)::get(null, "", "SecureIbex", secure_ibex)) begin
secure_ibex = '0;
end
if (!uvm_config_db#(bit)::get(null, "", "ICache", icache)) begin
icache = '0;
end
cosim_cfg.pmp_num_regions = pmp_num_regions;
cosim_cfg.pmp_granularity = pmp_granularity;
cosim_cfg.relax_cosim_check = cfg.disable_cosim;
cosim_cfg.secure_ibex = secure_ibex;
cosim_cfg.icache = icache;
uvm_config_db#(core_ibex_cosim_cfg)::set(null, "*cosim_agent*", "cosim_cfg", cosim_cfg);