我想使用Chisel从我以XML格式(PMML decision trees)的if-then语句树生成电路。像
这样简单的分裂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
的{{1}}和inputs
字段检查图表。使用上面的例子,我会想到
consumers
会向我展示代表val mod = new Mod
println(mod.io.x1.inputs, mod.io.x1.consumers)
println(mod.io.y.inputs, mod.io.y.consumers)
分割和when ... otherwise
连接的中间节点,我可以从:=
到x1
或从y
到y
。但是,所有这些调用都返回空ArrayBuffers。当我在测试框架中运行类似的电路时,它会评估正确的东西,所以测试框架可能会调用一些函数来构建当我在REPL中检查时尚未调用的图形(或者我正在寻找在错误的领域)。如何查看图表数据需要做什么?
我本可以询问是否有任何工具可以用Chisel接线或Verilog输出生成原理图。但是,我更喜欢亲自处理数据本身,以便我可以用它做更多的事情(生成SVG文件,或者将其转换为GraphML并使用强制导向的图形查看器......)
答案 0 :(得分:0)
我相信有一个可视化后端(“--backend dot”),它将生成一个有线电路原理图的pdf。您可以尝试使用它来查看它如何处理图形,甚至可以扩展它以供您自己使用。
我不知道Chisel目前有你要求的东西。或者至少,它可能需要在后端进行大量探测(从hcl.scala开始)。在TODO列表上是让Chisel吐出一个IR,然后可以根据需要进行分析和转换,但那还没有。
从短期来看,我建议吐出Verilog代码并使用您喜欢的工具来分析生成的Verilog。