added asynchronous JK and D flip-flops

This commit is contained in:
hneemann 2017-05-13 16:43:25 +02:00
parent 3ed8a67a39
commit c6aa9f5fb6
10 changed files with 771 additions and 1009 deletions

View File

@ -16,26 +16,6 @@
</entry>
</attributes>
<visualElements>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="440" y="200"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="440" y="320"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
@ -48,7 +28,7 @@
<int>5</int>
</entry>
</elementAttributes>
<pos x="560" y="220"/>
<pos x="360" y="140"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -62,27 +42,7 @@
<int>6</int>
</entry>
</elementAttributes>
<pos x="560" y="340"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="80"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="200"/>
<pos x="500" y="160"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -100,27 +60,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="180" y="80"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="340"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="460"/>
<pos x="200" y="140"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -134,7 +74,7 @@
<int>2</int>
</entry>
</elementAttributes>
<pos x="180" y="500"/>
<pos x="20" y="160"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -148,7 +88,7 @@
<int>3</int>
</entry>
</elementAttributes>
<pos x="180" y="360"/>
<pos x="200" y="180"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -166,27 +106,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="180" y="220"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="440" y="720"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="440" y="840"/>
<pos x="20" y="200"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -200,7 +120,7 @@
<int>9</int>
</entry>
</elementAttributes>
<pos x="560" y="740"/>
<pos x="360" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -214,27 +134,7 @@
<int>8</int>
</entry>
</elementAttributes>
<pos x="560" y="860"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="600"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="720"/>
<pos x="500" y="300"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -252,27 +152,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="180" y="600"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="860"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="280" y="980"/>
<pos x="200" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -286,7 +166,7 @@
<int>12</int>
</entry>
</elementAttributes>
<pos x="180" y="1020"/>
<pos x="20" y="300"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -300,7 +180,7 @@
<int>11</int>
</entry>
</elementAttributes>
<pos x="180" y="880"/>
<pos x="200" y="320"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -318,489 +198,103 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="180" y="740"/>
<pos x="20" y="340"/>
</visualElement>
<visualElement>
<elementName>D_FF_AS</elementName>
<elementAttributes/>
<pos x="280" y="140"/>
</visualElement>
<visualElement>
<elementName>D_FF_AS</elementName>
<elementAttributes/>
<pos x="280" y="280"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="220" y="200"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="220" y="140"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="220" y="280"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="220" y="340"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="420" y="260"/>
<p2 x="540" y="300"/>
<p1 x="20" y="160"/>
<p2 x="280" y="160"/>
</wire>
<wire>
<p1 x="540" y="260"/>
<p2 x="420" y="300"/>
<p1 x="340" y="160"/>
<p2 x="500" y="160"/>
</wire>
<wire>
<p1 x="260" y="140"/>
<p2 x="380" y="180"/>
<p1 x="200" y="320"/>
<p2 x="280" y="320"/>
</wire>
<wire>
<p1 x="380" y="140"/>
<p2 x="260" y="180"/>
</wire>
<wire>
<p1 x="260" y="400"/>
<p2 x="380" y="440"/>
</wire>
<wire>
<p1 x="380" y="400"/>
<p2 x="260" y="440"/>
</wire>
<wire>
<p1 x="420" y="780"/>
<p2 x="540" y="820"/>
</wire>
<wire>
<p1 x="540" y="780"/>
<p2 x="420" y="820"/>
</wire>
<wire>
<p1 x="260" y="660"/>
<p2 x="380" y="700"/>
</wire>
<wire>
<p1 x="380" y="660"/>
<p2 x="260" y="700"/>
</wire>
<wire>
<p1 x="260" y="920"/>
<p2 x="380" y="960"/>
</wire>
<wire>
<p1 x="380" y="920"/>
<p2 x="260" y="960"/>
</wire>
<wire>
<p1 x="420" y="320"/>
<p2 x="440" y="320"/>
</wire>
<wire>
<p1 x="260" y="640"/>
<p2 x="280" y="640"/>
</wire>
<wire>
<p1 x="260" y="260"/>
<p2 x="380" y="260"/>
</wire>
<wire>
<p1 x="200" y="900"/>
<p2 x="260" y="900"/>
</wire>
<wire>
<p1 x="260" y="900"/>
<p2 x="280" y="900"/>
</wire>
<wire>
<p1 x="260" y="200"/>
<p2 x="280" y="200"/>
</wire>
<wire>
<p1 x="420" y="200"/>
<p2 x="440" y="200"/>
</wire>
<wire>
<p1 x="420" y="840"/>
<p2 x="440" y="840"/>
</wire>
<wire>
<p1 x="260" y="460"/>
<p2 x="280" y="460"/>
</wire>
<wire>
<p1 x="260" y="780"/>
<p2 x="380" y="780"/>
</wire>
<wire>
<p1 x="180" y="80"/>
<p2 x="260" y="80"/>
</wire>
<wire>
<p1 x="260" y="80"/>
<p2 x="280" y="80"/>
</wire>
<wire>
<p1 x="260" y="720"/>
<p2 x="280" y="720"/>
</wire>
<wire>
<p1 x="420" y="720"/>
<p2 x="440" y="720"/>
</wire>
<wire>
<p1 x="520" y="340"/>
<p2 x="540" y="340"/>
<p1 x="20" y="340"/>
<p2 x="220" y="340"/>
</wire>
<wire>
<p1 x="260" y="340"/>
<p2 x="280" y="340"/>
</wire>
<wire>
<p1 x="380" y="340"/>
<p2 x="440" y="340"/>
<p1 x="200" y="180"/>
<p2 x="280" y="180"/>
</wire>
<wire>
<p1 x="540" y="340"/>
<p2 x="560" y="340"/>
<p1 x="200" y="280"/>
<p2 x="220" y="280"/>
</wire>
<wire>
<p1 x="260" y="980"/>
<p2 x="280" y="980"/>
<p1 x="340" y="280"/>
<p2 x="360" y="280"/>
</wire>
<wire>
<p1 x="180" y="600"/>
<p2 x="260" y="600"/>
<p1 x="260" y="280"/>
<p2 x="280" y="280"/>
</wire>
<wire>
<p1 x="260" y="600"/>
<p2 x="280" y="600"/>
<p1 x="20" y="200"/>
<p2 x="220" y="200"/>
</wire>
<wire>
<p1 x="360" y="220"/>
<p2 x="380" y="220"/>
<p1 x="260" y="200"/>
<p2 x="280" y="200"/>
</wire>
<wire>
<p1 x="520" y="220"/>
<p2 x="540" y="220"/>
<p1 x="20" y="300"/>
<p2 x="280" y="300"/>
</wire>
<wire>
<p1 x="180" y="220"/>
<p2 x="240" y="220"/>
<p1 x="340" y="300"/>
<p2 x="500" y="300"/>
</wire>
<wire>
<p1 x="540" y="220"/>
<p2 x="560" y="220"/>
<p1 x="200" y="140"/>
<p2 x="220" y="140"/>
</wire>
<wire>
<p1 x="380" y="220"/>
<p2 x="440" y="220"/>
<p1 x="340" y="140"/>
<p2 x="360" y="140"/>
</wire>
<wire>
<p1 x="240" y="220"/>
<p2 x="280" y="220"/>
</wire>
<wire>
<p1 x="520" y="860"/>
<p2 x="540" y="860"/>
</wire>
<wire>
<p1 x="260" y="860"/>
<p2 x="280" y="860"/>
</wire>
<wire>
<p1 x="380" y="860"/>
<p2 x="440" y="860"/>
</wire>
<wire>
<p1 x="540" y="860"/>
<p2 x="560" y="860"/>
</wire>
<wire>
<p1 x="360" y="480"/>
<p2 x="380" y="480"/>
</wire>
<wire>
<p1 x="240" y="480"/>
<p2 x="280" y="480"/>
</wire>
<wire>
<p1 x="360" y="100"/>
<p2 x="380" y="100"/>
</wire>
<wire>
<p1 x="200" y="100"/>
<p2 x="280" y="100"/>
</wire>
<wire>
<p1 x="360" y="740"/>
<p2 x="380" y="740"/>
</wire>
<wire>
<p1 x="520" y="740"/>
<p2 x="540" y="740"/>
</wire>
<wire>
<p1 x="180" y="740"/>
<p2 x="240" y="740"/>
</wire>
<wire>
<p1 x="540" y="740"/>
<p2 x="560" y="740"/>
</wire>
<wire>
<p1 x="380" y="740"/>
<p2 x="440" y="740"/>
</wire>
<wire>
<p1 x="240" y="740"/>
<p2 x="280" y="740"/>
</wire>
<wire>
<p1 x="260" y="40"/>
<p2 x="420" y="40"/>
</wire>
<wire>
<p1 x="360" y="360"/>
<p2 x="380" y="360"/>
</wire>
<wire>
<p1 x="180" y="360"/>
<p2 x="220" y="360"/>
</wire>
<wire>
<p1 x="220" y="360"/>
<p2 x="280" y="360"/>
</wire>
<wire>
<p1 x="380" y="360"/>
<p2 x="440" y="360"/>
</wire>
<wire>
<p1 x="360" y="1000"/>
<p2 x="380" y="1000"/>
</wire>
<wire>
<p1 x="240" y="1000"/>
<p2 x="280" y="1000"/>
</wire>
<wire>
<p1 x="240" y="300"/>
<p2 x="380" y="300"/>
</wire>
<wire>
<p1 x="360" y="620"/>
<p2 x="380" y="620"/>
</wire>
<wire>
<p1 x="200" y="620"/>
<p2 x="280" y="620"/>
</wire>
<wire>
<p1 x="420" y="240"/>
<p2 x="440" y="240"/>
</wire>
<wire>
<p1 x="220" y="240"/>
<p2 x="280" y="240"/>
</wire>
<wire>
<p1 x="260" y="560"/>
<p2 x="420" y="560"/>
</wire>
<wire>
<p1 x="360" y="880"/>
<p2 x="380" y="880"/>
</wire>
<wire>
<p1 x="180" y="880"/>
<p2 x="220" y="880"/>
</wire>
<wire>
<p1 x="220" y="880"/>
<p2 x="280" y="880"/>
</wire>
<wire>
<p1 x="380" y="880"/>
<p2 x="440" y="880"/>
</wire>
<wire>
<p1 x="180" y="500"/>
<p2 x="280" y="500"/>
</wire>
<wire>
<p1 x="240" y="820"/>
<p2 x="380" y="820"/>
</wire>
<wire>
<p1 x="260" y="120"/>
<p2 x="280" y="120"/>
</wire>
<wire>
<p1 x="420" y="760"/>
<p2 x="440" y="760"/>
</wire>
<wire>
<p1 x="220" y="760"/>
<p2 x="280" y="760"/>
</wire>
<wire>
<p1 x="200" y="380"/>
<p2 x="260" y="380"/>
</wire>
<wire>
<p1 x="260" y="380"/>
<p2 x="280" y="380"/>
</wire>
<wire>
<p1 x="180" y="1020"/>
<p2 x="280" y="1020"/>
</wire>
<wire>
<p1 x="240" y="220"/>
<p2 x="240" y="300"/>
</wire>
<wire>
<p1 x="240" y="740"/>
<p2 x="240" y="820"/>
</wire>
<wire>
<p1 x="240" y="300"/>
<p2 x="240" y="480"/>
</wire>
<wire>
<p1 x="240" y="820"/>
<p2 x="240" y="1000"/>
</wire>
<wire>
<p1 x="420" y="240"/>
<p2 x="420" y="260"/>
</wire>
<wire>
<p1 x="420" y="300"/>
<p2 x="420" y="320"/>
</wire>
<wire>
<p1 x="420" y="40"/>
<p2 x="420" y="200"/>
</wire>
<wire>
<p1 x="420" y="760"/>
<p2 x="420" y="780"/>
</wire>
<wire>
<p1 x="420" y="820"/>
<p2 x="420" y="840"/>
</wire>
<wire>
<p1 x="420" y="560"/>
<p2 x="420" y="720"/>
</wire>
<wire>
<p1 x="260" y="120"/>
<p2 x="260" y="140"/>
</wire>
<wire>
<p1 x="260" y="180"/>
<p2 x="260" y="200"/>
</wire>
<wire>
<p1 x="260" y="40"/>
<p2 x="260" y="80"/>
</wire>
<wire>
<p1 x="260" y="380"/>
<p2 x="260" y="400"/>
</wire>
<wire>
<p1 x="260" y="440"/>
<p2 x="260" y="460"/>
</wire>
<wire>
<p1 x="260" y="260"/>
<p2 x="260" y="340"/>
</wire>
<wire>
<p1 x="260" y="640"/>
<p2 x="260" y="660"/>
</wire>
<wire>
<p1 x="260" y="700"/>
<p2 x="260" y="720"/>
</wire>
<wire>
<p1 x="260" y="560"/>
<p2 x="260" y="600"/>
</wire>
<wire>
<p1 x="260" y="900"/>
<p2 x="260" y="920"/>
</wire>
<wire>
<p1 x="260" y="960"/>
<p2 x="260" y="980"/>
</wire>
<wire>
<p1 x="260" y="780"/>
<p2 x="260" y="860"/>
</wire>
<wire>
<p1 x="200" y="100"/>
<p2 x="200" y="380"/>
</wire>
<wire>
<p1 x="200" y="620"/>
<p2 x="200" y="900"/>
</wire>
<wire>
<p1 x="540" y="300"/>
<p2 x="540" y="340"/>
</wire>
<wire>
<p1 x="540" y="220"/>
<p2 x="540" y="260"/>
</wire>
<wire>
<p1 x="540" y="820"/>
<p2 x="540" y="860"/>
</wire>
<wire>
<p1 x="540" y="740"/>
<p2 x="540" y="780"/>
</wire>
<wire>
<p1 x="380" y="100"/>
<p2 x="380" y="140"/>
</wire>
<wire>
<p1 x="380" y="440"/>
<p2 x="380" y="480"/>
</wire>
<wire>
<p1 x="380" y="360"/>
<p2 x="380" y="400"/>
</wire>
<wire>
<p1 x="380" y="180"/>
<p2 x="380" y="220"/>
</wire>
<wire>
<p1 x="380" y="300"/>
<p2 x="380" y="340"/>
</wire>
<wire>
<p1 x="380" y="620"/>
<p2 x="380" y="660"/>
</wire>
<wire>
<p1 x="380" y="960"/>
<p2 x="380" y="1000"/>
</wire>
<wire>
<p1 x="380" y="880"/>
<p2 x="380" y="920"/>
</wire>
<wire>
<p1 x="380" y="700"/>
<p2 x="380" y="740"/>
</wire>
<wire>
<p1 x="380" y="820"/>
<p2 x="380" y="860"/>
</wire>
<wire>
<p1 x="380" y="220"/>
<p2 x="380" y="260"/>
</wire>
<wire>
<p1 x="380" y="740"/>
<p2 x="380" y="780"/>
</wire>
<wire>
<p1 x="220" y="240"/>
<p2 x="220" y="360"/>
</wire>
<wire>
<p1 x="220" y="760"/>
<p2 x="220" y="880"/>
<p1 x="260" y="140"/>
<p2 x="280" y="140"/>
</wire>
</wires>
</circuit>

