added a fuse component

This commit is contained in:
hneemann 2017-06-03 09:28:08 +02:00
parent b743bc959e
commit 57163784dd
12 changed files with 731 additions and 456 deletions

138
src/main/dig/cmos/dec.dig Normal file
View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<attributes>
<entry>
<string>Width</string>
<int>2</int>
</entry>
</attributes>
<visualElements>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="-40" y="-160"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="-80" y="-60"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>0</string>
</entry>
</elementAttributes>
<pos x="-120" y="-60"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>1</string>
</entry>
</elementAttributes>
<pos x="-120" y="-20"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>a</string>
</entry>
</elementAttributes>
<pos x="20" y="-160"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>b</string>
</entry>
</elementAttributes>
<pos x="120" y="-140"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>c</string>
</entry>
</elementAttributes>
<pos x="20" y="-120"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>d</string>
</entry>
</elementAttributes>
<pos x="120" y="-100"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="-120" y="-20"/>
<p2 x="-100" y="-20"/>
</wire>
<wire>
<p1 x="0" y="-100"/>
<p2 x="120" y="-100"/>
</wire>
<wire>
<p1 x="-100" y="-40"/>
<p2 x="-80" y="-40"/>
</wire>
<wire>
<p1 x="0" y="-120"/>
<p2 x="20" y="-120"/>
</wire>
<wire>
<p1 x="-60" y="-60"/>
<p2 x="-20" y="-60"/>
</wire>
<wire>
<p1 x="-120" y="-60"/>
<p2 x="-80" y="-60"/>
</wire>
<wire>
<p1 x="0" y="-140"/>
<p2 x="120" y="-140"/>
</wire>
<wire>
<p1 x="0" y="-160"/>
<p2 x="20" y="-160"/>
</wire>
<wire>
<p1 x="-20" y="-100"/>
<p2 x="-20" y="-60"/>
</wire>
<wire>
<p1 x="-100" y="-40"/>
<p2 x="-100" y="-20"/>
</wire>
</wires>
</circuit>

View File

