Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
 public VisitHelper ForNewCondModule(string moduleName, FIRRTL.DefModule moduleDef)
 {
     return(new VisitHelper(new GraphFIR.Module(moduleName, null, Mod, moduleDef), LowFirGraph, ModuleRoots, this, true, RootHelper ?? this));
 }
Ejemplo n.º 3
0
 public VisitHelper ForNewModule(string moduleName, string instanceName, FIRRTL.DefModule moduleDef)
 {
     return(new VisitHelper(new GraphFIR.Module(moduleName, instanceName, Mod, moduleDef), LowFirGraph, ModuleRoots, this, false, RootHelper ?? this));
 }
Ejemplo n.º 4
0
        private static GraphFIR.Module VisitModule(VisitHelper parentHelper, string moduleInstanceName, FIRRTL.DefModule moduleDef)
        {
            if (moduleDef is FIRRTL.Module mod)
            {
                VisitHelper helper = parentHelper.ForNewModule(mod.Name, moduleInstanceName, mod);
                foreach (var port in mod.Ports)
                {
                    VisitPort(helper, port);
                }

                VisitStatement(helper, mod.Body);

                return(helper.Mod);
            }
            else if (moduleDef is FIRRTL.ExtModule extMod)
            {
                VisitHelper helper = parentHelper.ForNewModule(extMod.Name, moduleInstanceName, extMod);
                foreach (var port in extMod.Ports)
                {
                    VisitPort(helper, port);
                }

                return(helper.Mod);
            }
            else
            {
                throw new NotImplementedException();
            }
        }