blob: 5d58fba6b82b7c95196da86e5c3b5a84ce0516e8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// Private implicit classes and other utility functions for debugging
package firrtl
import Utils._
private object DebugUtils {
implicit class DebugASTUtils(ast: AST) {
// Is this actually any use?
def preOrderTraversal(f: AST => Unit): Unit = {
f(ast)
ast match {
case a: Block => a.stmts.foreach(_.preOrderTraversal(f))
case a: Assert => a.pred.preOrderTraversal(f)
case a: When => {
a.pred.preOrderTraversal(f)
a.conseq.preOrderTraversal(f)
a.alt.preOrderTraversal(f)
}
case a: BulkConnect => {
a.lhs.preOrderTraversal(f)
a.rhs.preOrderTraversal(f)
}
case a: Connect => {
a.lhs.preOrderTraversal(f)
a.rhs.preOrderTraversal(f)
}
case a: OnReset => {
a.lhs.preOrderTraversal(f)
a.rhs.preOrderTraversal(f)
}
case a: DefAccessor => {
a.dir.preOrderTraversal(f)
a.source.preOrderTraversal(f)
a.index.preOrderTraversal(f)
}
case a: DefPoison => a.tpe.preOrderTraversal(f)
case a: DefNode => a.value.preOrderTraversal(f)
case a: DefInst => a.module.preOrderTraversal(f)
case a: DefMemory => {
a.tpe.preOrderTraversal(f)
a.clock.preOrderTraversal(f)
}
case a: DefReg => {
a.tpe.preOrderTraversal(f)
a.clock.preOrderTraversal(f)
a.reset.preOrderTraversal(f)
}
case a: DefWire => a.tpe.preOrderTraversal(f)
case a: Field => {
a.dir.preOrderTraversal(f)
a.tpe.preOrderTraversal(f)
}
case a: VectorType => a.tpe.preOrderTraversal(f)
case a: BundleType => a.fields.foreach(_.preOrderTraversal(f))
case a: Port => {
a.dir.preOrderTraversal(f)
a.tpe.preOrderTraversal(f)
}
case a: Module => {
a.ports.foreach(_.preOrderTraversal(f))
a.stmt.preOrderTraversal(f)
}
case a: Circuit => a.modules.foreach(_.preOrderTraversal(f))
//case _ => throw new Exception(s"Unsupported FIRRTL node ${ast.getClass.getSimpleName}!")
case _ =>
}
}
}
}
|