【问题标题】:How to printf or println UInt in chisel?如何在凿子中打印 f 或 println UInt?
【发布时间】:2018-11-26 13:26:53
【问题描述】:

我正在尝试执行以下代码:

val num1 = 10.U
printf(p"num1 = $num1")

在示例类中运行此代码时出现以下错误。

[error] (run-main-8) chisel3.internal.ChiselException: Error: No implicit clock and reset.
[error] chisel3.internal.ChiselException: Error: No implicit clock and reset.

我正在使用 test:runMain <package.class> 运行代码

我尝试了https://github.com/freechipsproject/chisel3/wiki/Printing-in-Chisel 中的其他选项 使用 printf 并没有工作。

还尝试了 C 样式打印 printf("num1 = %d",num1),这会导致相同的错误。

【问题讨论】:

  • 请提供更多代码上下文。你在哪里写了这两行?在凿子模块中?
  • 不,这不是写在模块中的。它写在测试目录object TestPrinting extends App { ... } 可能是这个问题。
  • 所以似乎 printf(p"num1 - $num1") 将生成和 fwrite() verilog 语句,我在这里要做的就是在测试台侧打印东西。

标签: chisel


【解决方案1】:

以下应该可以工作。 withClockAndReset 提供 触发 printf 所需的时钟。这里有点挑剔,因为 withClock 或 withClock 和嵌套的 withReset 不起作用。

class Hello extends RawModule {
  val io = IO(new Bundle {
    val out = Output(UInt(8.W))
    val myClock = Input(Clock())
    val myReset = Input(Bool())
  })

  withClockAndReset(io.myClock, io.myReset) {
      printf("out is %d\n", io.out)
  }
  io.out := 42.U
}

【讨论】:

    【解决方案2】:

    有一个解决方法。可以借助包裹在 println() 中的 peek() 函数从 Chisel PeekPokeTester 打印 UInt 类型信号。

    println(peek(module_name.io.signal_name).toString(16))

    还没有找到直接打印实际信号的方法module_name.io.signal_name UInt 类型甚至没有 toString 函数所以我不确定这是否可以做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多