blob: 37929cac31781608dd2a1e28258d608217417247 [file] [log] [blame]
#ifndef TESTS_VCS_SIM_TOP_H_
#define TESTS_VCS_SIM_TOP_H_
#include <stdio.h>
#include <systemc.h>
#include <systemc_user.h>
#include <deque>
#include <optional>
#include <vector>
#include "CoreMiniAxi.h"
#include "VCoreMiniAxi_parameters.h"
#include "tests/systemc/instruction_trace.h"
struct SlogIO {
sc_signal<sc_logic> valid;
sc_signal<sc_lv<5>> addr;
sc_signal<sc_lv<32>> data;
};
struct DebugIO {
sc_signal<sc_lv<4>> en;
sc_signal<sc_lv<32>> cycles;
sc_signal<sc_lv<32>> addr_0;
sc_signal<sc_lv<32>> addr_1;
sc_signal<sc_lv<32>> addr_2;
sc_signal<sc_lv<32>> addr_3;
sc_signal<sc_lv<32>> inst_0;
sc_signal<sc_lv<32>> inst_1;
sc_signal<sc_lv<32>> inst_2;
sc_signal<sc_lv<32>> inst_3;
sc_signal<sc_logic> dbus_valid;
sc_signal<sc_lv<32>> dbus_bits_addr;
sc_signal<sc_lv<128>> dbus_bits_wdata;
sc_signal<sc_logic> dbus_bits_write;
sc_signal<sc_logic> dispatch_0_instFire;
sc_signal<sc_logic> dispatch_1_instFire;
sc_signal<sc_logic> dispatch_2_instFire;
sc_signal<sc_logic> dispatch_3_instFire;
sc_signal<sc_lv<32>> dispatch_0_instAddr;
sc_signal<sc_lv<32>> dispatch_1_instAddr;
sc_signal<sc_lv<32>> dispatch_2_instAddr;
sc_signal<sc_lv<32>> dispatch_3_instAddr;
sc_signal<sc_lv<32>> dispatch_0_instInst;
sc_signal<sc_lv<32>> dispatch_1_instInst;
sc_signal<sc_lv<32>> dispatch_2_instInst;
sc_signal<sc_lv<32>> dispatch_3_instInst;
// Regfile signals
sc_signal<sc_logic> regfile_writeAddr_0_valid;
sc_signal<sc_logic> regfile_writeAddr_1_valid;
sc_signal<sc_logic> regfile_writeAddr_2_valid;
sc_signal<sc_logic> regfile_writeAddr_3_valid;
sc_signal<sc_lv<5>> regfile_writeAddr_0_bits;
sc_signal<sc_lv<5>> regfile_writeAddr_1_bits;
sc_signal<sc_lv<5>> regfile_writeAddr_2_bits;
sc_signal<sc_lv<5>> regfile_writeAddr_3_bits;
sc_signal<sc_logic> regfile_writeData_0_valid;
sc_signal<sc_logic> regfile_writeData_1_valid;
sc_signal<sc_logic> regfile_writeData_2_valid;
sc_signal<sc_logic> regfile_writeData_3_valid;
sc_signal<sc_logic> regfile_writeData_4_valid;
sc_signal<sc_logic> regfile_writeData_5_valid;
sc_signal<sc_lv<5>> regfile_writeData_0_bits_addr;
sc_signal<sc_lv<5>> regfile_writeData_1_bits_addr;
sc_signal<sc_lv<5>> regfile_writeData_2_bits_addr;
sc_signal<sc_lv<5>> regfile_writeData_3_bits_addr;
sc_signal<sc_lv<5>> regfile_writeData_4_bits_addr;
sc_signal<sc_lv<5>> regfile_writeData_5_bits_addr;
sc_signal<sc_lv<32>> regfile_writeData_0_bits_data;
sc_signal<sc_lv<32>> regfile_writeData_1_bits_data;
sc_signal<sc_lv<32>> regfile_writeData_2_bits_data;
sc_signal<sc_lv<32>> regfile_writeData_3_bits_data;
sc_signal<sc_lv<32>> regfile_writeData_4_bits_data;
sc_signal<sc_lv<32>> regfile_writeData_5_bits_data;
#if (KP_enableFloat == true)
sc_signal<sc_logic> float_writeAddr_valid;
sc_signal<sc_lv<5>> float_writeAddr_bits;
sc_signal<sc_logic> float_writeData_0_valid;
sc_signal<sc_logic> float_writeData_1_valid;
sc_signal<sc_lv<32>> float_writeData_0_bits_addr;
sc_signal<sc_lv<32>> float_writeData_1_bits_addr;
sc_signal<sc_lv<32>> float_writeData_0_bits_data;
sc_signal<sc_lv<32>> float_writeData_1_bits_data;
#endif
};
struct DebugModuleIO {
sc_signal<sc_logic> req_valid;
sc_signal<sc_logic> req_ready;
sc_signal<sc_lv<32>> req_bits_address;
sc_signal<sc_lv<32>> req_bits_data;
sc_signal<sc_lv<2>> req_bits_op;
sc_signal<sc_logic> rsp_valid;
sc_signal<sc_logic> rsp_ready;
sc_signal<sc_lv<32>> rsp_bits_data;
sc_signal<sc_lv<2>> rsp_bits_op;
};
SC_MODULE(sc_top) {
SC_CTOR(sc_top);
void negedge();
struct Instruction {
uint32_t pc;
uint32_t inst;
uint32_t data;
int reg;
bool completed;
};
std::vector<Instruction> committed_insts_;
std::deque<Instruction> retirement_buffer_;
void TraceInstructions();
void start_of_simulation() override;
sc_in_clk clock;
sc_signal<bool> resetn;
sc_signal<sc_logic> halted;
sc_signal<sc_logic> fault;
sc_signal<sc_logic> wfi;
sc_signal<sc_logic> irq;
sc_signal<bool> te;
SlogIO slog;
DebugIO debug;
DebugModuleIO dm;
CoreMiniAxi core;
sc_signal<sc_logic> slave_awready_4;
sc_signal<sc_logic> slave_awvalid_4;
sc_signal<sc_lv<32>> slave_awaddr_4;
sc_signal<sc_lv<3>> slave_awprot_4;
sc_signal<sc_lv<6>> slave_awid_4;
sc_signal<sc_lv<8>> slave_awlen_4;
sc_signal<sc_lv<3>> slave_awsize_4;
sc_signal<sc_lv<2>> slave_awburst_4;
sc_signal<sc_logic> slave_awlock_4;
sc_signal<sc_lv<4>> slave_awcache_4;
sc_signal<sc_lv<4>> slave_awqos_4;
sc_signal<sc_lv<4>> slave_awregion_4;
sc_out<bool> slave_awready;
sc_in<bool> slave_awvalid;
sc_in<sc_bv<32>> slave_awaddr;
sc_in<sc_bv<3>> slave_awprot;
sc_in<sc_bv<6>> slave_awid;
sc_in<sc_bv<8>> slave_awlen;
sc_in<sc_bv<3>> slave_awsize;
sc_in<sc_bv<2>> slave_awburst;
sc_in<bool> slave_awlock;
sc_in<sc_bv<4>> slave_awcache;
sc_in<sc_bv<4>> slave_awqos;
sc_in<sc_bv<4>> slave_awregion;
sc_signal<sc_logic> slave_wready_4;
sc_signal<sc_logic> slave_wvalid_4;
sc_signal<sc_lv<128>> slave_wdata_4;
sc_signal<sc_lv<16>> slave_wstrb_4;
sc_signal<sc_logic> slave_wlast_4;
sc_out<bool> slave_wready;
sc_in<bool> slave_wvalid;
sc_in<sc_bv<128>> slave_wdata;
sc_in<sc_bv<16>> slave_wstrb;
sc_in<bool> slave_wlast;
sc_signal<sc_logic> slave_bready_4;
sc_signal<sc_logic> slave_bvalid_4;
sc_signal<sc_lv<6>> slave_bid_4;
sc_signal<sc_lv<2>> slave_bresp_4;
sc_in<bool> slave_bready;
sc_out<bool> slave_bvalid;
sc_out<sc_bv<6>> slave_bid;
sc_out<sc_bv<2>> slave_bresp;
sc_signal<sc_logic> slave_arready_4;
sc_signal<sc_logic> slave_arvalid_4;
sc_signal<sc_lv<32>> slave_araddr_4;
sc_signal<sc_lv<3>> slave_arprot_4;
sc_signal<sc_lv<6>> slave_arid_4;
sc_signal<sc_lv<8>> slave_arlen_4;
sc_signal<sc_lv<3>> slave_arsize_4;
sc_signal<sc_lv<2>> slave_arburst_4;
sc_signal<sc_logic> slave_arlock_4;
sc_signal<sc_lv<4>> slave_arcache_4;
sc_signal<sc_lv<4>> slave_arqos_4;
sc_signal<sc_lv<4>> slave_arregion_4;
sc_out<bool> slave_arready;
sc_in<bool> slave_arvalid;
sc_in<sc_bv<32>> slave_araddr;
sc_in<sc_bv<3>> slave_arprot;
sc_in<sc_bv<6>> slave_arid;
sc_in<sc_bv<8>> slave_arlen;
sc_in<sc_bv<3>> slave_arsize;
sc_in<sc_bv<2>> slave_arburst;
sc_in<bool> slave_arlock;
sc_in<sc_bv<4>> slave_arcache;
sc_in<sc_bv<4>> slave_arqos;
sc_in<sc_bv<4>> slave_arregion;
sc_signal<sc_logic> slave_rready_4;
sc_signal<sc_logic> slave_rvalid_4;
sc_signal<sc_lv<128>> slave_rdata_4;
sc_signal<sc_lv<6>> slave_rid_4;
sc_signal<sc_lv<2>> slave_rresp_4;
sc_signal<sc_logic> slave_rlast_4;
sc_in<bool> slave_rready;
sc_out<bool> slave_rvalid;
sc_out<sc_bv<128>> slave_rdata;
sc_out<sc_bv<6>> slave_rid;
sc_out<sc_bv<2>> slave_rresp;
sc_out<bool> slave_rlast;
sc_in<bool> master_awready;
sc_out<bool> master_awvalid;
sc_out<sc_bv<32>> master_awaddr;
sc_out<sc_bv<3>> master_awprot;
sc_out<sc_bv<6>> master_awid;
sc_out<sc_bv<8>> master_awlen;
sc_out<sc_bv<3>> master_awsize;
sc_out<sc_bv<2>> master_awburst;
sc_out<bool> master_awlock;
sc_out<sc_bv<4>> master_awcache;
sc_out<sc_bv<4>> master_awqos;
sc_out<sc_bv<4>> master_awregion;
sc_signal<sc_logic> master_awready_4;
sc_signal<sc_logic> master_awvalid_4;
sc_signal<sc_lv<32>> master_awaddr_4;
sc_signal<sc_lv<3>> master_awprot_4;
sc_signal<sc_lv<6>> master_awid_4;
sc_signal<sc_lv<8>> master_awlen_4;
sc_signal<sc_lv<3>> master_awsize_4;
sc_signal<sc_lv<2>> master_awburst_4;
sc_signal<sc_logic> master_awlock_4;
sc_signal<sc_lv<4>> master_awcache_4;
sc_signal<sc_lv<4>> master_awqos_4;
sc_signal<sc_lv<4>> master_awregion_4;
sc_in<bool> master_wready;
sc_out<bool> master_wvalid;
sc_out<sc_bv<128>> master_wdata;
sc_out<sc_bv<16>> master_wstrb;
sc_out<bool> master_wlast;
sc_signal<sc_logic> master_wready_4;
sc_signal<sc_logic> master_wvalid_4;
sc_signal<sc_lv<128>> master_wdata_4;
sc_signal<sc_lv<16>> master_wstrb_4;
sc_signal<sc_logic> master_wlast_4;
sc_out<bool> master_bready;
sc_in<bool> master_bvalid;
sc_in<sc_bv<6>> master_bid;
sc_in<sc_bv<2>> master_bresp;
sc_signal<sc_logic> master_bready_4;
sc_signal<sc_logic> master_bvalid_4;
sc_signal<sc_lv<6>> master_bid_4;
sc_signal<sc_lv<2>> master_bresp_4;
sc_in<bool> master_arready;
sc_out<bool> master_arvalid;
sc_out<sc_bv<32>> master_araddr;
sc_out<sc_bv<3>> master_arprot;
sc_out<sc_bv<6>> master_arid;
sc_out<sc_bv<8>> master_arlen;
sc_out<sc_bv<3>> master_arsize;
sc_out<sc_bv<2>> master_arburst;
sc_out<bool> master_arlock;
sc_out<sc_bv<4>> master_arcache;
sc_out<sc_bv<4>> master_arqos;
sc_out<sc_bv<4>> master_arregion;
sc_signal<sc_logic> master_arready_4;
sc_signal<sc_logic> master_arvalid_4;
sc_signal<sc_lv<32>> master_araddr_4;
sc_signal<sc_lv<3>> master_arprot_4;
sc_signal<sc_lv<6>> master_arid_4;
sc_signal<sc_lv<8>> master_arlen_4;
sc_signal<sc_lv<3>> master_arsize_4;
sc_signal<sc_lv<2>> master_arburst_4;
sc_signal<sc_logic> master_arlock_4;
sc_signal<sc_lv<4>> master_arcache_4;
sc_signal<sc_lv<4>> master_arqos_4;
sc_signal<sc_lv<4>> master_arregion_4;
sc_out<bool> master_rready;
sc_in<bool> master_rvalid;
sc_in<sc_bv<128>> master_rdata;
sc_in<sc_bv<6>> master_rid;
sc_in<sc_bv<2>> master_rresp;
sc_in<bool> master_rlast;
sc_signal<sc_logic> master_rready_4;
sc_signal<sc_logic> master_rvalid_4;
sc_signal<sc_lv<128>> master_rdata_4;
sc_signal<sc_lv<6>> master_rid_4;
sc_signal<sc_lv<2>> master_rresp_4;
sc_signal<sc_logic> master_rlast_4;
std::optional<uint32_t> tohost_addr_;
std::optional<uint32_t> fromhost_addr_;
bool instr_trace_;
InstructionTrace tracer_;
};
#endif // TESTS_VCS_SIM_TOP_H_