diff options
| -rw-r--r-- | digital/atk16.dig | 1024 | ||||
| -rw-r--r-- | digital/atk16_alu.dig | 2100 | ||||
| -rw-r--r-- | digital/atk16_alu_fo.dig | 494 | ||||
| -rw-r--r-- | digital/atk16_alu_fz.dig | 192 | ||||
| -rw-r--r-- | digital/atk16_alu_inputs.dig | 237 | ||||
| -rw-r--r-- | digital/atk16_decoder.dig | 306 | ||||
| -rw-r--r-- | digital/atk16_jump_unit.dig | 216 | ||||
| -rw-r--r-- | digital/atk16_mem.dig | 17 | ||||
| -rw-r--r-- | digital/atk16_regbank.dig | 262 | ||||
| -rw-r--r-- | digital/tests_alu.dig | 26 | ||||
| -rwxr-xr-x | src/assembler.py | 339 | ||||
| -rw-r--r-- | src/test.atk16 | 2 | ||||
| -rw-r--r-- | src/test_fibo.atk16 | 47 | ||||
| -rwxr-xr-x | src/ucode.py | 41 |
14 files changed, 2891 insertions, 2412 deletions
diff --git a/digital/atk16.dig b/digital/atk16.dig index 15912d7..2716409 100644 --- a/digital/atk16.dig +++ b/digital/atk16.dig @@ -3,6 +3,12 @@ <version>2</version> <attributes> <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> <string>view1</string> <transform> <matrix> @@ -41,6 +47,10 @@ </matrix> </transform> </entry> + <entry> + <string>showDataTable</string> + <boolean>true</boolean> + </entry> </attributes> <visualElements> <visualElement> @@ -146,36 +156,6 @@ <pos x="-40" y="-200"/> </visualElement> <visualElement> - <elementName>EEPROM</elementName> - <elementAttributes> - <entry> - <string>AddrBits</string> - <int>8</int> - </entry> - <entry> - <string>Label</string> - <string>UCODE</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - <entry> - <string>Data</string> - <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3040,8000,4*0,c -,221,3040,8000,4*0,c,221,88,60,8000,0,0,0,c,221,88,60,8000,0,0,0 -,c,221,88,110,8000,0,0,0,c,221,88,110,8000,0,0,0,c,221,440,8000 -,4*0,c,221,440,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c -,221,8000,5*0,c,221,102,8000,4*0,c,221,8000,5*0,c,221,8000,5*0 -,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c -,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221 -,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000 -,5*0,c,221,8000,5*0,c,221,4000,5*0,c,221,4000</data> - </entry> - </elementAttributes> - <pos x="620" y="280"/> - </visualElement> - <visualElement> <elementName>Splitter</elementName> <elementAttributes> <entry> @@ -186,16 +166,6 @@ <pos x="540" y="280"/> </visualElement> <visualElement> - <elementName>VDD</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - </elementAttributes> - <pos x="600" y="300"/> - </visualElement> - <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> @@ -210,16 +180,6 @@ <pos x="540" y="320"/> </visualElement> <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - </elementAttributes> - <pos x="600" y="340"/> - </visualElement> - <visualElement> <elementName>BitSelector</elementName> <elementAttributes> <entry> @@ -262,34 +222,6 @@ <pos x="420" y="360"/> </visualElement> <visualElement> - <elementName>VDD</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - </elementAttributes> - <pos x="580" y="360"/> - </visualElement> - <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>mirror</string> - <boolean>true</boolean> - </entry> - <entry> - <string>Input Splitting</string> - <string>16</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>1*16</string> - </entry> - </elementAttributes> - <pos x="700" y="320"/> - </visualElement> - <visualElement> <elementName>CounterPreset</elementName> <elementAttributes> <entry> @@ -326,7 +258,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[19]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[14]/elementAttributes/entry/rotation"/> </entry> </elementAttributes> <pos x="0" y="-180"/> @@ -346,162 +278,183 @@ <pos x="-40" y="-280"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Clock</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>PC_CO</string> + <string>small</string> + <boolean>true</boolean> </entry> - </elementAttributes> - <pos x="740" y="320"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>PC_IE</string> + <string>runRealTime</string> + <boolean>true</boolean> </entry> - </elementAttributes> - <pos x="740" y="300"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>PC_OE</string> + <string>Frequency</string> + <int>10</int> </entry> </elementAttributes> - <pos x="740" y="280"/> + <pos x="-320" y="-360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>MAR_IE</string> + <string>CLK</string> </entry> </elementAttributes> - <pos x="740" y="260"/> + <pos x="-300" y="-360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>MEM_IE</string> + <string>CLK</string> </entry> </elementAttributes> - <pos x="740" y="240"/> + <pos x="400" y="-220"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>MEM_OE</string> + <string>CLK</string> </entry> </elementAttributes> - <pos x="740" y="220"/> + <pos x="0" y="-260"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>R1_OE</string> + <string>CLK</string> </entry> </elementAttributes> - <pos x="740" y="180"/> + <pos x="280" y="300"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Probe</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>R2_OE</string> + <string>Label</string> + <string>Bus</string> </entry> </elementAttributes> - <pos x="740" y="160"/> + <pos x="200" y="-280"/> + </visualElement> + <visualElement> + <elementName>atk16_mem.dig</elementName> + <elementAttributes/> + <pos x="580" y="-220"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>IR_IE</string> + <string>MEM_IE</string> </entry> </elementAttributes> - <pos x="740" y="140"/> + <pos x="580" y="-180"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>JA_OE</string> + <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="740" y="120"/> + <pos x="580" y="-160"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Break</elementName> + <elementAttributes/> + <pos x="-300" y="-400"/> + </visualElement> + <visualElement> + <elementName>atk16_decoder.dig</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>ALU_OE</string> + <string>shapeType</string> + <shapeType>CUSTOM</shapeType> </entry> </elementAttributes> - <pos x="740" y="80"/> + <pos x="-40" y="-80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>US_RS</string> + <string>RW_IE</string> </entry> </elementAttributes> - <pos x="740" y="20"/> + <pos x="280" y="-60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> <string>NetName</string> - <string>FR_IE</string> + <string>CLK</string> </entry> </elementAttributes> - <pos x="740" y="60"/> + <pos x="260" y="-20"/> </visualElement> <visualElement> - <elementName>Clock</elementName> + <elementName>atk16_regbank.dig</elementName> + <elementAttributes/> + <pos x="280" y="-80"/> + </visualElement> + <visualElement> + <elementName>Counter</elementName> <elementAttributes> <entry> - <string>small</string> - <boolean>true</boolean> - </entry> - <entry> - <string>runRealTime</string> + <string>valueIsProbe</string> <boolean>true</boolean> </entry> <entry> - <string>Frequency</string> - <int>10</int> + <string>Label</string> + <string>Microsequencer</string> </entry> - </elementAttributes> - <pos x="-320" y="-360"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>CLK</string> + <string>Bits</string> + <int>3</int> </entry> </elementAttributes> - <pos x="-300" y="-360"/> + <pos x="60" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -512,24 +465,25 @@ </entry> <entry> <string>NetName</string> - <string>CLK</string> + <string>US_RS</string> </entry> </elementAttributes> - <pos x="400" y="-220"/> + <pos x="-80" y="280"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>VDD</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>CLK</string> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="0" y="-260"/> + <pos x="40" y="240"/> + </visualElement> + <visualElement> + <elementName>Not</elementName> + <elementAttributes/> + <pos x="0" y="260"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -543,89 +497,76 @@ <string>CLK</string> </entry> </elementAttributes> - <pos x="280" y="300"/> + <pos x="-40" y="260"/> </visualElement> <visualElement> - <elementName>Probe</elementName> + <elementName>Reset</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>Bus</string> + <string>invertOutput</string> + <boolean>false</boolean> </entry> </elementAttributes> - <pos x="200" y="-280"/> + <pos x="-60" y="320"/> </visualElement> <visualElement> - <elementName>atk16_mem.dig</elementName> + <elementName>Or</elementName> <elementAttributes/> - <pos x="580" y="-220"/> + <pos x="-20" y="280"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>MEM_IE</string> + <string>FLAG_EQ</string> </entry> </elementAttributes> - <pos x="580" y="-180"/> + <pos x="100" y="-100"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Description</string> + <string>Dummy output</string> </entry> <entry> - <string>NetName</string> - <string>MEM_OE</string> + <string>Label</string> + <string>OUT</string> </entry> </elementAttributes> - <pos x="580" y="-160"/> - </visualElement> - <visualElement> - <elementName>Break</elementName> - <elementAttributes/> - <pos x="-300" y="-400"/> + <pos x="960" y="-140"/> </visualElement> <visualElement> - <elementName>atk16_decoder.dig</elementName> + <elementName>Ground</elementName> <elementAttributes> <entry> - <string>shapeType</string> - <shapeType>SIMPLE</shapeType> + <string>rotation</string> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="0" y="-80"/> + <pos x="940" y="-140"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>In</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>OPCODE</string> + <string>Label</string> + <string>IN</string> </entry> </elementAttributes> - <pos x="80" y="60"/> + <pos x="960" y="-200"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Ground</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>JA_OE</string> + <rotation reference="../../../../visualElement[40]/elementAttributes/entry/rotation"/> </entry> </elementAttributes> - <pos x="-20" y="-20"/> + <pos x="980" y="-200"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -639,7 +580,7 @@ <string>IR_IE</string> </entry> </elementAttributes> - <pos x="-20" y="-60"/> + <pos x="-60" y="-60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -653,178 +594,230 @@ <string>CLK</string> </entry> </elementAttributes> - <pos x="0" y="-40"/> + <pos x="-40" y="-40"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>RW_IE</string> + <string>OPCODE</string> </entry> </elementAttributes> - <pos x="740" y="200"/> + <pos x="100" y="-80"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>mirror</string> + <boolean>true</boolean> </entry> <entry> - <string>NetName</string> - <string>RW_IE</string> + <string>Input Splitting</string> + <string>16</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>1*16</string> </entry> </elementAttributes> - <pos x="280" y="-60"/> + <pos x="880" y="320"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>CLK</string> + <string>PC_CO</string> </entry> </elementAttributes> - <pos x="260" y="-20"/> + <pos x="920" y="320"/> </visualElement> <visualElement> - <elementName>atk16_regbank.dig</elementName> - <elementAttributes/> - <pos x="280" y="-80"/> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>PC_IE</string> + </entry> + </elementAttributes> + <pos x="920" y="300"/> </visualElement> <visualElement> - <elementName>atk16_alu.dig</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>shapeType</string> - <shapeType>SIMPLE</shapeType> + <string>NetName</string> + <string>PC_OE</string> </entry> + </elementAttributes> + <pos x="920" y="280"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> <entry> - <string>Label</string> - <string>ALU</string> + <string>NetName</string> + <string>MAR_IE</string> </entry> </elementAttributes> - <pos x="480" y="20"/> + <pos x="920" y="260"/> </visualElement> <visualElement> - <elementName>Driver</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>16</int> + <string>NetName</string> + <string>MEM_IE</string> </entry> + </elementAttributes> + <pos x="920" y="240"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> <entry> - <string>flipSelPos</string> - <boolean>true</boolean> + <string>NetName</string> + <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="460" y="-100"/> + <pos x="920" y="220"/> </visualElement> <visualElement> - <elementName>Driver</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>16</int> + <string>NetName</string> + <string>R1_OE</string> </entry> + </elementAttributes> + <pos x="920" y="180"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> <entry> - <string>flipSelPos</string> - <boolean>true</boolean> + <string>NetName</string> + <string>R2_OE</string> </entry> </elementAttributes> - <pos x="480" y="-60"/> + <pos x="920" y="160"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>R2_OE</string> + <string>IR_IE</string> </entry> </elementAttributes> - <pos x="500" y="-40"/> + <pos x="920" y="140"/> </visualElement> <visualElement> - <elementName>Driver</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>16</int> + <string>NetName</string> + <string>ALU_OE</string> </entry> </elementAttributes> - <pos x="600" y="20"/> + <pos x="920" y="80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="1"/> + <string>NetName</string> + <string>US_RS</string> </entry> + </elementAttributes> + <pos x="920" y="20"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> <entry> <string>NetName</string> - <string>ALU_OE</string> + <string>FR_IE</string> </entry> </elementAttributes> - <pos x="600" y="0"/> + <pos x="920" y="60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>R1_OE</string> + <string>RW_IE</string> </entry> </elementAttributes> - <pos x="480" y="-80"/> + <pos x="920" y="200"/> </visualElement> <visualElement> - <elementName>Probe</elementName> + <elementName>Stop</elementName> + <elementAttributes/> + <pos x="1000" y="40"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>ALU</string> + <string>NetName</string> + <string>LI_OE</string> </entry> </elementAttributes> - <pos x="680" y="-40"/> + <pos x="920" y="100"/> </visualElement> <visualElement> - <elementName>Counter</elementName> + <elementName>EEPROM</elementName> <elementAttributes> <entry> - <string>valueIsProbe</string> - <boolean>true</boolean> + <string>AddrBits</string> + <int>8</int> </entry> <entry> <string>Label</string> - <string>Microsequencer</string> + <string>UCODE</string> </entry> <entry> <string>Bits</string> - <int>3</int> + <int>16</int> + </entry> + <entry> + <string>Data</string> + <data>c,221,3040,8000,4*0,c,221,3040,8000,4*0,c,221,3040,8000,4*0,c +,221,3040,8000,4*0,c,221,88,60,8000,0,0,0,c,221,88,60,8000,0,0,0 +,c,221,88,90,8000,0,0,0,c,221,88,90,8000,0,0,0,c,221,840,8000 +,4*0,c,221,840,8000,4*0,c,221,82,8000,4*0,c,221,82,8000,4*0,c +,221,802,8000,4*0,c,221,802,8000,4*0,c,221,8000,5*0,c,221,82,8000 +,4*0,c,221,8000,5*0,c,221,802,8000,4*0,c,221,8000,5*0,c,221,8000 +,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0 +,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c,221,8000,5*0,c +,221,8000,5*0,c,221,8000,5*0,c,221,4000,5*0,c,221,4000</data> </entry> </elementAttributes> - <pos x="60" y="240"/> + <pos x="780" y="280"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>VDD</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> + </elementAttributes> + <pos x="760" y="300"/> + </visualElement> + <visualElement> + <elementName>Ground</elementName> + <elementAttributes> <entry> - <string>NetName</string> - <string>US_RS</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="-80" y="280"/> + <pos x="760" y="340"/> </visualElement> <visualElement> <elementName>VDD</elementName> @@ -834,12 +827,7 @@ <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="40" y="240"/> - </visualElement> - <visualElement> - <elementName>Not</elementName> - <elementAttributes/> - <pos x="0" y="260"/> + <pos x="740" y="360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -850,58 +838,101 @@ </entry> <entry> <string>NetName</string> - <string>CLK</string> + <string>LI_OE</string> </entry> </elementAttributes> - <pos x="-40" y="260"/> + <pos x="-60" y="-20"/> </visualElement> <visualElement> - <elementName>Reset</elementName> + <elementName>atk16_alu.dig</elementName> <elementAttributes> <entry> - <string>invertOutput</string> - <boolean>false</boolean> + <string>shapeType</string> + <shapeType>SIMPLE</shapeType> + </entry> + <entry> + <string>Label</string> + <string>ALU</string> </entry> </elementAttributes> - <pos x="-60" y="320"/> + <pos x="740" y="-40"/> </visualElement> <visualElement> - <elementName>Or</elementName> + <elementName>atk16_alu_inputs.dig</elementName> <elementAttributes/> - <pos x="-20" y="280"/> + <pos x="580" y="-40"/> + </visualElement> + <visualElement> + <elementName>Driver</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="880" y="-40"/> + </visualElement> + <visualElement> + <elementName>Driver</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + <entry> + <string>flipSelPos</string> + <boolean>true</boolean> + </entry> + </elementAttributes> + <pos x="440" y="-100"/> + </visualElement> + <visualElement> + <elementName>Driver</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + <entry> + <string>flipSelPos</string> + <boolean>true</boolean> + </entry> + </elementAttributes> + <pos x="460" y="-60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>FLAG_EQ</string> + <string>R1_OE</string> </entry> </elementAttributes> - <pos x="100" y="-100"/> + <pos x="460" y="-80"/> </visualElement> <visualElement> - <elementName>Stop</elementName> - <elementAttributes/> - <pos x="820" y="40"/> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>R2_OE</string> + </entry> + </elementAttributes> + <pos x="460" y="-40"/> </visualElement> <visualElement> - <elementName>Probe</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> <rotation rotation="2"/> </entry> <entry> - <string>Label</string> + <string>NetName</string> <string>OPCODE</string> </entry> - <entry> - <string>intFormat</string> - <intFormat>bin</intFormat> - </entry> </elementAttributes> - <pos x="60" y="60"/> + <pos x="540" y="60"/> </visualElement> <visualElement> <elementName>Testcase</elementName> @@ -921,51 +952,74 @@ program(0x4051, 0x40a2, 0x029b) </testData> </entry> </elementAttributes> - <pos x="-340" y="-240"/> + <pos x="-60" y="-460"/> </visualElement> <visualElement> - <elementName>Out</elementName> + <elementName>atk16_jump_unit.dig</elementName> + <elementAttributes/> + <pos x="-220" y="-240"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>OUT</string> + <string>rotation</string> + <rotation rotation="2"/> </entry> <entry> - <string>Description</string> - <string>Dummy output</string> + <string>NetName</string> + <string>OPCODE</string> </entry> </elementAttributes> - <pos x="960" y="-140"/> + <pos x="-240" y="-200"/> </visualElement> <visualElement> - <elementName>Ground</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> <rotation rotation="1"/> </entry> + <entry> + <string>NetName</string> + <string>ALU_OE</string> + </entry> </elementAttributes> - <pos x="940" y="-140"/> + <pos x="880" y="-60"/> </visualElement> <visualElement> - <elementName>In</elementName> + <elementName>Probe</elementName> <elementAttributes> <entry> <string>Label</string> - <string>IN</string> + <string>PC</string> </entry> </elementAttributes> - <pos x="960" y="-200"/> + <pos x="240" y="-380"/> </visualElement> <visualElement> - <elementName>Ground</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[74]/elementAttributes/entry/rotation"/> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>OPCODE</string> </entry> </elementAttributes> - <pos x="980" y="-200"/> + <pos x="240" y="-440"/> + </visualElement> + <visualElement> + <elementName>Probe</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>OPCODE</string> + </entry> + </elementAttributes> + <pos x="240" y="-440"/> </visualElement> </visualElements> <wires> @@ -974,32 +1028,40 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="300" y="320"/> </wire> <wire> - <p1 x="680" y="320"/> - <p2 x="700" y="320"/> + <p1 x="-60" y="320"/> + <p2 x="-20" y="320"/> </wire> <wire> - <p1 x="720" y="320"/> - <p2 x="740" y="320"/> + <p1 x="900" y="320"/> + <p2 x="920" y="320"/> </wire> <wire> - <p1 x="-60" y="320"/> - <p2 x="-20" y="320"/> + <p1 x="840" y="320"/> + <p2 x="880" y="320"/> </wire> <wire> <p1 x="60" y="0"/> - <p2 x="80" y="0"/> + <p2 x="160" y="0"/> </wire> <wire> - <p1 x="160" y="0"/> + <p1 x="180" y="0"/> <p2 x="280" y="0"/> </wire> <wire> - <p1 x="0" y="-260"/> - <p2 x="20" y="-260"/> + <p1 x="720" y="0"/> + <p2 x="740" y="0"/> + </wire> + <wire> + <p1 x="420" y="0"/> + <p2 x="520" y="0"/> + </wire> + <wire> + <p1 x="540" y="0"/> + <p2 x="580" y="0"/> </wire> <wire> - <p1 x="720" y="260"/> - <p2 x="740" y="260"/> + <p1 x="0" y="-260"/> + <p2 x="20" y="-260"/> </wire> <wire> <p1 x="40" y="260"/> @@ -1010,6 +1072,10 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="0" y="260"/> </wire> <wire> + <p1 x="900" y="260"/> + <p2 x="920" y="260"/> + </wire> + <wire> <p1 x="380" y="-200"/> <p2 x="400" y="-200"/> </wire> @@ -1026,60 +1092,64 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="980" y="-200"/> </wire> <wire> - <p1 x="720" y="200"/> - <p2 x="740" y="200"/> + <p1 x="-240" y="-200"/> + <p2 x="-220" y="-200"/> + </wire> + <wire> + <p1 x="900" y="200"/> + <p2 x="920" y="200"/> </wire> <wire> <p1 x="280" y="200"/> - <p2 x="580" y="200"/> + <p2 x="860" y="200"/> </wire> <wire> <p1 x="940" y="-140"/> <p2 x="960" y="-140"/> </wire> <wire> - <p1 x="-20" y="-140"/> - <p2 x="200" y="-140"/> - </wire> - <wire> - <p1 x="480" y="-140"/> - <p2 x="520" y="-140"/> + <p1 x="-280" y="-140"/> + <p2 x="-60" y="-140"/> </wire> <wire> <p1 x="200" y="-140"/> <p2 x="480" y="-140"/> </wire> <wire> - <p1 x="720" y="140"/> - <p2 x="740" y="140"/> + <p1 x="-60" y="-140"/> + <p2 x="200" y="-140"/> </wire> <wire> - <p1 x="-20" y="-80"/> - <p2 x="0" y="-80"/> + <p1 x="900" y="140"/> + <p2 x="920" y="140"/> </wire> <wire> <p1 x="200" y="-80"/> <p2 x="280" y="-80"/> </wire> <wire> + <p1 x="-60" y="-80"/> + <p2 x="-40" y="-80"/> + </wire> + <wire> <p1 x="60" y="-80"/> - <p2 x="180" y="-80"/> + <p2 x="100" y="-80"/> </wire> <wire> - <p1 x="460" y="-80"/> - <p2 x="480" y="-80"/> + <p1 x="440" y="-80"/> + <p2 x="460" y="-80"/> </wire> <wire> - <p1 x="340" y="-80"/> + <p1 x="380" y="-80"/> <p2 x="400" y="-80"/> </wire> <wire> - <p1 x="720" y="80"/> - <p2 x="740" y="80"/> + <p1 x="900" y="80"/> + <p2 x="920" y="80"/> </wire> <wire> - <p1 x="-20" y="-20"/> - <p2 x="0" y="-20"/> + <p1 x="200" y="80"/> + <p2 x="720" y="80"/> </wire> <wire> <p1 x="260" y="-20"/> @@ -1087,51 +1157,63 @@ program(0x4051, 0x40a2, 0x029b) </wire> <wire> <p1 x="60" y="-20"/> - <p2 x="120" y="-20"/> + <p2 x="180" y="-20"/> </wire> <wire> - <p1 x="600" y="340"/> - <p2 x="620" y="340"/> + <p1 x="-60" y="-20"/> + <p2 x="-40" y="-20"/> </wire> <wire> - <p1 x="720" y="20"/> - <p2 x="740" y="20"/> + <p1 x="680" y="-20"/> + <p2 x="740" y="-20"/> </wire> <wire> - <p1 x="140" y="20"/> - <p2 x="280" y="20"/> + <p1 x="840" y="-20"/> + <p2 x="860" y="-20"/> </wire> <wire> - <p1 x="620" y="20"/> - <p2 x="640" y="20"/> + <p1 x="400" y="-20"/> + <p2 x="500" y="-20"/> </wire> <wire> - <p1 x="440" y="20"/> - <p2 x="480" y="20"/> + <p1 x="520" y="-20"/> + <p2 x="580" y="-20"/> + </wire> + <wire> + <p1 x="-240" y="-340"/> + <p2 x="100" y="-340"/> </wire> <wire> - <p1 x="540" y="20"/> - <p2 x="560" y="20"/> + <p1 x="160" y="20"/> + <p2 x="220" y="20"/> + </wire> + <wire> + <p1 x="900" y="20"/> + <p2 x="920" y="20"/> </wire> <wire> <p1 x="560" y="20"/> <p2 x="580" y="20"/> </wire> <wire> - <p1 x="80" y="-280"/> - <p2 x="100" y="-280"/> + <p1 x="440" y="20"/> + <p2 x="540" y="20"/> </wire> <wire> - <p1 x="-40" y="-280"/> - <p2 x="20" y="-280"/> + <p1 x="220" y="20"/> + <p2 x="280" y="20"/> </wire> <wire> - <p1 x="560" y="280"/> - <p2 x="620" y="280"/> + <p1 x="760" y="340"/> + <p2 x="780" y="340"/> </wire> <wire> - <p1 x="720" y="280"/> - <p2 x="740" y="280"/> + <p1 x="80" y="-280"/> + <p2 x="100" y="-280"/> + </wire> + <wire> + <p1 x="-40" y="-280"/> + <p2 x="20" y="-280"/> </wire> <wire> <p1 x="40" y="280"/> @@ -1150,94 +1232,94 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="300" y="280"/> </wire> <wire> - <p1 x="-20" y="-220"/> - <p2 x="20" y="-220"/> + <p1 x="900" y="280"/> + <p2 x="920" y="280"/> + </wire> + <wire> + <p1 x="560" y="280"/> + <p2 x="780" y="280"/> </wire> <wire> <p1 x="460" y="-220"/> <p2 x="580" y="-220"/> </wire> <wire> - <p1 x="720" y="220"/> - <p2 x="740" y="220"/> + <p1 x="-240" y="-220"/> + <p2 x="-220" y="-220"/> </wire> <wire> - <p1 x="720" y="160"/> - <p2 x="740" y="160"/> + <p1 x="-120" y="-220"/> + <p2 x="20" y="-220"/> </wire> <wire> - <p1 x="480" y="-100"/> - <p2 x="520" y="-100"/> + <p1 x="900" y="220"/> + <p2 x="920" y="220"/> </wire> <wire> - <p1 x="400" y="-100"/> - <p2 x="440" y="-100"/> + <p1 x="900" y="160"/> + <p2 x="920" y="160"/> </wire> <wire> <p1 x="80" y="-100"/> <p2 x="100" y="-100"/> </wire> <wire> - <p1 x="520" y="-100"/> - <p2 x="640" y="-100"/> + <p1 x="460" y="-100"/> + <p2 x="500" y="-100"/> </wire> <wire> - <p1 x="-320" y="-360"/> - <p2 x="-300" y="-360"/> + <p1 x="400" y="-100"/> + <p2 x="420" y="-100"/> </wire> <wire> - <p1 x="180" y="-40"/> - <p2 x="280" y="-40"/> + <p1 x="900" y="100"/> + <p2 x="920" y="100"/> </wire> <wire> - <p1 x="60" y="-40"/> - <p2 x="140" y="-40"/> + <p1 x="-320" y="-360"/> + <p2 x="-300" y="-360"/> </wire> <wire> - <p1 x="560" y="-40"/> - <p2 x="680" y="-40"/> + <p1 x="60" y="-40"/> + <p2 x="200" y="-40"/> </wire> <wire> - <p1 x="400" y="-40"/> - <p2 x="440" y="-40"/> + <p1 x="220" y="-40"/> + <p2 x="280" y="-40"/> </wire> <wire> - <p1 x="480" y="-40"/> - <p2 x="500" y="-40"/> + <p1 x="680" y="-40"/> + <p2 x="740" y="-40"/> </wire> <wire> - <p1 x="580" y="360"/> - <p2 x="620" y="360"/> + <p1 x="840" y="-40"/> + <p2 x="860" y="-40"/> </wire> <wire> - <p1 x="400" y="360"/> - <p2 x="420" y="360"/> + <p1 x="900" y="-40"/> + <p2 x="920" y="-40"/> </wire> <wire> - <p1 x="420" y="40"/> - <p2 x="480" y="40"/> + <p1 x="500" y="-40"/> + <p2 x="580" y="-40"/> </wire> <wire> - <p1 x="120" y="40"/> - <p2 x="180" y="40"/> + <p1 x="400" y="360"/> + <p2 x="420" y="360"/> </wire> <wire> - <p1 x="540" y="40"/> - <p2 x="580" y="40"/> + <p1 x="740" y="360"/> + <p2 x="780" y="360"/> </wire> <wire> - <p1 x="720" y="40"/> - <p2 x="820" y="40"/> + <p1 x="900" y="40"/> + <p2 x="1000" y="40"/> </wire> <wire> <p1 x="280" y="300"/> <p2 x="300" y="300"/> </wire> <wire> - <p1 x="600" y="300"/> - <p2 x="620" y="300"/> - </wire> - <wire> <p1 x="360" y="300"/> <p2 x="400" y="300"/> </wire> @@ -1246,8 +1328,12 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="540" y="300"/> </wire> <wire> - <p1 x="720" y="300"/> - <p2 x="740" y="300"/> + <p1 x="900" y="300"/> + <p2 x="920" y="300"/> + </wire> + <wire> + <p1 x="760" y="300"/> + <p2 x="780" y="300"/> </wire> <wire> <p1 x="100" y="-240"/> @@ -1262,12 +1348,12 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="200" y="-240"/> </wire> <wire> - <p1 x="200" y="-240"/> - <p2 x="400" y="-240"/> + <p1 x="-280" y="-240"/> + <p2 x="-220" y="-240"/> </wire> <wire> - <p1 x="720" y="240"/> - <p2 x="740" y="240"/> + <p1 x="200" y="-240"/> + <p2 x="400" y="-240"/> </wire> <wire> <p1 x="40" y="240"/> @@ -1278,68 +1364,76 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="500" y="240"/> </wire> <wire> + <p1 x="900" y="240"/> + <p2 x="920" y="240"/> + </wire> + <wire> <p1 x="0" y="-180"/> <p2 x="20" y="-180"/> </wire> <wire> - <p1 x="720" y="180"/> - <p2 x="740" y="180"/> + <p1 x="900" y="180"/> + <p2 x="920" y="180"/> </wire> <wire> - <p1 x="720" y="120"/> - <p2 x="740" y="120"/> + <p1 x="480" y="-120"/> + <p2 x="500" y="-120"/> </wire> <wire> - <p1 x="-20" y="-60"/> - <p2 x="0" y="-60"/> + <p1 x="500" y="-120"/> + <p2 x="920" y="-120"/> </wire> <wire> <p1 x="60" y="-60"/> <p2 x="80" y="-60"/> </wire> <wire> - <p1 x="340" y="-60"/> - <p2 x="420" y="-60"/> + <p1 x="-60" y="-60"/> + <p2 x="-40" y="-60"/> </wire> <wire> - <p1 x="500" y="-60"/> - <p2 x="640" y="-60"/> + <p1 x="480" y="-60"/> + <p2 x="500" y="-60"/> + </wire> + <wire> + <p1 x="380" y="-60"/> + <p2 x="420" y="-60"/> </wire> <wire> <p1 x="420" y="-60"/> - <p2 x="460" y="-60"/> + <p2 x="440" y="-60"/> </wire> <wire> <p1 x="80" y="-60"/> - <p2 x="160" y="-60"/> + <p2 x="220" y="-60"/> </wire> <wire> - <p1 x="720" y="60"/> - <p2 x="740" y="60"/> + <p1 x="100" y="-380"/> + <p2 x="240" y="-380"/> </wire> <wire> - <p1 x="180" y="60"/> - <p2 x="480" y="60"/> + <p1 x="900" y="60"/> + <p2 x="920" y="60"/> </wire> <wire> - <p1 x="60" y="60"/> - <p2 x="80" y="60"/> + <p1 x="540" y="60"/> + <p2 x="560" y="60"/> </wire> <wire> - <p1 x="480" y="-200"/> - <p2 x="480" y="-140"/> + <p1 x="220" y="60"/> + <p2 x="440" y="60"/> </wire> <wire> - <p1 x="160" y="-60"/> - <p2 x="160" y="0"/> + <p1 x="480" y="-200"/> + <p2 x="480" y="-140"/> </wire> <wire> - <p1 x="640" y="-100"/> - <p2 x="640" y="-60"/> + <p1 x="480" y="-140"/> + <p2 x="480" y="-120"/> </wire> <wire> - <p1 x="640" y="-60"/> - <p2 x="640" y="20"/> + <p1 x="160" y="0"/> + <p2 x="160" y="20"/> </wire> <wire> <p1 x="420" y="320"/> @@ -1347,21 +1441,29 @@ program(0x4051, 0x40a2, 0x029b) </wire> <wire> <p1 x="420" y="-60"/> - <p2 x="420" y="40"/> + <p2 x="420" y="0"/> </wire> <wire> - <p1 x="100" y="-280"/> - <p2 x="100" y="-240"/> + <p1 x="100" y="-380"/> + <p2 x="100" y="-340"/> </wire> <wire> - <p1 x="580" y="40"/> - <p2 x="580" y="200"/> + <p1 x="100" y="-340"/> + <p2 x="100" y="-280"/> + </wire> + <wire> + <p1 x="100" y="-280"/> + <p2 x="100" y="-240"/> </wire> <wire> <p1 x="200" y="-280"/> <p2 x="200" y="-240"/> </wire> <wire> + <p1 x="200" y="-40"/> + <p2 x="200" y="80"/> + </wire> + <wire> <p1 x="200" y="-240"/> <p2 x="200" y="-140"/> </wire> @@ -1374,56 +1476,60 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="40" y="300"/> </wire> <wire> - <p1 x="520" y="-140"/> - <p2 x="520" y="-100"/> + <p1 x="520" y="-20"/> + <p2 x="520" y="0"/> </wire> <wire> <p1 x="-300" y="-400"/> <p2 x="-300" y="-360"/> </wire> <wire> - <p1 x="140" y="-40"/> - <p2 x="140" y="20"/> - </wire> - <wire> - <p1 x="80" y="0"/> - <p2 x="80" y="60"/> + <p1 x="-240" y="-340"/> + <p2 x="-240" y="-220"/> </wire> <wire> <p1 x="80" y="-100"/> <p2 x="80" y="-60"/> </wire> <wire> + <p1 x="720" y="0"/> + <p2 x="720" y="80"/> + </wire> + <wire> <p1 x="400" y="-100"/> <p2 x="400" y="-80"/> </wire> <wire> <p1 x="400" y="-80"/> - <p2 x="400" y="-40"/> + <p2 x="400" y="-20"/> + </wire> + <wire> + <p1 x="560" y="20"/> + <p2 x="560" y="60"/> </wire> <wire> - <p1 x="560" y="-40"/> - <p2 x="560" y="20"/> + <p1 x="500" y="240"/> + <p2 x="500" y="280"/> </wire> <wire> - <p1 x="-20" y="-220"/> - <p2 x="-20" y="-140"/> + <p1 x="500" y="-120"/> + <p2 x="500" y="-100"/> </wire> <wire> - <p1 x="-20" y="-140"/> - <p2 x="-20" y="-80"/> + <p1 x="500" y="-40"/> + <p2 x="500" y="-20"/> </wire> <wire> - <p1 x="180" y="-80"/> - <p2 x="180" y="-40"/> + <p1 x="500" y="-100"/> + <p2 x="500" y="-60"/> </wire> <wire> - <p1 x="180" y="40"/> - <p2 x="180" y="60"/> + <p1 x="180" y="-20"/> + <p2 x="180" y="0"/> </wire> <wire> - <p1 x="500" y="240"/> - <p2 x="500" y="280"/> + <p1 x="-280" y="-240"/> + <p2 x="-280" y="-140"/> </wire> <wire> <p1 x="280" y="320"/> @@ -1434,17 +1540,37 @@ program(0x4051, 0x40a2, 0x029b) <p2 x="280" y="280"/> </wire> <wire> - <p1 x="440" y="-40"/> - <p2 x="440" y="20"/> + <p1 x="920" y="-120"/> + <p2 x="920" y="-40"/> + </wire> + <wire> + <p1 x="440" y="20"/> + <p2 x="440" y="60"/> </wire> <wire> - <p1 x="120" y="-20"/> - <p2 x="120" y="40"/> + <p1 x="-60" y="-140"/> + <p2 x="-60" y="-80"/> </wire> <wire> <p1 x="380" y="-200"/> <p2 x="380" y="-180"/> </wire> + <wire> + <p1 x="220" y="-60"/> + <p2 x="220" y="-40"/> + </wire> + <wire> + <p1 x="220" y="20"/> + <p2 x="220" y="60"/> + </wire> + <wire> + <p1 x="860" y="-20"/> + <p2 x="860" y="200"/> + </wire> + <wire> + <p1 x="540" y="0"/> + <p2 x="540" y="20"/> + </wire> </wires> <measurementOrdering/> </circuit>
\ No newline at end of file diff --git a/digital/atk16_alu.dig b/digital/atk16_alu.dig index d456fee..0f40f94 100644 --- a/digital/atk16_alu.dig +++ b/digital/atk16_alu.dig @@ -1,737 +1,526 @@ <?xml version="1.0" encoding="utf-8"?> <circuit> <version>2</version> - <attributes/> + <attributes> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> <visualElements> <visualElement> - <elementName>74382.dig</elementName> - <elementAttributes/> - <pos x="-100" y="160"/> - </visualElement> - <visualElement> - <elementName>74382.dig</elementName> - <elementAttributes/> - <pos x="220" y="160"/> - </visualElement> - <visualElement> - <elementName>74382.dig</elementName> - <elementAttributes/> - <pos x="560" y="160"/> - </visualElement> - <visualElement> - <elementName>74382.dig</elementName> - <elementAttributes/> - <pos x="920" y="160"/> - </visualElement> - <visualElement> - <elementName>VDD</elementName> + <elementName>Add</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="3"/> + <string>Label</string> + <string>PLUS</string> </entry> - </elementAttributes> - <pos x="60" y="160"/> - </visualElement> - <visualElement> - <elementName>VDD</elementName> - <elementAttributes> <entry> - <string>rotation</string> - <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="380" y="160"/> + <pos x="60" y="0"/> </visualElement> <visualElement> - <elementName>VDD</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/> + <rotation rotation="2"/> </entry> - </elementAttributes> - <pos x="720" y="160"/> - </visualElement> - <visualElement> - <elementName>VDD</elementName> - <elementAttributes> <entry> - <string>rotation</string> - <rotation reference="../../../../visualElement[5]/elementAttributes/entry/rotation"/> - </entry> - </elementAttributes> - <pos x="1080" y="160"/> - </visualElement> - <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> + <string>NetName</string> + <string>A</string> </entry> </elementAttributes> - <pos x="-120" y="520"/> + <pos x="40" y="0"/> </visualElement> <visualElement> - <elementName>Ground</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/> + <rotation rotation="2"/> </entry> - </elementAttributes> - <pos x="200" y="520"/> - </visualElement> - <visualElement> - <elementName>Ground</elementName> - <elementAttributes> <entry> - <string>rotation</string> - <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/> + <string>NetName</string> + <string>B</string> </entry> </elementAttributes> - <pos x="540" y="520"/> + <pos x="40" y="20"/> </visualElement> <visualElement> <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation reference="../../../../visualElement[9]/elementAttributes/entry/rotation"/> - </entry> - </elementAttributes> - <pos x="900" y="520"/> - </visualElement> - <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>mirror</string> - <boolean>true</boolean> - </entry> - <entry> - <string>Input Splitting</string> - <string>16</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>1*16</string> - </entry> - </elementAttributes> - <pos x="-440" y="220"/> - </visualElement> - <visualElement> - <elementName>In</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>LHS of binary ALU operation</string> - </entry> - <entry> - <string>Label</string> - <string>A</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="-480" y="220"/> - </visualElement> - <visualElement> - <elementName>In</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>RHS of binary ALU operation</string> - </entry> - <entry> - <string>Label</string> - <string>B</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="-480" y="360"/> + <elementAttributes/> + <pos x="40" y="60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>A0</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="-380" y="220"/> + <pos x="240" y="0"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>A1</string> + <string>FC</string> </entry> </elementAttributes> - <pos x="-380" y="200"/> + <pos x="240" y="20"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A2</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="-380" y="180"/> + <pos x="160" y="0"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A3</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> - </elementAttributes> - <pos x="-380" y="160"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>A4</string> + <string>S0</string> </entry> </elementAttributes> - <pos x="-380" y="140"/> + <pos x="160" y="-20"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>A5</string> - </entry> - </elementAttributes> - <pos x="-380" y="120"/> + <elementName>Driver</elementName> + <elementAttributes/> + <pos x="200" y="40"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A6</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> - </elementAttributes> - <pos x="-380" y="100"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>A7</string> + <string>S0</string> </entry> </elementAttributes> - <pos x="-380" y="80"/> + <pos x="200" y="20"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>atk16_alu_fo.dig</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A8</string> + <string>Label</string> + <string>Overflow flag</string> </entry> </elementAttributes> - <pos x="-380" y="60"/> + <pos x="620" y="0"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A9</string> + <string>rotation</string> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> - </elementAttributes> - <pos x="-380" y="40"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>A10</string> + <string>A</string> </entry> </elementAttributes> - <pos x="-380" y="20"/> + <pos x="200" y="120"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A11</string> + <string>rotation</string> + <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/> </entry> - </elementAttributes> - <pos x="-380" y="0"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>A12</string> + <string>B</string> </entry> </elementAttributes> - <pos x="-380" y="-20"/> + <pos x="200" y="140"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>A13</string> - </entry> - </elementAttributes> - <pos x="-380" y="-40"/> + <elementName>Ground</elementName> + <elementAttributes/> + <pos x="200" y="180"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>A14</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="-380" y="-60"/> + <pos x="400" y="120"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>A15</string> + <string>FC</string> </entry> </elementAttributes> - <pos x="-380" y="-80"/> + <pos x="400" y="140"/> </visualElement> <visualElement> - <elementName>In</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>Description</string> - <string>ALU operation code</string> - </entry> - <entry> - <string>Label</string> - <string>S</string> - </entry> - <entry> <string>Bits</string> - <int>4</int> + <int>16</int> </entry> </elementAttributes> - <pos x="-500" y="600"/> + <pos x="320" y="120"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Input Splitting</string> - <string>4</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> <entry> - <string>Output Splitting</string> - <string>1*4</string> + <string>NetName</string> + <string>S1</string> </entry> </elementAttributes> - <pos x="-420" y="600"/> + <pos x="320" y="100"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>mirror</string> - <boolean>true</boolean> - </entry> - <entry> - <string>Input Splitting</string> - <string>16</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>1*16</string> - </entry> - </elementAttributes> - <pos x="-320" y="360"/> + <elementName>Driver</elementName> + <elementAttributes/> + <pos x="360" y="160"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B0</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> - </elementAttributes> - <pos x="-260" y="360"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>B1</string> + <string>S1</string> </entry> </elementAttributes> - <pos x="-260" y="340"/> + <pos x="360" y="140"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Sub</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B2</string> + <string>Label</string> + <string>MINUS</string> </entry> - </elementAttributes> - <pos x="-260" y="320"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>B3</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="-260" y="300"/> + <pos x="220" y="120"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>And</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B4</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="-260" y="280"/> + <pos x="60" y="240"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Text</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B5</string> + <string>Description</string> + <string>AND</string> </entry> </elementAttributes> - <pos x="-260" y="260"/> + <pos x="60" y="200"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B6</string> + <string>rotation</string> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> - </elementAttributes> - <pos x="-260" y="240"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>B7</string> + <string>A</string> </entry> </elementAttributes> - <pos x="-260" y="220"/> + <pos x="40" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B8</string> + <string>rotation</string> + <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/> </entry> - </elementAttributes> - <pos x="-260" y="200"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>B9</string> + <string>B</string> </entry> </elementAttributes> - <pos x="-260" y="180"/> + <pos x="40" y="260"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B10</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="-260" y="160"/> + <pos x="160" y="260"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B11</string> + <string>rotation</string> + <rotation rotation="1"/> </entry> - </elementAttributes> - <pos x="-260" y="140"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>B12</string> + <string>S2</string> </entry> </elementAttributes> - <pos x="-260" y="120"/> + <pos x="160" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>B13</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="-260" y="100"/> + <pos x="240" y="260"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Or</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B14</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="-260" y="80"/> + <pos x="220" y="360"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Text</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B15</string> + <string>Description</string> + <string>OR</string> </entry> </elementAttributes> - <pos x="-260" y="60"/> + <pos x="220" y="320"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>A0</string> + <string>A</string> </entry> </elementAttributes> - <pos x="-100" y="240"/> + <pos x="200" y="360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>A1</string> - </entry> - </elementAttributes> - <pos x="-100" y="160"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>A2</string> + <string>B</string> </entry> </elementAttributes> - <pos x="40" y="200"/> + <pos x="200" y="380"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A3</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="40" y="280"/> + <pos x="320" y="380"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> <entry> <string>NetName</string> - <string>B0</string> + <string>S3</string> </entry> </elementAttributes> - <pos x="-100" y="280"/> + <pos x="320" y="360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>B1</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="-100" y="200"/> + <pos x="400" y="380"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>XOr</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B2</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="40" y="240"/> + <pos x="60" y="480"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Text</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B3</string> + <string>Description</string> + <string>XOR</string> </entry> </elementAttributes> - <pos x="40" y="320"/> + <pos x="60" y="440"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>Y0</string> + <string>A</string> </entry> </elementAttributes> - <pos x="-100" y="440"/> + <pos x="40" y="480"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>Y1</string> + <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/> </entry> - </elementAttributes> - <pos x="-100" y="480"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>Y2</string> + <string>B</string> </entry> </elementAttributes> - <pos x="40" y="520"/> + <pos x="40" y="500"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>Y3</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="40" y="480"/> + <pos x="160" y="500"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> <entry> <string>NetName</string> - <string>Y4</string> + <string>S4</string> </entry> </elementAttributes> - <pos x="220" y="440"/> + <pos x="160" y="480"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y5</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="220" y="480"/> + <pos x="240" y="500"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>BarrelShifter</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>Y6</string> + <string>Label</string> + <string>LOG SHIFT RIGHT</string> </entry> - </elementAttributes> - <pos x="360" y="520"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>Y7</string> + <string>Bits</string> + <int>16</int> + </entry> + <entry> + <string>direction</string> + <direction>right</direction> </entry> </elementAttributes> - <pos x="360" y="480"/> + <pos x="220" y="620"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>Y8</string> + <string>A</string> </entry> </elementAttributes> - <pos x="560" y="440"/> + <pos x="200" y="620"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -742,222 +531,176 @@ </entry> <entry> <string>NetName</string> - <string>Y9</string> - </entry> - </elementAttributes> - <pos x="560" y="480"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>Y10</string> + <string>B_L5</string> </entry> </elementAttributes> - <pos x="700" y="520"/> + <pos x="200" y="640"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>Y11</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="700" y="480"/> + <pos x="380" y="640"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> <entry> <string>NetName</string> - <string>Y12</string> + <string>S5</string> </entry> </elementAttributes> - <pos x="920" y="440"/> + <pos x="380" y="620"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y13</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="920" y="480"/> + <pos x="420" y="640"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>BarrelShifter</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>Y14</string> + <string>Label</string> + <string>ARI SHIFT RIGHT</string> </entry> - </elementAttributes> - <pos x="1060" y="520"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>Y15</string> + <string>Bits</string> + <int>16</int> </entry> - </elementAttributes> - <pos x="1060" y="480"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>barrelShifterMode</string> + <barrelShifterMode>arithmetic</barrelShifterMode> </entry> <entry> - <string>NetName</string> - <string>A4</string> + <string>direction</string> + <direction>right</direction> </entry> </elementAttributes> - <pos x="220" y="240"/> + <pos x="80" y="760"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>A5</string> - </entry> - </elementAttributes> - <pos x="220" y="160"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>A6</string> + <string>A</string> </entry> </elementAttributes> - <pos x="360" y="200"/> + <pos x="60" y="760"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A7</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="360" y="280"/> + <pos x="240" y="780"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> <entry> <string>NetName</string> - <string>A8</string> + <string>S6</string> </entry> </elementAttributes> - <pos x="560" y="240"/> + <pos x="240" y="760"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>A9</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="560" y="160"/> + <pos x="280" y="780"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>BarrelShifter</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>A10</string> + <string>Label</string> + <string>LOG SHIFT LEFT</string> </entry> - </elementAttributes> - <pos x="700" y="200"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>NetName</string> - <string>A11</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="700" y="280"/> + <pos x="220" y="920"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation reference="../../../../visualElement[2]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> - <string>A12</string> + <string>A</string> </entry> </elementAttributes> - <pos x="920" y="240"/> + <pos x="200" y="920"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>A13</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="920" y="160"/> + <pos x="380" y="940"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> + <string>rotation</string> + <rotation rotation="1"/> + </entry> + <entry> <string>NetName</string> - <string>A14</string> + <string>S7</string> </entry> </elementAttributes> - <pos x="1060" y="200"/> + <pos x="380" y="920"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>A15</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="1060" y="280"/> + <pos x="420" y="940"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -968,10 +711,10 @@ </entry> <entry> <string>NetName</string> - <string>B4</string> + <string>B_L5</string> </entry> </elementAttributes> - <pos x="220" y="280"/> + <pos x="60" y="780"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -982,30 +725,24 @@ </entry> <entry> <string>NetName</string> - <string>B5</string> + <string>B_L5</string> </entry> </elementAttributes> - <pos x="220" y="200"/> + <pos x="200" y="940"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>B6</string> + <string>rotation</string> + <rotation rotation="2"/> </entry> - </elementAttributes> - <pos x="360" y="240"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> <string>NetName</string> - <string>B7</string> + <string>B15</string> </entry> </elementAttributes> - <pos x="360" y="320"/> + <pos x="600" y="60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1016,10 +753,10 @@ </entry> <entry> <string>NetName</string> - <string>B8</string> + <string>Y15</string> </entry> </elementAttributes> - <pos x="560" y="280"/> + <pos x="600" y="80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1030,44 +767,30 @@ </entry> <entry> <string>NetName</string> - <string>B9</string> - </entry> - </elementAttributes> - <pos x="560" y="200"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>B10</string> + <string>A15</string> </entry> </elementAttributes> - <pos x="700" y="240"/> + <pos x="600" y="20"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>B11</string> + <string>FO</string> </entry> </elementAttributes> - <pos x="700" y="320"/> + <pos x="720" y="40"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Text</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>B12</string> + <string>Description</string> + <string>Sign flag</string> </entry> </elementAttributes> - <pos x="920" y="280"/> + <pos x="820" y="-40"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1078,108 +801,54 @@ </entry> <entry> <string>NetName</string> - <string>B13</string> - </entry> - </elementAttributes> - <pos x="920" y="200"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>B14</string> + <string>Y15</string> </entry> </elementAttributes> - <pos x="1060" y="240"/> + <pos x="860" y="0"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>NetName</string> - <string>B15</string> - </entry> - </elementAttributes> - <pos x="1060" y="320"/> - </visualElement> - <visualElement> - <elementName>Out</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>ALU output</string> - </entry> - <entry> - <string>Label</string> - <string>Y</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> + <string>FS</string> </entry> </elementAttributes> - <pos x="960" y="720"/> + <pos x="900" y="0"/> </visualElement> <visualElement> - <elementName>BarrelShifter</elementName> + <elementName>atk16_alu_fz.dig</elementName> <elementAttributes> <entry> <string>Label</string> - <string>SRL</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - <entry> - <string>direction</string> - <direction>right</direction> - </entry> - </elementAttributes> - <pos x="20" y="780"/> - </visualElement> - <visualElement> - <elementName>Demultiplexer</elementName> - <elementAttributes> - <entry> - <string>Selector Bits</string> - <int>3</int> - </entry> - <entry> - <string>Bits</string> - <int>16</int> + <string>Zero flag</string> </entry> </elementAttributes> - <pos x="-220" y="780"/> + <pos x="840" y="80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="3"/> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> - <string>A</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="-460" y="260"/> + <pos x="820" y="80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="3"/> - </entry> - <entry> <string>NetName</string> - <string>B</string> + <string>FZ</string> </entry> </elementAttributes> - <pos x="-460" y="420"/> + <pos x="920" y="80"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1190,441 +859,330 @@ </entry> <entry> <string>NetName</string> - <string>A</string> + <string>S1</string> </entry> </elementAttributes> - <pos x="-220" y="860"/> + <pos x="600" y="0"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Testcase</elementName> <elementAttributes> <entry> - <string>Input Splitting</string> - <string>16</string> + <string>Label</string> + <string>PLUS test</string> </entry> <entry> - <string>Output Splitting</string> - <string>5,</string> + <string>Testdata</string> + <testData> + <dataString>A B S FLAGS Y +0x1 0x2 0 0b0000 0x3 +0xff 0x1 0 0b0000 0x100 +0x1 0xffff 0 0b0101 0x0 +0x4000 0x4000 0 0b1010 0x8000</dataString> + </testData> </entry> </elementAttributes> - <pos x="-200" y="1040"/> + <pos x="700" y="620"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Testcase</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Label</string> + <string>MINUS test</string> </entry> <entry> - <string>NetName</string> - <string>B</string> + <string>Testdata</string> + <testData> + <dataString>A B S FLAGS Y +0x10 0x1 1 0b0000 0xF +0x1 0x0 1 0b0000 0x1 +0x0 0x1 1 0b1001 0xFFFF +0x8000 0x1 1 0b0010 0x7FFF</dataString> + </testData> </entry> </elementAttributes> - <pos x="-220" y="1040"/> + <pos x="700" y="700"/> </visualElement> <visualElement> - <elementName>BarrelShifter</elementName> + <elementName>In</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>SRA</string> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - <entry> - <string>barrelShifterMode</string> - <barrelShifterMode>arithmetic</barrelShifterMode> + <string>Description</string> + <string>LHS of binary ALU operation</string> </entry> <entry> - <string>direction</string> - <direction>right</direction> - </entry> - </elementAttributes> - <pos x="140" y="940"/> - </visualElement> - <visualElement> - <elementName>BarrelShifter</elementName> - <elementAttributes> - <entry> <string>Label</string> - <string>SLL</string> + <string>A</string> </entry> <entry> <string>Bits</string> <int>16</int> </entry> </elementAttributes> - <pos x="40" y="1120"/> + <pos x="-300" y="40"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>In</elementName> <elementAttributes> <entry> - <string>Input Splitting</string> - <string>1*4</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>4</string> + <string>Description</string> + <string>RHS of binary ALU operation</string> </entry> - </elementAttributes> - <pos x="1220" y="400"/> - </visualElement> - <visualElement> - <elementName>Out</elementName> - <elementAttributes> <entry> <string>Label</string> - <string>FLAGS</string> + <string>B</string> </entry> <entry> <string>Bits</string> - <int>4</int> - </entry> - </elementAttributes> - <pos x="1300" y="400"/> - </visualElement> - <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>splitterSpreading</string> - <int>2</int> - </entry> - <entry> - <string>Input Splitting</string> - <string>16</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>8*2</string> - </entry> - </elementAttributes> - <pos x="960" y="820"/> - </visualElement> - <visualElement> - <elementName>BitSelector</elementName> - <elementAttributes> - <entry> - <string>Selector Bits</string> - <int>4</int> + <int>16</int> </entry> </elementAttributes> - <pos x="1000" y="960"/> + <pos x="-300" y="180"/> </visualElement> <visualElement> - <elementName>Const</elementName> + <elementName>In</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="1"/> + <string>Description</string> + <string>ALU operation code</string> </entry> <entry> - <string>Value</string> - <long>15</long> + <string>Label</string> + <string>S</string> </entry> <entry> <string>Bits</string> - <int>4</int> + <int>3</int> </entry> </elementAttributes> - <pos x="1020" y="980"/> + <pos x="-320" y="420"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Text</elementName> <elementAttributes> <entry> - <string>splitterSpreading</string> - <int>2</int> - </entry> - <entry> - <string>Input Splitting</string> - <string>8</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>4*2</string> + <string>Description</string> + <string>S Y +0 A + B +1 A - B +2 A and B +3 A or B +4 A xor B +5 A >> B # logical +6 A >>> B # arithmetic +7 A << B</string> </entry> </elementAttributes> - <pos x="1040" y="820"/> + <pos x="-380" y="640"/> </visualElement> <visualElement> - <elementName>Testcase</elementName> + <elementName>Decoder</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>Add test 1</string> + <string>Selector Bits</string> + <int>3</int> </entry> <entry> - <string>Testdata</string> - <testData> - <dataString>A B S FLAGS Y -0x1 0x2 3 0b0000 0x3 -0xff 0x1 3 0b0000 0x100 -0x1 0xffff 3 0b0101 0x0</dataString> - </testData> + <string>flipSelPos</string> + <boolean>true</boolean> </entry> </elementAttributes> - <pos x="480" y="1260"/> + <pos x="-260" y="420"/> </visualElement> <visualElement> - <elementName>Or</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>8</int> + <string>NetName</string> + <string>S0</string> </entry> </elementAttributes> - <pos x="980" y="820"/> + <pos x="-200" y="420"/> </visualElement> <visualElement> - <elementName>Or</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>4</int> + <string>NetName</string> + <string>S1</string> </entry> </elementAttributes> - <pos x="1060" y="820"/> + <pos x="-200" y="440"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>splitterSpreading</string> - <int>2</int> - </entry> - <entry> - <string>Input Splitting</string> - <string>2</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>1*2</string> + <string>NetName</string> + <string>S2</string> </entry> </elementAttributes> - <pos x="1200" y="820"/> + <pos x="-200" y="460"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>splitterSpreading</string> - <int>2</int> - </entry> - <entry> - <string>Input Splitting</string> - <string>4</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>2*2</string> + <string>NetName</string> + <string>S3</string> </entry> </elementAttributes> - <pos x="1120" y="820"/> + <pos x="-200" y="480"/> </visualElement> <visualElement> - <elementName>Or</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Bits</string> - <int>2</int> + <string>NetName</string> + <string>S4</string> </entry> </elementAttributes> - <pos x="1140" y="820"/> - </visualElement> - <visualElement> - <elementName>NOr</elementName> - <elementAttributes/> - <pos x="1220" y="820"/> + <pos x="-200" y="500"/> </visualElement> <visualElement> - <elementName>Testcase</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>Label</string> - <string>Sub test 1</string> - </entry> - <entry> - <string>Testdata</string> - <testData> - <dataString>A B S FLAGS Y -0x10 0x1 2 0b0001 0xF -0x1 0x0 1 0b1000 0xFFFF</dataString> - </testData> + <string>NetName</string> + <string>S5</string> </entry> </elementAttributes> - <pos x="660" y="1260"/> - </visualElement> - <visualElement> - <elementName>atk16_alu_carryfix.dig</elementName> - <elementAttributes/> - <pos x="-60" y="-40"/> + <pos x="-200" y="520"/> </visualElement> <visualElement> - <elementName>Multiplexer</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>flipSelPos</string> - <boolean>true</boolean> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - <entry> - <string>Selector Bits</string> - <int>2</int> + <string>NetName</string> + <string>S6</string> </entry> </elementAttributes> - <pos x="340" y="800"/> + <pos x="-200" y="540"/> </visualElement> <visualElement> - <elementName>Ground</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>16</int> + <string>NetName</string> + <string>S7</string> </entry> </elementAttributes> - <pos x="320" y="860"/> + <pos x="-200" y="560"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="3"/> - </entry> - <entry> - <string>Input Splitting</string> - <string>1,1</string> + <rotation rotation="1"/> </entry> <entry> - <string>Output Splitting</string> - <string>2</string> + <string>NetName</string> + <string>A</string> </entry> </elementAttributes> - <pos x="360" y="740"/> + <pos x="-280" y="0"/> </visualElement> <visualElement> <elementName>Splitter</elementName> <elementAttributes> <entry> <string>Input Splitting</string> - <string>1*16</string> + <string>16</string> </entry> <entry> <string>Output Splitting</string> - <string>16</string> + <string>15,1</string> </entry> </elementAttributes> - <pos x="1260" y="0"/> + <pos x="-240" y="40"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2"/> + <rotation rotation="1"/> </entry> <entry> <string>NetName</string> - <string>Y0</string> + <string>B</string> </entry> </elementAttributes> - <pos x="1240" y="0"/> + <pos x="-280" y="140"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Input Splitting</string> + <string>16</string> </entry> <entry> - <string>NetName</string> - <string>Y1</string> + <string>Output Splitting</string> + <string>15,1</string> </entry> </elementAttributes> - <pos x="1240" y="20"/> + <pos x="-240" y="180"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Input Splitting</string> + <string>16</string> </entry> <entry> - <string>NetName</string> - <string>Y2</string> + <string>Output Splitting</string> + <string>5</string> </entry> </elementAttributes> - <pos x="1240" y="40"/> + <pos x="-260" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y3</string> + <string>B_L5</string> </entry> </elementAttributes> - <pos x="1240" y="60"/> + <pos x="-200" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y4</string> + <string>A15</string> </entry> </elementAttributes> - <pos x="1240" y="80"/> + <pos x="-200" y="60"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y5</string> + <string>B15</string> </entry> </elementAttributes> - <pos x="1240" y="100"/> + <pos x="-200" y="200"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Input Splitting</string> + <string>16</string> </entry> <entry> - <string>NetName</string> - <string>Y6</string> + <string>Output Splitting</string> + <string>15,1</string> </entry> </elementAttributes> - <pos x="1240" y="120"/> + <pos x="700" y="220"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1635,80 +1193,66 @@ </entry> <entry> <string>NetName</string> - <string>Y7</string> + <string>Y</string> </entry> </elementAttributes> - <pos x="1240" y="140"/> + <pos x="660" y="220"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> <string>NetName</string> - <string>Y8</string> + <string>Y15</string> </entry> </elementAttributes> - <pos x="1240" y="160"/> + <pos x="760" y="240"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>Y9</string> + <string>Description</string> + <string>Output</string> </entry> - </elementAttributes> - <pos x="1240" y="180"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Label</string> + <string>Y</string> </entry> <entry> - <string>NetName</string> - <string>Y10</string> + <string>Bits</string> + <int>16</int> </entry> </elementAttributes> - <pos x="1240" y="200"/> + <pos x="700" y="180"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Input Splitting</string> + <string>1*4</string> </entry> <entry> - <string>NetName</string> - <string>Y11</string> + <string>Output Splitting</string> + <string>4</string> </entry> </elementAttributes> - <pos x="1240" y="220"/> + <pos x="720" y="360"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> - <string>rotation</string> - <rotation rotation="2"/> + <string>Label</string> + <string>FLAGS</string> </entry> <entry> - <string>NetName</string> - <string>Y12</string> + <string>Bits</string> + <int>4</int> </entry> </elementAttributes> - <pos x="1240" y="240"/> + <pos x="800" y="360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1719,10 +1263,10 @@ </entry> <entry> <string>NetName</string> - <string>Y13</string> + <string>FO</string> </entry> </elementAttributes> - <pos x="1240" y="260"/> + <pos x="700" y="380"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1733,10 +1277,10 @@ </entry> <entry> <string>NetName</string> - <string>Y14</string> + <string>FZ</string> </entry> </elementAttributes> - <pos x="1240" y="280"/> + <pos x="700" y="400"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1747,44 +1291,10 @@ </entry> <entry> <string>NetName</string> - <string>Y15</string> + <string>FS</string> </entry> </elementAttributes> - <pos x="1240" y="300"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>ALU1</string> - </entry> - </elementAttributes> - <pos x="1300" y="0"/> - </visualElement> - <visualElement> - <elementName>Multiplexer</elementName> - <elementAttributes> - <entry> - <string>flipSelPos</string> - <boolean>true</boolean> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="740" y="800"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>NetName</string> - <string>ALU2</string> - </entry> - </elementAttributes> - <pos x="400" y="840"/> + <pos x="700" y="420"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1795,800 +1305,390 @@ </entry> <entry> <string>NetName</string> - <string>ALU1</string> + <string>FC</string> </entry> </elementAttributes> - <pos x="720" y="800"/> + <pos x="660" y="360"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>PullDown</elementName> <elementAttributes> <entry> <string>rotation</string> <rotation rotation="2"/> </entry> - <entry> - <string>NetName</string> - <string>ALU2</string> - </entry> - </elementAttributes> - <pos x="720" y="840"/> - </visualElement> - <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="3"/> - </entry> - <entry> - <string>Input Splitting</string> - <string>1,1,1</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>3</string> - </entry> </elementAttributes> - <pos x="-320" y="940"/> + <pos x="700" y="340"/> </visualElement> </visualElements> <wires> <wire> - <p1 x="-420" y="0"/> - <p2 x="-380" y="0"/> - </wire> - <wire> - <p1 x="-200" y="0"/> - <p2 x="-60" y="0"/> - </wire> - <wire> - <p1 x="1240" y="0"/> - <p2 x="1260" y="0"/> - </wire> - <wire> - <p1 x="1280" y="0"/> - <p2 x="1300" y="0"/> + <p1 x="40" y="0"/> + <p2 x="60" y="0"/> </wire> <wire> - <p1 x="-400" y="640"/> - <p2 x="-360" y="640"/> + <p1 x="120" y="0"/> + <p2 x="140" y="0"/> </wire> <wire> - <p1 x="500" y="640"/> - <p2 x="860" y="640"/> + <p1 x="180" y="0"/> + <p2 x="240" y="0"/> </wire> <wire> - <p1 x="-360" y="640"/> - <p2 x="-160" y="640"/> + <p1 x="860" y="0"/> + <p2 x="900" y="0"/> </wire> <wire> - <p1 x="-160" y="640"/> - <p2 x="160" y="640"/> + <p1 x="600" y="0"/> + <p2 x="620" y="0"/> </wire> <wire> - <p1 x="160" y="640"/> - <p2 x="500" y="640"/> + <p1 x="400" y="640"/> + <p2 x="420" y="640"/> </wire> <wire> - <p1 x="-200" y="320"/> - <p2 x="-100" y="320"/> - </wire> - <wire> - <p1 x="120" y="320"/> - <p2 x="220" y="320"/> - </wire> - <wire> - <p1 x="460" y="320"/> - <p2 x="560" y="320"/> - </wire> - <wire> - <p1 x="820" y="320"/> - <p2 x="920" y="320"/> - </wire> - <wire> - <p1 x="-300" y="320"/> - <p2 x="-260" y="320"/> - </wire> - <wire> - <p1 x="-320" y="960"/> - <p2 x="-200" y="960"/> - </wire> - <wire> - <p1 x="940" y="960"/> - <p2 x="1000" y="960"/> - </wire> - <wire> - <p1 x="1040" y="960"/> - <p2 x="1400" y="960"/> + <p1 x="280" y="640"/> + <p2 x="360" y="640"/> </wire> <wire> <p1 x="200" y="960"/> <p2 x="220" y="960"/> </wire> <wire> - <p1 x="-300" y="260"/> - <p2 x="-260" y="260"/> - </wire> - <wire> - <p1 x="1240" y="260"/> - <p2 x="1260" y="260"/> - </wire> - <wire> - <p1 x="-120" y="520"/> - <p2 x="-100" y="520"/> - </wire> - <wire> - <p1 x="200" y="520"/> - <p2 x="220" y="520"/> - </wire> - <wire> - <p1 x="540" y="520"/> - <p2 x="560" y="520"/> - </wire> - <wire> - <p1 x="900" y="520"/> - <p2 x="920" y="520"/> - </wire> - <wire> - <p1 x="1140" y="520"/> - <p2 x="1380" y="520"/> - </wire> - <wire> - <p1 x="-60" y="1160"/> - <p2 x="40" y="1160"/> - </wire> - <wire> - <p1 x="720" y="840"/> - <p2 x="740" y="840"/> - </wire> - <wire> - <p1 x="1300" y="840"/> - <p2 x="1380" y="840"/> - </wire> - <wire> - <p1 x="240" y="840"/> - <p2 x="340" y="840"/> - </wire> - <wire> - <p1 x="380" y="840"/> - <p2 x="400" y="840"/> - </wire> - <wire> - <p1 x="-420" y="200"/> - <p2 x="-380" y="200"/> - </wire> - <wire> - <p1 x="-300" y="200"/> - <p2 x="-260" y="200"/> - </wire> - <wire> - <p1 x="1240" y="200"/> - <p2 x="1260" y="200"/> - </wire> - <wire> - <p1 x="-420" y="140"/> - <p2 x="-380" y="140"/> + <p1 x="120" y="260"/> + <p2 x="140" y="260"/> </wire> <wire> - <p1 x="-300" y="140"/> - <p2 x="-260" y="140"/> + <p1 x="180" y="260"/> + <p2 x="240" y="260"/> </wire> <wire> - <p1 x="1240" y="140"/> - <p2 x="1260" y="140"/> + <p1 x="40" y="520"/> + <p2 x="60" y="520"/> </wire> <wire> - <p1 x="-180" y="780"/> - <p2 x="20" y="780"/> + <p1 x="-220" y="520"/> + <p2 x="-200" y="520"/> </wire> <wire> - <p1 x="1200" y="460"/> - <p2 x="1220" y="460"/> + <p1 x="-220" y="200"/> + <p2 x="-200" y="200"/> </wire> <wire> - <p1 x="-420" y="-80"/> - <p2 x="-380" y="-80"/> + <p1 x="200" y="140"/> + <p2 x="220" y="140"/> </wire> <wire> - <p1 x="40" y="400"/> - <p2 x="100" y="400"/> + <p1 x="280" y="140"/> + <p2 x="300" y="140"/> </wire> <wire> - <p1 x="360" y="400"/> - <p2 x="440" y="400"/> + <p1 x="260" y="780"/> + <p2 x="280" y="780"/> </wire> <wire> - <p1 x="700" y="400"/> - <p2 x="800" y="400"/> + <p1 x="140" y="780"/> + <p2 x="220" y="780"/> </wire> <wire> - <p1 x="-160" y="400"/> - <p2 x="-100" y="400"/> + <p1 x="-220" y="460"/> + <p2 x="-200" y="460"/> </wire> <wire> - <p1 x="160" y="400"/> + <p1 x="200" y="400"/> <p2 x="220" y="400"/> </wire> <wire> - <p1 x="500" y="400"/> - <p2 x="560" y="400"/> - </wire> - <wire> - <p1 x="860" y="400"/> - <p2 x="920" y="400"/> - </wire> - <wire> - <p1 x="1060" y="400"/> - <p2 x="1220" y="400"/> - </wire> - <wire> - <p1 x="1240" y="400"/> - <p2 x="1300" y="400"/> - </wire> - <wire> - <p1 x="-220" y="1040"/> - <p2 x="-200" y="1040"/> - </wire> - <wire> - <p1 x="-180" y="1040"/> - <p2 x="-60" y="1040"/> - </wire> - <wire> - <p1 x="940" y="720"/> - <p2 x="960" y="720"/> - </wire> - <wire> - <p1 x="-420" y="80"/> - <p2 x="-380" y="80"/> - </wire> - <wire> - <p1 x="-300" y="80"/> - <p2 x="-260" y="80"/> - </wire> - <wire> - <p1 x="1240" y="80"/> - <p2 x="1260" y="80"/> - </wire> - <wire> - <p1 x="-420" y="-20"/> - <p2 x="-380" y="-20"/> - </wire> - <wire> - <p1 x="0" y="-20"/> - <p2 x="80" y="-20"/> - </wire> - <wire> - <p1 x="-180" y="-20"/> - <p2 x="-60" y="-20"/> - </wire> - <wire> - <p1 x="-420" y="20"/> - <p2 x="-380" y="20"/> - </wire> - <wire> - <p1 x="1240" y="20"/> - <p2 x="1260" y="20"/> - </wire> - <wire> - <p1 x="-300" y="340"/> - <p2 x="-260" y="340"/> - </wire> - <wire> - <p1 x="-60" y="980"/> - <p2 x="140" y="980"/> - </wire> - <wire> - <p1 x="-400" y="660"/> - <p2 x="760" y="660"/> - </wire> - <wire> - <p1 x="-300" y="280"/> - <p2 x="-260" y="280"/> - </wire> - <wire> - <p1 x="1240" y="280"/> - <p2 x="1260" y="280"/> - </wire> - <wire> - <p1 x="-500" y="600"/> - <p2 x="-420" y="600"/> - </wire> - <wire> - <p1 x="-400" y="600"/> - <p2 x="-320" y="600"/> - </wire> - <wire> - <p1 x="460" y="600"/> - <p2 x="820" y="600"/> - </wire> - <wire> - <p1 x="-200" y="600"/> - <p2 x="120" y="600"/> - </wire> - <wire> - <p1 x="120" y="600"/> - <p2 x="360" y="600"/> - </wire> - <wire> - <p1 x="-320" y="600"/> - <p2 x="-200" y="600"/> - </wire> - <wire> - <p1 x="360" y="600"/> - <p2 x="460" y="600"/> - </wire> - <wire> - <p1 x="-420" y="220"/> - <p2 x="-380" y="220"/> - </wire> - <wire> - <p1 x="-480" y="220"/> - <p2 x="-460" y="220"/> - </wire> - <wire> - <p1 x="-300" y="220"/> - <p2 x="-260" y="220"/> - </wire> - <wire> - <p1 x="1240" y="220"/> - <p2 x="1260" y="220"/> - </wire> - <wire> - <p1 x="-460" y="220"/> - <p2 x="-440" y="220"/> + <p1 x="700" y="400"/> + <p2 x="720" y="400"/> </wire> <wire> - <p1 x="320" y="860"/> - <p2 x="340" y="860"/> + <p1 x="600" y="80"/> + <p2 x="620" y="80"/> </wire> <wire> - <p1 x="40" y="160"/> - <p2 x="60" y="160"/> + <p1 x="820" y="80"/> + <p2 x="840" y="80"/> </wire> <wire> - <p1 x="360" y="160"/> - <p2 x="380" y="160"/> + <p1 x="900" y="80"/> + <p2 x="920" y="80"/> </wire> <wire> - <p1 x="700" y="160"/> - <p2 x="720" y="160"/> + <p1 x="40" y="20"/> + <p2 x="60" y="20"/> </wire> <wire> - <p1 x="1060" y="160"/> - <p2 x="1080" y="160"/> + <p1 x="120" y="20"/> + <p2 x="140" y="20"/> </wire> <wire> - <p1 x="-420" y="160"/> - <p2 x="-380" y="160"/> + <p1 x="600" y="20"/> + <p2 x="620" y="20"/> </wire> <wire> - <p1 x="-300" y="160"/> - <p2 x="-260" y="160"/> + <p1 x="200" y="660"/> + <p2 x="220" y="660"/> </wire> <wire> - <p1 x="1240" y="160"/> - <p2 x="1260" y="160"/> + <p1 x="40" y="280"/> + <p2 x="60" y="280"/> </wire> <wire> - <p1 x="-180" y="800"/> - <p2 x="-80" y="800"/> + <p1 x="200" y="920"/> + <p2 x="220" y="920"/> </wire> <wire> - <p1 x="80" y="800"/> - <p2 x="340" y="800"/> + <p1 x="-220" y="540"/> + <p2 x="-200" y="540"/> </wire> <wire> - <p1 x="720" y="800"/> - <p2 x="740" y="800"/> + <p1 x="660" y="220"/> + <p2 x="680" y="220"/> </wire> <wire> - <p1 x="-100" y="1120"/> - <p2 x="40" y="1120"/> + <p1 x="680" y="220"/> + <p2 x="700" y="220"/> </wire> <wire> - <p1 x="1100" y="420"/> - <p2 x="1220" y="420"/> + <p1 x="380" y="160"/> + <p2 x="400" y="160"/> </wire> <wire> - <p1 x="100" y="100"/> - <p2 x="420" y="100"/> + <p1 x="300" y="160"/> + <p2 x="340" y="160"/> </wire> <wire> - <p1 x="440" y="100"/> - <p2 x="780" y="100"/> + <p1 x="200" y="160"/> + <p2 x="220" y="160"/> </wire> <wire> - <p1 x="800" y="100"/> - <p2 x="1140" y="100"/> + <p1 x="40" y="480"/> + <p2 x="60" y="480"/> </wire> <wire> - <p1 x="-420" y="100"/> - <p2 x="-380" y="100"/> + <p1 x="-220" y="480"/> + <p2 x="-200" y="480"/> </wire> <wire> - <p1 x="-300" y="100"/> - <p2 x="-260" y="100"/> + <p1 x="60" y="800"/> + <p2 x="80" y="800"/> </wire> <wire> - <p1 x="1240" y="100"/> - <p2 x="1260" y="100"/> + <p1 x="-320" y="420"/> + <p2 x="-240" y="420"/> </wire> <wire> - <p1 x="-420" y="-40"/> - <p2 x="-380" y="-40"/> + <p1 x="-220" y="420"/> + <p2 x="-200" y="420"/> </wire> <wire> - <p1 x="-160" y="-40"/> - <p2 x="-60" y="-40"/> + <p1 x="700" y="420"/> + <p2 x="720" y="420"/> </wire> <wire> - <p1 x="-420" y="40"/> - <p2 x="-380" y="40"/> + <p1 x="40" y="40"/> + <p2 x="60" y="40"/> </wire> <wire> - <p1 x="1240" y="40"/> - <p2 x="1260" y="40"/> + <p1 x="220" y="40"/> + <p2 x="240" y="40"/> </wire> <wire> - <p1 x="360" y="360"/> - <p2 x="420" y="360"/> + <p1 x="140" y="40"/> + <p2 x="180" y="40"/> </wire> <wire> - <p1 x="700" y="360"/> - <p2 x="780" y="360"/> + <p1 x="700" y="40"/> + <p2 x="720" y="40"/> </wire> <wire> - <p1 x="1060" y="360"/> - <p2 x="1140" y="360"/> + <p1 x="-300" y="40"/> + <p2 x="-280" y="40"/> </wire> <wire> - <p1 x="-180" y="360"/> - <p2 x="-100" y="360"/> + <p1 x="-280" y="40"/> + <p2 x="-240" y="40"/> </wire> <wire> - <p1 x="140" y="360"/> + <p1 x="200" y="360"/> <p2 x="220" y="360"/> </wire> <wire> - <p1 x="480" y="360"/> - <p2 x="560" y="360"/> - </wire> - <wire> - <p1 x="840" y="360"/> - <p2 x="920" y="360"/> - </wire> - <wire> - <p1 x="-300" y="360"/> - <p2 x="-260" y="360"/> + <p1 x="740" y="360"/> + <p2 x="800" y="360"/> </wire> <wire> - <p1 x="-480" y="360"/> - <p2 x="-460" y="360"/> + <p1 x="660" y="360"/> + <p2 x="700" y="360"/> </wire> <wire> - <p1 x="40" y="360"/> - <p2 x="80" y="360"/> - </wire> - <wire> - <p1 x="-460" y="360"/> - <p2 x="-320" y="360"/> - </wire> - <wire> - <p1 x="-300" y="300"/> - <p2 x="-260" y="300"/> - </wire> - <wire> - <p1 x="1240" y="300"/> - <p2 x="1260" y="300"/> - </wire> - <wire> - <p1 x="-80" y="940"/> - <p2 x="140" y="940"/> - </wire> - <wire> - <p1 x="-400" y="620"/> - <p2 x="-340" y="620"/> + <p1 x="700" y="360"/> + <p2 x="720" y="360"/> </wire> <wire> - <p1 x="480" y="620"/> - <p2 x="840" y="620"/> + <p1 x="200" y="620"/> + <p2 x="220" y="620"/> </wire> <wire> - <p1 x="340" y="620"/> - <p2 x="480" y="620"/> + <p1 x="400" y="940"/> + <p2 x="420" y="940"/> </wire> <wire> - <p1 x="-340" y="620"/> - <p2 x="-180" y="620"/> + <p1 x="280" y="940"/> + <p2 x="360" y="940"/> </wire> <wire> - <p1 x="-180" y="620"/> - <p2 x="140" y="620"/> + <p1 x="40" y="240"/> + <p2 x="60" y="240"/> </wire> <wire> - <p1 x="140" y="620"/> - <p2 x="340" y="620"/> + <p1 x="-240" y="240"/> + <p2 x="-200" y="240"/> </wire> <wire> - <p1 x="-300" y="240"/> + <p1 x="-280" y="240"/> <p2 x="-260" y="240"/> </wire> <wire> - <p1 x="1240" y="240"/> - <p2 x="1260" y="240"/> - </wire> - <wire> - <p1 x="-60" y="820"/> - <p2 x="20" y="820"/> - </wire> - <wire> - <p1 x="-180" y="820"/> - <p2 x="-100" y="820"/> + <p1 x="720" y="240"/> + <p2 x="760" y="240"/> </wire> <wire> - <p1 x="220" y="820"/> - <p2 x="340" y="820"/> + <p1 x="-220" y="560"/> + <p2 x="-200" y="560"/> </wire> <wire> - <p1 x="780" y="820"/> - <p2 x="940" y="820"/> + <p1 x="120" y="500"/> + <p2 x="140" y="500"/> </wire> <wire> - <p1 x="940" y="820"/> - <p2 x="960" y="820"/> + <p1 x="180" y="500"/> + <p2 x="240" y="500"/> </wire> <wire> - <p1 x="-420" y="180"/> - <p2 x="-380" y="180"/> + <p1 x="-220" y="500"/> + <p2 x="-200" y="500"/> </wire> <wire> <p1 x="-300" y="180"/> - <p2 x="-260" y="180"/> - </wire> - <wire> - <p1 x="1240" y="180"/> - <p2 x="1260" y="180"/> - </wire> - <wire> - <p1 x="1200" y="500"/> - <p2 x="1400" y="500"/> - </wire> - <wire> - <p1 x="100" y="1140"/> - <p2 x="240" y="1140"/> - </wire> - <wire> - <p1 x="1060" y="440"/> - <p2 x="1100" y="440"/> - </wire> - <wire> - <p1 x="1140" y="440"/> - <p2 x="1220" y="440"/> - </wire> - <wire> - <p1 x="-420" y="120"/> - <p2 x="-380" y="120"/> - </wire> - <wire> - <p1 x="-300" y="120"/> - <p2 x="-260" y="120"/> - </wire> - <wire> - <p1 x="1240" y="120"/> - <p2 x="1260" y="120"/> - </wire> - <wire> - <p1 x="-420" y="-60"/> - <p2 x="-380" y="-60"/> - </wire> - <wire> - <p1 x="-420" y="60"/> - <p2 x="-380" y="60"/> - </wire> - <wire> - <p1 x="-300" y="60"/> - <p2 x="-260" y="60"/> - </wire> - <wire> - <p1 x="1240" y="60"/> - <p2 x="1260" y="60"/> - </wire> - <wire> - <p1 x="-200" y="0"/> - <p2 x="-200" y="320"/> - </wire> - <wire> - <p1 x="-200" y="940"/> - <p2 x="-200" y="960"/> - </wire> - <wire> - <p1 x="-200" y="320"/> - <p2 x="-200" y="600"/> - </wire> - <wire> - <p1 x="840" y="360"/> - <p2 x="840" y="620"/> - </wire> - <wire> - <p1 x="-460" y="220"/> - <p2 x="-460" y="260"/> - </wire> - <wire> - <p1 x="-460" y="360"/> - <p2 x="-460" y="420"/> - </wire> - <wire> - <p1 x="140" y="360"/> - <p2 x="140" y="620"/> - </wire> - <wire> - <p1 x="780" y="100"/> - <p2 x="780" y="360"/> - </wire> - <wire> - <p1 x="460" y="320"/> - <p2 x="460" y="600"/> - </wire> - <wire> - <p1 x="1100" y="420"/> - <p2 x="1100" y="440"/> - </wire> - <wire> - <p1 x="-80" y="800"/> - <p2 x="-80" y="940"/> - </wire> - <wire> - <p1 x="1040" y="820"/> - <p2 x="1040" y="840"/> - </wire> - <wire> - <p1 x="80" y="-20"/> - <p2 x="80" y="360"/> - </wire> - <wire> - <p1 x="-340" y="620"/> - <p2 x="-340" y="940"/> - </wire> - <wire> - <p1 x="340" y="620"/> - <p2 x="340" y="740"/> - </wire> - <wire> - <p1 x="860" y="400"/> - <p2 x="860" y="640"/> - </wire> - <wire> - <p1 x="220" y="820"/> - <p2 x="220" y="960"/> - </wire> - <wire> - <p1 x="-160" y="-40"/> - <p2 x="-160" y="400"/> - </wire> - <wire> - <p1 x="-160" y="400"/> - <p2 x="-160" y="640"/> - </wire> - <wire> - <p1 x="160" y="400"/> - <p2 x="160" y="640"/> + <p2 x="-280" y="180"/> </wire> <wire> - <p1 x="800" y="100"/> - <p2 x="800" y="400"/> + <p1 x="680" y="180"/> + <p2 x="700" y="180"/> </wire> <wire> - <p1 x="480" y="360"/> - <p2 x="480" y="620"/> + <p1 x="-280" y="180"/> + <p2 x="-240" y="180"/> </wire> <wire> - <p1 x="1120" y="820"/> - <p2 x="1120" y="840"/> + <p1 x="340" y="120"/> + <p2 x="400" y="120"/> </wire> <wire> - <p1 x="-100" y="820"/> - <p2 x="-100" y="1120"/> + <p1 x="280" y="120"/> + <p2 x="300" y="120"/> </wire> <wire> - <p1 x="100" y="100"/> - <p2 x="100" y="400"/> + <p1 x="200" y="120"/> + <p2 x="220" y="120"/> </wire> <wire> - <p1 x="420" y="100"/> - <p2 x="420" y="360"/> + <p1 x="60" y="760"/> + <p2 x="80" y="760"/> </wire> <wire> - <p1 x="1380" y="520"/> - <p2 x="1380" y="840"/> + <p1 x="-220" y="440"/> + <p2 x="-200" y="440"/> </wire> <wire> - <p1 x="-360" y="640"/> - <p2 x="-360" y="940"/> + <p1 x="280" y="380"/> + <p2 x="300" y="380"/> </wire> <wire> - <p1 x="360" y="760"/> - <p2 x="360" y="800"/> + <p1 x="340" y="380"/> + <p2 x="400" y="380"/> </wire> <wire> - <p1 x="360" y="600"/> - <p2 x="360" y="740"/> + <p1 x="700" y="380"/> + <p2 x="720" y="380"/> </wire> <wire> - <p1 x="940" y="720"/> - <p2 x="940" y="820"/> + <p1 x="600" y="60"/> + <p2 x="620" y="60"/> </wire> <wire> - <p1 x="940" y="820"/> - <p2 x="940" y="960"/> + <p1 x="-220" y="60"/> + <p2 x="-200" y="60"/> </wire> <wire> - <p1 x="1200" y="820"/> - <p2 x="1200" y="840"/> + <p1 x="240" y="20"/> + <p2 x="240" y="40"/> </wire> <wire> - <p1 x="1200" y="460"/> - <p2 x="1200" y="500"/> + <p1 x="400" y="140"/> + <p2 x="400" y="160"/> </wire> <wire> - <p1 x="240" y="840"/> - <p2 x="240" y="1140"/> + <p1 x="-280" y="0"/> + <p2 x="-280" y="40"/> </wire> <wire> - <p1 x="-180" y="-20"/> - <p2 x="-180" y="360"/> + <p1 x="-280" y="140"/> + <p2 x="-280" y="180"/> </wire> <wire> - <p1 x="-180" y="360"/> - <p2 x="-180" y="620"/> + <p1 x="-280" y="180"/> + <p2 x="-280" y="240"/> </wire> <wire> - <p1 x="1140" y="100"/> - <p2 x="1140" y="360"/> + <p1 x="40" y="40"/> + <p2 x="40" y="60"/> </wire> <wire> - <p1 x="1140" y="440"/> - <p2 x="1140" y="520"/> + <p1 x="40" y="260"/> + <p2 x="40" y="280"/> </wire> <wire> - <p1 x="500" y="400"/> - <p2 x="500" y="640"/> + <p1 x="40" y="500"/> + <p2 x="40" y="520"/> </wire> <wire> - <p1 x="820" y="320"/> - <p2 x="820" y="600"/> + <p1 x="200" y="160"/> + <p2 x="200" y="180"/> </wire> <wire> - <p1 x="440" y="100"/> - <p2 x="440" y="400"/> + <p1 x="200" y="380"/> + <p2 x="200" y="400"/> </wire> <wire> - <p1 x="120" y="320"/> - <p2 x="120" y="600"/> + <p1 x="200" y="640"/> + <p2 x="200" y="660"/> </wire> <wire> - <p1 x="1400" y="500"/> - <p2 x="1400" y="960"/> + <p1 x="200" y="940"/> + <p2 x="200" y="960"/> </wire> <wire> - <p1 x="760" y="660"/> - <p2 x="760" y="800"/> + <p1 x="680" y="180"/> + <p2 x="680" y="220"/> </wire> <wire> - <p1 x="-60" y="820"/> - <p2 x="-60" y="980"/> + <p1 x="140" y="20"/> + <p2 x="140" y="40"/> </wire> <wire> - <p1 x="-60" y="1040"/> - <p2 x="-60" y="1160"/> + <p1 x="300" y="140"/> + <p2 x="300" y="160"/> </wire> <wire> - <p1 x="-60" y="980"/> - <p2 x="-60" y="1040"/> + <p1 x="60" y="780"/> + <p2 x="60" y="800"/> </wire> <wire> - <p1 x="-320" y="600"/> - <p2 x="-320" y="940"/> + <p1 x="700" y="340"/> + <p2 x="700" y="360"/> </wire> </wires> <measurementOrdering/> diff --git a/digital/atk16_alu_fo.dig b/digital/atk16_alu_fo.dig new file mode 100644 index 0000000..ecf0021 --- /dev/null +++ b/digital/atk16_alu_fo.dig @@ -0,0 +1,494 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>2</version> + <attributes> + <entry> + <string>Label</string> + <string>alu_fo</string> + </entry> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>4</int> + </entry> + </attributes> + <visualElements> + <visualElement> + <elementName>Testcase</elementName> + <elementAttributes> + <entry> + <string>Testdata</string> + <testData> + <dataString>A15 B15 Y15 ~A/S FO +0 0 0 0 0 +0 0 1 0 1 +0 1 0 0 0 +0 1 1 0 0 +1 0 0 0 0 +1 0 1 0 0 +1 1 0 0 1 +1 1 1 0 0 +0 0 0 1 0 +0 0 1 1 0 +0 1 0 1 0 +0 1 1 1 1 +1 0 0 1 1 +1 0 1 1 0 +1 1 0 1 0 +1 1 1 1 0 +</dataString> + </testData> + </entry> + </elementAttributes> + <pos x="400" y="740"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>FO</string> + </entry> + <entry> + <string>Inputs</string> + <int>1</int> + </entry> + </elementAttributes> + <pos x="900" y="440"/> + </visualElement> + <visualElement> + <elementName>Or</elementName> + <elementAttributes> + <entry> + <string>wideShape</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="800" y="400"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes> + <entry> + <string>wideShape</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="660" y="220"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes> + <entry> + <string>wideShape</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="660" y="340"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes> + <entry> + <string>wideShape</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="660" y="460"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes> + <entry> + <string>wideShape</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="660" y="580"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + <entry> + <string>Label</string> + <string>~A/S</string> + </entry> + </elementAttributes> + <pos x="420" y="120"/> + </visualElement> + <visualElement> + <elementName>Not</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + </elementAttributes> + <pos x="440" y="160"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + <entry> + <string>Label</string> + <string>A15</string> + </entry> + </elementAttributes> + <pos x="480" y="120"/> + </visualElement> + <visualElement> + <elementName>Not</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + </elementAttributes> + <pos x="500" y="160"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + <entry> + <string>Label</string> + <string>B15</string> + </entry> + </elementAttributes> + <pos x="540" y="120"/> + </visualElement> + <visualElement> + <elementName>Not</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + </elementAttributes> + <pos x="560" y="160"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + <entry> + <string>Label</string> + <string>Y15</string> + </entry> + </elementAttributes> + <pos x="600" y="120"/> + </visualElement> + <visualElement> + <elementName>Not</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="3"/> + </entry> + </elementAttributes> + <pos x="620" y="160"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="540" y="480"/> + <p2 x="660" y="480"/> + </wire> + <wire> + <p1 x="780" y="480"/> + <p2 x="800" y="480"/> + </wire> + <wire> + <p1 x="620" y="640"/> + <p2 x="660" y="640"/> + </wire> + <wire> + <p1 x="740" y="260"/> + <p2 x="780" y="260"/> + </wire> + <wire> + <p1 x="440" y="420"/> + <p2 x="660" y="420"/> + </wire> + <wire> + <p1 x="760" y="420"/> + <p2 x="800" y="420"/> + </wire> + <wire> + <p1 x="480" y="580"/> + <p2 x="660" y="580"/> + </wire> + <wire> + <p1 x="540" y="360"/> + <p2 x="660" y="360"/> + </wire> + <wire> + <p1 x="600" y="520"/> + <p2 x="660" y="520"/> + </wire> + <wire> + <p1 x="420" y="140"/> + <p2 x="440" y="140"/> + </wire> + <wire> + <p1 x="480" y="140"/> + <p2 x="500" y="140"/> + </wire> + <wire> + <p1 x="540" y="140"/> + <p2 x="560" y="140"/> + </wire> + <wire> + <p1 x="600" y="140"/> + <p2 x="620" y="140"/> + </wire> + <wire> + <p1 x="440" y="300"/> + <p2 x="660" y="300"/> + </wire> + <wire> + <p1 x="500" y="460"/> + <p2 x="660" y="460"/> + </wire> + <wire> + <p1 x="760" y="460"/> + <p2 x="800" y="460"/> + </wire> + <wire> + <p1 x="740" y="620"/> + <p2 x="780" y="620"/> + </wire> + <wire> + <p1 x="560" y="240"/> + <p2 x="660" y="240"/> + </wire> + <wire> + <p1 x="780" y="400"/> + <p2 x="800" y="400"/> + </wire> + <wire> + <p1 x="620" y="400"/> + <p2 x="660" y="400"/> + </wire> + <wire> + <p1 x="480" y="340"/> + <p2 x="660" y="340"/> + </wire> + <wire> + <p1 x="740" y="500"/> + <p2 x="760" y="500"/> + </wire> + <wire> + <p1 x="420" y="660"/> + <p2 x="660" y="660"/> + </wire> + <wire> + <p1 x="600" y="280"/> + <p2 x="660" y="280"/> + </wire> + <wire> + <p1 x="560" y="600"/> + <p2 x="660" y="600"/> + </wire> + <wire> + <p1 x="880" y="440"/> + <p2 x="900" y="440"/> + </wire> + <wire> + <p1 x="500" y="220"/> + <p2 x="660" y="220"/> + </wire> + <wire> + <p1 x="740" y="380"/> + <p2 x="760" y="380"/> + </wire> + <wire> + <p1 x="420" y="540"/> + <p2 x="660" y="540"/> + </wire> + <wire> + <p1 x="480" y="120"/> + <p2 x="480" y="140"/> + </wire> + <wire> + <p1 x="480" y="140"/> + <p2 x="480" y="340"/> + </wire> + <wire> + <p1 x="480" y="580"/> + <p2 x="480" y="680"/> + </wire> + <wire> + <p1 x="480" y="340"/> + <p2 x="480" y="580"/> + </wire> + <wire> + <p1 x="560" y="140"/> + <p2 x="560" y="160"/> + </wire> + <wire> + <p1 x="560" y="200"/> + <p2 x="560" y="240"/> + </wire> + <wire> + <p1 x="560" y="600"/> + <p2 x="560" y="680"/> + </wire> + <wire> + <p1 x="560" y="240"/> + <p2 x="560" y="600"/> + </wire> + <wire> + <p1 x="420" y="120"/> + <p2 x="420" y="140"/> + </wire> + <wire> + <p1 x="420" y="140"/> + <p2 x="420" y="540"/> + </wire> + <wire> + <p1 x="420" y="660"/> + <p2 x="420" y="680"/> + </wire> + <wire> + <p1 x="420" y="540"/> + <p2 x="420" y="660"/> + </wire> + <wire> + <p1 x="500" y="140"/> + <p2 x="500" y="160"/> + </wire> + <wire> + <p1 x="500" y="200"/> + <p2 x="500" y="220"/> + </wire> + <wire> + <p1 x="500" y="460"/> + <p2 x="500" y="680"/> + </wire> + <wire> + <p1 x="500" y="220"/> + <p2 x="500" y="460"/> + </wire> + <wire> + <p1 x="440" y="140"/> + <p2 x="440" y="160"/> + </wire> + <wire> + <p1 x="440" y="200"/> + <p2 x="440" y="300"/> + </wire> + <wire> + <p1 x="440" y="420"/> + <p2 x="440" y="680"/> + </wire> + <wire> + <p1 x="440" y="300"/> + <p2 x="440" y="420"/> + </wire> + <wire> + <p1 x="600" y="120"/> + <p2 x="600" y="140"/> + </wire> + <wire> + <p1 x="600" y="520"/> + <p2 x="600" y="680"/> + </wire> + <wire> + <p1 x="600" y="140"/> + <p2 x="600" y="280"/> + </wire> + <wire> + <p1 x="600" y="280"/> + <p2 x="600" y="520"/> + </wire> + <wire> + <p1 x="760" y="380"/> + <p2 x="760" y="420"/> + </wire> + <wire> + <p1 x="760" y="460"/> + <p2 x="760" y="500"/> + </wire> + <wire> + <p1 x="540" y="120"/> + <p2 x="540" y="140"/> + </wire> + <wire> + <p1 x="540" y="480"/> + <p2 x="540" y="680"/> + </wire> + <wire> + <p1 x="540" y="360"/> + <p2 x="540" y="480"/> + </wire> + <wire> + <p1 x="540" y="140"/> + <p2 x="540" y="360"/> + </wire> + <wire> + <p1 x="620" y="140"/> + <p2 x="620" y="160"/> + </wire> + <wire> + <p1 x="620" y="200"/> + <p2 x="620" y="400"/> + </wire> + <wire> + <p1 x="620" y="640"/> + <p2 x="620" y="680"/> + </wire> + <wire> + <p1 x="620" y="400"/> + <p2 x="620" y="640"/> + </wire> + <wire> + <p1 x="780" y="260"/> + <p2 x="780" y="400"/> + </wire> + <wire> + <p1 x="780" y="480"/> + <p2 x="780" y="620"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/digital/atk16_alu_fz.dig b/digital/atk16_alu_fz.dig new file mode 100644 index 0000000..2da652a --- /dev/null +++ b/digital/atk16_alu_fz.dig @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>2</version> + <attributes> + <entry> + <string>Label</string> + <string>alu_fz</string> + </entry> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + </attributes> + <visualElements> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>Y</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="360" y="360"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>16</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>4*4</string> + </entry> + </elementAttributes> + <pos x="380" y="360"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>4</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>1*4</string> + </entry> + </elementAttributes> + <pos x="600" y="360"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>FZ</string> + </entry> + </elementAttributes> + <pos x="800" y="400"/> + </visualElement> + <visualElement> + <elementName>Testcase</elementName> + <elementAttributes> + <entry> + <string>Testdata</string> + <testData> + <dataString>Y FZ +0x0 1 +0x1 0 +0xff 0</dataString> + </testData> + </entry> + </elementAttributes> + <pos x="360" y="220"/> + </visualElement> + <visualElement> + <elementName>NOr</elementName> + <elementAttributes> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="680" y="360"/> + </visualElement> + <visualElement> + <elementName>Or</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>4</int> + </entry> + <entry> + <string>Inputs</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="480" y="340"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="760" y="400"/> + <p2 x="800" y="400"/> + </wire> + <wire> + <p1 x="620" y="400"/> + <p2 x="660" y="400"/> + </wire> + <wire> + <p1 x="400" y="400"/> + <p2 x="480" y="400"/> + </wire> + <wire> + <p1 x="620" y="420"/> + <p2 x="640" y="420"/> + </wire> + <wire> + <p1 x="660" y="420"/> + <p2 x="680" y="420"/> + </wire> + <wire> + <p1 x="400" y="420"/> + <p2 x="480" y="420"/> + </wire> + <wire> + <p1 x="400" y="340"/> + <p2 x="480" y="340"/> + </wire> + <wire> + <p1 x="360" y="360"/> + <p2 x="380" y="360"/> + </wire> + <wire> + <p1 x="560" y="360"/> + <p2 x="600" y="360"/> + </wire> + <wire> + <p1 x="620" y="360"/> + <p2 x="680" y="360"/> + </wire> + <wire> + <p1 x="420" y="360"/> + <p2 x="480" y="360"/> + </wire> + <wire> + <p1 x="640" y="440"/> + <p2 x="680" y="440"/> + </wire> + <wire> + <p1 x="400" y="380"/> + <p2 x="420" y="380"/> + </wire> + <wire> + <p1 x="620" y="380"/> + <p2 x="680" y="380"/> + </wire> + <wire> + <p1 x="540" y="380"/> + <p2 x="560" y="380"/> + </wire> + <wire> + <p1 x="400" y="340"/> + <p2 x="400" y="360"/> + </wire> + <wire> + <p1 x="560" y="360"/> + <p2 x="560" y="380"/> + </wire> + <wire> + <p1 x="640" y="420"/> + <p2 x="640" y="440"/> + </wire> + <wire> + <p1 x="420" y="360"/> + <p2 x="420" y="380"/> + </wire> + <wire> + <p1 x="660" y="400"/> + <p2 x="660" y="420"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/digital/atk16_alu_inputs.dig b/digital/atk16_alu_inputs.dig new file mode 100644 index 0000000..2ed5b74 --- /dev/null +++ b/digital/atk16_alu_inputs.dig @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>2</version> + <attributes> + <entry> + <string>Description</string> + <string>Maps the R1 input to the A output. Uses OPCODE parity to mux either the R2 input (even parity) or the RW_S input, here acting as a small immediate value, to the B output.</string> + </entry> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> + <visualElements> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Register 1 value from regbank</string> + </entry> + <entry> + <string>Label</string> + <string>R1</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="60" y="380"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Register 2 value from regbank</string> + </entry> + <entry> + <string>Label</string> + <string>R2</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="60" y="460"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>4</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>1</string> + </entry> + </elementAttributes> + <pos x="220" y="620"/> + </visualElement> + <visualElement> + <elementName>Multiplexer</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="260" y="500"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Register 2 selector</string> + </entry> + <entry> + <string>Label</string> + <string>R2_S</string> + </entry> + <entry> + <string>Bits</string> + <int>3</int> + </entry> + </elementAttributes> + <pos x="180" y="540"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Opcode</string> + </entry> + <entry> + <string>Label</string> + <string>OPCODE</string> + </entry> + <entry> + <string>Bits</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="180" y="620"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Output A</string> + </entry> + <entry> + <string>Label</string> + <string>A</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="380" y="460"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Output B</string> + </entry> + <entry> + <string>Label</string> + <string>B</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="380" y="520"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>3,13</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>16</string> + </entry> + </elementAttributes> + <pos x="220" y="540"/> + </visualElement> + <visualElement> + <elementName>Ground</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>13</int> + </entry> + </elementAttributes> + <pos x="200" y="580"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="200" y="560"/> + <p2 x="220" y="560"/> + </wire> + <wire> + <p1 x="200" y="500"/> + <p2 x="260" y="500"/> + </wire> + <wire> + <p1 x="300" y="520"/> + <p2 x="380" y="520"/> + </wire> + <wire> + <p1 x="180" y="620"/> + <p2 x="220" y="620"/> + </wire> + <wire> + <p1 x="240" y="620"/> + <p2 x="280" y="620"/> + </wire> + <wire> + <p1 x="60" y="460"/> + <p2 x="200" y="460"/> + </wire> + <wire> + <p1 x="340" y="460"/> + <p2 x="380" y="460"/> + </wire> + <wire> + <p1 x="60" y="380"/> + <p2 x="340" y="380"/> + </wire> + <wire> + <p1 x="240" y="540"/> + <p2 x="260" y="540"/> + </wire> + <wire> + <p1 x="180" y="540"/> + <p2 x="220" y="540"/> + </wire> + <wire> + <p1 x="340" y="380"/> + <p2 x="340" y="460"/> + </wire> + <wire> + <p1 x="280" y="540"/> + <p2 x="280" y="620"/> + </wire> + <wire> + <p1 x="200" y="460"/> + <p2 x="200" y="500"/> + </wire> + <wire> + <p1 x="200" y="560"/> + <p2 x="200" y="580"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/digital/atk16_decoder.dig b/digital/atk16_decoder.dig index ca22f72..0570615 100644 --- a/digital/atk16_decoder.dig +++ b/digital/atk16_decoder.dig @@ -1,51 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <circuit> <version>2</version> - <attributes/> + <attributes> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> <visualElements> <visualElement> - <elementName>Out</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>Write register selection</string> - </entry> - <entry> - <string>Label</string> - <string>RW_S</string> - </entry> - </elementAttributes> - <pos x="440" y="360"/> - </visualElement> - <visualElement> - <elementName>Out</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>Read register 1 selection</string> - </entry> - <entry> - <string>Label</string> - <string>R1_S</string> - </entry> - </elementAttributes> - <pos x="440" y="480"/> - </visualElement> - <visualElement> - <elementName>Out</elementName> - <elementAttributes> - <entry> - <string>Description</string> - <string>Read register 2 selection</string> - </entry> - <entry> - <string>Label</string> - <string>R2_S</string> - </entry> - </elementAttributes> - <pos x="440" y="440"/> - </visualElement> - <visualElement> <elementName>Register</elementName> <elementAttributes> <entry> @@ -124,34 +93,6 @@ <pos x="400" y="360"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> - <elementAttributes> - <entry> - <string>Input Splitting</string> - <string>9,7</string> - </entry> - <entry> - <string>Output Splitting</string> - <string>16</string> - </entry> - </elementAttributes> - <pos x="380" y="660"/> - </visualElement> - <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>7</int> - </entry> - </elementAttributes> - <pos x="360" y="680"/> - </visualElement> - <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> @@ -176,120 +117,187 @@ <pos x="200" y="340"/> </visualElement> <visualElement> - <elementName>Driver</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> + <string>Description</string> + <string>Opcode</string> + </entry> + <entry> + <string>Label</string> + <string>OP</string> + </entry> + <entry> <string>Bits</string> - <int>16</int> + <int>4</int> </entry> + </elementAttributes> + <pos x="440" y="520"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> <entry> - <string>flipSelPos</string> - <boolean>true</boolean> + <string>Description</string> + <string>Write register selection</string> + </entry> + <entry> + <string>Label</string> + <string>RW_S</string> + </entry> + <entry> + <string>Bits</string> + <int>3</int> </entry> </elementAttributes> - <pos x="460" y="660"/> + <pos x="440" y="480"/> </visualElement> <visualElement> - <elementName>Tunnel</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> - <string>NetName</string> - <string>DBUS</string> + <string>Description</string> + <string>ALU selection code</string> + </entry> + <entry> + <string>Label</string> + <string>ALU_S</string> + </entry> + <entry> + <string>Bits</string> + <int>3</int> </entry> </elementAttributes> - <pos x="500" y="660"/> + <pos x="440" y="360"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Out</elementName> <elementAttributes> <entry> - <string>Input Splitting</string> - <string>16</string> + <string>Description</string> + <string>Read register 1 selection</string> </entry> <entry> - <string>Output Splitting</string> - <string>3,9,</string> + <string>Label</string> + <string>R1_S</string> + </entry> + <entry> + <string>Bits</string> + <int>3</int> </entry> </elementAttributes> - <pos x="280" y="640"/> + <pos x="440" y="440"/> </visualElement> <visualElement> <elementName>Out</elementName> <elementAttributes> <entry> <string>Description</string> - <string>ALU selection code</string> + <string>Read register 2 selection</string> </entry> <entry> <string>Label</string> - <string>ALU_S</string> + <string>R2_S</string> </entry> <entry> <string>Bits</string> - <int>4</int> + <int>3</int> </entry> </elementAttributes> - <pos x="640" y="500"/> + <pos x="440" y="400"/> </visualElement> <visualElement> <elementName>Splitter</elementName> <elementAttributes> <entry> <string>Input Splitting</string> - <string>3,1</string> + <string>16</string> </entry> <entry> <string>Output Splitting</string> - <string>4</string> + <string>9,</string> </entry> </elementAttributes> - <pos x="600" y="500"/> + <pos x="300" y="600"/> </visualElement> <visualElement> - <elementName>Splitter</elementName> + <elementName>Driver</elementName> <elementAttributes> <entry> - <string>Input Splitting</string> - <string>4</string> + <string>Bits</string> + <int>16</int> </entry> <entry> - <string>Output Splitting</string> - <string>1,3</string> + <string>flipSelPos</string> + <boolean>true</boolean> + </entry> + </elementAttributes> + <pos x="480" y="600"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>DBUS</string> </entry> </elementAttributes> - <pos x="480" y="520"/> + <pos x="520" y="600"/> </visualElement> <visualElement> <elementName>In</elementName> <elementAttributes> <entry> <string>Description</string> - <string>Jump address output enable</string> + <string>Low 9 bits immediate value output enable</string> </entry> <entry> <string>Label</string> - <string>JA_OE</string> + <string>LI_OE</string> </entry> </elementAttributes> - <pos x="440" y="740"/> + <pos x="460" y="680"/> </visualElement> <visualElement> - <elementName>Out</elementName> + <elementName>Splitter</elementName> <elementAttributes> <entry> - <string>Description</string> - <string>Opcode</string> + <string>Input Splitting</string> + <string>9,7</string> </entry> <entry> - <string>Label</string> - <string>OP</string> + <string>Output Splitting</string> + <string>16</string> + </entry> + </elementAttributes> + <pos x="400" y="600"/> + </visualElement> + <visualElement> + <elementName>Ground</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="1"/> </entry> <entry> <string>Bits</string> - <int>4</int> + <int>7</int> + </entry> + </elementAttributes> + <pos x="380" y="620"/> + </visualElement> + <visualElement> + <elementName>Testcase</elementName> + <elementAttributes> + <entry> + <string>Testdata</string> + <testData> + <dataString>CLK DBUS IR_IE LI_OE OP RW_S R1_S R2_S ALU_S +C 0b0000001010011000 1 0 0 1 2 3 0</dataString> + </testData> </entry> </elementAttributes> - <pos x="640" y="580"/> + <pos x="120" y="160"/> </visualElement> </visualElements> <wires> @@ -299,71 +307,51 @@ </wire> <wire> <p1 x="420" y="400"/> - <p2 x="600" y="400"/> - </wire> - <wire> - <p1 x="300" y="660"/> - <p2 x="380" y="660"/> - </wire> - <wire> - <p1 x="400" y="660"/> - <p2 x="440" y="660"/> - </wire> - <wire> - <p1 x="480" y="660"/> - <p2 x="500" y="660"/> + <p2 x="440" y="400"/> </wire> <wire> <p1 x="140" y="420"/> <p2 x="180" y="420"/> </wire> <wire> - <p1 x="620" y="500"/> - <p2 x="640" y="500"/> - </wire> - <wire> - <p1 x="440" y="740"/> - <p2 x="460" y="740"/> - </wire> - <wire> - <p1 x="460" y="580"/> - <p2 x="640" y="580"/> - </wire> - <wire> - <p1 x="360" y="680"/> - <p2 x="380" y="680"/> - </wire> - <wire> <p1 x="160" y="360"/> <p2 x="200" y="360"/> </wire> <wire> <p1 x="260" y="360"/> - <p2 x="280" y="360"/> + <p2 x="300" y="360"/> </wire> <wire> <p1 x="420" y="360"/> <p2 x="440" y="360"/> </wire> <wire> - <p1 x="280" y="360"/> + <p1 x="300" y="360"/> <p2 x="400" y="360"/> </wire> <wire> <p1 x="420" y="520"/> - <p2 x="460" y="520"/> + <p2 x="440" y="520"/> </wire> <wire> - <p1 x="500" y="520"/> - <p2 x="600" y="520"/> + <p1 x="420" y="440"/> + <p2 x="440" y="440"/> </wire> <wire> - <p1 x="460" y="520"/> - <p2 x="480" y="520"/> + <p1 x="500" y="600"/> + <p2 x="520" y="600"/> </wire> <wire> - <p1 x="420" y="440"/> - <p2 x="440" y="440"/> + <p1 x="420" y="600"/> + <p2 x="460" y="600"/> + </wire> + <wire> + <p1 x="320" y="600"/> + <p2 x="400" y="600"/> + </wire> + <wire> + <p1 x="460" y="680"/> + <p2 x="480" y="680"/> </wire> <wire> <p1 x="180" y="380"/> @@ -374,28 +362,24 @@ <p2 x="160" y="380"/> </wire> <wire> - <p1 x="160" y="360"/> - <p2 x="160" y="380"/> + <p1 x="380" y="620"/> + <p2 x="400" y="620"/> </wire> <wire> - <p1 x="180" y="380"/> - <p2 x="180" y="420"/> - </wire> - <wire> - <p1 x="280" y="360"/> - <p2 x="280" y="640"/> + <p1 x="160" y="360"/> + <p2 x="160" y="380"/> </wire> <wire> - <p1 x="600" y="400"/> - <p2 x="600" y="500"/> + <p1 x="480" y="620"/> + <p2 x="480" y="680"/> </wire> <wire> - <p1 x="460" y="680"/> - <p2 x="460" y="740"/> + <p1 x="180" y="380"/> + <p2 x="180" y="420"/> </wire> <wire> - <p1 x="460" y="520"/> - <p2 x="460" y="580"/> + <p1 x="300" y="360"/> + <p2 x="300" y="600"/> </wire> </wires> <measurementOrdering/> diff --git a/digital/atk16_jump_unit.dig b/digital/atk16_jump_unit.dig new file mode 100644 index 0000000..1156aae --- /dev/null +++ b/digital/atk16_jump_unit.dig @@ -0,0 +1,216 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>2</version> + <attributes> + <entry> + <string>Description</string> + <string>Uses OPCODE parity to choose between relative addressing mode (even parity) or absolute addressing mode (odd parity).</string> + </entry> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> + <visualElements> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Jump address</string> + </entry> + <entry> + <string>Label</string> + <string>ADDR</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="180" y="380"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>PC value</string> + </entry> + <entry> + <string>Label</string> + <string>PC</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="180" y="300"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>OPCODE</string> + </entry> + <entry> + <string>Label</string> + <string>OPCODE</string> + </entry> + <entry> + <string>Bits</string> + <int>4</int> + </entry> + </elementAttributes> + <pos x="180" y="460"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>4</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>1,</string> + </entry> + </elementAttributes> + <pos x="240" y="460"/> + </visualElement> + <visualElement> + <elementName>Text</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>OP parity bit</string> + </entry> + </elementAttributes> + <pos x="220" y="480"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>Result PC value</string> + </entry> + <entry> + <string>Label</string> + <string>PC_RES</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="580" y="360"/> + </visualElement> + <visualElement> + <elementName>Add</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="240" y="300"/> + </visualElement> + <visualElement> + <elementName>Multiplexer</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="400" y="340"/> + </visualElement> + <visualElement> + <elementName>Ground</elementName> + <elementAttributes/> + <pos x="220" y="360"/> + </visualElement> + <visualElement> + <elementName>Testcase</elementName> + <elementAttributes> + <entry> + <string>Testdata</string> + <testData> + <dataString>PC ADDR OPCODE PC_RES +10 20 0b0101 20 +10 20 0b0110 30</dataString> + </testData> + </entry> + </elementAttributes> + <pos x="180" y="620"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="200" y="320"/> + <p2 x="240" y="320"/> + </wire> + <wire> + <p1 x="220" y="340"/> + <p2 x="240" y="340"/> + </wire> + <wire> + <p1 x="380" y="340"/> + <p2 x="400" y="340"/> + </wire> + <wire> + <p1 x="440" y="360"/> + <p2 x="580" y="360"/> + </wire> + <wire> + <p1 x="180" y="460"/> + <p2 x="240" y="460"/> + </wire> + <wire> + <p1 x="260" y="460"/> + <p2 x="420" y="460"/> + </wire> + <wire> + <p1 x="180" y="300"/> + <p2 x="240" y="300"/> + </wire> + <wire> + <p1 x="300" y="300"/> + <p2 x="380" y="300"/> + </wire> + <wire> + <p1 x="180" y="380"/> + <p2 x="200" y="380"/> + </wire> + <wire> + <p1 x="200" y="380"/> + <p2 x="400" y="380"/> + </wire> + <wire> + <p1 x="420" y="380"/> + <p2 x="420" y="460"/> + </wire> + <wire> + <p1 x="200" y="320"/> + <p2 x="200" y="380"/> + </wire> + <wire> + <p1 x="380" y="300"/> + <p2 x="380" y="340"/> + </wire> + <wire> + <p1 x="220" y="340"/> + <p2 x="220" y="360"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig index f323545..c5ce679 100644 --- a/digital/atk16_mem.dig +++ b/digital/atk16_mem.dig @@ -1,7 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <circuit> <version>2</version> - <attributes/> + <attributes> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> <visualElements> <visualElement> <elementName>RAMAsync</elementName> @@ -56,8 +67,8 @@ </entry> <entry> <string>Data</string> - <data>4019,5200,8000,4051,40a2,29b,4014,2804,38c0,d9,40f2,4084,293,6500 -,4011,f000,4009,f000</data> + <data>4203,5040,8000,420a,4414,650,4802,2900,38c0,12c0,441e,4810,651 +,7500,4202,f000,4201,f000</data> </entry> </elementAttributes> <pos x="740" y="100"/> diff --git a/digital/atk16_regbank.dig b/digital/atk16_regbank.dig index 35c072a..d65e6fb 100644 --- a/digital/atk16_regbank.dig +++ b/digital/atk16_regbank.dig @@ -1,7 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <circuit> <version>2</version> - <attributes/> + <attributes> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> <visualElements> <visualElement> <elementName>In</elementName> @@ -170,20 +181,6 @@ <pos x="920" y="440"/> </visualElement> <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="920" y="480"/> - </visualElement> - <visualElement> <elementName>In</elementName> <elementAttributes> <entry> @@ -310,20 +307,6 @@ <pos x="920" y="720"/> </visualElement> <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="920" y="760"/> - </visualElement> - <visualElement> <elementName>In</elementName> <elementAttributes> <entry> @@ -505,7 +488,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -519,7 +502,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -548,7 +531,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[33]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[31]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -594,7 +577,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -608,7 +591,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -655,7 +638,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[29]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[27]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -669,7 +652,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[30]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[28]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -698,7 +681,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[33]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[31]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -730,7 +713,7 @@ </entry> <entry> <string>Label</string> - <string>PA</string> + <string>RE</string> </entry> <entry> <string>Bits</string> @@ -805,7 +788,7 @@ </entry> <entry> <string>NetName</string> - <string>RW_PA</string> + <string>RW_E</string> </entry> </elementAttributes> <pos x="460" y="820"/> @@ -819,7 +802,7 @@ </entry> <entry> <string>Label</string> - <string>PB</string> + <string>RF</string> </entry> <entry> <string>Bits</string> @@ -833,7 +816,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[55]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[53]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -847,7 +830,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[56]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[54]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -876,7 +859,7 @@ <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[59]/elementAttributes/entry/rotation"/> + <rotation reference="../../../../visualElement[57]/elementAttributes/entry/rotation"/> </entry> <entry> <string>NetName</string> @@ -894,40 +877,12 @@ </entry> <entry> <string>NetName</string> - <string>RW_PB</string> + <string>RW_F</string> </entry> </elementAttributes> <pos x="460" y="980"/> </visualElement> <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="920" y="740"/> - </visualElement> - <visualElement> - <elementName>Ground</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="1"/> - </entry> - <entry> - <string>Bits</string> - <int>16</int> - </entry> - </elementAttributes> - <pos x="920" y="460"/> - </visualElement> - <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> @@ -1038,7 +993,7 @@ <elementAttributes> <entry> <string>NetName</string> - <string>RW_PA</string> + <string>RW_E</string> </entry> </elementAttributes> <pos x="120" y="700"/> @@ -1048,7 +1003,7 @@ <elementAttributes> <entry> <string>NetName</string> - <string>RW_PB</string> + <string>RW_F</string> </entry> </elementAttributes> <pos x="120" y="720"/> @@ -1073,6 +1028,133 @@ C 0xA 1 0 0 X 0 X</dataString> </elementAttributes> <pos x="900" y="920"/> </visualElement> + <visualElement> + <elementName>Register</elementName> + <elementAttributes> + <entry> + <string>valueIsProbe</string> + <boolean>true</boolean> + </entry> + <entry> + <string>Label</string> + <string>RG</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="560" y="1080"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation reference="../../../../visualElement[53]/elementAttributes/entry/rotation"/> + </entry> + <entry> + <string>NetName</string> + <string>Din</string> + </entry> + </elementAttributes> + <pos x="560" y="1080"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation reference="../../../../visualElement[54]/elementAttributes/entry/rotation"/> + </entry> + <entry> + <string>NetName</string> + <string>CLK</string> + </entry> + </elementAttributes> + <pos x="560" y="1100"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>Q7</string> + </entry> + </elementAttributes> + <pos x="640" y="1100"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes/> + <pos x="460" y="1120"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation reference="../../../../visualElement[57]/elementAttributes/entry/rotation"/> + </entry> + <entry> + <string>NetName</string> + <string>RW_IE</string> + </entry> + </elementAttributes> + <pos x="460" y="1120"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>RW_G</string> + </entry> + </elementAttributes> + <pos x="460" y="1160"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>Q7</string> + </entry> + </elementAttributes> + <pos x="920" y="460"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>Q7</string> + </entry> + </elementAttributes> + <pos x="920" y="740"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>RW_G</string> + </entry> + </elementAttributes> + <pos x="120" y="740"/> + </visualElement> </visualElements> <wires> <wire> @@ -1108,14 +1190,14 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="560" y="460"/> </wire> <wire> - <p1 x="920" y="460"/> - <p2 x="940" y="460"/> - </wire> - <wire> <p1 x="440" y="460"/> <p2 x="460" y="460"/> </wire> <wire> + <p1 x="920" y="460"/> + <p2 x="940" y="460"/> + </wire> + <wire> <p1 x="540" y="140"/> <p2 x="560" y="140"/> </wire> @@ -1124,6 +1206,10 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="560" y="780"/> </wire> <wire> + <p1 x="620" y="1100"/> + <p2 x="640" y="1100"/> + </wire> + <wire> <p1 x="980" y="400"/> <p2 x="1080" y="400"/> </wire> @@ -1164,10 +1250,6 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="540" y="480"/> </wire> <wire> - <p1 x="920" y="480"/> - <p2 x="940" y="480"/> - </wire> - <wire> <p1 x="940" y="800"/> <p2 x="960" y="800"/> </wire> @@ -1180,6 +1262,10 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="540" y="160"/> </wire> <wire> + <p1 x="540" y="1120"/> + <p2 x="560" y="1120"/> + </wire> + <wire> <p1 x="920" y="420"/> <p2 x="940" y="420"/> </wire> @@ -1228,6 +1314,10 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="100" y="820"/> </wire> <wire> + <p1 x="520" y="1140"/> + <p2 x="540" y="1140"/> + </wire> + <wire> <p1 x="920" y="440"/> <p2 x="940" y="440"/> </wire> @@ -1236,10 +1326,6 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="640" y="440"/> </wire> <wire> - <p1 x="920" y="760"/> - <p2 x="940" y="760"/> - </wire> - <wire> <p1 x="620" y="760"/> <p2 x="640" y="760"/> </wire> @@ -1292,8 +1378,8 @@ C 0xA 1 0 0 X 0 X</dataString> <p2 x="540" y="960"/> </wire> <wire> - <p1 x="940" y="460"/> - <p2 x="940" y="480"/> + <p1 x="540" y="1120"/> + <p2 x="540" y="1140"/> </wire> </wires> <measurementOrdering/> diff --git a/digital/tests_alu.dig b/digital/tests_alu.dig deleted file mode 100644 index 9390503..0000000 --- a/digital/tests_alu.dig +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<circuit> - <version>2</version> - <attributes/> - <visualElements> - <visualElement> - <elementName>Testcase</elementName> - <elementAttributes> - <entry> - <string>Label</string> - <string>test01</string> - </entry> - <entry> - <string>Testdata</string> - <testData> - <dataString>A B Y -0 0 1</dataString> - </testData> - </entry> - </elementAttributes> - <pos x="200" y="200"/> - </visualElement> - </visualElements> - <wires/> - <measurementOrdering/> -</circuit>
\ No newline at end of file diff --git a/src/assembler.py b/src/assembler.py index 5802983..7deb0f0 100755 --- a/src/assembler.py +++ b/src/assembler.py @@ -25,8 +25,8 @@ src_lines = src.splitlines() def parse(line: str) -> list[str]: depth = 0 - result = [] - acc = "" + result: list[str] = [] + acc: str = "" for c in line: if c.isspace() and depth == 0: result.append(acc) @@ -47,42 +47,47 @@ def eval_expr(expr: str) -> int: expr = eval_symbol(expr) return eval(expr, labels.copy()) # eval as Python expr +constants: dict[str, str] = { + # Registers + "rz": "0", + "ra": "1", + "rb": "2", + "rc": "3", + "rd": "4", + "rf": "5", + "rg": "6", + # ALU instructions + "al_plus": "0", + "al_minus": "1", + "al_and": "2", + "al_or": "3", + "al_xor": "4", + "al_shift_lr": "5", + "al_shift_ar": "6", + "al_shift_ll": "7", + # ALU flags + "f_carry": "0", + "f_overflow": "1", + "f_zero": "2", + "f_sign": "3", +} + def eval_symbol(c: str): if c in labels: return str(labels[c]) - match c: - # Registers - case "rz": return "0" - case "ra": return "1" - case "rb": return "2" - case "rc": return "3" - case "rd": return "4" - case "pa": return "5" - case "pb": return "6" - # ALU instructions - case "al_clear": return "0" - case "al_b_minus_a": return "1" - case "al_a_minus_b": return "2" - case "al_a_plus_b": return "3" - case "al_a_xor_b": return "4" - case "al_a_or_b": return "5" - case "al_a_and_b": return "6" - case "al_preset": return "7" - case "al_logical_shift_right": return "8" - case "al_arithmetic_shift_right": return "9" - case "al_logical_shift_left": return "10" - # ALU flags - case "f_carry": return "0" - case "f_overflow": return "1" - case "f_zero": return "2" - case "f_sign": return "3" - case _: return c + if c in constants: + return constants[c] + + return c -# 1st pass, gather labels +# 1st pass, gather labels, set options +options: dict[str, str] = { + "stack_pointer": "6" # RG +} labels: dict[str, int] = {} -address = 0 +address: int = 0 for (lineNo, line) in enumerate(src_lines): line = line.split(";")[0].strip() @@ -95,11 +100,116 @@ for (lineNo, line) in enumerate(src_lines): case "@label": labels[args[0]] = address continue + case "@opt": + opt_name = args[0] + opt_value = constants.get(args[1], args[1]) + options[opt_name] = opt_value + case _: + pass address += 1 # 2nd pass +def make_alr(alu_op: str, left: str, right: str, target: str) -> list[int]: + """ALR 0000 TTTL LLRR RSSS""" + target_e = eval_expr(target) + left_e = eval_expr(left) + right_e = eval_expr(right) + alu_op_e = eval_expr(alu_op) + word = (0b0000 << 12) + \ + (target_e << 9) + \ + (left_e << 6) + \ + (right_e << 3) + \ + alu_op_e + return [word] + +def make_ali(alu_op: str, left: str, imm: str, target: str) -> list[int]: + """ALI 0001 TTTL LLII ISSS""" + target_e = eval_expr(target) + left_e = eval_expr(left) + imm_e = eval_expr(imm) + alu_op_e = eval_expr(alu_op) + word = (0b0001 << 12) + \ + (target_e << 9) + \ + (left_e << 6) + \ + (imm_e << 3) + \ + alu_op_e + return [word] + +def make_ldr(to_reg: str, addr_reg: str) -> list[int]: + """LDR 0010 TTTR RRXX XXXX""" + to_reg_e = eval_expr(to_reg) + addr_reg_e = eval_expr(addr_reg) + word = (0b0010 << 12) + \ + (to_reg_e << 9) + \ + (addr_reg_e << 6) + return [word] + +def make_str(from_reg: str, addr_reg: str) -> list[int]: + """STR 0011 TTTR RRXX XXXX""" + from_reg_e = eval_expr(from_reg) + addr_reg_e = eval_expr(addr_reg) + word = (0b0011 << 12) + \ + (from_reg_e << 9) + \ + (addr_reg_e << 6) + return [word] + +def make_ldi(to_reg: str, imm: str) -> list[int]: + """LDI 0100 TTTI IIII IIII""" + to_reg_e = eval_expr(to_reg) + imm_e = eval_expr(imm) + word = (0b0100 << 12) + \ + (to_reg_e << 9) + \ + imm_e + return [word] + +def make_jpr(addr_reg: str) -> list[int]: + """JPR 0101 XXXR RRXX XXXX""" + addr_reg_e = eval_expr(addr_reg) + word = (0b0101 << 12) + \ + (addr_reg_e << 6) + return [word] + +def make_jpi(address: int, imm: str) -> list[int]: + """JPI 0110 XXXI IIII IIII""" + imm_e = eval_expr(imm) + imm_e -= address + word = (0b0110 << 12) + \ + imm_e + return [word] + +def make_br(flag_s: str, addr_reg: str) -> list[int]: + """BR 0111 XFFR RRXX XXXX""" + flag_s_e = eval_expr(flag_s) + addr_reg_e = eval_expr(addr_reg) + word = (0b0111 << 12) + \ + (flag_s_e << 9) + \ + (addr_reg_e << 6) + return [word] + +def make_bri(address: int, flag_s: str, imm: str) -> list[int]: + """BRI 1000 XFFI IIII IIII""" + flag_s_e = eval_expr(flag_s) + imm_e = eval_expr(imm) + imm_e -= address + word = (0b1000 << 12) + \ + (flag_s_e << 9) + \ + imm_e + return [word] + +def make_hlt() -> list[int]: + """HLT 1111 XXXX XXXX XXXX""" + word = (0b1111 << 12) + return [word] + +# def make_spu(reg: str) -> list[int]: +# stack_pointer = options["stack_pointer"] +# reg = eval_symbol(reg) +# words_inc: list[int] = make_inc(stack_pointer, stack_pointer) +# words_str: list[int] = make_str(reg, stack_pointer) +# return words_inc + words_str + address = 0 nop = bytearray([0b1000_0000, 0]) result = bytearray() @@ -115,85 +225,52 @@ for (lineNo, line) in enumerate(src_lines): case "@address": address = eval_expr(args[0]) continue - case "@label": + case "@label" | "@opt": continue # Instructions - case "alu": - # S (alu op) - # L (lhs) - # R (rhs) - # T (target) - word = (0b0000 << 12) + \ - (eval_expr(args[0]) << 3) + \ - (eval_expr(args[1]) << 9) + \ - (eval_expr(args[2]) << 6) + \ - (eval_expr(args[3]) << 0) - case "als": - # S (alu op) - # L (lhs) - # R (rhs) - # T (target) - word = (0b0001 << 12) + \ - (eval_expr(args[0]) << 3) + \ - (eval_expr(args[1]) << 9) + \ - (eval_expr(args[2]) << 6) + \ - (eval_expr(args[3]) << 0) + case "alr": + words = make_alr(*args) + case "ali": + words = make_ali(*args) case "ldr": - # R (address) - # T (target) - word = (0b0010 << 12) + \ - (eval_expr(args[0]) << 9) + \ - (eval_expr(args[1]) << 0) + words = make_ldr(*args) case "str": - # R (address) - # T (value to store) - word = (0b0011 << 12) + \ - (eval_expr(args[0]) << 9) + \ - (eval_expr(args[1]) << 6) + words = make_str(*args) case "ldi": - # T (target) - # I (immediate) - word = (0b0100 << 12) + \ - (eval_expr(args[0]) << 0) + \ - (eval_expr(args[1]) << 3) - case "jmp": - # R (reg holding address) - word = (0b0101 << 12) + \ - (eval_expr(args[0]) << 9) + words = make_ldi(*args) + case "jpr": + words = make_jpr(*args) + case "jpi": + words = make_jpi(address, *args) case "br": - # F (flag selector) - # R (reg holding address) - word = (0b0110 << 12) + \ - (eval_expr(args[0]) << 9) + \ - (eval_expr(args[1]) << 6) + words = make_br(*args) + case "bri": + words = make_bri(address, *args) case "hlt": - word = 0b1111 << 12 + words = make_hlt() # Pseudoinstructions case "add": - word = (0b0000 << 12) + \ - (eval_expr(args[0]) << 9) + \ - (eval_expr(args[1]) << 6) + \ - (eval_expr("al_a_plus_b") << 3) + \ - (eval_expr(args[2]) << 0) + words = make_alr("al_plus", *args) case "sub": - word = (0b0000 << 12) + \ - (eval_expr(args[0]) << 9) + \ - (eval_expr(args[1]) << 6) + \ - (eval_expr("al_a_minus_b") << 3) + \ - (eval_expr(args[2]) << 0) + words = make_alr("al_minus", *args) + case "inc": + words = make_ali("al_plus", args[0], "1", args[0]) + case "dec": + words = make_ali("al_minus", args[0], "1", args[0]) case "mov": - word = (0b0000 << 12) + \ - (eval_expr("rz") << 9) + \ - (eval_expr(args[0]) << 6) + \ - (eval_expr("al_a_plus_b") << 3) + \ - (eval_expr(args[1]) << 0) + words = make_ali("al_plus", args[0], "0", args[1]) + # case "csr": + # reg = args[0] + # words_spu = make_spu(reg) + # words = [] + # # todo finish this # Default case: evaluate as is (e.g. data word) case _: try: - word = eval_expr(keyword) + words = [eval_expr(keyword)] except: raise Exception(f"Invalid assembly at {infile_path}:{lineNo + 1}\n\n{line}") @@ -204,79 +281,13 @@ for (lineNo, line) in enumerate(src_lines): if address == label_addr: print(f"{label}:") - print(f"{address:>08x} 0x{word:>04x} {line}") - result[2 * address + 0] = ((word >> 8) & 0xff) - result[2 * address + 1] = ((word >> 0) & 0xff) - address += 1 + for word in words: + print(f"{address:>08x} 0x{word:>04x} {line}") + result[2 * address + 0] = ((word >> 8) & 0xff) + result[2 * address + 1] = ((word >> 0) & 0xff) + address += 1 with open(outfile_path, "wb") as f: f.write(result) print(f"Wrote {len(result)} bytes to {outfile_path}") - -with open(f"{outfile_path}.logisim.txt", "w") as f: - f.write("v2.0 raw\n") - run_length = 0 - run_last = "" - for i in range(len(result) // 2): - b0 = result[2 * i + 0] - b1 = result[2 * i + 1] - word = f"{b0:>02x}{b1:>02x}\n" - - if word != run_last and run_length <= 1: - f.write(f"{run_last}") - run_length = 1 - run_last = word - elif word != run_last and run_length > 1: - f.write(f"{run_length}*{run_last}") - run_length = 1 - run_last = word - else: - run_length += 1 - - if run_length <= 1: - f.write(f"{run_last}") - else: - f.write(f"{run_length}*{run_last}") - -print(f"Wrote Logisim image format to {outfile_path}.logisim.txt") - -with open(f"{outfile_path}.ver.txt", "w") as f: - f.write("addr/data: 15 16") - run_length = 0 - run_last = "" - written = -1 - - def update_layout(): - if run_last == "": return - if written % 8 == 0: - f.write("\n") - else: - f.write(" ") - - for i in range(len(result) // 2): - b0 = result[2 * i + 0] - b1 = result[2 * i + 1] - word = f"{b0:>02x}{b1:>02x}" - - if word != run_last and run_length <= 1: - f.write(f"{run_last}") - run_length = 1 - run_last = word - written += 1 - update_layout() - elif word != run_last and run_length > 1: - f.write(f"{run_length}*{run_last}") - run_length = 1 - run_last = word - written += 1 - update_layout() - else: - run_length += 1 - - if run_length <= 1: - f.write(f"{run_last}") - else: - f.write(f"{run_length}*{run_last}") - -print(f"Wrote verification test format to {outfile_path}.ver.txt") diff --git a/src/test.atk16 b/src/test.atk16 index 364480b..da7c7c8 100644 --- a/src/test.atk16 +++ b/src/test.atk16 @@ -3,7 +3,7 @@ ; ROM (and program execution) starts at offset 0x0 @address 0x0 ldi RA program - jmp RA + jpr RA @label ram_offset 0x8000 ; store ram offset for later memory access diff --git a/src/test_fibo.atk16 b/src/test_fibo.atk16 new file mode 100644 index 0000000..7f1abb9 --- /dev/null +++ b/src/test_fibo.atk16 @@ -0,0 +1,47 @@ +@opt stack_pointer RG + +@label program + ; call fibo subroutine with parameter 10 + ldi RA 10 + csr fibo + hlt + +@label fibo + ; function fibo + ; parameters: + ; RA n : u16 + ; return value: + ; RA fibo(n) : u16 + + spu RB ; prelude + spu RC + + ldi RC 2 ; if n < 2, return n + sub RA RC RA + bri f_sign fibo_early + + spu RD ; prelude + spu RE + + ldi RE 1 ; constant 1 + ldi RB 0 ; a = 0 + ldi RC 1 ; b = 1 +@label fibo_loop + add RB RC RD ; v = a + b + mov RC RB ; a = b + mov RD RC ; b = v + sub RA RE RA ; n -= 1 + bri f_zero fibo_done ; loop while n > 0 + jpi fibo_loop + +@label fibo_early + spo RC + spo RB + rsr +@label fibo_done + ldr RD RA + spo RE + spo RD + spo RC + spo RB + rsr diff --git a/src/ucode.py b/src/ucode.py index 9d7c55c..3c34a71 100755 --- a/src/ucode.py +++ b/src/ucode.py @@ -20,23 +20,23 @@ MEM_IE = 0b0000_0000_0001_0000 MEM_OE = 0b0000_0000_0010_0000 RW_IE = 0b0000_0000_0100_0000 R1_OE = 0b0000_0000_1000_0000 -R2_OE = 0b0000_0001_0000_0000 +R2_OE = 0b0000_0001_0000_0000 # needed? IR_IE = 0b0000_0010_0000_0000 -L9_OE = 0b0000_0100_0000_0000 -unused1 = 0b0000_1000_0000_0000 +unused = 0b0000_0100_0000_0000 +LI_OE = 0b0000_1000_0000_0000 ALU_OE = 0b0001_0000_0000_0000 FR_IE = 0b0010_0000_0000_0000 HALT = 0b0100_0000_0000_0000 US_RS = 0b1000_0000_0000_0000 BRANCH_FLAG_STATES_N = 2 -UCODE_N = 2**3 +UCODE_N: int = 2**3 CONTROL_WORD_SIZE = 2 -def not_branch(bs): +def not_branch(bs: list[int]) -> list[list[int]]: return BRANCH_FLAG_STATES_N * [bs] -def branch(false_branch, true_branch): +def branch(false_branch: list[int], true_branch: list[int]) -> list[list[int]]: return [false_branch, true_branch] fetch = [PC_OE|MAR_IE, MEM_OE|IR_IE|PC_CO] @@ -45,25 +45,26 @@ def nop(): return not_branch([*fetch, US_RS, 0, 0, 0, 0, 0]) ucode = [ - # ALU 0000 LLLR RRSS STTT + # ALR 0000 TTTL LLRR RSSS not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]), - # ALS 0001 LLLR RRSS STTT + # ALI 0001 TTTL LLII ISSS not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]), - # LDR 0010 RRRX XXXX XTTT + # LDR 0010 TTTR RRXX XXXX not_branch([*fetch, R1_OE|MAR_IE, MEM_OE|RW_IE, US_RS, 0, 0, 0]), - # STR 0011 RRRT TTXX XXXX - not_branch([*fetch, R1_OE|MAR_IE, R2_OE|MEM_IE, US_RS, 0, 0, 0]), - # LDI 0100 IIII IIII ITTT - not_branch([*fetch, H9_OE|RW_IE, US_RS, 0, 0, 0, 0]), - # JMP 0101 RRRX XXXX XXXX + # STR 0011 TTTR RRXX XXXX + not_branch([*fetch, R1_OE|MAR_IE, R1_OE|MEM_IE, US_RS, 0, 0, 0]), + # LDI 0100 TTTI IIII IIII + not_branch([*fetch, LI_OE|RW_IE, US_RS, 0, 0, 0, 0]), + # JPR 0101 XXXR RRXX XXXX not_branch([*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]), - # BR 0110 XFFR RRXX XXXX + # JPI 0110 XXXI IIII IIII + not_branch([*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]), + # BR 0111 XFFR RRXX XXXX branch([*fetch, US_RS, 0, 0, 0, 0, 0], - [*fetch, R2_OE|PC_IE, US_RS, 0, 0, 0, 0]), - # NOP 0111 XXXX XXXX XXXX - nop(), - # NOP 1000 XXXX XXXX XXXX - nop(), + [*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]), + # BRI 1000 XFFI IIII IIII + branch([*fetch, US_RS, 0, 0, 0, 0, 0], + [*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]), # NOP 1001 XXXX XXXX XXXX nop(), # NOP 1010 XXXX XXXX XXXX |
