chisel3 的 printf 在模拟发出的 verilog 时是否生成终端输出?
Does chisel3's printf generate terminal output when simulating the emitted verilog?
我正在研究 Chiffre
作为我设计中的错误注入选项,并注意到一些 when
语句中包含 printf
。
when (enabled && RegNext(!enabled)) {
printf(s"""|[info] $name enabled
|[info] - seed: 0x%x
|[info] - difficulty: 0x%x
|""".stripMargin, seed, difficulty)
}
when (!enabled && RegNext(enabled)) {
printf(s"[info] $name disabled\n")
}
我发现这有点奇怪,所以开始调查。到目前为止,我知道 chisel3 有一个 printf
函数,文档说它“在模拟中打印一条消息”。这是否适用于 verilog 模拟、scalaland 模拟或两者?如果我使用 chisel3 的 printf
,这会导致 verilog 中的 $display
语句吗?
(非常令人兴奋的)答案是肯定的。虽然不是 $display
语句,但生成的 verilog 包括 $fwrite
.
此处 $fwrite
的 Scastie 示例 https://scastie.scala-lang.org/Hajn4b1sTDmcxk5sBHw7pQ
[在某些时候我会学习新的 firrtl 注释来禁用 rand]
我正在研究 Chiffre
作为我设计中的错误注入选项,并注意到一些 when
语句中包含 printf
。
when (enabled && RegNext(!enabled)) {
printf(s"""|[info] $name enabled
|[info] - seed: 0x%x
|[info] - difficulty: 0x%x
|""".stripMargin, seed, difficulty)
}
when (!enabled && RegNext(enabled)) {
printf(s"[info] $name disabled\n")
}
我发现这有点奇怪,所以开始调查。到目前为止,我知道 chisel3 有一个 printf
函数,文档说它“在模拟中打印一条消息”。这是否适用于 verilog 模拟、scalaland 模拟或两者?如果我使用 chisel3 的 printf
,这会导致 verilog 中的 $display
语句吗?
(非常令人兴奋的)答案是肯定的。虽然不是 $display
语句,但生成的 verilog 包括 $fwrite
.
此处 $fwrite
的 Scastie 示例 https://scastie.scala-lang.org/Hajn4b1sTDmcxk5sBHw7pQ
[在某些时候我会学习新的 firrtl 注释来禁用 rand]