自作RISC-Vコアを作り始めてしばらく経っているが、リグレッションテストのときは波形の取得を行わないように変更したい。 デフォルトでは波形を出力する様になっているのだがこれをオプションで変更しよう。
まずはVerilatorのC++実装に-d
オプションを追加して、波形の取得のためのdump_fst_enable
変数を有効にする。
while (1) { static struct option long_options[] = { {"elf", no_argument, 0, 'e' }, {"dump", no_argument, 0, 'd' }, {"help", no_argument, 0, 'h' } }; int option_index = 0; int c = getopt_long(argc, argv, "-e:h:d", long_options, &option_index); if (c == -1) break; retry: switch (c) { // Process long and short EMULATOR options case 'h': usage(argv[0]); return 1; case 'd': dump_fst_enable = true; break; case 'e': { g_memory = std::unique_ptr<Memory> (new Memory ()); filename = (char*)malloc(strlen(optarg) + 1); strcpy(filename, optarg); load_binary("", optarg, true); break; } } }
-d
オプションを有効にしているときは、FSTの出力を有効にする。
// Trace DUMP ON VerilatedFstC* tfp = NULL; if (dump_fst_enable) { Verilated::traceEverOn(true); tfp = new VerilatedFstC; dut->trace(tfp, 100); // Trace 100 levels of hierarchy tfp->open("simx.fst");
さらに、dump_fst_enable
が有効の時はfst
のダンプを出力する様にしている。
while (time_counter < 100) { dut->eval(); if (dump_fst_enable) tfp->dump(time_counter); time_counter++; }
これでVerilatorの-d
オプションでFSTの出力を制御できるようになった。