0

我想使用Chisel从我拥有的 XML 格式的 if-then 语句树(PMML 决策树)生成电路。简单的拆分像

class Mod extends Module {
  val io = new Bundle {
    val x1 = UInt(INPUT, 8)
    val x2 = UInt(INPUT, 8)
    val choice = UInt(INPUT, 1)
    val y = UInt(OUTPUT, 8)
  }
  when (io.choice === UInt(0)) {
    io.y := io.x1
  } otherwise {
    io.y := io.x2
  }
}

是人类可读的,任何复杂的表达式都可以在测试套件中使用特定值进行评估。但是,由于我将从大型 XML 文件以编程方式生成嵌套拆分,因此如果我可以检查由 Chisel 生成的电线树,以确保它具有相同的结构,将会有所帮助。

我原以为我可以通过Node'sinputsconsumers字段检查图表。使用上面的示例,我会认为

val mod = new Mod
println(mod.io.x1.inputs, mod.io.x1.consumers)
println(mod.io.y.inputs, mod.io.y.consumers)

会向我展示代表when ... otherwise拆分和连接的中间节点,我可以从to或 from to:=遵循这些节点。但是,所有这些调用都返回空的 ArrayBuffers。当我在测试框架中运行类似的电路时,它的评估结果是正确的,所以当我在 REPL 中检查它时(或者我正在寻找),大概测试框架正在调用一些函数来构建尚未调用的图在错误的领域)。我需要做什么才能查看图表数据?x1yyx1

我本可以问是否有任何工具可以从 Chisel 接线或 Verilog 输出生成示意图。但是,我更愿意亲自处理数据,以便可以使用它做更多事情(生成 SVG 文件,或者将其转换为 GraphML 并使用强制导向的图形查看器......)

4

1 回答 1

0

我相信有一个可视化后端(“--backend dot”)会生成一个 pdf 的线路示意图。您可以尝试使用它来查看它如何处理图形,甚至可以扩展它以供您自己使用。

我不知道 Chisel 目前有你要求的。或者至少,它可能需要在后端进行大量探索(从 hcl.scala 开始)。在 TODO 列表上是让 Chisel 吐出一个 IR,然后可以根据需要对其进行分析和转换,但这还没有。

就短期而言,我建议吐出 Verilog 代码并使用您最喜欢的工具来分析生成的 Verilog。

于 2014-02-14T17:53:31.553 回答