public string Construct(string source) { var builder = new NetlistFileBuilder(); var netlist = _netlistRepository.Get(source); var modules = _moduleRepository.GetAll(netlist.Source); builder.BuildMetaStatements(netlist); foreach (var module in modules) { builder.BuildModuleDeclaration(module); builder.BuildNewLine(); builder.BuildModulePortDeclarations(module); builder.BuildSupplyDeclarations(module); foreach (var instance in _instanceRepository.GetByHostModule(netlist.Source, module.Name)) { builder.BuildInstanceDeclaration(instance); } builder.BuildNewLine(); builder.BuildEndModule(); builder.BuildNewLine(); } return(builder.GetResult()); }
private void RemoveBuffers(Module module, string bufferName, string inputPort, string outputPort) { var bufferIdsToBuffersMap = _instanceRepository.GetByHostModule(module.Netlist, module.Name) .Where(i => i.ModuleName == bufferName) .ToDictionary(i => i.Id, i => i); foreach (var bufferId in bufferIdsToBuffersMap.Keys.ToList()) { var buffer = bufferIdsToBuffersMap[bufferId]; if (_bufferWiringVerifier.IsPassThroughBuffer(module, buffer, inputPort, outputPort)) { continue; } _instanceRepository.Remove(buffer); var buffersToUpdate = ReplaceWires(module, inputPort, outputPort, buffer); foreach (var bufferToUpdate in buffersToUpdate) { bufferIdsToBuffersMap[bufferToUpdate.Id] = bufferToUpdate; } } }
public void Remove_ExtraModule_RemoveBufferAndNotRewireOutsideHostModule() { var hostModule = CreateHostModule("test_module"); var builder = new InstanceBuilder(DummyNetlist, hostModule.Name); _instanceRepository.Add(builder.New("x_buf", "inst1").Add("i", "i1").Add("o", "out").Build()); _instanceRepository.Add(builder.New("an2", "inst2").Add("a", "i1").Add("b", "w2").Add("z", "zout").Build()); var hostModule2 = CreateHostModule("test_module_2"); builder = new InstanceBuilder(DummyNetlist, hostModule2.Name); _instanceRepository.Add(builder.New("an2", "inst2").Add("a", "i1").Add("b", "w2").Add("z", "zout").Build()); _target.Remove(DummyNetlist, "x_buf", "i", "o"); var result = _instanceRepository.GetByHostModule(DummyNetlist, hostModule2.Name).ToList(); Assert.That(result, Has.Count.EqualTo(1)); Assert.That(result[0].Net, Has.Exactly(1).Matches <PortWirePair>(pwp => pwp.Port == "a" && pwp.Wire == "i1")); Assert.That(result[0].Net, Has.Exactly(1).Matches <PortWirePair>(pwp => pwp.Port == "b" && pwp.Wire == "w2")); Assert.That(result[0].Net, Has.Exactly(1).Matches <PortWirePair>(pwp => pwp.Port == "z" && pwp.Wire == "zout")); }
private IEnumerable <TraversalState> TraverseInner(Instance instance, InstancesPathTracker pathTracker) { pathTracker.UpdateIn(instance); var instances = _instanceRepository.GetByHostModule(instance.Netlist, instance.ModuleName); foreach (var curretnInstance in instances) { yield return(new TraversalState { CurrentInstance = curretnInstance, InstancesPathTracker = new InstancesPathTracker(pathTracker).UpdateIn(curretnInstance) }); if (curretnInstance.IsModule()) { foreach (var state in TraverseInner(curretnInstance, pathTracker)) { yield return(state); } } } pathTracker.UpdateOut(); }