aboutsummaryrefslogtreecommitdiff
path: root/VexRiscv/src/test/cpp/murax
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscv/src/test/cpp/murax')
-rw-r--r--VexRiscv/src/test/cpp/murax/main.cpp64
-rw-r--r--VexRiscv/src/test/cpp/murax/makefile42
-rw-r--r--VexRiscv/src/test/cpp/murax/murax.gtkw51
3 files changed, 157 insertions, 0 deletions
diff --git a/VexRiscv/src/test/cpp/murax/main.cpp b/VexRiscv/src/test/cpp/murax/main.cpp
new file mode 100644
index 0000000..735875f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/main.cpp
@@ -0,0 +1,64 @@
+#include "VMurax.h"
+#include "VMurax_Murax.h"
+#include "verilated.h"
+#include "verilated_vcd_c.h"
+
+#include "../common/framework.h"
+#include "../common/jtag.h"
+#include "../common/uart.h"
+
+class MuraxWorkspace : public Workspace<VMurax>{
+public:
+ MuraxWorkspace() : Workspace("Murax"){
+ ClockDomain *mainClk = new ClockDomain(&top->io_mainClk,NULL,83333,300000);
+ AsyncReset *asyncReset = new AsyncReset(&top->io_asyncReset,50000);
+ UartRx *uartRx = new UartRx(&top->io_uart_txd,1.0e12/115200);
+ UartTx *uartTx = new UartTx(&top->io_uart_rxd,1.0e12/115200);
+
+ timeProcesses.push_back(mainClk);
+ timeProcesses.push_back(asyncReset);
+ timeProcesses.push_back(uartRx);
+ timeProcesses.push_back(uartTx);
+
+ Jtag *jtag = new Jtag(&top->io_jtag_tms,&top->io_jtag_tdi,&top->io_jtag_tdo,&top->io_jtag_tck,83333*4);
+ timeProcesses.push_back(jtag);
+
+ #ifdef TRACE
+ //speedFactor = 10e-3;
+ //cout << "Simulation caped to " << speedFactor << " of real time"<< endl;
+ #endif
+ }
+};
+
+
+struct timespec timer_start(){
+ struct timespec start_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ return start_time;
+}
+
+long timer_end(struct timespec start_time){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ return diffInNanos;
+}
+
+
+
+int main(int argc, char **argv, char **env) {
+
+ Verilated::randReset(2);
+ Verilated::commandArgs(argc, argv);
+
+ printf("BOOT\n");
+ timespec startedAt = timer_start();
+
+ MuraxWorkspace().run(1e9);
+
+ uint64_t duration = timer_end(startedAt);
+ cout << endl << "****************************************************************" << endl;
+
+
+ exit(0);
+}
diff --git a/VexRiscv/src/test/cpp/murax/makefile b/VexRiscv/src/test/cpp/murax/makefile
new file mode 100644
index 0000000..7c946ae
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/makefile
@@ -0,0 +1,42 @@
+DEBUG?=no
+TRACE?=no
+PRINT_PERF?=no
+TRACE_START=0
+ADDCFLAGS += -CFLAGS -pthread -LDFLAGS -pthread
+
+
+ifeq ($(TRACE),yes)
+ VERILATOR_ARGS += --trace
+ ADDCFLAGS += -CFLAGS -DTRACE --trace-fst
+endif
+ifeq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-g3 -O0"
+endif
+ifneq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-O3"
+endif
+ifeq ($(PRINT_PERF),yes)
+ ADDCFLAGS += -CFLAGS -DPRINT_PERF
+endif
+
+ADDCFLAGS += -CFLAGS -DTRACE_START=${TRACE_START}
+
+
+
+all: clean compile
+
+run: compile
+ ./obj_dir/VMurax
+
+verilate: ../../../../Murax.v
+ rm -f Murax.v*.bin
+ cp ../../../../Murax.v*.bin . | true
+ verilator -I../../../.. -cc ../../../../Murax.v -CFLAGS -std=c++11 ${ADDCFLAGS} --gdbbt ${VERILATOR_ARGS} -Wno-WIDTH -Wno-UNOPTFLAT --x-assign unique --exe main.cpp
+
+compile: verilate
+ make -j -C obj_dir/ -f VMurax.mk VMurax
+
+clean:
+ rm -rf obj_dir
+ rm -f Murax.v*.bin
+
diff --git a/VexRiscv/src/test/cpp/murax/murax.gtkw b/VexRiscv/src/test/cpp/murax/murax.gtkw
new file mode 100644
index 0000000..5fa869b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/murax.gtkw
@@ -0,0 +1,51 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Mon Jul 31 17:03:11 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/murax/Murax.vcd"
+[dumpfile_mtime] "Mon Jul 31 17:03:01 2017"
+[dumpfile_size] 1539276802
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/murax/murax.gtkw"
+[timestart] 300964770000
+[size] 1776 953
+[pos] -1 -353
+*-23.000000 300989600000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.Murax.
+[treeopen] TOP.Murax.system_uartCtrl.
+[treeopen] TOP.Murax.system_uartCtrl.uartCtrl_1.
+[sst_width] 454
+[signals_width] 327
+[sst_expanded] 1
+[sst_vpaned_height] 279
+@28
+TOP.Murax.system_uartCtrl.io_uart_rxd
+TOP.Murax.system_uartCtrl.io_uart_txd
+TOP.Murax.system_uartCtrl.io_interrupt
+TOP.Murax.system_cpu.CsrPlugin_mstatus_MIE
+@22
+TOP.Murax.system_uartCtrl.streamFifo_2.io_push_payload[7:0]
+@28
+TOP.Murax.system_uartCtrl.streamFifo_2.io_push_valid
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_valid
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_ready
+@22
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_payload[7:0]
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_read_payload[7:0]
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_read_valid
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.stateMachine_state[2:0]
+@22
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.stateMachine_shifter[7:0]
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.bitTimer_tick
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.bitTimer_counter[2:0]
+@29
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_rxd
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_value
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_tick
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_samples_1
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_samples_2
+[pattern_trace] 1
+[pattern_trace] 0