示例#1
0
        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());
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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"));
        }
示例#4
0
        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();
        }