@ -3,30 +3,6 @@
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -35,7 +11,7 @@
<string>A_0</string>
</entry>
</elementAttributes>
<pos x="160" y="280"/>
<pos x="200" y="180"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -45,7 +21,7 @@
<string>A_1</string>
</entry>
</elementAttributes>
<pos x="160" y="320"/>
<pos x="200" y="220"/>
</visualElement>
<visualElement>
<elementName>PullUp</elementName>
@ -67,30 +43,6 @@
<elementAttributes/>
<pos x="720" y="20"/>
</visualElement>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="520"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="600"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -99,7 +51,7 @@
<string>A_2</string>
</entry>
</elementAttributes>
<pos x="160" y="600"/>
<pos x="200" y="520"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -109,7 +61,7 @@
<string>A_3</string>
</entry>
</elementAttributes>
<pos x="160" y="640"/>
<pos x="200" y="560"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
@ -262,7 +214,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="160" y="680"/>
<pos x="200" y="660"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
@ -364,6 +316,16 @@
<elementAttributes/>
<pos x="680" y="380"/>
</visualElement>
<visualElement>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="520"/>
</visualElement>
</visualElements>
<wires>
<wire>
@ -394,18 +356,10 @@
<p1 x="660" y="320"/>
<p2 x="680" y="320"/>
</wire>
<wire>
<p1 x="160" y="320"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="460" y="320"/>
<p2 x="480" y="320"/>
</wire>
<wire>
<p1 x="160" y="640"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="360" y="260"/>
@ -446,6 +400,10 @@
<p1 x="280" y="520"/>
<p2 x="400" y="520"/>
</wire>
<wire>
<p1 x="200" y="520"/>
<p2 x="240" y="520"/>
</wire>
<wire>
<p1 x="300" y="360"/>
<p2 x="360" y="360"/>
@ -467,12 +425,8 @@
<p2 x="320" y="200"/>
</wire>
<wire>
<p1 x="160" y="680"/>
<p2 x="760" y="680"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="200" y="620"/>
<p1 x="220" y="200"/>
<p2 x="240" y="200"/>
</wire>
<wire>
<p1 x="420" y="620"/>
@ -495,17 +449,17 @@
<p2 x="740" y="620"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="200" y="300"/>
</wire>
<wire>
<p1 x="280" y="240"/>
<p2 x="300" y="240"/>
<p1 x="200" y="560"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="280" y="560"/>
<p2 x="600" y="560"/>
</wire>
<wire>
<p1 x="280" y="240"/>
<p2 x="300" y="240"/>
</wire>
<wire>
<p1 x="400" y="80"/>
<p2 x="420" y="80"/>
@ -522,6 +476,10 @@
<p1 x="700" y="80"/>
<p2 x="720" y="80"/>
</wire>
<wire>
<p1 x="200" y="660"/>
<p2 x="760" y="660"/>
</wire>
<wire>
<p1 x="280" y="180"/>
<p2 x="300" y="180"/>
@ -543,12 +501,8 @@
<p2 x="620" y="180"/>
</wire>
<wire>
<p1 x="220" y="280"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="160" y="280"/>
<p2 x="200" y="280"/>
<p1 x="200" y="180"/>
<p2 x="240" y="180"/>
</wire>
<wire>
<p1 x="400" y="280"/>
@ -583,12 +537,16 @@
<p2 x="680" y="120"/>
</wire>
<wire>
<p1 x="220" y="600"/>
<p2 x="260" y="600"/>
<p1 x="220" y="540"/>
<p2 x="240" y="540"/>
</wire>
<wire>
<p1 x="160" y="600"/>
<p2 x="200" y="600"/>
<p1 x="280" y="540"/>
<p2 x="500" y="540"/>
</wire>
<wire>
<p1 x="200" y="220"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="280" y="220"/>
@ -642,10 +600,6 @@
<p1 x="460" y="60"/>
<p2 x="560" y="60"/>
</wire>
<wire>
<p1 x="280" y="540"/>
<p2 x="500" y="540"/>
</wire>
<wire>
<p1 x="320" y="160"/>
<p2 x="320" y="200"/>
@ -654,14 +608,6 @@
<p1 x="320" y="220"/>
<p2 x="320" y="260"/>
</wire>
<wire>
<p1 x="260" y="240"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="260" y="580"/>
<p2 x="260" y="600"/>
</wire>
<wire>
<p1 x="420" y="520"/>
<p2 x="420" y="620"/>
@ -830,14 +776,6 @@
<p1 x="400" y="320"/>
<p2 x="400" y="340"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="660" y="60"/>
<p2 x="660" y="120"/>
@ -888,7 +826,15 @@
</wire>
<wire>
<p1 x="760" y="640"/>
<p2 x="760" y="680"/>
<p2 x="760" y="660"/>
</wire>
<wire>
<p1 x="220" y="540"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="220" y="200"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="700" y="420"/>

View File

