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 (например, индекс за пределами границ).
Надеюсь, это поможет!