View File

@ -10,62 +10,8 @@
<string>Description</string>
<string>DUAL J-K FLIP-FLOPS WITH PRESET AND CLEAR</string>
</entry>
<entry>
<string>lockedMode</string>
<boolean>true</boolean>
</entry>
</attributes>
<visualElements>
<visualElement>
<elementName>And</elementName>
<elementAttributes/>
<pos x="780" y="300"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="300"/>
</visualElement>
<visualElement>
<elementName>And</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="880" y="240"/>
</visualElement>
<visualElement>
<elementName>And</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="880" y="360"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="980" y="240"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="980" y="360"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -86,7 +32,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="380"/>
<pos x="620" y="260"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -100,7 +46,7 @@
<int>15</int>
</entry>
</elementAttributes>
<pos x="1120" y="260"/>
<pos x="800" y="260"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -114,12 +60,7 @@
<int>14</int>
</entry>
</elementAttributes>
<pos x="1120" y="380"/>
</visualElement>
<visualElement>
<elementName>Delay</elementName>
<elementAttributes/>
<pos x="720" y="300"/>
<pos x="940" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -137,7 +78,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="320"/>
<pos x="620" y="300"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -159,7 +100,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="260"/>
<pos x="620" y="340"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -181,12 +122,12 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="160"/>
<pos x="620" y="380"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="160"/>
<pos x="640" y="380"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -208,62 +149,12 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="480"/>
<pos x="620" y="220"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="480"/>
</visualElement>
<visualElement>
<elementName>And</elementName>
<elementAttributes/>
<pos x="780" y="720"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="720"/>
</visualElement>
<visualElement>
<elementName>And</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="880" y="660"/>
</visualElement>
<visualElement>
<elementName>And</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="880" y="780"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="980" y="660"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>Inputs</string>
<int>3</int>
</entry>
</elementAttributes>
<pos x="980" y="780"/>
<pos x="640" y="220"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -285,7 +176,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="800"/>
<pos x="620" y="480"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -299,7 +190,7 @@
<int>11</int>
</entry>
</elementAttributes>
<pos x="1120" y="680"/>
<pos x="800" y="480"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
@ -313,12 +204,7 @@
<int>10</int>
</entry>
</elementAttributes>
<pos x="1120" y="800"/>
</visualElement>
<visualElement>
<elementName>Delay</elementName>
<elementAttributes/>
<pos x="720" y="720"/>
<pos x="940" y="500"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -336,7 +222,7 @@
<int>6</int>
</entry>
</elementAttributes>
<pos x="620" y="740"/>
<pos x="620" y="520"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -358,7 +244,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="680"/>
<pos x="620" y="560"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -380,12 +266,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="580"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="580"/>
<pos x="620" y="600"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -407,366 +288,165 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="620" y="900"/>
<pos x="620" y="440"/>
</visualElement>
<visualElement>
<elementName>JK_FF_AS</elementName>
<elementAttributes/>
<pos x="720" y="260"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="660" y="900"/>
<pos x="640" y="600"/>
</visualElement>
<visualElement>
<elementName>Not</elementName>
<elementAttributes/>
<pos x="640" y="440"/>
</visualElement>
<visualElement>
<elementName>JK_FF_AS</elementName>
<elementAttributes/>
<pos x="720" y="480"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="960" y="300"/>
<p2 x="1080" y="340"/>
<p1 x="660" y="320"/>
<p2 x="720" y="320"/>
</wire>
<wire>
<p1 x="960" y="340"/>
<p2 x="1080" y="300"/>
</wire>
<wire>
<p1 x="960" y="720"/>
<p2 x="1080" y="760"/>
</wire>
<wire>
<p1 x="960" y="760"/>
<p2 x="1080" y="720"/>
</wire>
<wire>
<p1 x="620" y="320"/>
<p2 x="640" y="320"/>
</wire>
<wire>
<p1 x="840" y="320"/>
<p2 x="860" y="320"/>
</wire>
<wire>
<p1 x="1060" y="260"/>
<p2 x="1080" y="260"/>
</wire>
<wire>
<p1 x="940" y="260"/>
<p2 x="980" y="260"/>
</wire>
<wire>
<p1 x="620" y="260"/>
<p2 x="880" y="260"/>
</wire>
<wire>
<p1 x="1080" y="260"/>
<p2 x="1120" y="260"/>
</wire>
<wire>
<p1 x="700" y="580"/>
<p2 x="960" y="580"/>
</wire>
<wire>
<p1 x="620" y="580"/>
<p2 x="660" y="580"/>
</wire>
<wire>
<p1 x="620" y="900"/>
<p2 x="660" y="900"/>
</wire>
<wire>
<p1 x="700" y="900"/>
<p2 x="960" y="900"/>
</wire>
<wire>
<p1 x="860" y="200"/>
<p2 x="1080" y="200"/>
</wire>
<wire>
<p1 x="960" y="780"/>
<p2 x="980" y="780"/>
</wire>
<wire>
<p1 x="860" y="780"/>
<p2 x="880" y="780"/>
</wire>
<wire>
<p1 x="860" y="400"/>
<p2 x="880" y="400"/>
</wire>
<wire>
<p1 x="960" y="400"/>
<p2 x="980" y="400"/>
</wire>
<wire>
<p1 x="640" y="720"/>
<p2 x="660" y="720"/>
</wire>
<wire>
<p1 x="700" y="720"/>
<p2 x="720" y="720"/>
</wire>
<wire>
<p1 x="760" y="720"/>
<p2 x="780" y="720"/>
</wire>
<wire>
<p1 x="640" y="340"/>
<p2 x="780" y="340"/>
</wire>
<wire>
<p1 x="960" y="660"/>
<p2 x="980" y="660"/>
</wire>
<wire>
<p1 x="860" y="660"/>
<p2 x="880" y="660"/>
</wire>
<wire>
<p1 x="860" y="280"/>
<p2 x="880" y="280"/>
</wire>
<wire>
<p1 x="960" y="280"/>
<p2 x="980" y="280"/>
</wire>
<wire>
<p1 x="860" y="860"/>
<p2 x="1080" y="860"/>
</wire>
<wire>
<p1 x="700" y="160"/>
<p2 x="960" y="160"/>
</wire>
<wire>
<p1 x="620" y="160"/>
<p2 x="660" y="160"/>
<p1 x="700" y="480"/>
<p2 x="720" y="480"/>
</wire>
<wire>
<p1 x="620" y="480"/>
<p2 x="660" y="480"/>
</wire>
<wire>
<p1 x="700" y="480"/>
<p2 x="960" y="480"/>
<p1 x="780" y="480"/>
<p2 x="800" y="480"/>
</wire>
<wire>
<p1 x="940" y="800"/>
<p2 x="980" y="800"/>
<p1 x="700" y="260"/>
<p2 x="720" y="260"/>
</wire>
<wire>
<p1 x="620" y="800"/>
<p2 x="880" y="800"/>
<p1 x="620" y="260"/>
<p2 x="660" y="260"/>
</wire>
<wire>
<p1 x="1060" y="800"/>
<p2 x="1080" y="800"/>
<p1 x="780" y="260"/>
<p2 x="800" y="260"/>
</wire>
<wire>
<p1 x="1080" y="800"/>
<p2 x="1120" y="800"/>
<p1 x="620" y="520"/>
<p2 x="720" y="520"/>
</wire>
<wire>
<p1 x="620" y="740"/>
<p2 x="640" y="740"/>
</wire>
<wire>
<p1 x="840" y="740"/>
<p2 x="860" y="740"/>
</wire>
<wire>
<p1 x="960" y="360"/>
<p2 x="980" y="360"/>
</wire>
<wire>
<p1 x="860" y="360"/>
<p2 x="880" y="360"/>
</wire>
<wire>
<p1 x="1060" y="680"/>
<p2 x="1080" y="680"/>
</wire>
<wire>
<p1 x="940" y="680"/>
<p2 x="980" y="680"/>
</wire>
<wire>
<p1 x="620" y="680"/>
<p2 x="880" y="680"/>
</wire>
<wire>
<p1 x="1080" y="680"/>
<p2 x="1120" y="680"/>
</wire>
<wire>
<p1 x="640" y="300"/>
<p2 x="660" y="300"/>
</wire>
<wire>
<p1 x="700" y="300"/>
<p1 x="620" y="300"/>
<p2 x="720" y="300"/>
</wire>
<wire>
<p1 x="760" y="300"/>
<p2 x="780" y="300"/>
<p1 x="700" y="560"/>
<p2 x="720" y="560"/>
</wire>
<wire>
<p1 x="860" y="620"/>
<p2 x="1080" y="620"/>
<p1 x="620" y="560"/>
<p2 x="660" y="560"/>
</wire>
<wire>
<p1 x="960" y="240"/>
<p2 x="980" y="240"/>
<p1 x="660" y="500"/>
<p2 x="720" y="500"/>
</wire>
<wire>
<p1 x="860" y="240"/>
<p2 x="880" y="240"/>
<p1 x="780" y="500"/>
<p2 x="940" y="500"/>
</wire>
<wire>
<p1 x="860" y="820"/>
<p2 x="880" y="820"/>
<p1 x="700" y="340"/>
<p2 x="720" y="340"/>
</wire>
<wire>
<p1 x="960" y="820"/>
<p2 x="980" y="820"/>
<p1 x="620" y="340"/>
<p2 x="660" y="340"/>
</wire>
<wire>
<p1 x="860" y="440"/>
<p2 x="1080" y="440"/>
<p1 x="620" y="600"/>
<p2 x="640" y="600"/>
</wire>
<wire>
<p1 x="640" y="760"/>
<p2 x="780" y="760"/>
<p1 x="680" y="600"/>
<p2 x="700" y="600"/>
</wire>
<wire>
<p1 x="940" y="380"/>
<p2 x="980" y="380"/>
<p1 x="620" y="440"/>
<p2 x="640" y="440"/>
</wire>
<wire>
<p1 x="680" y="440"/>
<p2 x="700" y="440"/>
</wire>
<wire>
<p1 x="660" y="280"/>
<p2 x="720" y="280"/>
</wire>
<wire>
<p1 x="780" y="280"/>
<p2 x="940" y="280"/>
</wire>
<wire>
<p1 x="660" y="540"/>
<p2 x="720" y="540"/>
</wire>
<wire>
<p1 x="620" y="380"/>
<p2 x="880" y="380"/>
<p2 x="640" y="380"/>
</wire>
<wire>
<p1 x="1060" y="380"/>
<p2 x="1080" y="380"/>
<p1 x="680" y="380"/>
<p2 x="700" y="380"/>
</wire>
<wire>
<p1 x="1080" y="380"/>
<p2 x="1120" y="380"/>
<p1 x="620" y="220"/>
<p2 x="640" y="220"/>
</wire>
<wire>
<p1 x="860" y="700"/>
<p2 x="880" y="700"/>
<p1 x="680" y="220"/>
<p2 x="700" y="220"/>
</wire>
<wire>
<p1 x="960" y="700"/>
<p2 x="980" y="700"/>
<p1 x="660" y="260"/>
<p2 x="660" y="280"/>
</wire>
<wire>
<p1 x="640" y="300"/>
<p2 x="640" y="320"/>
<p1 x="660" y="320"/>
<p2 x="660" y="340"/>
</wire>
<wire>
<p1 x="640" y="720"/>
<p2 x="640" y="740"/>
<p1 x="660" y="480"/>
<p2 x="660" y="500"/>
</wire>
<wire>
<p1 x="640" y="740"/>
<p2 x="640" y="760"/>
<p1 x="660" y="540"/>
<p2 x="660" y="560"/>
</wire>
<wire>
<p1 x="640" y="320"/>
<p2 x="640" y="340"/>
<p1 x="700" y="220"/>
<p2 x="700" y="260"/>
</wire>
<wire>
<p1 x="960" y="340"/>
<p2 x="960" y="360"/>
<p1 x="700" y="340"/>
<p2 x="700" y="380"/>
</wire>
<wire>
<p1 x="960" y="280"/>
<p2 x="960" y="300"/>
<p1 x="700" y="440"/>
<p2 x="700" y="480"/>
</wire>
<wire>
<p1 x="960" y="160"/>
<p2 x="960" y="240"/>
</wire>
<wire>
<p1 x="960" y="400"/>
<p2 x="960" y="480"/>
</wire>
<wire>
<p1 x="960" y="760"/>
<p2 x="960" y="780"/>
</wire>
<wire>
<p1 x="960" y="700"/>
<p2 x="960" y="720"/>
</wire>
<wire>
<p1 x="960" y="580"/>
<p2 x="960" y="660"/>
</wire>
<wire>
<p1 x="960" y="820"/>
<p2 x="960" y="900"/>
</wire>
<wire>
<p1 x="1080" y="340"/>
<p2 x="1080" y="380"/>
</wire>
<wire>
<p1 x="1080" y="200"/>
<p2 x="1080" y="260"/>
</wire>
<wire>
<p1 x="1080" y="760"/>
<p2 x="1080" y="800"/>
</wire>
<wire>
<p1 x="1080" y="620"/>
<p2 x="1080" y="680"/>
</wire>
<wire>
<p1 x="1080" y="380"/>
<p2 x="1080" y="440"/>
</wire>
<wire>
<p1 x="1080" y="680"/>
<p2 x="1080" y="720"/>
</wire>
<wire>
<p1 x="1080" y="260"/>
<p2 x="1080" y="300"/>
</wire>
<wire>
<p1 x="1080" y="800"/>
<p2 x="1080" y="860"/>
</wire>
<wire>
<p1 x="860" y="280"/>
<p2 x="860" y="320"/>
</wire>
<wire>
<p1 x="860" y="200"/>
<p2 x="860" y="240"/>
</wire>
<wire>
<p1 x="860" y="400"/>
<p2 x="860" y="440"/>
</wire>
<wire>
<p1 x="860" y="700"/>
<p2 x="860" y="740"/>
</wire>
<wire>
<p1 x="860" y="620"/>
<p2 x="860" y="660"/>
</wire>
<wire>
<p1 x="860" y="820"/>
<p2 x="860" y="860"/>
</wire>
<wire>
<p1 x="860" y="740"/>
<p2 x="860" y="780"/>
</wire>
<wire>
<p1 x="860" y="320"/>
<p2 x="860" y="360"/>
<p1 x="700" y="560"/>
<p2 x="700" y="600"/>
</wire>
</wires>
</circuit>

