wrapper.cpp (2085B)
1 #include <VPerilus.h> 2 #include <VPerilus___024root.h> 3 #include <verilated.h> 4 5 static VerilatedContext* ctx = nullptr; 6 static VPerilus* perilus = nullptr; 7 8 extern "C" { 9 void perilus_init() { 10 ctx = new VerilatedContext; 11 ctx->debug(0); 12 ctx->threads(1); 13 ctx->randReset(0); 14 ctx->randSeed(1); 15 ctx->traceEverOn(false); 16 perilus = new VPerilus(ctx); 17 } 18 void perilus_eval() { 19 perilus->eval(); 20 } 21 void perilus_drop() { 22 perilus->final(); 23 delete perilus; 24 delete ctx; 25 perilus = nullptr; 26 ctx = nullptr; 27 } 28 void perilus_increment_time() { 29 ctx->timeInc(1); 30 } 31 32 // clock 33 void perilus_set_clock(uint32_t new_clock) { 34 perilus->clock = new_clock; 35 } 36 37 // pc 38 uint32_t perilus_get_pc() { 39 return perilus->rootp->Perilus__DOT__pc; 40 } 41 void perilus_set_pc(uint32_t new_pc) { 42 perilus->rootp->Perilus__DOT__pc = new_pc; 43 } 44 45 // reset 46 void perilus_set_reset(uint32_t new_reset) { 47 perilus->reset = new_reset; 48 } 49 50 // control unit state 51 uint32_t perilus_get_control_unit_state() { 52 return perilus->rootp->Perilus__DOT__controlUnit__DOT__state; 53 } 54 void perilus_set_control_unit_state(uint32_t new_control_unit_state) { 55 perilus->rootp->Perilus__DOT__controlUnit__DOT__state = new_control_unit_state; 56 } 57 58 // register file 59 const uint32_t* perilus_get_register_file() { 60 return &perilus->rootp->Perilus__DOT__io_registerFile__DOT__registerFile_ext__DOT__Memory[0]; 61 } 62 void perilus_set_register(uint32_t reg, uint32_t value) { 63 perilus->rootp->Perilus__DOT__io_registerFile__DOT__registerFile_ext__DOT__Memory[reg] = value; 64 } 65 66 // memory 67 const uint32_t* perilus_get_memory() { 68 return &perilus->rootp->Perilus__DOT__io_memory__DOT__memory_ext__DOT__Memory[0]; 69 } 70 void perilus_set_memory(uint32_t address, uint32_t value) { 71 perilus->rootp->Perilus__DOT__io_memory__DOT__memory_ext__DOT__Memory[address] = value; 72 } 73 }