missing rtl changes from OPAE
This commit is contained in:
44
rtl/Makefile
44
rtl/Makefile
@@ -1,32 +1,35 @@
|
|||||||
all: RUNFILE
|
all: RUNFILE
|
||||||
|
|
||||||
INCLUDE=-I. -Ishared_memory -Icache -IVX_cache -IVX_cache/interfaces -Iinterfaces/ -Ipipe_regs/ -Icompat/ -Isimulate
|
INCLUDE = -I. -Ishared_memory -Icache -IVX_cache -IVX_cache/interfaces -Iinterfaces/ -Ipipe_regs/ -Icompat/ -Isimulate
|
||||||
|
|
||||||
SINGLE_CORE=Vortex.v
|
SINGLE_CORE = Vortex.v
|
||||||
MULTI_CORE=Vortex_SOC.v
|
|
||||||
|
|
||||||
EXE=--exe ./simulate/test_bench.cpp ./simulate/Vortex.cpp
|
MULTI_CORE = Vortex_SOC.v
|
||||||
MULTI_EXE=--exe ./simulate/multi_test_bench.cpp ./simulate/Vortex_SOC.cpp
|
|
||||||
|
|
||||||
COMP=--compiler gcc --language 1800-2009
|
EXE += --exe ./simulate/test_bench.cpp ./simulate/Vortex.cpp
|
||||||
|
|
||||||
WNO=-Wno-UNDRIVEN --Wno-PINMISSING -Wno-STMTDLY -Wno-WIDTH -Wno-UNSIGNED -Wno-UNOPTFLAT -Wno-LITENDIAN
|
MULTI_EXE += --exe ./simulate/multi_test_bench.cpp ./simulate/Vortex_SOC.cpp
|
||||||
|
|
||||||
|
VF += -compiler gcc --language 1800-2009
|
||||||
|
|
||||||
|
WNO += -Wno-UNDRIVEN --Wno-PINMISSING -Wno-STMTDLY -Wno-WIDTH -Wno-UNSIGNED -Wno-UNOPTFLAT -Wno-LITENDIAN
|
||||||
# WNO=
|
# WNO=
|
||||||
|
|
||||||
# LIGHTW=
|
# LIGHTW=
|
||||||
LIGHTW=-Wno-UNOPTFLAT
|
LIGHTW += -Wno-UNOPTFLAT
|
||||||
|
|
||||||
# LIB=-LDFLAGS '-L/usr/local/systemc/'
|
# LIB=-LDFLAGS '-L/usr/local/systemc/'
|
||||||
LIB=
|
LIB +=
|
||||||
|
|
||||||
CF = -std=c++11 -fms-extensions
|
CF += -std=c++11 -fms-extensions
|
||||||
|
|
||||||
DEB=--trace -DVL_DEBUG=1
|
DEB += --trace -DVL_DEBUG=1
|
||||||
|
|
||||||
MAKECPP=(cd obj_dir && make -j -f VVortex.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
|
MAKECPP += (cd obj_dir && make -j -f VVortex.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
|
||||||
|
|
||||||
MAKECPPRel=(cd obj_dir && make -j -f VVortex.mk)
|
MAKECPPRel += (cd obj_dir && make -j -f VVortex.mk)
|
||||||
|
|
||||||
MAKEMULTICPP=(cd obj_dir && make -j -f VVortex_SOC.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
|
MAKEMULTICPP += (cd obj_dir && make -j -f VVortex_SOC.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
|
||||||
|
|
||||||
THREADS ?= $(shell python3 -c 'import multiprocessing as mp; print(max(1, mp.cpu_count() // 2))')
|
THREADS ?= $(shell python3 -c 'import multiprocessing as mp; print(max(1, mp.cpu_count() // 2))')
|
||||||
|
|
||||||
@@ -36,23 +39,22 @@ build_config:
|
|||||||
|
|
||||||
# -LDFLAGS '-lsystemc'
|
# -LDFLAGS '-lsystemc'
|
||||||
VERILATOR: build_config
|
VERILATOR: build_config
|
||||||
verilator $(COMP) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OFF' $(LIGHTW)
|
verilator $(VF) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF)' $(LIGHTW)
|
||||||
|
|
||||||
VERILATORnoWarnings: build_config
|
VERILATORnoWarnings: build_config
|
||||||
verilator $(COMP) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OFF' $(WNO) $(DEB)
|
verilator $(VF) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF)' $(WNO) $(DEB)
|
||||||
|
|
||||||
VERILATORnoWarningsRel: build_config
|
VERILATORnoWarningsRel: build_config
|
||||||
verilator $(COMP) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OFF -O3 -DVL_THREADED' $(WNO) --threads $(THREADS)
|
verilator $(VF) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -O3 -DVL_THREADED' $(WNO) --threads $(THREADS)
|
||||||
|
|
||||||
|
|
||||||
VERILATORMULTInoWarnings: build_config
|
VERILATORMULTInoWarnings: build_config
|
||||||
verilator $(COMP) -cc $(MULTI_CORE) $(INCLUDE) $(MULTI_EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OFF' $(WNO) $(DEB)
|
verilator $(VF) -cc $(MULTI_CORE) $(INCLUDE) $(MULTI_EXE) $(LIB) -CFLAGS '$(CF) -O3 -DVL_THREADED' $(WNO) $(DEB) --threads $(THREADS)
|
||||||
|
|
||||||
compdebug: build_config
|
compdebug: build_config
|
||||||
verilator_bin_dbg $(COMP) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OUTPUT -DVL_DEBUG' $(WNO) $(DEB)
|
verilator_bin_dbg $(VF) -cc $(SINGLE_CORE) $(INCLUDE) $(EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OUTPUT -DVL_DEBUG' $(WNO) $(DEB)
|
||||||
|
|
||||||
compdebugmulti: build_config
|
compdebugmulti: build_config
|
||||||
verilator_bin_dbg $(COMP) -cc $(MULTI_CORE) $(INCLUDE) $(MULTI_EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OUTPUT -DVL_DEBUG' $(WNO) $(DEB)
|
verilator_bin_dbg $(VF) -cc $(MULTI_CORE) $(INCLUDE) $(MULTI_EXE) $(LIB) -CFLAGS '$(CF) -DVCD_OUTPUT -DVL_DEBUG' $(WNO) $(DEB)
|
||||||
|
|
||||||
RUNFILE: VERILATOR
|
RUNFILE: VERILATOR
|
||||||
$(MAKECPP)
|
$(MAKECPP)
|
||||||
|
|||||||
22
rtl/Vortex.v
22
rtl/Vortex.v
@@ -30,11 +30,31 @@ module Vortex
|
|||||||
input wire [31:0] dram_fill_rsp_addr,
|
input wire [31:0] dram_fill_rsp_addr,
|
||||||
input wire [31:0] dram_fill_rsp_data[`DBANK_LINE_SIZE_RNG],
|
input wire [31:0] dram_fill_rsp_data[`DBANK_LINE_SIZE_RNG],
|
||||||
|
|
||||||
// LLC Snooping
|
// DRAM Icache Req
|
||||||
|
output wire I_dram_req,
|
||||||
|
output wire I_dram_req_write,
|
||||||
|
output wire I_dram_req_read,
|
||||||
|
output wire [31:0] I_dram_req_addr,
|
||||||
|
output wire [31:0] I_dram_req_size,
|
||||||
|
output wire [31:0] I_dram_req_data[`IBANK_LINE_SIZE_RNG],
|
||||||
|
output wire [31:0] I_dram_expected_lat,
|
||||||
|
|
||||||
|
// DRAM Icache Res
|
||||||
|
output wire I_dram_fill_accept,
|
||||||
|
input wire I_dram_fill_rsp,
|
||||||
|
input wire [31:0] I_dram_fill_rsp_addr,
|
||||||
|
input wire [31:0] I_dram_fill_rsp_data[`IBANK_LINE_SIZE_RNG],
|
||||||
|
|
||||||
|
// Dcache Snooping
|
||||||
input wire snp_req,
|
input wire snp_req,
|
||||||
input wire [31:0] snp_req_addr,
|
input wire [31:0] snp_req_addr,
|
||||||
output wire snp_req_delay,
|
output wire snp_req_delay,
|
||||||
|
|
||||||
|
// Icache Snooping
|
||||||
|
input wire I_snp_req,
|
||||||
|
input wire [31:0] I_snp_req_addr,
|
||||||
|
output wire I_snp_req_delay,
|
||||||
|
|
||||||
output wire out_ebreak
|
output wire out_ebreak
|
||||||
|
|
||||||
`else
|
`else
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ module VX_shared_memory_block
|
|||||||
|
|
||||||
reg[SMB_WORDS_PER_READ-1:0][3:0][7:0] shared_memory[SMB_HEIGHT-1:0];
|
reg[SMB_WORDS_PER_READ-1:0][3:0][7:0] shared_memory[SMB_HEIGHT-1:0];
|
||||||
|
|
||||||
|
wire [$clog2(SMB_HEIGHT) - 1:0]reg_addr;
|
||||||
|
|
||||||
//wire need_to_write = (|we);
|
//wire need_to_write = (|we);
|
||||||
integer curr_ind;
|
integer curr_ind;
|
||||||
// initial begin
|
// initial begin
|
||||||
@@ -49,7 +51,6 @@ module VX_shared_memory_block
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
wire [$clog2(SMB_HEIGHT) - 1:0]reg_addr;
|
|
||||||
assign reg_addr = addr;
|
assign reg_addr = addr;
|
||||||
// always @(posedge clk)
|
// always @(posedge clk)
|
||||||
// reg_addr <= addr;
|
// reg_addr <= addr;
|
||||||
|
|||||||
@@ -20,35 +20,34 @@
|
|||||||
#include <verilated_vcd_c.h>
|
#include <verilated_vcd_c.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
int cycles_left;
|
int cycles_left;
|
||||||
int data_length;
|
int data_length;
|
||||||
unsigned base_addr;
|
unsigned base_addr;
|
||||||
unsigned * data;
|
unsigned *data;
|
||||||
} dram_req_t;
|
} dram_req_t;
|
||||||
|
|
||||||
class Vortex
|
class Vortex {
|
||||||
{
|
public:
|
||||||
public:
|
Vortex(RAM *ram);
|
||||||
Vortex(RAM* ram);
|
|
||||||
~Vortex();
|
~Vortex();
|
||||||
bool simulate();
|
|
||||||
void step();
|
|
||||||
void reset();
|
|
||||||
void flush_caches(uint32_t mem_addr, uint32_t size);
|
|
||||||
bool is_busy();
|
bool is_busy();
|
||||||
private:
|
void reset();
|
||||||
void print_stats(bool = true);
|
void step();
|
||||||
|
void flush_caches(uint32_t mem_addr, uint32_t size);
|
||||||
|
bool simulate();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void print_stats(bool cycle_test = true);
|
||||||
bool ibus_driver();
|
bool ibus_driver();
|
||||||
bool dbus_driver();
|
bool dbus_driver();
|
||||||
void io_handler();
|
void io_handler();
|
||||||
void send_snoops(uint32_t mem_addr, uint32_t size);
|
void send_snoops(uint32_t mem_addr, uint32_t size);
|
||||||
void wait(uint32_t cycles);
|
void wait(uint32_t cycles);
|
||||||
|
|
||||||
RAM* ram;
|
RAM *ram;
|
||||||
|
|
||||||
VVortex * vortex;
|
VVortex *vortex;
|
||||||
|
|
||||||
unsigned start_pc;
|
unsigned start_pc;
|
||||||
bool refill_d;
|
bool refill_d;
|
||||||
@@ -75,7 +74,7 @@ class Vortex
|
|||||||
double stats_sim_time;
|
double stats_sim_time;
|
||||||
std::vector<dram_req_t> dram_req_vec;
|
std::vector<dram_req_t> dram_req_vec;
|
||||||
std::vector<dram_req_t> I_dram_req_vec;
|
std::vector<dram_req_t> I_dram_req_vec;
|
||||||
#ifdef VCD_OUTPUT
|
#ifdef VCD_OUTPUT
|
||||||
VerilatedVcdC *m_trace;
|
VerilatedVcdC *m_trace;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@@ -19,35 +19,33 @@
|
|||||||
#include <verilated_vcd_c.h>
|
#include <verilated_vcd_c.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
int cycles_left;
|
int cycles_left;
|
||||||
int data_length;
|
int data_length;
|
||||||
unsigned base_addr;
|
unsigned base_addr;
|
||||||
unsigned * data;
|
unsigned *data;
|
||||||
} dram_req_t;
|
} dram_req_t;
|
||||||
|
|
||||||
class Vortex_SOC
|
class Vortex_SOC {
|
||||||
{
|
public:
|
||||||
public:
|
Vortex_SOC(RAM *ram);
|
||||||
Vortex_SOC(RAM* ram);
|
|
||||||
~Vortex_SOC();
|
~Vortex_SOC();
|
||||||
bool simulate();
|
|
||||||
void step();
|
|
||||||
void reset();
|
|
||||||
void flush_caches(uint32_t mem_addr, uint32_t size);
|
|
||||||
bool is_busy();
|
bool is_busy();
|
||||||
private:
|
void reset();
|
||||||
void print_stats(bool = true);
|
void step();
|
||||||
|
void flush_caches(uint32_t mem_addr, uint32_t size);
|
||||||
|
bool simulate();
|
||||||
|
private:
|
||||||
|
void print_stats(bool cycle_test = true);
|
||||||
bool ibus_driver();
|
bool ibus_driver();
|
||||||
bool dbus_driver();
|
bool dbus_driver();
|
||||||
void io_handler();
|
void io_handler();
|
||||||
void send_snoops(uint32_t mem_addr, uint32_t size);
|
void send_snoops(uint32_t mem_addr, uint32_t size);
|
||||||
void wait(uint32_t cycles);
|
void wait(uint32_t cycles);
|
||||||
|
|
||||||
RAM* ram;
|
RAM *ram;
|
||||||
|
|
||||||
VVortex_SOC * vortex;
|
VVortex_SOC *vortex;
|
||||||
|
|
||||||
unsigned start_pc;
|
unsigned start_pc;
|
||||||
bool refill_d;
|
bool refill_d;
|
||||||
@@ -73,7 +71,7 @@ class Vortex_SOC
|
|||||||
int debug_debugAddr;
|
int debug_debugAddr;
|
||||||
double stats_sim_time;
|
double stats_sim_time;
|
||||||
std::vector<dram_req_t> dram_req_vec;
|
std::vector<dram_req_t> dram_req_vec;
|
||||||
#ifdef VCD_OUTPUT
|
#ifdef VCD_OUTPUT
|
||||||
VerilatedVcdC *m_trace;
|
VerilatedVcdC *m_trace;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@@ -3,16 +3,10 @@
|
|||||||
#define NUM_TESTS 46
|
#define NUM_TESTS 46
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
|
||||||
|
|
||||||
// Verilated::debug(1);
|
|
||||||
|
|
||||||
Verilated::commandArgs(argc, argv);
|
Verilated::commandArgs(argc, argv);
|
||||||
|
|
||||||
Verilated::traceEverOn(true);
|
#define ALL_TESTS
|
||||||
|
|
||||||
|
|
||||||
// #define ALL_TESTS
|
|
||||||
#ifdef ALL_TESTS
|
#ifdef ALL_TESTS
|
||||||
bool passed = true;
|
bool passed = true;
|
||||||
std::string tests[NUM_TESTS] = {
|
std::string tests[NUM_TESTS] = {
|
||||||
|
|||||||
@@ -9,10 +9,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
Verilated::commandArgs(argc, argv);
|
Verilated::commandArgs(argc, argv);
|
||||||
|
|
||||||
Verilated::traceEverOn(true);
|
#define ALL_TESTS
|
||||||
|
|
||||||
|
|
||||||
// #define ALL_TESTS
|
|
||||||
#ifdef ALL_TESTS
|
#ifdef ALL_TESTS
|
||||||
bool passed = true;
|
bool passed = true;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user