perilus

git clone https://git.bradleygannon.com/perilus.git
Log | Files | Refs | Submodules | README

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 }