$ finish выполняется дважды, имитируя использование verilator - PullRequest
0 голосов
/ 18 сентября 2018

Вот мой main.cpp тестовый жгут:

#include <iostream>
#include "verilated.h"

#include "Vour.h"

int main(int argc, char** argv, char** env) {
  Verilated::commandArgs(argc, argv);
  Vour top;

  std::cout << (int)top.B << std::endl;
  top.A = 1;
  top.eval();
  std::cout << (int)top.B << std::endl;

  return 0;
}

и our.v:

module our (input A, output B);
   assign B = A;
   always begin
      if (A) begin
         $finish;
      end
   end
endmodule

и вывод при запуске:

0
- v/our.v:5: Verilog $finish
- v/our.v:5: Verilog $finish
- v/our.v:5: Second verilog $finish, exiting

Программа завершает работу после второго завершения, никогда не выводя 1. Почему $finish выполняется дважды / существует простой способ структурировать программу по-разному, чтобы она выполнялась только один раз?

...