39 const char* testbench_cpp_template =
"#include \"V<design_name>.h\"\n"
40 "#include \"saleae_file.h\"\n"
41 "#include \"saleae_parser.h\"\n"
42 "#include \"saleae_directory.h\"\n"
43 "#include \"verilated_vcd_c.h\"\n"
44 "#include <iostream>\n"
45 "#include <stdlib.h>\n"
46 "#include <verilated.h>\n"
48 "#include <fstream>\n"
50 "#define MAX_SIM_TIME 20\n"
51 "vluint64_t sim_time = 0;\n"
52 "vluint64_t to_simulate = 0;\n"
54 "V<design_name> *dut = new V<design_name>;\n"
55 "VerilatedVcdC *m_trace = new VerilatedVcdC;\n"
57 "double sc_time_stamp() { return sim_time; }\n"
59 "void propagate_events() {\n"
61 " //printf(\"dut->eval();\\n\");\n"
62 " m_trace->dump(sim_time);\n"
63 " //printf(\"m_trace->dump(%d);\\n\", sim_time);\n"
64 " sim_time += to_simulate;\n"
65 " //printf(\"sim_time += %d;\\n\\n\", to_simulate);\n"
68 "void set_simulation_value(void *obj, uint64_t t, int val) {\n"
69 " vluint8_t* vluintPtr = static_cast<vluint8_t*>(obj);\n"
70 " if (t != sim_time) {\n"
71 " to_simulate = t - sim_time;\n"
72 " propagate_events();\n"
74 " if (val != 0 && val != 1)\n"
76 " printf(\"error: %d\\n\", val);\n"
80 " *vluintPtr = (vluint8_t)val;\n"
81 " //printf(\"%x = 0x%d;\\n\", obj, val);\n"
85 "int main(int argc, char **argv, char **env) {\n"
86 " hal::SaleaeParser sp(\"saleae/saleae.json\");\n"
88 " std::unordered_map<std::string,hal::Net*> netMap;\n"
89 " for (const hal::SaleaeDirectory::ListEntry& sdle : sp.get_directory().get_net_list())\n"
91 " netMap.insert(std::make_pair(sdle.name,new hal::Net(sdle.name,sdle.id)));\n"
94 " Verilated::traceEverOn(true);\n"
96 " dut->trace(m_trace, 1);\n"
97 " m_trace->open(\"waveform.vcd\");\n"
105 " int counter = 0;\n"
106 " while (sp.next_event()) {\n"
108 " if (counter % 1000000 == 0) {\n"
109 " printf(\"%d\\n\", counter);\n"
114 " //printf(\"dut->eval()\\n\");\n"
115 " m_trace->dump(sim_time); // to_simulate already added in event loop\n"
116 " //printf(\"m_trace->dump(%d);\\n\", sim_time);\n"
117 " // m_trace->final();\n"
119 " m_trace->close();\n"
121 " exit(EXIT_SUCCESS);\n"
123 return std::string(testbench_cpp_template);
const std::string get_testbench_cpp_template()