1cbb697adf6d62c71d404a4ab3418282711a30e2
[Mograsim.git] / era.mi / src / net / mograsim / logic / core / components / Clock.java
1 package net.mograsim.logic.core.components;\r
2 \r
3 import java.util.List;\r
4 \r
5 import net.mograsim.logic.core.timeline.Timeline;\r
6 import net.mograsim.logic.core.timeline.TimelineEvent;\r
7 import net.mograsim.logic.core.timeline.TimelineEventHandler;\r
8 import net.mograsim.logic.core.types.Bit;\r
9 import net.mograsim.logic.core.wires.Wire;\r
10 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
11 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;\r
12 \r
13 public class Clock extends Component implements TimelineEventHandler\r
14 {\r
15         private boolean toggle = false;\r
16         private ReadWriteEnd out;\r
17         private int delta;\r
18 \r
19         /**\r
20          * \r
21          * @param out   {@link Wire} the clock's impulses are fed into\r
22          * @param delta ticks between rising and falling edge\r
23          */\r
24         public Clock(Timeline timeline, ReadWriteEnd out, int delta)\r
25         {\r
26                 super(timeline);\r
27                 this.delta = delta;\r
28                 this.out = out;\r
29                 addToTimeline();\r
30         }\r
31 \r
32         @Override\r
33         public void handle(TimelineEvent e)\r
34         {\r
35                 addToTimeline();\r
36                 out.feedSignals(toggle ? Bit.ONE : Bit.ZERO);\r
37                 toggle = !toggle;\r
38         }\r
39 \r
40         public ReadWriteEnd getOut()\r
41         {\r
42                 return out;\r
43         }\r
44 \r
45         private void addToTimeline()\r
46         {\r
47                 timeline.addEvent(this, delta);\r
48         }\r
49 \r
50         @Override\r
51         public List<ReadEnd> getAllInputs()\r
52         {\r
53                 return List.of();\r
54         }\r
55 \r
56         @Override\r
57         public List<ReadWriteEnd> getAllOutputs()\r
58         {\r
59                 return List.of(out);\r
60         }\r
61 }\r