#chisel #chiseltest
Вопрос:
Я попытался добавить некоторые утверждения в свой код, но эти утверждения не работают при тестировании моего модуля, хотя я соответствующим образом ввел значения. Интересно, что, согласно некоторым отпечаткам, значение изменяет значение в последнем моделируемом цикле, как показано на этом минимальном примере:
package stack_overflow_demo
import chisel3._
import chisel3.tester._
import org.scalatest.FreeSpec
import chisel3.experimental.BundleLiterals._
class AssertFail extends Module {
val io = IO(new Bundle {
val input = Input(UInt(2.W))
})
printf("%dn", io.input) // prints 3 and then 0
assert(io.input === 3.U) // fails, apparently on the second cycle
}
class AssertTest extends FreeSpec with ChiselScalatestTester {
"break" in {
test(new AssertFail) { dut =>
dut.io.input.poke(3.U)
dut.clock.step()
}
}
}
Я в основном хочу понять, почему это происходит, а также могу ли я сохранить эти утверждения активными в своем коде или мне придется удалить их все вместе.
(Фактический код является частью декодера RISC-V, который не может управлять расширением сжатой инструкции «C», поэтому для моделирования я попытался утверждать, что два младших бита равны 11)
Спасибо!
Комментарии:
1. Это было исправлено в следующем выпуске chiseltest, см.: github.com/ucb-bar/chisel-testers2/pull/399
Ответ №1:
Я думаю, проблема в том, что жгут chiseltest использует неявную область в вашем блоке тестирования, когда область завершена, он восстанавливает входные значения в их состояние, когда он начался. Вот в чем причина проблемы. Я думаю, что это ошибка, и ее не должно быть слишком сложно исправить. Вы должны открыть и выпустить репо chiseltest. Мы постараемся исправить это или предложим обходной путь