#include #include #include "object.h" #include "dlist.h" #include "bignumber.h" #include "conststring.h" #include "preprocess.h" #include "verilog_preprocess.h" #include "verilog_parsetree.h" #include "verilog_root.h" #include "string.h" int SetPreProcess(HOBJECT object); int yylex(); int yyparse(void); extern char* yytext; static char logbuf[64 * 1024]; #define GOOGLENET 0 #define TERRIS 0 #define COUNTER 1 #ifdef WIN32 #define WORKDIR "d:/gitwork" #else #define WORKDIR "/media/raoxianhong/_dde_data/gitwork" #endif int main(int argc, char* argv[]) { IVerilogRoot** root; IVerilogNode** rootnode; IPreprocess** p; FILE* pDumpFile; FILE* pCodeFile; preprocessVerilogCreate(&p); objectCall1(p, AddIncludePath, WORKDIR"/hdl4se/hdl4secell/verilog/"); hdl4se_parser_SetPreProcess(p); #if COUNTER objectCall2(p, SetFile, WORKDIR"/hdl4se/examples/counter/verilog/counter_main.v", 0); pDumpFile = fopen(WORKDIR"/hdl4se/examples/counter/verilog/counter_main_dump.v", "w"); pCodeFile = fopen(WORKDIR"/hdl4se/examples/counter/src/counter_main.c", "w"); #endif #if TERRIS objectCall2(p, SetFile, WORKDIR"/hdl4se/examples/terris/verilog/terris_main.v", 0); pDumpFile = fopen(WORKDIR"/hdl4se/examples/terris/verilog/terris_main_asm.v", "w"); pCodeFile = fopen(WORKDIR"/hdl4se/examples/terris/src/terris_main_module.c", "w"); #endif #if GOOGLENET objectCall1(p, AddIncludePath, WORKDIR"/hdl4se/examples/hdl4secnn/cnn/verilog/"); objectCall2(p, SetFile, WORKDIR"/hdl4se/examples/hdl4secnn/googlenet/verilog/googlenet.v", 0); pDumpFile = fopen(WORKDIR"/hdl4se/examples/hdl4secnn/googlenet/verilog/googlenet.dump.v", "w"); pCodeFile = fopen(WORKDIR"/hdl4se/examples/hdl4secnn/googlenet/verilog/googlenet.c", "w"); #endif #if (COUNTER==0 && TERRIS==0 && GOOGLENET==0) if (argc < 2) { printf("Usage : %s \n", argv[0]); return -1; } else { objectCall2(p, SetFile, argv[1], 0); if (argc < 3) pCodeFile = stderr; else pCodeFile = fopen(argv[2], "w"); if (argc < 4) pDumpFile = stdout; else pDumpFile = fopen(argv[3], "w"); } #endif objectPrintInfo(stdout, fprintf); yyparse(); root = getVerilogRoot(); objectQueryInterface(root, IID_VERILOG_NODE, (const void**)&rootnode); objectCall2(rootnode, procheck, NULL, 0); objectCall3(rootnode, dump, pDumpFile, "", 0); objectCall3(root, gencode, pCodeFile, "top", 0); objectCall2(p, GetLog, logbuf, sizeof(logbuf)); fprintf(pDumpFile, logbuf); objectRelease(p); if (pDumpFile != stderr) fclose(pDumpFile); if (pCodeFile != stdout) fclose(pCodeFile); return 0; }