View File

@ -0,0 +1,116 @@
package de.neemann.digital.core.flipflops;
import de.neemann.digital.core.*;
import de.neemann.digital.core.element.Element;
import de.neemann.digital.core.element.ElementAttributes;
import de.neemann.digital.core.element.ElementTypeDescription;
import de.neemann.digital.core.element.Keys;
import static de.neemann.digital.core.ObservableValues.ovs;
import static de.neemann.digital.core.element.PinInfo.input;
/**
* The D Flipflop
*
* @author hneemann
*/
public class FlipflopDAsync extends Node implements Element {
/**
* The D-FF description
*/
public static final ElementTypeDescription DESCRIPTION
= new ElementTypeDescription("D_FF_AS", FlipflopDAsync.class, input("Set"), input("D"), input("C"), input("Clr"))
.addAttribute(Keys.ROTATE)
.addAttribute(Keys.BITS)
.addAttribute(Keys.LABEL)
.addAttribute(Keys.DEFAULT)
.addAttribute(Keys.VALUE_IS_PROBE);
private final int bits;
private final boolean isProbe;
private final String label;
private ObservableValue setVal;
private ObservableValue clrVal;
private ObservableValue dVal;
private ObservableValue clockVal;
private ObservableValue q;
private ObservableValue qn;
private boolean lastClock;
private long value;
/**
* Creates a new instance
*
* @param attributes the attributes
*/
public FlipflopDAsync(ElementAttributes attributes) {
this(attributes,
new ObservableValue("Q", attributes.getBits()).setPinDescription(DESCRIPTION),
new ObservableValue("\u00ACQ", attributes.getBits()).setPinDescription(DESCRIPTION));
}
/**
* Creates a new D-FF with the given outputs!
*
* @param label the label
* @param q output
* @param qn inverted output
*/
public FlipflopDAsync(String label, ObservableValue q, ObservableValue qn) {
this(new ElementAttributes().set(Keys.LABEL, label).setBits(q.getBits()), q, qn);
if (qn.getBits() != q.getBits())
throw new RuntimeException("wrong bit count given!");
}
private FlipflopDAsync(ElementAttributes attributes, ObservableValue q, ObservableValue qn) {
super(true);
bits = attributes.getBits();
this.q = q;
this.qn = qn;
isProbe = attributes.get(Keys.VALUE_IS_PROBE);
label = attributes.getCleanLabel();
value = attributes.get(Keys.DEFAULT);
q.setValue(value);
qn.setValue(~value);
}
@Override
public void readInputs() throws NodeException {
boolean clock = clockVal.getBool();
if (clock && !lastClock)
value = dVal.getValue();
lastClock = clock;
if (setVal.getBool()) value = -1;
else if (clrVal.getBool()) value = 0;
}
@Override
public void writeOutputs() throws NodeException {
q.setValue(value);
qn.setValue(~value);
}
@Override
public void setInputs(ObservableValues inputs) throws BitsException {
setVal = inputs.get(0).addObserverToValue(this).checkBits(1, this, 0);
dVal = inputs.get(1).addObserverToValue(this).checkBits(bits, this, 1);
clockVal = inputs.get(2).addObserverToValue(this).checkBits(1, this, 2);
clrVal = inputs.get(3).addObserverToValue(this).checkBits(1, this, 3);
}
@Override
public ObservableValues getOutputs() {
return ovs(q, qn);
}
@Override
public void registerNodes(Model model) {
super.registerNodes(model);
if (isProbe)
model.addSignal(new Signal(label, q));
}
}

