| #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_ |