blob: 113088e60a7a26d054b1c164b34a3776299517f7 [file] [log] [blame]
#include "top.h"
#include <systemc.h>
sc_top::sc_top(sc_core::sc_module_name name)
: clock("clock"), core("core_mini_axi") {
core.io_aclk(clock);
core.io_aresetn(resetn);
core.io_halted(halted);
core.io_fault(fault);
core.io_wfi(wfi);
core.io_irq(irq);
core.io_te(te);
core.io_slog_valid(slog.valid);
core.io_slog_addr(slog.addr);
core.io_slog_data(slog.data);
core.io_debug_en(debug.en);
core.io_debug_cycles(debug.cycles);
core.io_debug_addr_0(debug.addr_0);
core.io_debug_addr_1(debug.addr_1);
core.io_debug_addr_2(debug.addr_2);
core.io_debug_addr_3(debug.addr_3);
core.io_debug_inst_0(debug.inst_0);
core.io_debug_inst_1(debug.inst_1);
core.io_debug_inst_2(debug.inst_2);
core.io_debug_inst_3(debug.inst_3);
core.io_debug_dbus_valid(debug.dbus_valid);
core.io_debug_dbus_bits_addr(debug.dbus_bits_addr);
core.io_debug_dbus_bits_wdata(debug.dbus_bits_wdata);
core.io_debug_dbus_bits_write(debug.dbus_bits_write);
core.io_debug_dispatch_0_instFire(debug.dispatch_0_instFire);
core.io_debug_dispatch_1_instFire(debug.dispatch_1_instFire);
core.io_debug_dispatch_2_instFire(debug.dispatch_2_instFire);
core.io_debug_dispatch_3_instFire(debug.dispatch_3_instFire);
core.io_debug_dispatch_0_instAddr(debug.dispatch_0_instAddr);
core.io_debug_dispatch_1_instAddr(debug.dispatch_1_instAddr);
core.io_debug_dispatch_2_instAddr(debug.dispatch_2_instAddr);
core.io_debug_dispatch_3_instAddr(debug.dispatch_3_instAddr);
core.io_debug_dispatch_0_instInst(debug.dispatch_0_instInst);
core.io_debug_dispatch_1_instInst(debug.dispatch_1_instInst);
core.io_debug_dispatch_2_instInst(debug.dispatch_2_instInst);
core.io_debug_dispatch_3_instInst(debug.dispatch_3_instInst);
core.io_debug_regfile_writeAddr_0_valid(debug.regfile_writeAddr_0_valid);
core.io_debug_regfile_writeAddr_1_valid(debug.regfile_writeAddr_1_valid);
core.io_debug_regfile_writeAddr_2_valid(debug.regfile_writeAddr_2_valid);
core.io_debug_regfile_writeAddr_3_valid(debug.regfile_writeAddr_3_valid);
core.io_debug_regfile_writeAddr_0_bits(debug.regfile_writeAddr_0_bits);
core.io_debug_regfile_writeAddr_1_bits(debug.regfile_writeAddr_1_bits);
core.io_debug_regfile_writeAddr_2_bits(debug.regfile_writeAddr_2_bits);
core.io_debug_regfile_writeAddr_3_bits(debug.regfile_writeAddr_3_bits);
core.io_debug_regfile_writeData_0_valid(debug.regfile_writeData_0_valid);
core.io_debug_regfile_writeData_1_valid(debug.regfile_writeData_1_valid);
core.io_debug_regfile_writeData_2_valid(debug.regfile_writeData_2_valid);
core.io_debug_regfile_writeData_3_valid(debug.regfile_writeData_3_valid);
core.io_debug_regfile_writeData_4_valid(debug.regfile_writeData_4_valid);
core.io_debug_regfile_writeData_5_valid(debug.regfile_writeData_5_valid);
core.io_debug_regfile_writeData_0_bits_addr(debug.regfile_writeData_0_bits_addr);
core.io_debug_regfile_writeData_1_bits_addr(debug.regfile_writeData_1_bits_addr);
core.io_debug_regfile_writeData_2_bits_addr(debug.regfile_writeData_2_bits_addr);
core.io_debug_regfile_writeData_3_bits_addr(debug.regfile_writeData_3_bits_addr);
core.io_debug_regfile_writeData_4_bits_addr(debug.regfile_writeData_4_bits_addr);
core.io_debug_regfile_writeData_5_bits_addr(debug.regfile_writeData_5_bits_addr);
core.io_debug_regfile_writeData_0_bits_data(debug.regfile_writeData_0_bits_data);
core.io_debug_regfile_writeData_1_bits_data(debug.regfile_writeData_1_bits_data);
core.io_debug_regfile_writeData_2_bits_data(debug.regfile_writeData_2_bits_data);
core.io_debug_regfile_writeData_3_bits_data(debug.regfile_writeData_3_bits_data);
core.io_debug_regfile_writeData_4_bits_data(debug.regfile_writeData_4_bits_data);
core.io_debug_regfile_writeData_5_bits_data(debug.regfile_writeData_5_bits_data);
#if (KP_enableFloat == true)
core.io_debug_float_writeAddr_valid(debug.float_writeAddr_valid);
core.io_debug_float_writeAddr_bits(debug.float_writeAddr_bits);
core.io_debug_float_writeData_0_valid(debug.float_writeData_0_valid);
core.io_debug_float_writeData_1_valid(debug.float_writeData_1_valid);
core.io_debug_float_writeData_0_bits_addr(debug.float_writeData_0_bits_addr);
core.io_debug_float_writeData_1_bits_addr(debug.float_writeData_1_bits_addr);
core.io_debug_float_writeData_0_bits_data(debug.float_writeData_0_bits_data);
core.io_debug_float_writeData_1_bits_data(debug.float_writeData_1_bits_data);
#endif
core.io_dm_req_valid(dm.req_valid);
core.io_dm_req_ready(dm.req_valid);
core.io_dm_req_bits_address(dm.req_bits_address);
core.io_dm_req_bits_data(dm.req_bits_data);
core.io_dm_req_bits_op(dm.req_bits_op);
core.io_dm_rsp_valid(dm.rsp_valid);
core.io_dm_rsp_ready(dm.rsp_valid);
core.io_dm_rsp_bits_data(dm.rsp_bits_data);
core.io_dm_rsp_bits_op(dm.rsp_bits_op);
// AR
core.io_axi_master_read_addr_ready(master_arready_4);
core.io_axi_master_read_addr_valid(master_arvalid_4);
core.io_axi_master_read_addr_bits_addr(master_araddr_4);
core.io_axi_master_read_addr_bits_prot(master_arprot_4);
core.io_axi_master_read_addr_bits_id(master_arid_4);
core.io_axi_master_read_addr_bits_len(master_arlen_4);
core.io_axi_master_read_addr_bits_size(master_arsize_4);
core.io_axi_master_read_addr_bits_burst(master_arburst_4);
core.io_axi_master_read_addr_bits_lock(master_arlock_4);
core.io_axi_master_read_addr_bits_cache(master_arcache_4);
core.io_axi_master_read_addr_bits_qos(master_arqos_4);
core.io_axi_master_read_addr_bits_region(master_arregion_4);
// B
core.io_axi_master_read_data_ready(master_rready_4);
core.io_axi_master_read_data_valid(master_rvalid_4);
core.io_axi_master_read_data_bits_data(master_rdata_4);
core.io_axi_master_read_data_bits_id(master_rid_4);
core.io_axi_master_read_data_bits_resp(master_rresp_4);
core.io_axi_master_read_data_bits_last(master_rlast_4);
// AW
core.io_axi_master_write_addr_ready(master_awready_4);
core.io_axi_master_write_addr_valid(master_awvalid_4);
core.io_axi_master_write_addr_bits_addr(master_awaddr_4);
core.io_axi_master_write_addr_bits_prot(master_awprot_4);
core.io_axi_master_write_addr_bits_id(master_awid_4);
core.io_axi_master_write_addr_bits_len(master_awlen_4);
core.io_axi_master_write_addr_bits_size(master_awsize_4);
core.io_axi_master_write_addr_bits_burst(master_awburst_4);
core.io_axi_master_write_addr_bits_lock(master_awlock_4);
core.io_axi_master_write_addr_bits_cache(master_awcache_4);
core.io_axi_master_write_addr_bits_qos(master_awqos_4);
core.io_axi_master_write_addr_bits_region(master_awregion_4);
// W
core.io_axi_master_write_data_ready(master_wready_4);
core.io_axi_master_write_data_valid(master_wvalid_4);
core.io_axi_master_write_data_bits_data(master_wdata_4);
core.io_axi_master_write_data_bits_last(master_wlast_4);
core.io_axi_master_write_data_bits_strb(master_wstrb_4);
// B
core.io_axi_master_write_resp_ready(master_bready_4);
core.io_axi_master_write_resp_valid(master_bvalid_4);
core.io_axi_master_write_resp_bits_id(master_bid_4);
core.io_axi_master_write_resp_bits_resp(master_bresp_4);
// AR
core.io_axi_slave_read_addr_ready(slave_arready_4);
core.io_axi_slave_read_addr_valid(slave_arvalid_4);
core.io_axi_slave_read_addr_bits_addr(slave_araddr_4);
core.io_axi_slave_read_addr_bits_prot(slave_arprot_4);
core.io_axi_slave_read_addr_bits_id(slave_arid_4);
core.io_axi_slave_read_addr_bits_len(slave_arlen_4);
core.io_axi_slave_read_addr_bits_size(slave_arsize_4);
core.io_axi_slave_read_addr_bits_burst(slave_arburst_4);
core.io_axi_slave_read_addr_bits_lock(slave_arlock_4);
core.io_axi_slave_read_addr_bits_cache(slave_arcache_4);
core.io_axi_slave_read_addr_bits_qos(slave_arqos_4);
core.io_axi_slave_read_addr_bits_region(slave_arregion_4);
// R
core.io_axi_slave_read_data_ready(slave_rready_4);
core.io_axi_slave_read_data_valid(slave_rvalid_4);
core.io_axi_slave_read_data_bits_data(slave_rdata_4);
core.io_axi_slave_read_data_bits_id(slave_rid_4);
core.io_axi_slave_read_data_bits_resp(slave_rresp_4);
core.io_axi_slave_read_data_bits_last(slave_rlast_4);
// AW
core.io_axi_slave_write_addr_ready(slave_awready_4);
core.io_axi_slave_write_addr_valid(slave_awvalid_4);
core.io_axi_slave_write_addr_bits_addr(slave_awaddr_4);
core.io_axi_slave_write_addr_bits_prot(slave_awprot_4);
core.io_axi_slave_write_addr_bits_id(slave_awid_4);
core.io_axi_slave_write_addr_bits_len(slave_awlen_4);
core.io_axi_slave_write_addr_bits_size(slave_awsize_4);
core.io_axi_slave_write_addr_bits_burst(slave_awburst_4);
core.io_axi_slave_write_addr_bits_lock(slave_awlock_4);
core.io_axi_slave_write_addr_bits_cache(slave_awcache_4);
core.io_axi_slave_write_addr_bits_qos(slave_awqos_4);
core.io_axi_slave_write_addr_bits_region(slave_awregion_4);
// W
core.io_axi_slave_write_data_ready(slave_wready_4);
core.io_axi_slave_write_data_valid(slave_wvalid_4);
core.io_axi_slave_write_data_bits_data(slave_wdata_4);
core.io_axi_slave_write_data_bits_last(slave_wlast_4);
core.io_axi_slave_write_data_bits_strb(slave_wstrb_4);
// B
core.io_axi_slave_write_resp_ready(slave_bready_4);
core.io_axi_slave_write_resp_valid(slave_bvalid_4);
core.io_axi_slave_write_resp_bits_id(slave_bid_4);
core.io_axi_slave_write_resp_bits_resp(slave_bresp_4);
SC_METHOD(negedge);
sensitive << clock.neg();
}
void sc_top::start_of_simulation() {
resetn = 0;
te = 0;
irq = sc_dt::Log_0;
}
void sc_top::negedge() {
if (hdl_elaboration_only()) {
return;
}
// Check for halt/fault, and if either are seen
// report the state and stop the simulation.
bool faulted = false;
bool halt = false;
if (halted.read().is_01() && halted.read().to_bool()) {
if (fault.read().is_01() && fault.read().to_bool()) {
faulted = true;
} else {
halt = true;
}
}
// Generate a reset pulse in the first few cycles.
static int edge_count = 0;
if (edge_count == 1) {
resetn = 1;
}
if (edge_count == 3) {
resetn = 0;
} else if (edge_count == 5) {
resetn = 1;
}
if (edge_count <= 5) {
edge_count++;
return;
}
bool tohost_halt = false;
if (tohost_addr_.has_value()) {
sc_logic dbus_valid = debug.dbus_valid.read();
if (dbus_valid.is_01() && dbus_valid.to_bool()) {
sc_lv<32> dbus_addr = debug.dbus_bits_addr.read();
if (dbus_addr.get_word(0) == tohost_addr_.value()) {
sc_lv<128> dbus_wdata = debug.dbus_bits_wdata.read();
if (dbus_wdata.get_word(0) & 1) {
tohost_halt = true;
}
}
}
}
if (instr_trace_) {
TraceInstructions();
}
if (tohost_halt || halt || faulted) {
if (instr_trace_) {
tracer_.PrintTrace();
}
}
if (tohost_halt) {
printf("DUT requested halt.\n");
sc_stop();
}
if (halt) {
if (faulted) {
printf("Fault detected, halting.\n");
} else {
printf("Halted successfully (via mpause).\n");
}
sc_stop();
}
// The below sections move data between the SystemC world
// and RTL world, and convert between 2-state and 4-state
// logic.
// S - R
tli_set_logic(sc_logic(slave_rready),
"top.core_mini_axi.io_axi_slave_read_data_ready");
if (slave_rvalid_4.read().is_01()) {
slave_rvalid = slave_rvalid_4.read().to_bool();
}
if (slave_rdata_4.read().is_01()) {
slave_rdata = slave_rdata_4.read();
}
if (slave_rid_4.read().is_01()) {
slave_rid = slave_rid_4.read();
}
if (slave_rresp_4.read().is_01()) {
slave_rresp = slave_rresp_4.read();
}
if (slave_rlast_4.read().is_01()) {
slave_rlast = slave_rlast_4.read().to_bool();
}
// S - AR
if (slave_arready_4.read().is_01()) {
slave_arready = slave_arready_4.read().to_bool();
}
tli_set_logic(sc_logic(slave_arvalid),
"top.core_mini_axi.io_axi_slave_read_addr_valid");
tli_set_lv(sc_lv<32>(slave_araddr.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_addr");
tli_set_lv(sc_lv<3>(slave_arprot.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_prot");
tli_set_lv(sc_lv<6>(slave_arid.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_id");
tli_set_lv(sc_lv<8>(slave_arlen.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_len");
tli_set_lv(sc_lv<3>(slave_arsize.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_size");
tli_set_lv(sc_lv<2>(slave_arburst.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_burst");
tli_set_logic(sc_logic(slave_arlock),
"top.core_mini_axi.io_axi_slave_read_addr_bits_lock");
tli_set_lv(sc_lv<4>(slave_arcache.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_cache");
tli_set_lv(sc_lv<4>(slave_arqos.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_qos");
tli_set_lv(sc_lv<4>(slave_arregion.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_read_addr_bits_region");
// S - AW
if (slave_awready_4.read().is_01()) {
slave_awready = slave_awready_4.read().to_bool();
}
tli_set_logic(sc_logic(slave_awvalid),
"top.core_mini_axi.io_axi_slave_write_addr_valid");
tli_set_lv(sc_lv<32>(slave_awaddr.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_addr");
tli_set_lv(sc_lv<3>(slave_awprot.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_prot");
tli_set_lv(sc_lv<6>(slave_awid.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_id");
tli_set_lv(sc_lv<8>(slave_awlen.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_len");
tli_set_lv(sc_lv<3>(slave_awsize.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_size");
tli_set_lv(sc_lv<2>(slave_awburst.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_burst");
tli_set_logic(sc_logic(slave_awlock),
"top.core_mini_axi.io_axi_slave_write_addr_bits_lock");
tli_set_lv(sc_lv<4>(slave_awcache.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_cache");
tli_set_lv(sc_lv<4>(slave_awqos.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_qos");
tli_set_lv(sc_lv<4>(slave_awregion.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_addr_bits_region");
// S - B
tli_set_logic(sc_logic(slave_bready),
"top.core_mini_axi.io_axi_slave_write_resp_ready");
if (slave_bvalid_4.read().is_01()) {
slave_bvalid = slave_bvalid_4.read().to_bool();
}
if (slave_bid_4.read().is_01()) {
slave_bid = slave_bid_4.read();
}
if (slave_bresp_4.read().is_01()) {
slave_bresp = slave_bresp_4.read();
}
// S - W
if (slave_wready_4.read().is_01()) {
slave_wready = slave_wready_4.read().to_bool();
}
tli_set_logic(sc_logic(slave_wvalid),
"top.core_mini_axi.io_axi_slave_write_data_valid");
tli_set_lv(sc_lv<128>(slave_wdata.read()),
"top.core_mini_axi.io_axi_slave_write_data_bits_data");
tli_set_lv(sc_lv<16>(slave_wstrb.read().get_word(0)),
"top.core_mini_axi.io_axi_slave_write_data_bits_strb");
tli_set_logic(sc_logic(slave_wlast),
"top.core_mini_axi.io_axi_slave_write_data_bits_last");
// M - B
tli_set_logic(sc_logic(master_bvalid),
"top.core_mini_axi.io_axi_master_write_resp_valid");
tli_set_lv(sc_lv<6>(master_bid.read()),
"top.core_mini_axi.io_axi_master_write_resp_bits_id");
tli_set_lv(sc_lv<2>(master_bresp.read()),
"top.core_mini_axi.io_axi_master_write_resp_bits_resp");
if (master_bready_4.read().is_01()) {
master_bready = master_bready_4.read().to_bool();
}
// M - W
tli_set_logic(sc_logic(master_wready),
"top.core_mini_axi.io_axi_master_write_data_ready");
if (master_wvalid_4.read().is_01()) {
master_wvalid = master_wvalid_4.read().to_bool();
}
if (master_wdata_4.read().is_01()) {
master_wdata = master_wdata_4.read();
}
if (master_wstrb_4.read().is_01()) {
master_wstrb = master_wstrb_4.read();
}
if (master_wlast_4.read().is_01()) {
master_wlast = master_wlast_4.read().to_bool();
}
// M - AW
if (master_awvalid_4.read().is_01()) {
master_awvalid = master_awvalid_4.read().to_bool();
}
tli_set_logic(sc_logic(master_awready),
"top.core_mini_axi.io_axi_master_write_addr_ready");
if (master_awaddr_4.read().is_01()) {
master_awaddr = master_awaddr_4.read();
}
if (master_awprot_4.read().is_01()) {
master_awprot = master_awprot_4.read();
}
if (master_awid_4.read().is_01()) {
master_awid = master_awid_4.read();
}
if (master_awlen_4.read().is_01()) {
master_awlen = master_awlen_4.read();
}
if (master_awsize_4.read().is_01()) {
master_awsize = master_awsize_4.read();
}
if (master_awburst_4.read().is_01()) {
master_awburst = master_awburst_4.read();
}
if (master_awlock_4.read().is_01()) {
master_awlock = master_awlock_4.read().to_bool();
}
if (master_awcache_4.read().is_01()) {
master_awcache = master_awcache_4.read();
}
if (master_awqos_4.read().is_01()) {
master_awqos = master_awqos_4.read();
}
if (master_awregion_4.read().is_01()) {
master_awregion = master_awregion_4.read();
}
// M - AR
if (master_arvalid_4.read().is_01()) {
master_arvalid = master_arvalid_4.read().to_bool();
}
tli_set_logic(sc_logic(master_arready),
"top.core_mini_axi.io_axi_master_read_addr_ready");
if (master_araddr_4.read().is_01()) {
master_araddr = master_araddr_4.read();
}
if (master_arprot_4.read().is_01()) {
master_arprot = master_arprot_4.read();
}
if (master_arid_4.read().is_01()) {
master_arid = master_arid_4.read();
}
if (master_arlen_4.read().is_01()) {
master_arlen = master_arlen_4.read();
}
if (master_arsize_4.read().is_01()) {
master_arsize = master_arsize_4.read();
}
if (master_arburst_4.read().is_01()) {
master_arburst = master_arburst_4.read();
}
if (master_arlock_4.read().is_01()) {
master_arlock = master_arlock_4.read().to_bool();
}
if (master_arcache_4.read().is_01()) {
master_arcache = master_arcache_4.read();
}
if (master_arqos_4.read().is_01()) {
master_arqos = master_arqos_4.read();
}
if (master_arregion_4.read().is_01()) {
master_arregion = master_arregion_4.read();
}
// M - R
tli_set_logic(sc_logic(master_rvalid),
"top.core_mini_axi.io_axi_master_read_data_valid");
if (master_rready_4.read().is_01()) {
master_rready = master_rready_4.read().to_bool();
}
tli_set_lv(sc_lv<128>(master_rdata.read()),
"top.core_mini_axi.io_axi_master_read_data_bits_data");
tli_set_lv(sc_lv<6>(master_rid.read().get_word(0)),
"top.core_mini_axi.io_axi_master_read_data_bits_id");
tli_set_lv(sc_lv<2>(master_rresp.read().get_word(0)),
"top.core_mini_axi.io_axi_master_read_data_bits_resp");
tli_set_logic(sc_logic(master_rlast.read()),
"top.core_mini_axi.io_axi_master_read_data_bits_last");
// Generate an IRQ when we see that the core is in WFI.
static bool wfi_seen = false;
if (wfi.read().is_01() && wfi.read().to_bool() && !wfi_seen) {
irq = sc_dt::Log_1;
wfi_seen = true;
} else if (wfi.read().is_01() && !wfi.read().to_bool() && wfi_seen) {
irq = sc_dt::Log_0;
wfi_seen = false;
} else {
irq = sc_dt::Log_0;
}
edge_count++;
}
void sc_top::TraceInstructions() {
std::vector<bool> instFires = {
debug.dispatch_0_instFire.read().is_01() && debug.dispatch_0_instFire.read().to_bool(),
debug.dispatch_1_instFire.read().is_01() && debug.dispatch_1_instFire.read().to_bool(),
debug.dispatch_2_instFire.read().is_01() && debug.dispatch_2_instFire.read().to_bool(),
debug.dispatch_3_instFire.read().is_01() && debug.dispatch_3_instFire.read().to_bool()
};
std::vector<uint32_t> instAddrs = {
debug.dispatch_0_instAddr.read().is_01() ? debug.dispatch_0_instAddr.read().get_word(0) : 0,
debug.dispatch_1_instAddr.read().is_01() ? debug.dispatch_1_instAddr.read().get_word(0) : 0,
debug.dispatch_2_instAddr.read().is_01() ? debug.dispatch_2_instAddr.read().get_word(0) : 0,
debug.dispatch_3_instAddr.read().is_01() ? debug.dispatch_3_instAddr.read().get_word(0) : 0,
};
std::vector<uint32_t> instInsts = {
debug.dispatch_0_instInst.read().is_01() ? debug.dispatch_0_instInst.read().get_word(0) : 0,
debug.dispatch_1_instInst.read().is_01() ? debug.dispatch_1_instInst.read().get_word(0) : 0,
debug.dispatch_2_instInst.read().is_01() ? debug.dispatch_2_instInst.read().get_word(0) : 0,
debug.dispatch_3_instInst.read().is_01() ? debug.dispatch_3_instInst.read().get_word(0) : 0
};
std::vector<bool> scalarWriteAddrValids = {
debug.regfile_writeAddr_0_valid.read().is_01() && debug.regfile_writeAddr_0_valid.read().to_bool(),
debug.regfile_writeAddr_1_valid.read().is_01() && debug.regfile_writeAddr_1_valid.read().to_bool(),
debug.regfile_writeAddr_2_valid.read().is_01() && debug.regfile_writeAddr_2_valid.read().to_bool(),
debug.regfile_writeAddr_3_valid.read().is_01() && debug.regfile_writeAddr_3_valid.read().to_bool()
};
std::vector<uint32_t> scalarWriteAddrAddrs = {
debug.regfile_writeAddr_0_bits.read().is_01() ? debug.regfile_writeAddr_0_bits.read().get_word(0) : 0,
debug.regfile_writeAddr_1_bits.read().is_01() ? debug.regfile_writeAddr_1_bits.read().get_word(0) : 0,
debug.regfile_writeAddr_2_bits.read().is_01() ? debug.regfile_writeAddr_2_bits.read().get_word(0) : 0,
debug.regfile_writeAddr_3_bits.read().is_01() ? debug.regfile_writeAddr_3_bits.read().get_word(0) : 0
};
std::vector<bool> floatWriteAddrValids = {
debug.float_writeAddr_valid.read().is_01() && debug.float_writeAddr_valid.read().to_bool()
};
std::vector<uint32_t> floatWriteAddrAddrs = {
debug.float_writeAddr_bits.read().is_01() ? debug.float_writeAddr_bits.read().get_word(0) : 0
};
std::vector<bool> writeDataValids = {
debug.regfile_writeData_0_valid.read().is_01() && debug.regfile_writeData_0_valid.read().to_bool(),
debug.regfile_writeData_1_valid.read().is_01() && debug.regfile_writeData_1_valid.read().to_bool(),
debug.regfile_writeData_2_valid.read().is_01() && debug.regfile_writeData_2_valid.read().to_bool(),
debug.regfile_writeData_3_valid.read().is_01() && debug.regfile_writeData_3_valid.read().to_bool(),
debug.regfile_writeData_4_valid.read().is_01() && debug.regfile_writeData_4_valid.read().to_bool(),
debug.regfile_writeData_5_valid.read().is_01() && debug.regfile_writeData_5_valid.read().to_bool(),
debug.float_writeData_0_valid.read().is_01() && debug.float_writeData_0_valid.read().to_bool(),
debug.float_writeData_1_valid.read().is_01() && debug.float_writeData_1_valid.read().to_bool(),
};
std::vector<uint32_t> writeDataAddrs = {
debug.regfile_writeData_0_bits_addr.read().is_01() ? debug.regfile_writeData_0_bits_addr.read().get_word(0) : 0,
debug.regfile_writeData_1_bits_addr.read().is_01() ? debug.regfile_writeData_1_bits_addr.read().get_word(0) : 0,
debug.regfile_writeData_2_bits_addr.read().is_01() ? debug.regfile_writeData_2_bits_addr.read().get_word(0) : 0,
debug.regfile_writeData_3_bits_addr.read().is_01() ? debug.regfile_writeData_3_bits_addr.read().get_word(0) : 0,
debug.regfile_writeData_4_bits_addr.read().is_01() ? debug.regfile_writeData_4_bits_addr.read().get_word(0) : 0,
debug.regfile_writeData_5_bits_addr.read().is_01() ? debug.regfile_writeData_5_bits_addr.read().get_word(0) : 0,
debug.float_writeData_0_bits_addr.read().is_01() ? debug.float_writeData_0_bits_addr.read().get_word(0) : 0,
debug.float_writeData_1_bits_addr.read().is_01() ? debug.float_writeData_1_bits_addr.read().get_word(0) : 0
};
std::vector<uint32_t> writeDataDatas = {
debug.regfile_writeData_0_bits_data.read().is_01() ? debug.regfile_writeData_0_bits_data.read().get_word(0) : 0,
debug.regfile_writeData_1_bits_data.read().is_01() ? debug.regfile_writeData_1_bits_data.read().get_word(0) : 0,
debug.regfile_writeData_2_bits_data.read().is_01() ? debug.regfile_writeData_2_bits_data.read().get_word(0) : 0,
debug.regfile_writeData_3_bits_data.read().is_01() ? debug.regfile_writeData_3_bits_data.read().get_word(0) : 0,
debug.regfile_writeData_4_bits_data.read().is_01() ? debug.regfile_writeData_4_bits_data.read().get_word(0) : 0,
debug.regfile_writeData_5_bits_data.read().is_01() ? debug.regfile_writeData_5_bits_data.read().get_word(0) : 0,
debug.float_writeData_0_bits_data.read().is_01() ? debug.float_writeData_0_bits_data.read().get_word(0) : 0,
debug.float_writeData_1_bits_data.read().is_01() ? debug.float_writeData_1_bits_data.read().get_word(0) : 0
};
std::vector<int> executeRegBases = {
InstructionTrace::kScalarBaseReg,
InstructionTrace::kScalarBaseReg,
InstructionTrace::kScalarBaseReg,
InstructionTrace::kScalarBaseReg,
InstructionTrace::kScalarBaseReg,
InstructionTrace::kScalarBaseReg,
InstructionTrace::kFloatBaseReg,
InstructionTrace::kFloatBaseReg
};
tracer_.TraceInstruction(
instFires,
instAddrs,
instInsts,
scalarWriteAddrValids,
scalarWriteAddrAddrs,
floatWriteAddrValids,
floatWriteAddrAddrs,
writeDataValids,
writeDataAddrs,
writeDataDatas,
executeRegBases
);
}