@ -3,30 +3,6 @@
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -35,7 +11,7 @@
<string>A_0</string>
</entry>
</elementAttributes>
<pos x="160" y="280"/>
<pos x="200" y="180"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -45,7 +21,7 @@
<string>A_1</string>
</entry>
</elementAttributes>
<pos x="160" y="320"/>
<pos x="200" y="220"/>
</visualElement>
<visualElement>
<elementName>PullUp</elementName>
@ -137,30 +113,6 @@
<elementAttributes/>
<pos x="800" y="420"/>
</visualElement>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="520"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="600"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -169,7 +121,7 @@
<string>A_2</string>
</entry>
</elementAttributes>
<pos x="160" y="600"/>
<pos x="200" y="520"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -179,7 +131,7 @@
<string>A_3</string>
</entry>
</elementAttributes>
<pos x="160" y="640"/>
<pos x="200" y="560"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
@ -304,11 +256,271 @@
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0
# transitions
0 0 0 0 0
0 0 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 0 1
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
1 0 0 0 0
0 0 0 0 0
1 0 0 1 1
0 0 0 0 0
1 0 1 0 0
0 0 0 0 0
1 0 1 1 0
0 0 0 0 0
1 1 0 0 0
0 0 0 0 0
1 1 0 1 0
0 0 0 0 0
1 1 1 0 0
0 0 0 0 0
1 1 1 1 0
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 0 1 0
0 0 1 1 0
0 0 0 1 0
0 1 0 0 0
0 0 0 1 0
0 1 0 1 0
0 0 0 1 0
0 1 1 0 1
0 0 0 1 0
0 1 1 1 0
0 0 0 1 0
1 0 0 0 0
0 0 0 1 0
1 0 0 1 1
0 0 0 1 0
1 0 1 0 0
0 0 0 1 0
1 0 1 1 0
0 0 0 1 0
1 1 0 0 0
0 0 0 1 0
1 1 0 1 0
0 0 0 1 0
1 1 1 0 0
0 0 0 1 0
1 1 1 1 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 0 1 0 0
0 1 0 0 0
0 0 1 0 0
0 1 0 1 0
0 0 1 0 0
0 1 1 0 1
0 0 1 0 0
0 1 1 1 0
0 0 1 0 0
1 0 0 0 0
0 0 1 0 0
1 0 0 1 1
0 0 1 0 0
1 0 1 0 0
0 0 1 0 0
1 0 1 1 0
0 0 1 0 0
1 1 0 0 0
0 0 1 0 0
1 1 0 1 0
0 0 1 0 0
1 1 1 0 0
0 0 1 0 0
1 1 1 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 0 1 1 0
0 1 0 1 0
0 0 1 1 0
0 1 1 0 1
0 0 1 1 0
0 1 1 1 0
0 0 1 1 0
1 0 0 0 0
0 0 1 1 0
1 0 0 1 1
0 0 1 1 0
1 0 1 0 0
0 0 1 1 0
1 0 1 1 0
0 0 1 1 0
1 1 0 0 0
0 0 1 1 0
1 1 0 1 0
0 0 1 1 0
1 1 1 0 0
0 0 1 1 0
1 1 1 1 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 0 0 0
0 1 1 0 1
0 1 0 0 0
0 1 1 1 0
0 1 0 0 0
1 0 0 0 0
0 1 0 0 0
1 0 0 1 1
0 1 0 0 0
1 0 1 0 0
0 1 0 0 0
1 0 1 1 0
0 1 0 0 0
1 1 0 0 0
0 1 0 0 0
1 1 0 1 0
0 1 0 0 0
1 1 1 0 0
0 1 0 0 0
1 1 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 0 1 0
0 1 1 1 0
0 1 0 1 0
1 0 0 0 0
0 1 0 1 0
1 0 0 1 1
0 1 0 1 0
1 0 1 0 0
0 1 0 1 0
1 0 1 1 0
0 1 0 1 0
1 1 0 0 0
0 1 0 1 0
1 1 0 1 0
0 1 0 1 0
1 1 1 0 0
0 1 0 1 0
1 1 1 1 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 0
0 1 1 0 1
1 0 0 0 0
0 1 1 0 1
1 0 0 1 1
0 1 1 0 1
1 0 1 0 0
0 1 1 0 1
1 0 1 1 0
0 1 1 0 1
1 1 0 0 0
0 1 1 0 1
1 1 0 1 0
0 1 1 0 1
1 1 1 0 0
0 1 1 0 1
1 1 1 1 0
0 1 1 0 1
0 1 1 1 0
1 0 0 0 0
0 1 1 1 0
1 0 0 1 1
0 1 1 1 0
1 0 1 0 0
0 1 1 1 0
1 0 1 1 0
0 1 1 1 0
1 1 0 0 0
0 1 1 1 0
1 1 0 1 0
0 1 1 1 0
1 1 1 0 0
0 1 1 1 0
1 1 1 1 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 0 0 0
1 0 1 0 0
1 0 0 0 0
1 0 1 1 0
1 0 0 0 0
1 1 0 0 0
1 0 0 0 0
1 1 0 1 0
1 0 0 0 0
1 1 1 0 0
1 0 0 0 0
1 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 1 0 0
1 0 0 1 1
1 0 1 1 0
1 0 0 1 1
1 1 0 0 0
1 0 0 1 1
1 1 0 1 0
1 0 0 1 1
1 1 1 0 0
1 0 0 1 1
1 1 1 1 0
1 0 0 1 1
1 0 1 0 0
1 0 1 1 0
1 0 1 0 0
1 1 0 0 0
1 0 1 0 0
1 1 0 1 0
1 0 1 0 0
1 1 1 0 0
1 0 1 0 0
1 1 1 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 0 1 1 0
1 1 0 1 0
1 0 1 1 0
1 1 1 0 0
1 0 1 1 0
1 1 1 1 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 0 0 0
1 1 1 0 0
1 1 0 0 0
1 1 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
1 1 0 1 0
1 1 1 1 0
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0
1 1 1 0 0
</dataString>
</testData>
</entry>
</elementAttributes>
<pos x="120" y="20"/>
<pos x="160" y="-40"/>
</visualElement>
<visualElement>
<elementName>Driver</elementName>
@ -332,7 +544,7 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="160" y="680"/>
<pos x="200" y="660"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
@ -355,72 +567,78 @@
<pos x="680" y="220"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="420" y="40"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="560" y="40"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="700" y="40"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="840" y="40"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="840" y="160"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="840" y="300"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="840" y="420"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="700" y="420"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="560" y="420"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="420" y="420"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="420" y="300"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="700" y="300"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="560" y="160"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes/>
<pos x="420" y="160"/>
</visualElement>
<visualElement>
<elementName>Fuse</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
<entry>
<string>Blown</string>
<boolean>true</boolean>
@ -429,42 +647,8 @@
<pos x="700" y="160"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementName>Fuse</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="700" y="40"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="560" y="40"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="560" y="160"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
<entry>
<string>Blown</string>
<boolean>true</boolean>
@ -473,65 +657,17 @@
<pos x="560" y="300"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="560" y="420"/>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="420" y="420"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="420" y="300"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="420" y="160"/>
</visualElement>
<visualElement>
<elementName>DiodeBackward</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
</elementAttributes>
<pos x="420" y="40"/>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="520"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="160" y="320"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="160" y="640"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="820" y="160"/>
<p2 x="840" y="160"/>
@ -604,6 +740,10 @@
<p1 x="280" y="520"/>
<p2 x="440" y="520"/>
</wire>
<wire>
<p1 x="200" y="520"/>
<p2 x="240" y="520"/>
</wire>
<wire>
<p1 x="280" y="200"/>
<p2 x="320" y="200"/>
@ -625,8 +765,8 @@
<p2 x="660" y="200"/>
</wire>
<wire>
<p1 x="160" y="680"/>
<p2 x="920" y="680"/>
<p1 x="220" y="200"/>
<p2 x="240" y="200"/>
</wire>
<wire>
<p1 x="820" y="40"/>
@ -692,10 +832,6 @@
<p1 x="360" y="140"/>
<p2 x="500" y="140"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="200" y="620"/>
</wire>
<wire>
<p1 x="940" y="620"/>
<p2 x="960" y="620"/>
@ -716,10 +852,6 @@
<p1 x="880" y="620"/>
<p2 x="900" y="620"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="200" y="300"/>
</wire>
<wire>
<p1 x="820" y="300"/>
<p2 x="840" y="300"/>
@ -752,6 +884,14 @@
<p1 x="440" y="300"/>
<p2 x="460" y="300"/>
</wire>
<wire>
<p1 x="200" y="560"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="280" y="560"/>
<p2 x="720" y="560"/>
</wire>
<wire>
<p1 x="300" y="400"/>
<p2 x="360" y="400"/>
@ -772,10 +912,6 @@
<p1 x="280" y="240"/>
<p2 x="300" y="240"/>
</wire>
<wire>
<p1 x="280" y="560"/>
<p2 x="720" y="560"/>
</wire>
<wire>
<p1 x="360" y="80"/>
<p2 x="380" y="80"/>
@ -792,6 +928,10 @@
<p1 x="780" y="80"/>
<p2 x="800" y="80"/>
</wire>
<wire>
<p1 x="200" y="660"/>
<p2 x="920" y="660"/>
</wire>
<wire>
<p1 x="360" y="340"/>
<p2 x="380" y="340"/>
@ -812,6 +952,10 @@
<p1 x="280" y="180"/>
<p2 x="300" y="180"/>
</wire>
<wire>
<p1 x="200" y="180"/>
<p2 x="240" y="180"/>
</wire>
<wire>
<p1 x="300" y="20"/>
<p2 x="360" y="20"/>
@ -828,14 +972,6 @@
<p1 x="360" y="20"/>
<p2 x="500" y="20"/>
</wire>
<wire>
<p1 x="220" y="280"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="160" y="280"/>
<p2 x="200" y="280"/>
</wire>
<wire>
<p1 x="320" y="280"/>
<p2 x="360" y="280"/>
@ -853,21 +989,21 @@
<p2 x="500" y="280"/>
</wire>
<wire>
<p1 x="220" y="600"/>
<p2 x="260" y="600"/>
</wire>
<wire>
<p1 x="160" y="600"/>
<p2 x="200" y="600"/>
</wire>
<wire>
<p1 x="280" y="220"/>
<p2 x="320" y="220"/>
<p1 x="220" y="540"/>
<p2 x="240" y="540"/>
</wire>
<wire>
<p1 x="280" y="540"/>
<p2 x="580" y="540"/>
</wire>
<wire>
<p1 x="200" y="220"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="280" y="220"/>
<p2 x="320" y="220"/>
</wire>
<wire>
<p1 x="320" y="140"/>
<p2 x="320" y="200"/>
@ -892,14 +1028,6 @@
<p1 x="640" y="140"/>
<p2 x="640" y="200"/>
</wire>
<wire>
<p1 x="260" y="240"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="260" y="580"/>
<p2 x="260" y="600"/>
</wire>
<wire>
<p1 x="740" y="560"/>
<p2 x="740" y="620"/>
@ -1076,17 +1204,9 @@
<p1 x="500" y="280"/>
<p2 x="500" y="340"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="920" y="640"/>
<p2 x="920" y="680"/>
<p2 x="920" y="660"/>
</wire>
<wire>
<p1 x="600" y="540"/>
@ -1112,6 +1232,14 @@
<p1 x="600" y="300"/>
<p2 x="600" y="420"/>
</wire>
<wire>
<p1 x="220" y="540"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="220" y="200"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="540" y="460"/>
<p2 x="540" y="480"/>

