--- /dev/null
+package net.mograsim.logic.model.am2900.components;
+
+import net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition;
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
+import net.mograsim.logic.model.serializing.IdentifyParams;
+import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
+import net.mograsim.machine.standard.memory.ModelWordAddressableMemory;
+
+public class ModelAm2900MainMemory extends ModelWordAddressableMemory
+{
+ public ModelAm2900MainMemory(LogicModelModifiable model, String name)
+ {
+ super(model, Am2900MachineDefinition.getInstance().getMainMemoryDefinition(), name);
+ }
+
+ static
+ {
+ LogicCoreAdapter.addComponentAdapter(new ModelAm2900MicroInstructionMemoryAdapter());
+ IndirectModelComponentCreator.setComponentSupplier(ModelAm2900MainMemory.class.getCanonicalName(), (m, p, n) ->
+ {
+ return new ModelAm2900MainMemory(m, n);
+ });
+ }
+
+ @Override
+ public String getIDForSerializing(IdentifyParams idParams)
+ {
+ return "Am2900MainMemory";
+ }
+
+}
--- /dev/null
+package net.mograsim.logic.model.am2900.components;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.CoreWire;
+import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
+import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.CoreModelParameters;
+import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
+import net.mograsim.machine.standard.memory.CoreWordAddressableMemory;
+import net.mograsim.machine.standard.memory.WordAddressableMemory;
+
+public class ModelAm2900MainMemoryAdapter implements ComponentAdapter<ModelAm2900MainMemory>
+{
+
+ @Override
+ public Class<ModelAm2900MainMemory> getSupportedClass()
+ {
+ return ModelAm2900MainMemory.class;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, CoreModelParameters params, ModelAm2900MainMemory modelComponent,
+ Map<Pin, CoreWire> logicWiresPerPin)
+ {
+ ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd();
+ ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd();
+ ReadEnd mode = logicWiresPerPin.get(modelComponent.getReadWritePin()).createReadOnlyEnd();
+ ReadEnd clock = logicWiresPerPin.get(modelComponent.getClockPin()).createReadOnlyEnd();
+ CoreWordAddressableMemory mem = new CoreWordAddressableMemory(timeline, 2,
+ new WordAddressableMemory(modelComponent.getDefinition()), data, mode, address, clock);
+ modelComponent.setCoreModelBinding(mem);
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.am2900.components;
+
+import net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition;
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
+import net.mograsim.logic.model.serializing.IdentifyParams;
+import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
+import net.mograsim.machine.mi.components.ModelMicroInstructionMemory;
+
+public class ModelAm2900MicroInstructionMemory extends ModelMicroInstructionMemory
+{
+ public ModelAm2900MicroInstructionMemory(LogicModelModifiable model, String name)
+ {
+ super(model, Am2900MachineDefinition.getInstance().getMicroInstructionMemoryDefinition(), name);
+ }
+
+ static
+ {
+ LogicCoreAdapter.addComponentAdapter(new ModelAm2900MicroInstructionMemoryAdapter());
+ IndirectModelComponentCreator.setComponentSupplier(ModelAm2900MicroInstructionMemory.class.getCanonicalName(), (m, p, n) ->
+ {
+ return new ModelAm2900MicroInstructionMemory(m, n);
+ });
+ }
+
+ @Override
+ public String getIDForSerializing(IdentifyParams idParams)
+ {
+ return "Am2900MicroInstructionMemory";
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.am2900.components;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.CoreWire;
+import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
+import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.CoreModelParameters;
+import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
+import net.mograsim.machine.mi.StandardMicroInstructionMemory;
+import net.mograsim.machine.mi.components.CoreMicroInstructionMemory;
+
+public class ModelAm2900MicroInstructionMemoryAdapter implements ComponentAdapter<ModelAm2900MicroInstructionMemory>
+{
+
+ @Override
+ public Class<ModelAm2900MicroInstructionMemory> getSupportedClass()
+ {
+ return ModelAm2900MicroInstructionMemory.class;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, CoreModelParameters params, ModelAm2900MicroInstructionMemory modelComponent,
+ Map<Pin, CoreWire> logicWiresPerPin)
+ {
+ ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd();
+ ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd();
+ ReadEnd clock = logicWiresPerPin.get(modelComponent.getClockPin()).createReadOnlyEnd();
+ CoreMicroInstructionMemory mem = new CoreMicroInstructionMemory(timeline, 2,
+ new StandardMicroInstructionMemory(modelComponent.getDefinition()), data, address, clock);
+ modelComponent.setCoreModelBinding(mem);
+ }
+
+}
package net.mograsim.logic.model.am2900.machine;
+import java.util.Objects;
import java.util.Set;
import net.mograsim.machine.ISASchema;
import net.mograsim.machine.Machine;
import net.mograsim.machine.MachineDefinition;
+import net.mograsim.machine.MachineRegistry;
import net.mograsim.machine.MainMemoryDefinition;
import net.mograsim.machine.Register;
import net.mograsim.machine.mi.MicroInstructionMemoryDefinition;
{
private MainMemoryDefinition memoryDefinition = new Am2900MainMemoryDefinition();
private MicroInstructionMemoryDefinition microInstMemoryDefinition = new Am2900MicroInstructionMemoryDefinition();
+ private final static Am2900MachineDefinition instance = new Am2900MachineDefinition();
+
+ public static Am2900MachineDefinition getInstance()
+ {
+ return Objects.requireNonNullElseGet((Am2900MachineDefinition) MachineRegistry.getinstalledMachines().get("Am2900"),
+ () -> instance);
+ }
@Override
public Machine createNew()
mograsim version: 0.1.3
{
+ "Am2900MainMemory": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.ModelAm2900MainMemory",
+ "Am2900MicroInstructionMemory": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.ModelAm2900MicroInstructionMemory",
"Am2904RegCTInstrDecode": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.am2904.ModelAm2904RegCTInstrDecode",
"Am2904ShiftInstrDecode": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.am2904.ModelAm2904ShiftInstrDecode",
"Am2910InstrPLA": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.am2910.ModelAm2910InstrPLA",
net.mograsim.machine.isa,
net.mograsim.machine.isa.types,
net.mograsim.machine.mi,
+ net.mograsim.machine.mi.components,
net.mograsim.machine.mi.parameters,
net.mograsim.machine.standard.memory
Bundle-Activator: net.mograsim.machine.MachineLoader
--- /dev/null
+package net.mograsim.machine;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.model.components.ModelComponent;
+import net.mograsim.logic.model.snippets.Renderer;
+import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer;
+import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
+import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
+
+public abstract class ModelMemory extends ModelComponent
+{
+ private Renderer symbolRenderer;
+ private Renderer outlineRenderer;
+ protected final int width, height;
+
+ protected ModelMemory(LogicModelModifiable model, int width, int height, String name, String centerText, boolean callInit)
+ {
+ super(model, name, false);
+ this.width = width;
+ this.height = height;
+
+ SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
+ rendererParams.centerText = centerText;
+ rendererParams.centerTextHeight = 24;
+ rendererParams.horizontalComponentCenter = width / 100;
+ rendererParams.pinLabelHeight = 17.5;
+ rendererParams.pinLabelMargin = 2.5;
+ this.symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
+ this.outlineRenderer = new DefaultOutlineRenderer(this);
+
+ setSize(width, height);
+
+ if (callInit)
+ init();
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ symbolRenderer.render(gc, visibleRegion);
+ outlineRenderer.render(gc, visibleRegion);
+ }
+}
--- /dev/null
+package net.mograsim.machine.mi.components;
+
+import java.util.List;
+
+import net.mograsim.logic.core.components.BasicCoreComponent;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.timeline.TimelineEventHandler;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
+import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
+import net.mograsim.machine.mi.MicroInstructionMemory;
+
+public class CoreMicroInstructionMemory extends BasicCoreComponent
+{
+ private final ReadWriteEnd data;
+ private final ReadEnd address, clock;
+ private final MicroInstructionMemory memory;
+
+
+ public CoreMicroInstructionMemory(Timeline timeline, int processTime, MicroInstructionMemory memory, ReadWriteEnd data, ReadEnd address, ReadEnd clock)
+ {
+ super(timeline, processTime);
+ this.memory = memory;
+ this.data = data;
+ this.address = address;
+ this.clock = clock;
+ }
+
+ public MicroInstructionMemory getMemory()
+ {
+ return memory;
+ }
+
+ @Override
+ public List<ReadEnd> getAllInputs()
+ {
+ return List.of(address, clock);
+ }
+
+ @Override
+ public List<ReadWriteEnd> getAllOutputs()
+ {
+ return List.of(data);
+ }
+
+ @Override
+ protected TimelineEventHandler compute()
+ {
+ if(clock.getValue() != Bit.ONE)
+ return null;
+
+ if (!address.hasNumericValue())
+ {
+ return e -> data.feedSignals(Bit.U.toVector(data.width()));
+ }
+ long addressed = address.getUnsignedValue();
+ BitVector storedData = memory.getCell(addressed).toBitVector();
+ return e -> data.feedSignals(storedData);
+ }
+}
--- /dev/null
+package net.mograsim.machine.mi.components;
+
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.PinUsage;
+import net.mograsim.machine.ModelMemory;
+import net.mograsim.machine.mi.MicroInstructionMemoryDefinition;
+
+public abstract class ModelMicroInstructionMemory extends ModelMemory
+{
+ private final Pin addrPin, dataPin, clock;
+ private CoreMicroInstructionMemory memory;
+ private final MicroInstructionMemoryDefinition definition;
+
+ public ModelMicroInstructionMemory(LogicModelModifiable model, MicroInstructionMemoryDefinition definition, String name)
+ {
+ super(model, 200, 100, name, "MPM", false);
+ this.definition = definition;
+ addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, width / 2, 0));
+ addPin(dataPin = new Pin(model, this, "D", definition.getMicroInstructionDefinition().sizeInBits(), PinUsage.OUTPUT, 0, 30));
+ addPin(clock = new Pin(model, this, "C", 1, PinUsage.INPUT, 0, 60));
+
+ init();
+ }
+
+ public MicroInstructionMemoryDefinition getDefinition()
+ {
+ return definition;
+ }
+
+ public Pin getAddressPin()
+ {
+ return addrPin;
+ }
+
+ public Pin getDataPin()
+ {
+ return dataPin;
+ }
+
+ public Pin getClockPin()
+ {
+ return clock;
+ }
+
+ public CoreMicroInstructionMemory getCoreMemory()
+ {
+ return memory;
+ }
+
+ public void setCoreModelBinding(CoreMicroInstructionMemory memory)
+ {
+ this.memory = memory;
+ }
+}
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
+import net.mograsim.machine.MainMemory;
import net.mograsim.machine.MainMemoryDefinition;
/**
*/
public class CoreWordAddressableMemory extends BasicCoreComponent
{
- private final WordAddressableMemory memory;
+ private final MainMemory memory;
private final static Bit read = Bit.ONE;
private ReadWriteEnd data;
* @param rWBit The value of the 0th bit dictates the mode: 0: Write, 1: Read
* @param address The bits of this ReadEnd address the memory cell to read/write
*/
- public CoreWordAddressableMemory(Timeline timeline, int processTime, MainMemoryDefinition definition, ReadWriteEnd data,
+ public CoreWordAddressableMemory(Timeline timeline, int processTime, MainMemory memory, ReadWriteEnd data,
ReadEnd rWBit, ReadEnd address, ReadEnd clock)
{
super(timeline, processTime);
+ MainMemoryDefinition definition = memory.getDefinition();
if(data.width() != definition.getCellWidth())
throw new IllegalArgumentException(String.format("Bit width of data wire does not match main memory definition. Expected: %d Actual: %d", definition.getCellWidth(), data.width()));
if(rWBit.width() != 1)
address.registerObserver(this);
clock.registerObserver(this);
- memory = new WordAddressableMemory(definition);
+ this.memory = memory;
}
@Override
+++ /dev/null
-package net.mograsim.machine.standard.memory;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.LogicModelModifiable;
-import net.mograsim.logic.model.model.components.ModelComponent;
-import net.mograsim.logic.model.model.wires.Pin;
-import net.mograsim.logic.model.model.wires.PinUsage;
-import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
-import net.mograsim.logic.model.serializing.IdentifyParams;
-import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
-import net.mograsim.logic.model.snippets.Renderer;
-import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer;
-import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
-import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
-import net.mograsim.logic.model.util.JsonHandler;
-import net.mograsim.machine.MainMemoryDefinition;
-
-public class ModelMemoryWA extends ModelComponent
-{
- private final MainMemoryDefinition definition;
- private final Pin addrPin, dataPin, rWPin, clock;
- private CoreWordAddressableMemory memory;
- private final static int width = 100, height = 300;
- private Renderer symbolRenderer;
- private Renderer outlineRenderer;
-
- public ModelMemoryWA(LogicModelModifiable model, MainMemoryDefinition definition, String name)
- {
- super(model, name, false);
- this.definition = definition;
-
- SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
- rendererParams.centerText = "RAM";
- rendererParams.centerTextHeight = 24;
- rendererParams.horizontalComponentCenter = width / 100;
- rendererParams.pinLabelHeight = 17.5;
- rendererParams.pinLabelMargin = 2.5;
- this.symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
- this.outlineRenderer = new DefaultOutlineRenderer(this);
-
- setSize(width, height);
- //TODO check the usages
- addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, 0, 10));
- addPin(dataPin = new Pin(model, this, "D", definition.getCellWidth(), PinUsage.TRISTATE, 0, 30));
- addPin(rWPin = new Pin(model, this, "RW", 1, PinUsage.INPUT, 0, 50));
- addPin(clock = new Pin(model, this, "C", 1, PinUsage.INPUT, 0, 70));
-
- init();
- }
-
- public Pin getAddressPin()
- {
- return addrPin;
- }
-
- public Pin getDataPin()
- {
- return dataPin;
- }
-
- public Pin getReadWritePin()
- {
- return rWPin;
- }
-
- public Pin getClockPin()
- {
- return clock;
- }
-
- public void setCoreModelBinding(CoreWordAddressableMemory memory)
- {
- this.memory = memory;
- }
-
- public MainMemoryDefinition getDefinition()
- {
- return definition;
- }
-
- public CoreWordAddressableMemory getMemory()
- {
- return memory;
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- symbolRenderer.render(gc, visibleRegion);
- outlineRenderer.render(gc, visibleRegion);
- }
-
- @Override
- public String getIDForSerializing(IdentifyParams idParams)
- {
- return "MemoryWA";
- }
-
- @Override
- public ModelMemoryWAParams getParamsForSerializing(IdentifyParams idParams)
- {
- ModelMemoryWAParams params = new ModelMemoryWAParams();
- params.addrBits = definition.getMemoryAddressBits();
- params.cellWidth = definition.getCellWidth();
- params.minAddr = definition.getMinimalAddress();
- params.maxAddr = definition.getMaximalAddress();
- return params;
- }
-
- static
- {
- LogicCoreAdapter.addComponentAdapter(new WordAddressableMemoryAdapter());
- IndirectModelComponentCreator.setComponentSupplier(ModelMemoryWA.class.getCanonicalName(), (m, p, n) ->
- {
- ModelMemoryWAParams params = JsonHandler.fromJsonTree(p, ModelMemoryWAParams.class);
- return new ModelMemoryWA(m, MainMemoryDefinition.create(params.addrBits, params.cellWidth, params.minAddr, params.maxAddr), n);
- });
- }
-
- public static class ModelMemoryWAParams
- {
- public int addrBits;
- public int cellWidth;
- public long minAddr;
- public long maxAddr;
- }
-}
--- /dev/null
+package net.mograsim.machine.standard.memory;
+
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.PinUsage;
+import net.mograsim.machine.MainMemoryDefinition;
+import net.mograsim.machine.ModelMemory;
+
+public abstract class ModelWordAddressableMemory extends ModelMemory
+{
+ private final Pin addrPin, dataPin, rWPin, clock;
+ private CoreWordAddressableMemory memory;
+ private MainMemoryDefinition definition;
+
+ public ModelWordAddressableMemory(LogicModelModifiable model, MainMemoryDefinition definition, String name)
+ {
+ super(model, 100, 300, name, "RAM", false);
+ this.definition = definition;
+
+ addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, width, 20));
+ addPin(dataPin = new Pin(model, this, "D", definition.getCellWidth(), PinUsage.TRISTATE, width, 50));
+ addPin(rWPin = new Pin(model, this, "RW", 1, PinUsage.INPUT, width, 80));
+ addPin(clock = new Pin(model, this, "C", 1, PinUsage.INPUT, width, 110));
+
+ init();
+ }
+
+ public MainMemoryDefinition getDefinition()
+ {
+ return definition;
+ }
+
+ public Pin getAddressPin()
+ {
+ return addrPin;
+ }
+
+ public Pin getDataPin()
+ {
+ return dataPin;
+ }
+
+ public Pin getReadWritePin()
+ {
+ return rWPin;
+ }
+
+ public Pin getClockPin()
+ {
+ return clock;
+ }
+
+ public void setCoreModelBinding(CoreWordAddressableMemory memory)
+ {
+ this.memory = memory;
+ }
+
+ public CoreWordAddressableMemory getCoreMemory()
+ {
+ return memory;
+ }
+}
+++ /dev/null
-package net.mograsim.machine.standard.memory;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.CoreWire;
-import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.wires.Pin;
-import net.mograsim.logic.model.modeladapter.CoreModelParameters;
-import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
-
-public class WordAddressableMemoryAdapter implements ComponentAdapter<ModelMemoryWA>
-{
-
- @Override
- public Class<ModelMemoryWA> getSupportedClass()
- {
- return ModelMemoryWA.class;
- }
-
- @Override
- public void createAndLinkComponent(Timeline timeline, CoreModelParameters params, ModelMemoryWA modelComponent,
- Map<Pin, CoreWire> logicWiresPerPin)
- {
- ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd();
- ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd();
- ReadEnd mode = logicWiresPerPin.get(modelComponent.getReadWritePin()).createReadOnlyEnd();
- ReadEnd clock = logicWiresPerPin.get(modelComponent.getClockPin()).createReadOnlyEnd();
- CoreWordAddressableMemory mem = new CoreWordAddressableMemory(timeline, 2, modelComponent.getDefinition(), data, mode, address, clock);
- modelComponent.setCoreModelBinding(mem);
- }
-
-}
ReadWriteEnd clockI = clock.createReadWriteEnd();
@SuppressWarnings("unused")
- CoreWordAddressableMemory memory = new CoreWordAddressableMemory(t, 4, MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE), data.createReadWriteEnd(),
+ CoreWordAddressableMemory memory = new CoreWordAddressableMemory(t, 4, new WordAddressableMemory(MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE)), data.createReadWriteEnd(),
rW.createReadOnlyEnd(), address.createReadOnlyEnd(), clock.createReadOnlyEnd());
clockI.feedSignals(Bit.ONE);