Exemplo n.º 1
0
        public DirectedGraphNode Add(BusSlave slave, string ownerName = null)
        {
            if (!Visit(slave) ||
                (!slave.IsConnected && !DisplayUnconnected))
            {
                return(FindNode(slave));
            }

            var node = AddNode <BusSlave>(slave.Name, ownerName, SafeNetName(slave));

            SetNodeMap(slave, node);

            if (DisplayValues)
            {
                node.Description = slave.Value.ToString();
            }

            if (slave.IsConnected)
            {
                Add(slave.Bus);

                var bid = _idBuilder.NewId <Bus>(slave.Bus.Name);
                _dgmlBuilder.AddLink(node.Id, bid);
            }

            return(node);
        }
Exemplo n.º 2
0
 public OutputPort(string name)
 {
     Name                   = name;
     _portEnable            = new DigitalSignalConsumer("PE");
     _portEnable.OnChanged += PortEnable_OnChanged;
     _busSlave              = new BusSlave(name + "-Input");
 }
Exemplo n.º 3
0
        public static BusMaster <T> CreateConnection <T>(this BusSlave <T> slave, string busName = null)
            where T : BusData, new()
        {
            var bus = slave.GetOrAddBus(busName);

            return(new BusMaster <T>(bus, busName));
        }
Exemplo n.º 4
0
        private static Bus <T> Connect <T>(BusMaster <T> master, BusSlave <T> slave, string busName = null)
            where T : BusData, new()
        {
            if (master.IsConnected && slave.IsConnected)
            {
                if (master.Bus != slave.Bus)
                {
                    throw new InvalidOperationException("Both Master and Slave are already connected to different buses.");
                }

                return(master.Bus);
            }

            Bus <T> bus = null;

            if (master.IsConnected)
            {
                bus = master.Bus;
                slave.ConnectTo(bus);
            }
            else if (slave.IsConnected)
            {
                bus = slave.Bus;
                master.ConnectTo(bus);
            }

            return(bus);
        }
Exemplo n.º 5
0
        public void Unconnected_ReadValue_DoesNotThrow()
        {
            var uut = new BusSlave <BusData8>();

            Action test = () => { var l = uut.Value; };

            test.ShouldNotThrow();
        }
Exemplo n.º 6
0
 private string SafeNetName(BusSlave slave)
 {
     if (slave == null || !slave.IsConnected)
     {
         return(null);
     }
     return(slave.Bus.Name);
 }
Exemplo n.º 7
0
        public BusSlave AddBusInput(string name = null)
        {
            var slave = new BusSlave(name);

            _busInputs.Add(slave);

            return(slave);
        }
Exemplo n.º 8
0
        public void Connected_AllLevelsAreFloating()
        {
            var uut = new BusSlave <BusData8>();
            var bus = new Bus <BusData8>();

            uut.ConnectTo(bus);

            uut.Value.AssertAllLevelsAre(DigitalLevel.Floating);
        }
Exemplo n.º 9
0
        public void TestInitialize()
        {
            _uut = new InputPort();
            _uut.DataBuffer.Write(new byte[] { Value, Value2 });
            _portEnable = _uut.PortEnable.CreateConnection();

            var outputBus = new Bus(8);

            _uut.Output.ConnectTo(outputBus);
            _output = new BusSlave(outputBus);
        }
Exemplo n.º 10
0
        public static BusMaster <T> CreateConnection <T>(this BusSlave <T> slave, string busName = null)
            where T : BusData, new()
        {
            var master = new BusMaster <T>();
            var bus    = new Bus <T>(busName);

            slave.ConnectTo(bus);
            master.ConnectTo(bus);

            return(master);
        }
Exemplo n.º 11
0
        public Memory()
        {
            ChipEnable = new DigitalSignalConsumer("CE");
            Address    = new BusSlave <AddressT>("Address");
            Data       = new BusMasterSlave <DataT>("Data");

            ChipEnable.OnChanged += ChipEnable_OnChanged;
            Address.OnChanged    += Address_OnChanged;
            Data.Slave.OnChanged += DataIn_OnChanged;

            long length = (long)Math.Pow(2, Address.Value.Width);

            _memory = new DataT[length];
        }
Exemplo n.º 12
0
        public static Bus GetOrAddBus(this BusSlave slave, string busName = null)
        {
            Bus bus;

            if (!slave.IsConnected)
            {
                bus = new Bus(slave.Value.Width, busName);
                slave.ConnectTo(bus);
            }
            else
            {
                bus = slave.Bus;
            }

            return(bus);
        }
Exemplo n.º 13
0
        public void Write_SingleMaster_SlaveSeesChanges()
        {
            var master = new BusMaster <BusData8>();
            var slave  = new BusSlave <BusData8>();
            var bus    = new Bus <BusData8>();

            master.ConnectTo(bus);
            slave.ConnectTo(bus);
            master.IsEnabled = true;

            var newValue = new BusData8(0);

            master.Write(newValue);

            slave.Value.AssertAllLevelsAre(DigitalLevel.Low);
        }
Exemplo n.º 14
0
        public static Bus <T> GetOrAddBus <T>(this BusSlave <T> slave, string busName = null)
            where T : BusData, new()
        {
            Bus <T> bus;

            if (!slave.IsConnected)
            {
                bus = new Bus <T>(busName);
                slave.ConnectTo(bus);
            }
            else
            {
                bus = slave.Bus;
            }

            return(bus);
        }
Exemplo n.º 15
0
        public static Bus <T> ConnectTo <T>(this BusMaster <T> master, BusSlave <T> slave, string busName = null)
            where T : BusData, new()
        {
            Bus <T> bus = Connect(master, slave, busName);

            if (bus == null)
            {
                if (busName == null)
                {
                    busName = master.Name;
                }
                bus = master.GetOrAddBus(busName);
                slave.ConnectTo(bus);
            }

            return(bus);
        }
Exemplo n.º 16
0
 public BusDecoder()
 {
     Output               = new DigitalSignalProvider("BusDecoder Output");
     _busSlave            = new BusSlave("BusDecoder Input");
     _busSlave.OnChanged += Bus_OnChanged;
 }
Exemplo n.º 17
0
 public OutputPort()
 {
     _portEnable            = new DigitalSignalConsumer("PE");
     _portEnable.OnChanged += PortEnable_OnChanged;
     _busSlave              = new BusSlave("OutputPort Input");
 }
Exemplo n.º 18
0
        public static BusMaster CreateConnection(this BusSlave slave, string busName = null)
        {
            var bus = slave.GetOrAddBus(busName);

            return(new BusMaster(bus, busName));
        }