ysyx-workbench/npc/csrc/Flow/main.cpp

44 lines
1.1 KiB
C++

#include "components.hpp"
#include "config.hpp"
#include "vl_wrapper.hpp"
#include <VFlow.h>
using VlModule = VlModuleInterfaceCommon<VFlow>;
using Registers = _RegistersVPI<uint32_t, 32>;
extern "C" {
void *pmem_get() {
static auto pmem = new Memory<int, 128 * 1024>(config.memory_file,
config.memory_file_binary);
return pmem;
}
int pmem_read(int raddr) {
void *pmem = pmem_get();
auto mem = static_cast<Memory<int, 128 * 1024> *>(pmem);
return mem->read(raddr);
}
void pmem_write(int waddr, int wdata, char wmask) {
void *pmem = pmem_get();
auto mem = static_cast<Memory<int, 128 * 1024> *>(pmem);
return mem->write((std::size_t)waddr, wdata, wmask);
}
}
int main(int argc, char **argv, char **env) {
config.cli_parse(argc, argv);
auto top = std::make_shared<VlModule>(config.do_trace, config.wavefile);
Registers regs("TOP.Flow.reg_0.regFile_");
top->reset_eval(10);
for (int i = 0; i < config.max_sim_time; i++) {
if (top->is_posedge()) {
// Posedge
regs.update();
regs.print_regs();
}
top->eval();
}
return 0;
}