View File

@ -3,30 +3,6 @@
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -35,7 +11,7 @@
<string>A_0</string>
</entry>
</elementAttributes>
<pos x="160" y="280"/>
<pos x="200" y="180"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -45,7 +21,7 @@
<string>A_1</string>
</entry>
</elementAttributes>
<pos x="160" y="320"/>
<pos x="200" y="220"/>
</visualElement>
<visualElement>
<elementName>PullUp</elementName>
@ -137,30 +113,6 @@
<elementAttributes/>
<pos x="680" y="380"/>
</visualElement>
<visualElement>
<elementName>Decoder</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>2</int>
</entry>
</elementAttributes>
<pos x="240" y="520"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>2</string>
</entry>
</elementAttributes>
<pos x="200" y="600"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
@ -169,7 +121,7 @@
<string>A_2</string>
</entry>
</elementAttributes>
<pos x="160" y="600"/>
<pos x="200" y="520"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
@ -179,7 +131,7 @@
<string>A_3</string>
</entry>
</elementAttributes>
<pos x="160" y="640"/>
<pos x="200" y="560"/>
</visualElement>
<visualElement>
<elementName>NFET</elementName>
@ -332,7 +284,17 @@
<int>1</int>
</entry>
</elementAttributes>
<pos x="160" y="680"/>
<pos x="200" y="660"/>
</visualElement>
<visualElement>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="180"/>
</visualElement>
<visualElement>
<elementName>dec.dig</elementName>
<elementAttributes/>
<pos x="240" y="520"/>
</visualElement>
</visualElements>
<wires>
@ -360,14 +322,6 @@
<p1 x="660" y="320"/>
<p2 x="680" y="320"/>
</wire>
<wire>
<p1 x="160" y="320"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="160" y="640"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="320" y="260"/>
<p2 x="360" y="260"/>
@ -404,6 +358,10 @@
<p1 x="280" y="520"/>
<p2 x="400" y="520"/>
</wire>
<wire>
<p1 x="200" y="520"/>
<p2 x="240" y="520"/>
</wire>
<wire>
<p1 x="300" y="360"/>
<p2 x="360" y="360"/>
@ -425,12 +383,8 @@
<p2 x="320" y="200"/>
</wire>
<wire>
<p1 x="160" y="680"/>
<p2 x="760" y="680"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="200" y="620"/>
<p1 x="220" y="200"/>
<p2 x="240" y="200"/>
</wire>
<wire>
<p1 x="420" y="620"/>
@ -453,17 +407,17 @@
<p2 x="740" y="620"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="200" y="300"/>
</wire>
<wire>
<p1 x="280" y="240"/>
<p2 x="300" y="240"/>
<p1 x="200" y="560"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="280" y="560"/>
<p2 x="600" y="560"/>
</wire>
<wire>
<p1 x="280" y="240"/>
<p2 x="300" y="240"/>
</wire>
<wire>
<p1 x="400" y="80"/>
<p2 x="420" y="80"/>
@ -480,6 +434,10 @@
<p1 x="700" y="80"/>
<p2 x="720" y="80"/>
</wire>
<wire>
<p1 x="200" y="660"/>
<p2 x="760" y="660"/>
</wire>
<wire>
<p1 x="280" y="180"/>
<p2 x="300" y="180"/>
@ -497,12 +455,8 @@
<p2 x="720" y="180"/>
</wire>
<wire>
<p1 x="220" y="280"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="160" y="280"/>
<p2 x="200" y="280"/>
<p1 x="200" y="180"/>
<p2 x="240" y="180"/>
</wire>
<wire>
<p1 x="400" y="280"/>
@ -533,12 +487,16 @@
<p2 x="680" y="120"/>
</wire>
<wire>
<p1 x="220" y="600"/>
<p2 x="260" y="600"/>
<p1 x="220" y="540"/>
<p2 x="240" y="540"/>
</wire>
<wire>
<p1 x="160" y="600"/>
<p2 x="200" y="600"/>
<p1 x="280" y="540"/>
<p2 x="500" y="540"/>
</wire>
<wire>
<p1 x="200" y="220"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="280" y="220"/>
@ -588,10 +546,6 @@
<p1 x="460" y="60"/>
<p2 x="560" y="60"/>
</wire>
<wire>
<p1 x="280" y="540"/>
<p2 x="500" y="540"/>
</wire>
<wire>
<p1 x="320" y="160"/>
<p2 x="320" y="200"/>
@ -600,14 +554,6 @@
<p1 x="320" y="220"/>
<p2 x="320" y="260"/>
</wire>
<wire>
<p1 x="260" y="240"/>
<p2 x="260" y="280"/>
</wire>
<wire>
<p1 x="260" y="580"/>
<p2 x="260" y="600"/>
</wire>
<wire>
<p1 x="420" y="520"/>
<p2 x="420" y="620"/>
@ -760,14 +706,6 @@
<p1 x="400" y="320"/>
<p2 x="400" y="340"/>
</wire>
<wire>
<p1 x="180" y="620"/>
<p2 x="180" y="640"/>
</wire>
<wire>
<p1 x="180" y="300"/>
<p2 x="180" y="320"/>
</wire>
<wire>
<p1 x="660" y="60"/>
<p2 x="660" y="120"/>
@ -810,7 +748,15 @@
</wire>
<wire>
<p1 x="760" y="640"/>
<p2 x="760" y="680"/>
<p2 x="760" y="660"/>
</wire>
<wire>
<p1 x="220" y="540"/>
<p2 x="220" y="560"/>
</wire>
<wire>
<p1 x="220" y="200"/>
<p2 x="220" y="220"/>
</wire>
<wire>
<p1 x="700" y="420"/>

