Chisel произвольно инициализирует значение регистра при моделировании с помощью верилятора

Я использую Chisel и blackbox для запуска моей логики chisel с файлом реестра Verilog. Регистровый файл не имеет сигнала сброса, поэтому я ожидаю, что регистр будет инициализирован случайным образом.

Я прошел --x-initial unique to verilator, в основном так я запускаю тест:

  private val backendName = "verilator"

  "NOCDMA" should s" do blkwrite and blkread correctly (with $backendName)" in {
    Driver.execute(Array("--fint-write-vcd","--backend-name",s"$backendName",
      "--more-vcs-flags","--trace-depth 1 --x-initial unique"),
      ()=>new DMANetworkWithMem(memAddrWidth,memDataWidth)(nocDataWidth)(nNodesX,nNodesY)){
      c => new DMANetworkRWTest(c)
    }
  }

Но данные, которые я читаю из файла реестра, равны нулю до того, как я что-либо в него записал.

Считанные данные верны после того, как я написал в них.

Итак, есть ли что-то внутри долота, что мне нужно настроить, или я не все сделал правильно?

Какие-либо предложения?

1 ответ

Я не уверен, но я обнаружил следующую проблему на Verilator с аналогичной проблемой: https://github.com/verilator/verilator/issues/1399.

Я думаю, что вам также нужно пройти +verilator+seed+<value> а также +verilator+rand+reset+<value>во время выполнения. Я не эксперт в iotesters, но считаю, что вы можете добавить эти значения времени выполнения с помощью аргумента iotesters:--more-vcs-c-flags.

Боковое примечание, я бы также установил --x-assign unique в Verilator, если в Verilog есть случаи, когда среда выполнения в противном случае вводила бы X (например, индекс за пределами границ).

Надеюсь, это поможет!

Другие вопросы по тегам