public void Write_SetAddressAndDataFirst_ReadBackCorrectValue() { var mem = MemoryTestExtensions.NewRam(new byte[] { 0x00 }); var addressBus = mem.Address.CreateConnection(); var dataBus = mem.Data.CreateConnection(); var wrDataBus = new BusMaster <BusData8>(dataBus.Bus, null); var ceProv = mem.ChipEnable.CreateConnection(); var oeProv = mem.OutputEnable.CreateConnection(); var weProv = mem.WriteEnable.CreateConnection(); // set address addressBus.IsEnabled = true; addressBus.Write(new BusData16(0)); // write data wrDataBus.IsEnabled = true; wrDataBus.Write(new BusData8(Value)); // enable chip and input ceProv.Write(DigitalLevel.Low); weProv.Write(DigitalLevel.Low); // value is stored here weProv.Write(DigitalLevel.High); wrDataBus.IsEnabled = false; oeProv.Write(DigitalLevel.Low); dataBus.Value.Equals(new BusData8(Value)).Should().BeTrue(); }
public CpuZ80() { Clock = new DigitalSignalConsumer("CLK"); Reset = new DigitalSignalConsumer("RST"); Interrupt = new DigitalSignalConsumer("INT"); NonMaskableInterrupt = new DigitalSignalConsumer("NMI"); Wait = new DigitalSignalConsumer("WAIT"); BusRequest = new DigitalSignalConsumer("BREQ"); BusAcknowledge = new DigitalSignalProvider("BACK"); MemoryRequest = new DigitalSignalProvider("MREQ"); IoRequest = new DigitalSignalProvider("IORQ"); Read = new DigitalSignalProvider("RD"); Write = new DigitalSignalProvider("WR"); MachineCycle1 = new DigitalSignalProvider("M1"); Refresh = new DigitalSignalProvider("RFSH"); Halt = new DigitalSignalProvider("HALT"); Address = new BusMaster <BusData16>("Address"); Data = new BusMasterSlave <BusData8>("Data"); // bond wires _die = new Die( Clock, Reset, Interrupt, NonMaskableInterrupt, Wait, BusRequest, BusAcknowledge, MemoryRequest, IoRequest, Read, Write, MachineCycle1, Refresh, Halt, Address, Data); }
public CpuZ80() { Clock = new DigitalSignalConsumer("CLK"); Reset = new DigitalSignalConsumer("RST"); Interrupt = new DigitalSignalConsumer("INT"); NonMaskableInterrupt = new DigitalSignalConsumer("NMI"); Wait = new DigitalSignalConsumer("WAIT"); BusRequest = new DigitalSignalConsumer("BREQ"); BusAcknowledge = new DigitalSignalProvider("BACK"); MemoryRequest = new DigitalSignalProvider("MREQ"); IoRequest = new DigitalSignalProvider("IORQ"); Read = new DigitalSignalProvider("RD"); Write = new DigitalSignalProvider("WR"); MachineCycle1 = new DigitalSignalProvider("M1"); Refresh = new DigitalSignalProvider("RFSH"); Halt = new DigitalSignalProvider("HALT"); Address = new BusMaster <BusData16>("Address"); Data = new BusMasterSlave <BusData8>("Data"); _execEngine = new ExecutionEngine(this); _registers = new Registers(); _alu = new Alu(_registers); Initialize(); }
public void Connect_OneMaster_NoErrors() { var uut = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); uut.ConnectTo(bus); }
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); }
public static BusSlave <T> CreateConnection <T>(this BusMaster <T> master, string busName = null) where T : BusData, new() { var bus = master.GetOrAddBus(busName); return(new BusSlave <T>(bus, busName)); }
public InputPort() { _portEnable = new DigitalSignalConsumer("PE"); _portEnable.OnChanged += PortEnable_OnChanged; _busMaster = new BusMaster("InputPort Output"); _buffer = new BusDataBuffer(); }
public InputPort(string name) { Name = name; _portEnable = new DigitalSignalConsumer("PE"); _portEnable.OnChanged += PortEnable_OnChanged; _busMaster = new BusMaster(name + "-Output"); _buffer = new BusDataBuffer(); }
private string SafeNetName(BusMaster master) { if (master == null || !master.IsConnected) { return(null); } return(master.Bus.Name); }
public void Connect_MultipleMasters_NoErrors() { var master1 = new BusMaster <BusData8>(); var master2 = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); master1.ConnectTo(bus); master2.ConnectTo(bus); }
public void Write_DisabledMaster_Throws() { var uut = new BusMaster <BusData8>(); var newValue = new BusData8(0); Action act = () => uut.Write(newValue); act.ShouldThrow <InvalidOperationException>(); }
public void TestInitialize() { _uut = new OutputPort(); _portEnable = _uut.PortEnable.CreateConnection(); var inputBus = new Bus(8); _uut.Input.ConnectTo(inputBus); _input = new BusMaster(inputBus); _input.IsEnabled = true; }
public void TestInitialize() { _uut = new BusDecoder(); _output = _uut.Output.CreateConnection(); var inputBus = new Bus(16); _uut.Input.ConnectTo(inputBus); _input = new BusMaster(inputBus); _input.IsEnabled = true; }
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); }
public void Write_Unconnected_DoesNotThrow() { var uut = new BusMaster <BusData8>(); var newValue = new BusData8(0); uut.IsEnabled = true; Action test = () => uut.Write(newValue); test.ShouldNotThrow(); }
public DirectedGraphNode Add(BusMaster master, string ownerName = null) { if (!Visit(master) || (!master.IsConnected && !DisplayUnconnected)) { return(FindNode(master)); } var node = AddInternal(master, ownerName, SafeNetName(master)); return(node); }
public void Write_BusValueChanged() { var uut = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); uut.ConnectTo(bus); uut.IsEnabled = true; var newValue = new BusData8(0); uut.Write(newValue); bus.AssertAllLevelsAre(DigitalLevel.Low); }
public void ConnectTo_ChangeSource_BusValueCorrect() { var busWidth = 8; var source = new Bus <BusData16>(); var uut = new BusTap(busWidth); uut.ConnectTo(source); var driver = new BusMaster(source); driver.IsEnabled = true; driver.Write(new BusData16(0xAA55)); uut.Value.ToUInt32().Should().Be(0x55); }
public void IsEnabled_ToFalse_ChangesLevelsToFloating() { var uut = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); uut.ConnectTo(bus); uut.IsEnabled = true; var newValue = new BusData8(0); uut.Write(newValue); uut.IsEnabled = false; uut.Value.AssertAllLevelsAre(DigitalLevel.Floating); }
private IEnumerable <Component> CreateBusMasters() { for (int i = 0; i < NumMasters; i++) { BusMaster master = new BusMaster(i, i + 1, 8 * (NumMasters - i + 1)); object oi = (object)i; Bind(() => { master.Clk = _clk; master.Request = _request[(int)oi]; master.Grant = _grant[(int)oi]; }); yield return(master); } }
public void Write_EventTriggers() { var master = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); master.ConnectTo(bus); master.IsEnabled = true; bus.MonitorEvents(); var newValue = new BusData8(0); master.Write(newValue); bus.ShouldRaise("OnChanged"); }
public void ConnectTo_ChangeSource_EventFires() { var busWidth = 8; var source = new Bus <BusData16>(); var uut = new BusTap(busWidth); uut.ConnectTo(source); uut.MonitorEvents(); var driver = new BusMaster(source); driver.IsEnabled = true; driver.Write(new BusData16(0xAA55)); uut.ShouldRaise("OnChanged"); }
public static Bus GetOrAddBus(this BusMaster master, string busName = null) { Bus bus; if (!master.IsConnected) { bus = new Bus(master.Value.Width, busName); master.ConnectTo(bus); } else { bus = master.Bus; } return(bus); }
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); }
public static Bus <T> GetOrAddBus <T>(this BusMaster <T> master, string busName = null) where T : BusData, new() { Bus <T> bus; if (!master.IsConnected) { bus = new Bus <T>(busName); master.ConnectTo(bus); } else { bus = master.Bus; } return(bus); }
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); }
public bool RemoveShip(string token) { ArbiterTreeNode node; if (!_nodeByShipToken.Remove(token, out node)) { return(false); } _shipPublicIds.Remove(PublicIdFromToken(token)); node.ShipCount--; BusMaster.BroadcastMessage(new Messages.ShipDisconnected() { Token = token }); return(true); }
public void Write_MultipleMastersActivce_Error() { var master1 = new BusMaster <BusData8>(); var master2 = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); master1.ConnectTo(bus); master2.ConnectTo(bus); master1.IsEnabled = true; master2.IsEnabled = true; var loValue = new BusData8(0); var noValue = new BusData8(); master1.Write(loValue); Action act = () => master2.Write(loValue); act.ShouldThrow <BusConflictException>(); }
public void Write_MultipleMasters_OneAtaTime() { var master1 = new BusMaster <BusData8>(); var master2 = new BusMaster <BusData8>(); var bus = new Bus <BusData8>(); master1.ConnectTo(bus); master2.ConnectTo(bus); master1.IsEnabled = true; master2.IsEnabled = true; var loValue = new BusData8(0); var noValue = new BusData8(); master1.Write(loValue); master1.Write(noValue); master2.Write(loValue); master2.Write(noValue); master1.Write(loValue); }
public string AddNewShip(out ArbiterTreeNode parentNode, string token) { if (token == null) { token = AddShipToken(); } else { _shipPublicIds.Add(PublicIdFromToken(token)); } parentNode = (ArbiterTreeNode)RootNode.RandomLeafNode(); _nodeByShipToken[token] = parentNode; BusMaster.SendMessage(new Messages.ShipConnected() { Token = token }, parentNode.Peer); return(token); }
private IEnumerable<Component> CreateBusMasters() { for (int i = 0; i < NumMasters; i++) { BusMaster master = new BusMaster(i, i + 1, 8 * (NumMasters - i + 1)); object oi = (object)i; Bind(() => { master.Clk = _clk; master.Request = _request[(int)oi]; master.Grant = _grant[(int)oi]; }); yield return master; } }