Сначала легкая часть. Вы можете получить ненулевой код результата, используя результат chisel.execute следующим образом.
val result = chisel3.iotesters.Driver.execute(args, () => new Inverter()) {
c => new InverterTester(c)
}
System.exit(if(result) 0 else 1)
Изменение уровня ведения журнала, к сожалению, требует изменения каждого отдельного бэкэнда в репозитории с долотными тестерами. Ниже приведен пример изменения TreadleBackend.scala , одного из трех.
def expect(signal: InstanceId, expected: BigInt, msg: => String)
(implicit logger: TestErrorLog, verbose: Boolean, base: Int) : Boolean = {
signal match {
case port: Element =>
val name = portNames(port)
val got = treadleTester.peek(name)
val good = got == expected
if (!good) {
logger error
s"""EXPECT AT $stepNumber $msg $name got ${bigIntToStr(got, base)} expected ${bigIntToStr(expected, base)}""" +
s""" ${if (good) "PASS" else "FAIL"}"""
}
else if (verbose) {
logger info
s"""EXPECT AT $stepNumber $msg $name got ${bigIntToStr(got, base)} expected ${bigIntToStr(expected, base)}""" +
s""" ${if (good) "PASS" else "FAIL"}"""
}
if(good) treadleTester.expectationsMet += 1
good
case _ => false
}
}
Это не было бы неразумной проблемой для файла, я думаю, что logger.error будет иметь больше смысла при ожидаемом ошибке. Есть некоторые опасения, что изменение этого может иметь неожиданные последствия для существующих пользователей, которые ищут эту строку.
Но я хотел бы призвать вас взглянуть на freechipsproject / chisel-testers2 repo. Именно здесь команда вкладывает большую часть своего времени в разработку тестов. Его было бы легче изменить, у него есть много других полезных функций для создания модульных тестов, и мы ищем способы сделать его лучше, чем тестеры с долотами .