View File

@ -0,0 +1,28 @@
package de.neemann.digital.core.switching;
import de.neemann.digital.core.element.ElementAttributes;
import de.neemann.digital.core.element.ElementTypeDescription;
import de.neemann.digital.core.element.Keys;
/**
* A simple fuse.
* Created by hneemann on 03.06.17.
*/
public class Fuse extends Switch {
/**
* The fuse description
*/
public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Fuse.class)
.addAttribute(Keys.ROTATE)
.addAttribute(Keys.BLOWN);
/**
* Create a new fuse
*
* @param attr the attributes
*/
public Fuse(ElementAttributes attr) {
super(attr, !attr.get(Keys.BLOWN), "out1", "out2");
}
}

View File

@ -127,6 +127,7 @@ public class ElementLibrary implements Iterable<ElementLibrary.ElementContainer>
.add(DiodeForward.DESCRIPTION)
.add(DiodeBackward.DESCRIPTION)
.add(Switch.DESCRIPTION)
.add(Fuse.DESCRIPTION)
.add(Relay.DESCRIPTION)
.add(PFET.DESCRIPTION)
.add(NFET.DESCRIPTION)

View File

@ -22,7 +22,7 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
* Created by hneemann on 12.05.17.
*/
public class DILShape implements Shape {
private static final float CIRC = (float) (4 * (Math.sqrt(2) - 1) / 3);
static final float CIRC = (float) (4 * (Math.sqrt(2) - 1) / 3);
private static final int SPACING = 2;
private static final int RAD = SPACING * SIZE / 4;
private static final int BEZ = Math.round(RAD * CIRC);

View File

@ -0,0 +1,74 @@
package de.neemann.digital.draw.shapes;
import de.neemann.digital.core.Observer;
import de.neemann.digital.core.element.ElementAttributes;
import de.neemann.digital.core.element.Keys;
import de.neemann.digital.core.element.PinDescriptions;
import de.neemann.digital.draw.elements.IOState;
import de.neemann.digital.draw.elements.Pin;
import de.neemann.digital.draw.elements.Pins;
import de.neemann.digital.draw.graphics.Graphic;
import de.neemann.digital.draw.graphics.Polygon;
import de.neemann.digital.draw.graphics.Style;
import de.neemann.digital.draw.graphics.Vector;
import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
import static de.neemann.digital.draw.shapes.GenericShape.SIZE2;
/**
* The light bulb shape
* Created by hneemann on 19.05.17.
*/
public class FuseShape implements Shape {
private static final int BEZ = Math.round(SIZE2 / 2 * DILShape.CIRC);
private static final Polygon OK_POLY = new Polygon(false)
.add(0, 0)
.add(new Vector(0, -BEZ), new Vector(SIZE2 / 2 - BEZ, -SIZE2 / 2), new Vector(SIZE2 / 2, -SIZE2 / 2))
.add(new Vector(SIZE2 / 2 + BEZ, -SIZE2 / 2), new Vector(SIZE2, -SIZE2 / 2 + BEZ), new Vector(SIZE2, 0))
.add(new Vector(SIZE2, BEZ), new Vector(SIZE2 + SIZE2 / 2 - BEZ, SIZE2 / 2), new Vector(SIZE2 + SIZE2 / 2, SIZE2 / 2))
.add(new Vector(SIZE2 + SIZE2 / 2 + BEZ, SIZE2 / 2), new Vector(SIZE, SIZE2 / 2 - BEZ), new Vector(SIZE, 0));
private static final Polygon BLOWN_POLY1 = new Polygon(false)
.add(0, 0)
.add(new Vector(0, -BEZ), new Vector(SIZE2 / 2 - BEZ, -SIZE2 / 2), new Vector(SIZE2 / 2, -SIZE2 / 2));
private static final Polygon BLOWN_POLY2 = new Polygon(false)
.add(SIZE2 + SIZE2 / 2, SIZE2 / 2)
.add(new Vector(SIZE2 + SIZE2 / 2 + BEZ, SIZE2 / 2), new Vector(SIZE, SIZE2 / 2 - BEZ), new Vector(SIZE, 0));
private final PinDescriptions outputs;
private final boolean blown;
/**
* Creates a new instance
*
* @param attr the attributes
* @param inputs the inputs
* @param outputs the outputs
*/
public FuseShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) {
this.outputs = outputs;
blown = attr.get(Keys.BLOWN);
}
@Override
public Pins getPins() {
return new Pins()
.add(new Pin(new Vector(0, 0), outputs.get(0)))
.add(new Pin(new Vector(SIZE, 0), outputs.get(1)));
}
@Override
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
return null;
}
@Override
public void drawTo(Graphic graphic, Style highLight) {
if (blown) {
graphic.drawPolygon(BLOWN_POLY1, Style.THIN);
graphic.drawPolygon(BLOWN_POLY2, Style.THIN);
} else
graphic.drawPolygon(OK_POLY, Style.THIN);
}
}