View File

@ -0,0 +1,108 @@
package de.neemann.digital.core.flipflops;
import de.neemann.digital.core.*;
import de.neemann.digital.core.element.Element;
import de.neemann.digital.core.element.ElementAttributes;
import de.neemann.digital.core.element.ElementTypeDescription;
import de.neemann.digital.core.element.Keys;
import static de.neemann.digital.core.ObservableValues.ovs;
import static de.neemann.digital.core.element.PinInfo.input;
/**
* The JK Flipflop
*
* @author hneemann
*/
public class FlipflopJKAsync extends Node implements Element {
/**
* The JK-FF description
*/
public static final ElementTypeDescription DESCRIPTION
= new ElementTypeDescription("JK_FF_AS", FlipflopJKAsync.class,
input("Set"),
input("J"),
input("C"),
input("K"),
input("Clr"))
.addAttribute(Keys.ROTATE)
.addAttribute(Keys.LABEL)
.addAttribute(Keys.DEFAULT)
.addAttribute(Keys.VALUE_IS_PROBE);
private final Boolean isProbe;
private final String label;
private ObservableValue setVal;
private ObservableValue clrVal;
private ObservableValue jVal;
private ObservableValue kVal;
private ObservableValue clockVal;
private ObservableValue q;
private ObservableValue qn;
private boolean lastClock;
private boolean out;
/**
* Creates a new instance
*
* @param attributes the attributes
*/
public FlipflopJKAsync(ElementAttributes attributes) {
super(true);
this.q = new ObservableValue("Q", 1).setPinDescription(DESCRIPTION);
this.qn = new ObservableValue("\u00ACQ", 1).setPinDescription(DESCRIPTION);
isProbe = attributes.get(Keys.VALUE_IS_PROBE);
label = attributes.getCleanLabel();
int def = attributes.get(Keys.DEFAULT);
out = def > 0;
q.setBool(out);
qn.setBool(!out);
}
@Override
public void readInputs() throws NodeException {
boolean clock = clockVal.getBool();
if (clock && !lastClock) {
boolean j = jVal.getBool();
boolean k = kVal.getBool();
if (j && k) out = !out;
else if (j) out = true;
else if (k) out = false;
}
lastClock = clock;
if (setVal.getBool()) out = true;
else if (clrVal.getBool()) out = false;
}
@Override
public void writeOutputs() throws NodeException {
q.setBool(out);
qn.setBool(!out);
}
@Override
public void setInputs(ObservableValues inputs) throws BitsException {
setVal = inputs.get(0).addObserverToValue(this).checkBits(1, this, 0);
jVal = inputs.get(1).addObserverToValue(this).checkBits(1, this, 1);
clockVal = inputs.get(2).addObserverToValue(this).checkBits(1, this, 2);
kVal = inputs.get(3).addObserverToValue(this).checkBits(1, this, 3);
clrVal = inputs.get(4).addObserverToValue(this).checkBits(1, this, 4);
}
@Override
public ObservableValues getOutputs() {
return ovs(q, qn);
}
@Override
public void registerNodes(Model model) {
super.registerNodes(model);
if (isProbe)
model.addSignal(new Signal(label, q));
}
}

