private VisitHelper(GraphFIR.Module mod, CircuitGraph lowFirGraph, Dictionary <string, FIRRTL.DefModule> roots, VisitHelper parentHelper, bool isConditional, VisitHelper rootHelper) { this.Mod = mod; this.LowFirGraph = lowFirGraph; this.ModuleRoots = roots; this.ParentHelper = parentHelper; this.IsConditionalModule = isConditional; this.RootHelper = rootHelper; }
public static CircuitGraph GetAsGraph(FIRRTL.Circuit circuit, CircuitGraph graphLowFir = null) { VisitHelper helper = new VisitHelper(null, graphLowFir); foreach (var moduleDef in circuit.Modules) { helper.ModuleRoots.Add(moduleDef.Name, moduleDef); } FIRRTL.DefModule mainModDef = circuit.Modules.SingleOrDefault(x => x.Name == circuit.Main); if (mainModDef == null) { throw new ChiselDebugException("Circuit does not contain a module with the circuits name."); } GraphFIR.Module mainModule = VisitModule(helper, null, mainModDef); foreach (var mod in mainModule.GetAllNestedNodesOfType <GraphFIR.Module>()) { CleanupModule(mod); } //mainModule.InferType(); //mainModule.FinishConnections(); return(new CircuitGraph(circuit.Main, mainModule)); }
public VisitHelper(GraphFIR.Module mod, CircuitGraph lowFirGraph) : this(mod, lowFirGraph, new Dictionary <string, FIRRTL.DefModule>(), null, false, null) { }