View File

@ -82,13 +82,6 @@ public final class ShapeFactory {
map.put(Const.DESCRIPTION.getName(), ConstShape::new);
map.put(Ground.DESCRIPTION.getName(), GroundShape::new);
map.put(VDD.DESCRIPTION.getName(), VDDShape::new);
map.put(Switch.DESCRIPTION.getName(), SwitchShape::new);
map.put(Relay.DESCRIPTION.getName(), RelayShape::new);
map.put(NFET.DESCRIPTION.getName(), FETShapeN::new);
map.put(FGNFET.DESCRIPTION.getName(), FGFETShapeN::new);
map.put(FGPFET.DESCRIPTION.getName(), FGFETShapeP::new);
map.put(PFET.DESCRIPTION.getName(), FETShapeP::new);
map.put(TransGate.DESCRIPTION.getName(), TransGateShape::new);
map.put(Out.DESCRIPTION.getName(), OutputShape::new);
map.put(Out.LEDDESCRIPTION.getName(), LEDShape::new);
map.put(LightBulb.DESCRIPTION.getName(), LightBulbShape::new);
@ -100,6 +93,15 @@ public final class ShapeFactory {
map.put(DummyElement.DATADESCRIPTION.getName(), DataShape::new);
map.put(RotEncoder.DESCRIPTION.getName(), RotEncoderShape::new);
map.put(Switch.DESCRIPTION.getName(), SwitchShape::new);
map.put(Fuse.DESCRIPTION.getName(), FuseShape::new);
map.put(Relay.DESCRIPTION.getName(), RelayShape::new);
map.put(NFET.DESCRIPTION.getName(), FETShapeN::new);
map.put(FGNFET.DESCRIPTION.getName(), FGFETShapeN::new);
map.put(FGPFET.DESCRIPTION.getName(), FGFETShapeP::new);
map.put(PFET.DESCRIPTION.getName(), FETShapeP::new);
map.put(TransGate.DESCRIPTION.getName(), TransGateShape::new);
map.put(Break.DESCRIPTION.getName(), BreakShape::new);
map.put(Delay.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new DelayShape());

View File

@ -108,6 +108,12 @@ Es kann dann ein Programm bis zum nächsten BRK-Befehl ausgeführt werden.</stri
<string name="elem_Switch_pin_out2">Einer der Ausgänge des Schalters.</string>
<string name="elem_Switch_tt">Einfacher Schalter. Der Schalter hat keine Gatterlaufzeit.
Eine Signaländerung wird instantan von einem Ende des Schalters zum anderen propagiert.</string>
<string name="elem_Fuse">Fuse</string>
<string name="elem_Fuse_pin_out1">Einer der Ausgänge der Sicherung.</string>
<string name="elem_Fuse_pin_out2">Einer der Ausgänge der Sicherung.</string>
<string name="elem_Fuse_tt">Eine Sicherung die verwendet werden kann, um einen einmal programmierbaren Speicher aufzubauen.</string>
<string name="elem_Counter">Zähler</string>
<string name="elem_Counter_tt">Ein einfacher Zähler-Baustein. Zählt jede steigende Flanke am C Eingang und kann über den clr Eingang zurückgesetzt werden.
Die Bitbreite des Zählers kann im Attributedialog festgelegt werden.</string>

View File

@ -107,6 +107,12 @@
There is no gate delay: A signal change is propagated immediately.</string>
<string name="elem_Switch_pin_out1">One of the switch outputs.</string>
<string name="elem_Switch_pin_out2">One of the switch outputs.</string>
<string name="elem_Fuse">Fuse</string>
<string name="elem_Fuse_tt">A fuse used to build a one time programmable memory.</string>
<string name="elem_Fuse_pin_out1">One of the fuse outputs.</string>
<string name="elem_Fuse_pin_out2">One of the fuse outputs.</string>
<string name="elem_Counter">Counter</string>
<string name="elem_Counter_tt">A simple counter component. The clock input increases the counter. Can be reset back to 0 with the clr pin.
The number of bits can be set in the attribute dialog.</string>

View File

@ -28,7 +28,7 @@ public class TestExamples extends TestCase {
*/
public void testDistExamples() throws Exception {
File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig");
assertEquals(181, new FileScanner(this::check).scan(examples));
assertEquals(182, new FileScanner(this::check).scan(examples));
assertEquals(82, testCasesInFiles);
}