View File

@ -4,10 +4,7 @@ import de.neemann.digital.core.arithmetic.*;
import de.neemann.digital.core.arithmetic.Comparator;
import de.neemann.digital.core.basic.*;
import de.neemann.digital.core.element.*;
import de.neemann.digital.core.flipflops.FlipflopD;
import de.neemann.digital.core.flipflops.FlipflopJK;
import de.neemann.digital.core.flipflops.FlipflopRS;
import de.neemann.digital.core.flipflops.FlipflopT;
import de.neemann.digital.core.flipflops.*;
import de.neemann.digital.core.io.*;
import de.neemann.digital.core.memory.*;
import de.neemann.digital.core.pld.DiodeBackward;
@ -106,7 +103,9 @@ public class ElementLibrary implements Iterable<ElementLibrary.ElementContainer>
.add(FlipflopRS.DESCRIPTION)
.add(FlipflopJK.DESCRIPTION)
.add(FlipflopD.DESCRIPTION)
.add(FlipflopT.DESCRIPTION))
.add(FlipflopT.DESCRIPTION)
.add(FlipflopJKAsync.DESCRIPTION)
.add(FlipflopDAsync.DESCRIPTION))
.add(new LibraryNode(Lang.get("lib_memory"))
.add(Register.DESCRIPTION)
.add(ROM.DESCRIPTION)

View File

@ -165,6 +165,31 @@ Es können sowohl komplette Takte als auch einzelne Gatter-Veränderungen angeze
<string name="elem_JK_FF_pin_K">Der Rücksetzen-Eingang des Flipflops.</string>
<string name="elem_JK_FF_pin_Q">Gibt den gespeicherten Wert aus.</string>
<string name="elem_JK_FF_pin_¬Q">Gibt den gespeicherten Wert negiert aus.</string>
<string name="elem_JK_FF_AS">JK-FlipFlop, asynchron</string>
<string name="elem_JK_FF_AS_short">JK-AS</string>
<string name="elem_JK_FF_AS_tt">Bietet die Funktionen zum
Speichern (J=K=0), Setzen (J=1, K=0), Rücksetzen (J=0, K=1) und Wechseln (J=K=1).
Übernommen werden die Eingänge bei einer steigenden Flanke am Eingang C.</string>
<string name="elem_JK_FF_AS_pin_J">Der Setzen-Eingang des Flipflops.</string>
<string name="elem_JK_FF_AS_pin_C">Takteingang Eine steigende Flanke initiiert den Zustandswechsel.</string>
<string name="elem_JK_FF_AS_pin_K">Der Rücksetzen-Eingang des Flipflops.</string>
<string name="elem_JK_FF_AS_pin_Q">Gibt den gespeicherten Wert aus.</string>
<string name="elem_JK_FF_AS_pin_¬Q">Gibt den gespeicherten Wert negiert aus.</string>
<string name="elem_JK_FF_AS_pin_Set">asynchrones setzen</string>
<string name="elem_JK_FF_AS_pin_Clr">asynchrones löschen</string>
<string name="elem_D_FF_AS">D-FlipFLop, asynchron</string>
<string name="elem_D_FF_AS_short">D-AS</string>
<string name="elem_D_FF_AS_tt">Ein Baustein zum Speichern eines Bits. Der an Eingang D anliegende Wert wird abgespeichert wenn Eingang C auf 1 wechselt.</string>
<string name="elem_D_FF_AS_pin_D">Das zu speichernde Bit.</string>
<string name="elem_D_FF_AS_pin_C">Takt des Flipflops. Wechselt dieser Wert auf 1, wird der an D anliegende Wert abgespeichert.</string>
<string name="elem_D_FF_AS_pin_Q">Gibt den gespeicherten Wert zurück.</string>
<string name="elem_D_FF_AS_pin_¬Q">Gibt den gespeicherten Wert negiert zurück.</string>
<string name="elem_D_FF_AS_pin_Set">asynchrones setzen</string>
<string name="elem_D_FF_AS_pin_Clr">asynchrones löschen</string>
<string name="elem_LED">LED</string>
<string name="elem_LED_tt">Eine Leuchtdiode welche beispielsweise zur Visualisierung eines Ausgangswertes verwendet werden kann. Nimmt ein Bit entgegen. Leuchtet wenn der Eingang auf 1 gesetzt ist.</string>
<string name="elem_LED_pin_in">LED Eingang. LED leuchtet wenn Eingang auf 1 gesetzt ist.</string>

View File

@ -114,6 +114,7 @@
<string name="elem_Counter_pin_clr">Resets the counter value if set to 1.</string>
<string name="elem_Counter_pin_out">Returns the counted value.</string>
<string name="elem_Counter_pin_ovf">Overflow output. This pin is set to 1 if the counter has an overflow and returns to zero.</string>
<string name="elem_D_FF">D-FlipFlop</string>
<string name="elem_D_FF_short">D</string>
<string name="elem_D_FF_tt">A component used to save two states (one bit). The bit on pin D is stored on a rising edge of pin C.</string>
@ -121,6 +122,17 @@
<string name="elem_D_FF_pin_C">Control pin to store a bit. The bit on input D is stored on a rising edge of this pin.</string>
<string name="elem_D_FF_pin_Q">Returns the stored value.</string>
<string name="elem_D_FF_pin_¬Q">Returns the negated stored value.</string>
<string name="elem_D_FF_AS">D-FlipFlop, asynchronous</string>
<string name="elem_D_FF_AS_short">D-AS</string>
<string name="elem_D_FF_AS_tt">A component used to save two states (one bit). The bit on pin D is stored on a rising edge of pin C.</string>
<string name="elem_D_FF_AS_pin_D">Input of the bit to be stored.</string>
<string name="elem_D_FF_AS_pin_C">Control pin to store a bit. The bit on input D is stored on a rising edge of this pin.</string>
<string name="elem_D_FF_AS_pin_Q">Returns the stored value.</string>
<string name="elem_D_FF_AS_pin_¬Q">Returns the negated stored value.</string>
<string name="elem_D_FF_AS_pin_Set">asynchronous set</string>
<string name="elem_D_FF_AS_pin_Clr">asynchronous clear</string>
<string name="elem_Data">Data graph</string>
<string name="elem_Data_tt">Shows a data plot inside of the circuit panel.
You can plot complete clock steps or single gate changes.</string>
@ -153,6 +165,7 @@
<string name="elem_In">Input</string>
<string name="elem_In_pin_out">This connection outputs the given value.</string>
<string name="elem_In_tt">A input which can be used to connect the circuit if it is included in an other circuit.</string>
<string name="elem_JK_FF">JK-Flipflop</string>
<string name="elem_JK_FF_short">JK</string>
<string name="elem_JK_FF_tt">Has the possibility to store (J=K=0), set (J=1, K=0), reset (J=0, K=1) or toggle (J=K=1) the stored value. The input values act with a rising edge at input C.</string>
@ -161,6 +174,18 @@
<string name="elem_JK_FF_pin_K">The reset input of the flipflop.</string>
<string name="elem_JK_FF_pin_Q">Returns the stored value.</string>
<string name="elem_JK_FF_pin_¬Q">Returns the negated stored value.</string>
<string name="elem_JK_FF_AS">JK-Flipflop, asynchronous</string>
<string name="elem_JK_FF_AS_short">JK-AS</string>
<string name="elem_JK_FF_AS_tt">Has the possibility to store (J=K=0), set (J=1, K=0), reset (J=0, K=1) or toggle (J=K=1) the stored value. The input values act with a rising edge at input C.</string>
<string name="elem_JK_FF_AS_pin_J">The set input of the flipflop.</string>
<string name="elem_JK_FF_AS_pin_C">The Clock input. A rising edge initiates a state change.</string>
<string name="elem_JK_FF_AS_pin_K">The reset input of the flipflop.</string>
<string name="elem_JK_FF_AS_pin_Q">Returns the stored value.</string>
<string name="elem_JK_FF_AS_pin_¬Q">Returns the negated stored value.</string>
<string name="elem_JK_FF_AS_pin_Set">asynchronous set</string>
<string name="elem_JK_FF_AS_pin_Clr">asynchronous clear</string>
<string name="elem_LED">LED</string>
<string name="elem_LED_tt">A simple LED can be used to visualize an output value. Accepts a single bit. Lights up when the input is set to 1.</string>
<string name="elem_LED_pin_in">LED Input. LED shines when input is set to 1.</string>

View File

@ -39,8 +39,8 @@ public class TestExamples extends TestCase {
*/
public void testTestExamples() throws Exception {
File examples = new File(Resources.getRoot(), "/dig/test");
assertEquals(60, new FileScanner(this::check).scan(examples));
assertEquals(56, testCasesInFiles);
assertEquals(62, new FileScanner(this::check).scan(examples));
assertEquals(58, testCasesInFiles);
}

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>CLK</string>
</entry>
</elementAttributes>
<pos x="300" y="240"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>D</string>
</entry>
</elementAttributes>
<pos x="300" y="200"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>S</string>
</entry>
</elementAttributes>
<pos x="300" y="160"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>C</string>
</entry>
</elementAttributes>
<pos x="300" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Q</string>
</entry>
</elementAttributes>
<pos x="440" y="200"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>~Q</string>
</entry>
</elementAttributes>
<pos x="520" y="220"/>
</visualElement>
<visualElement>
<elementName>Testcase</elementName>
<elementAttributes>
<entry>
<string>Testdata</string>
<testData>
<dataString>CLK D S C Q ~Q
0 0 0 0 0 1
0 1 0 0 0 1
C 1 0 0 1 0
0 0 0 0 1 0
C 0 0 0 0 1
0 0 0 1 0 1
0 0 0 0 0 1
0 0 1 0 1 0
0 0 0 0 1 0
</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="480" y="260"/>
</visualElement>
<visualElement>
<elementName>D_FF_AS</elementName>
<elementAttributes/>
<pos x="360" y="200"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="300" y="240"/>
<p2 x="360" y="240"/>
</wire>
<wire>
<p1 x="300" y="160"/>
<p2 x="340" y="160"/>
</wire>
<wire>
<p1 x="340" y="260"/>
<p2 x="360" y="260"/>
</wire>
<wire>
<p1 x="300" y="200"/>
<p2 x="320" y="200"/>
</wire>
<wire>
<p1 x="340" y="200"/>
<p2 x="360" y="200"/>
</wire>
<wire>
<p1 x="420" y="200"/>
<p2 x="440" y="200"/>
</wire>
<wire>
<p1 x="300" y="280"/>
<p2 x="340" y="280"/>
</wire>
<wire>
<p1 x="320" y="220"/>
<p2 x="360" y="220"/>
</wire>
<wire>
<p1 x="420" y="220"/>
<p2 x="520" y="220"/>
</wire>
<wire>
<p1 x="320" y="200"/>
<p2 x="320" y="220"/>
</wire>
<wire>
<p1 x="340" y="160"/>
<p2 x="340" y="200"/>
</wire>
<wire>
<p1 x="340" y="260"/>
<p2 x="340" y="280"/>
</wire>
</wires>
</circuit>

View File

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>JK_FF_AS</elementName>
<elementAttributes/>
<pos x="360" y="200"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>CLK</string>
</entry>
</elementAttributes>
<pos x="300" y="240"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>J</string>
</entry>
</elementAttributes>
<pos x="300" y="200"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>S</string>
</entry>
</elementAttributes>
<pos x="300" y="160"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>K</string>
</entry>
</elementAttributes>
<pos x="300" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>C</string>
</entry>
</elementAttributes>
<pos x="300" y="320"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Q</string>
</entry>
</elementAttributes>
<pos x="440" y="200"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>~Q</string>
</entry>
</elementAttributes>
<pos x="520" y="220"/>
</visualElement>
<visualElement>
<elementName>Testcase</elementName>
<elementAttributes>
<entry>
<string>Testdata</string>
<testData>
<dataString>CLK J K S C Q ~Q
0 0 0 0 0 0 1
C 1 0 0 0 1 0
0 1 0 0 0 1 0
0 0 0 0 0 1 0
0 0 1 0 0 1 0
C 0 1 0 0 0 1
0 0 0 0 0 0 1
C 1 0 0 0 1 0
0 0 0 1 0 1 0
0 0 0 0 1 0 1
C 1 1 0 0 1 0
C 1 1 0 0 0 1
C 1 1 0 0 1 0
C 1 1 0 0 0 1
</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="480" y="300"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="300" y="240"/>
<p2 x="360" y="240"/>
</wire>
<wire>
<p1 x="300" y="160"/>
<p2 x="340" y="160"/>
</wire>
<wire>
<p1 x="300" y="320"/>
<p2 x="340" y="320"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="360" y="260"/>
</wire>
<wire>
<p1 x="300" y="200"/>
<p2 x="320" y="200"/>
</wire>
<wire>
<p1 x="340" y="200"/>
<p2 x="360" y="200"/>
</wire>
<wire>
<p1 x="420" y="200"/>
<p2 x="440" y="200"/>
</wire>
<wire>
<p1 x="300" y="280"/>
<p2 x="320" y="280"/>
</wire>
<wire>
<p1 x="340" y="280"/>
<p2 x="360" y="280"/>
</wire>
<wire>
<p1 x="320" y="220"/>
<p2 x="360" y="220"/>
</wire>
<wire>
<p1 x="420" y="220"/>
<p2 x="520" y="220"/>
</wire>
<wire>
<p1 x="320" y="200"/>
<p2 x="320" y="220"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="320" y="280"/>
</wire>
<wire>
<p1 x="340" y="160"/>
<p2 x="340" y="200"/>
</wire>
<wire>
<p1 x="340" y="280"/>
<p2 x="340" y="320"/>
</wire>
</wires>
</circuit>