Browse Source

Sun Oct 30 12:55:44 PM CET 2022

master
Alessandro Mauri 3 months ago
parent
commit
4432635944
  1. 98
      INSTRUCTIONS.md
  2. 730
      alu.dig
  3. 2
      main.dig
  4. 253
      multiply-add.dig
  5. 334
      registers.dig
  6. 137
      signed_mul.dig

98
INSTRUCTIONS.md

@ -29,10 +29,6 @@ always referred to as `A`. The possible pairs are:
## LD load value into register
normal loading
syntax: `LD Rd, A`
action: `Rd = [A]`
post increment/decrement
syntax: `LD Rd, A+q`
action: `Rd = [A]; A += q`
@ -50,10 +46,6 @@ syntax: `LDIL Rd, imm32`
action: `Rd = imm32`
## ST store value from register
normal storing
syntax: `ST A, Rd`
action: `[A] = Rd`
post increment/decrement
syntax: `ST A+q, Rd`
action: `[A] = Rd; A += q`
@ -63,10 +55,6 @@ syntax: `ST q+A, Rd`
action: `A += q; [A] = Rd`
## STI store immediate into memory
normal store
syntax: `STI A, imm`
action: `[A] = imm`
post increment/decrement
syntax: `STI A+q, imm`
action: `[A] = imm; A += q`
@ -76,10 +64,6 @@ syntax: `STI q+A, imm`
action: `A += q; [A] = imm`
## STIL store long immediate into memory
normal store
syntax: `STIL A, imm32`
action: `[A] = imm32`
post increment/decrement
syntax: `STIL A+q, imm32`
action: `[A] = imm32; A += q`
@ -87,3 +71,85 @@ action: `[A] = imm32; A += q`
pre increment/decrement
syntax: `STIL q+A, imm32`
action: `A += q; [A] = imm32`
# Arithmetic operations
## ADD
## ADDC
## ADDI
## ADDIC
## MLA Multiply and add
syntax: `MLA A, Ra, Rb, Rc`
action: `A = Rc + (Ra * Rb)`
## MLAI Multiply and add immediate
syntax: `MLAI A, Ra, Rb, imm`
action: `A = imm + (Ra * Rb)`
## MLIA Multiply immediate and add
syntax: `MLIA A, Ra, imm, Rc`
action: `A = Rc + (Ra * imm)`
## MLAC Multiply and add with carry
syntax: `MLAC A, Ra, Rb, Rc`
action: `A = F.C + Rc + (Ra * Rb)`
## MLAIC Multiply and add immediate with carry
syntax: `MLAIC A, Ra, Rb, imm`
action: `A = F.C + imm + (Ra * Rb)`
## MLIAC Multiply immediate and add with carry
syntax: `MLIAC A, Ra, imm, Rc`
action: `A = F.C + Rc + (Ra * imm)`
## SMLA Signed multiply and add
syntax: `SMLA A, Ra, Rb, Rc`
action: `A = Rc + (Ra * Rb)`
## SMLAI Signed multiply and add immediate
syntax: `SMLAI A, Ra, Rb, imm`
action: `A = imm + (Ra * Rb)`
## SMLIA Signed multiply immediate and add
syntax: `SMLIA A, Ra, imm, Rc`
action: `A = Rc + (Ra * imm)`
## SMLAC Signed multiply and add with carry
syntax: `SMLAC A, Ra, Rb, Rc`
action: `A = F.C + Rc + (Ra * Rb)`
## SMLAIC Signed multiply and add immediate with carry
syntax: `SMLAIC A, Ra, Rb, imm`
action: `A = F.C + imm + (Ra * Rb)`
## SMLIAC Signed multiply immediate and add with carry
syntax: `SMLIAC A, Ra, imm, Rc`
action: `A = F.C + Rc + (Ra * imm)`
## SUB Subtract
## SUBC Subtract with carry
## SUBI Subtract immediate
## SBIC Subtract immediate with carry
## AND
## ANDI with immediate
## OR
## ORI with immediate
## XOR
## XORI with immediate
## NEG negate (two's complement)
## ROR Rotate right
## ROL Rotate left
## SHR Shift right
## SHRC Shift right through carry
## SHL Shift left
## SHLC Shift left through carry
# Conditional operations

730
alu.dig

@ -6,34 +6,750 @@
<visualElement>
<elementName>shifter.dig</elementName>
<elementAttributes/>
<pos x="420" y="660"/>
</visualElement>
<visualElement>
<elementName>Sub</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="420" y="560"/>
</visualElement>
<visualElement>
<elementName>Add</elementName>
<elementName>And</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
</elementAttributes>
<pos x="420" y="360"/>
<pos x="420" y="860"/>
</visualElement>
<visualElement>
<elementName>Sub</elementName>
<elementName>Or</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>32</int>
</entry>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
</elementAttributes>
<pos x="420" y="960"/>
</visualElement>
<visualElement>
<elementName>XOr</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>32</int>
</entry>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
</elementAttributes>
<pos x="420" y="1060"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>a</string>
</entry>
</elementAttributes>
<pos x="260" y="300"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>b</string>
</entry>
</elementAttributes>
<pos x="260" y="340"/>
</visualElement>
<visualElement>
<elementName>multiply-add.dig</elementName>
<elementAttributes/>
<pos x="420" y="320"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>c</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="420" y="460"/>
<pos x="260" y="380"/>
</visualElement>
<visualElement>
<elementName>signed_mul.dig</elementName>
<elementName>Neg</elementName>
<elementAttributes/>
<pos x="420" y="240"/>
<pos x="420" y="800"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>16</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>1*16</string>
</entry>
</elementAttributes>
<pos x="1160" y="1200"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>16</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>1*16</string>
</entry>
</elementAttributes>
<pos x="1160" y="800"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
<entry>
<string>Inputs</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1360" y="800"/>
</visualElement>
<visualElement>
<elementName>NOr</elementName>
<elementAttributes>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
<entry>
<string>Inputs</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1360" y="1200"/>
</visualElement>
<visualElement>
<elementName>NAnd</elementName>
<elementAttributes>
<entry>
<string>wideShape</string>
<boolean>true</boolean>
</entry>
</elementAttributes>
<pos x="1520" y="1140"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>LZ</string>
</entry>
</elementAttributes>
<pos x="1640" y="1160"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Z</string>
</entry>
</elementAttributes>
<pos x="1640" y="1360"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>32</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>31,1</string>
</entry>
</elementAttributes>
<pos x="1540" y="1580"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>N</string>
</entry>
</elementAttributes>
<pos x="1640" y="1600"/>
</visualElement>
<visualElement>
<elementName>Add</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="420" y="460"/>
</visualElement>
</visualElements>
<wires/>
<wires>
<wire>
<p1 x="1180" y="1280"/>
<p2 x="1360" y="1280"/>
</wire>
<wire>
<p1 x="360" y="900"/>
<p2 x="420" y="900"/>
</wire>
<wire>
<p1 x="1180" y="900"/>
<p2 x="1360" y="900"/>
</wire>
<wire>
<p1 x="1620" y="1160"/>
<p2 x="1640" y="1160"/>
</wire>
<wire>
<p1 x="1180" y="1420"/>
<p2 x="1280" y="1420"/>
</wire>
<wire>
<p1 x="1300" y="1420"/>
<p2 x="1360" y="1420"/>
</wire>
<wire>
<p1 x="1180" y="1040"/>
<p2 x="1260" y="1040"/>
</wire>
<wire>
<p1 x="1280" y="1040"/>
<p2 x="1360" y="1040"/>
</wire>
<wire>
<p1 x="380" y="660"/>
<p2 x="420" y="660"/>
</wire>
<wire>
<p1 x="480" y="660"/>
<p2 x="600" y="660"/>
</wire>
<wire>
<p1 x="1180" y="1300"/>
<p2 x="1360" y="1300"/>
</wire>
<wire>
<p1 x="1180" y="920"/>
<p2 x="1360" y="920"/>
</wire>
<wire>
<p1 x="1480" y="1180"/>
<p2 x="1520" y="1180"/>
</wire>
<wire>
<p1 x="380" y="800"/>
<p2 x="420" y="800"/>
</wire>
<wire>
<p1 x="480" y="800"/>
<p2 x="580" y="800"/>
</wire>
<wire>
<p1 x="1180" y="800"/>
<p2 x="1360" y="800"/>
</wire>
<wire>
<p1 x="1180" y="1440"/>
<p2 x="1260" y="1440"/>
</wire>
<wire>
<p1 x="1280" y="1440"/>
<p2 x="1360" y="1440"/>
</wire>
<wire>
<p1 x="380" y="1060"/>
<p2 x="420" y="1060"/>
</wire>
<wire>
<p1 x="1180" y="1060"/>
<p2 x="1240" y="1060"/>
</wire>
<wire>
<p1 x="1260" y="1060"/>
<p2 x="1360" y="1060"/>
</wire>
<wire>
<p1 x="480" y="680"/>
<p2 x="720" y="680"/>
</wire>
<wire>
<p1 x="1180" y="1320"/>
<p2 x="1360" y="1320"/>
</wire>
<wire>
<p1 x="260" y="300"/>
<p2 x="380" y="300"/>
</wire>
<wire>
<p1 x="1180" y="940"/>
<p2 x="1360" y="940"/>
</wire>
<wire>
<p1 x="1140" y="1580"/>
<p2 x="1540" y="1580"/>
</wire>
<wire>
<p1 x="380" y="560"/>
<p2 x="420" y="560"/>
</wire>
<wire>
<p1 x="480" y="560"/>
<p2 x="620" y="560"/>
</wire>
<wire>
<p1 x="1180" y="1200"/>
<p2 x="1360" y="1200"/>
</wire>
<wire>
<p1 x="1180" y="820"/>
<p2 x="1360" y="820"/>
</wire>
<wire>
<p1 x="1180" y="1460"/>
<p2 x="1240" y="1460"/>
</wire>
<wire>
<p1 x="1260" y="1460"/>
<p2 x="1360" y="1460"/>
</wire>
<wire>
<p1 x="500" y="1080"/>
<p2 x="520" y="1080"/>
</wire>
<wire>
<p1 x="1180" y="1080"/>
<p2 x="1220" y="1080"/>
</wire>
<wire>
<p1 x="1240" y="1080"/>
<p2 x="1360" y="1080"/>
</wire>
<wire>
<p1 x="360" y="700"/>
<p2 x="420" y="700"/>
</wire>
<wire>
<p1 x="1180" y="1340"/>
<p2 x="1360" y="1340"/>
</wire>
<wire>
<p1 x="380" y="960"/>
<p2 x="420" y="960"/>
</wire>
<wire>
<p1 x="1180" y="960"/>
<p2 x="1340" y="960"/>
</wire>
<wire>
<p1 x="1460" y="960"/>
<p2 x="1480" y="960"/>
</wire>
<wire>
<p1 x="480" y="320"/>
<p2 x="660" y="320"/>
</wire>
<wire>
<p1 x="1560" y="1600"/>
<p2 x="1640" y="1600"/>
</wire>
<wire>
<p1 x="360" y="580"/>
<p2 x="420" y="580"/>
</wire>
<wire>
<p1 x="480" y="580"/>
<p2 x="740" y="580"/>
</wire>
<wire>
<p1 x="1180" y="1220"/>
<p2 x="1360" y="1220"/>
</wire>
<wire>
<p1 x="1180" y="840"/>
<p2 x="1360" y="840"/>
</wire>
<wire>
<p1 x="1180" y="1480"/>
<p2 x="1220" y="1480"/>
</wire>
<wire>
<p1 x="1240" y="1480"/>
<p2 x="1360" y="1480"/>
</wire>
<wire>
<p1 x="360" y="1100"/>
<p2 x="420" y="1100"/>
</wire>
<wire>
<p1 x="1180" y="1100"/>
<p2 x="1200" y="1100"/>
</wire>
<wire>
<p1 x="1220" y="1100"/>
<p2 x="1360" y="1100"/>
</wire>
<wire>
<p1 x="380" y="460"/>
<p2 x="420" y="460"/>
</wire>
<wire>
<p1 x="480" y="460"/>
<p2 x="640" y="460"/>
</wire>
<wire>
<p1 x="1180" y="1360"/>
<p2 x="1340" y="1360"/>
</wire>
<wire>
<p1 x="1460" y="1360"/>
<p2 x="1480" y="1360"/>
</wire>
<wire>
<p1 x="1480" y="1360"/>
<p2 x="1640" y="1360"/>
</wire>
<wire>
<p1 x="500" y="980"/>
<p2 x="540" y="980"/>
</wire>
<wire>
<p1 x="1180" y="980"/>
<p2 x="1320" y="980"/>
</wire>
<wire>
<p1 x="1340" y="980"/>
<p2 x="1360" y="980"/>
</wire>
<wire>
<p1 x="260" y="340"/>
<p2 x="360" y="340"/>
</wire>
<wire>
<p1 x="380" y="340"/>
<p2 x="420" y="340"/>
</wire>
<wire>
<p1 x="1180" y="1240"/>
<p2 x="1360" y="1240"/>
</wire>
<wire>
<p1 x="1180" y="860"/>
<p2 x="1360" y="860"/>
</wire>
<wire>
<p1 x="380" y="860"/>
<p2 x="420" y="860"/>
</wire>
<wire>
<p1 x="1180" y="1500"/>
<p2 x="1200" y="1500"/>
</wire>
<wire>
<p1 x="1220" y="1500"/>
<p2 x="1360" y="1500"/>
</wire>
<wire>
<p1 x="1200" y="1120"/>
<p2 x="1360" y="1120"/>
</wire>
<wire>
<p1 x="360" y="480"/>
<p2 x="420" y="480"/>
</wire>
<wire>
<p1 x="480" y="480"/>
<p2 x="760" y="480"/>
</wire>
<wire>
<p1 x="1180" y="1380"/>
<p2 x="1320" y="1380"/>
</wire>
<wire>
<p1 x="1340" y="1380"/>
<p2 x="1360" y="1380"/>
</wire>
<wire>
<p1 x="1180" y="1000"/>
<p2 x="1300" y="1000"/>
</wire>
<wire>
<p1 x="1320" y="1000"/>
<p2 x="1360" y="1000"/>
</wire>
<wire>
<p1 x="360" y="1000"/>
<p2 x="420" y="1000"/>
</wire>
<wire>
<p1 x="360" y="360"/>
<p2 x="420" y="360"/>
</wire>
<wire>
<p1 x="480" y="360"/>
<p2 x="780" y="360"/>
</wire>
<wire>
<p1 x="1180" y="1260"/>
<p2 x="1360" y="1260"/>
</wire>
<wire>
<p1 x="1200" y="1520"/>
<p2 x="1360" y="1520"/>
</wire>
<wire>
<p1 x="1180" y="880"/>
<p2 x="1360" y="880"/>
</wire>
<wire>
<p1 x="500" y="880"/>
<p2 x="560" y="880"/>
</wire>
<wire>
<p1 x="1480" y="1140"/>
<p2 x="1520" y="1140"/>
</wire>
<wire>
<p1 x="1180" y="1400"/>
<p2 x="1300" y="1400"/>
</wire>
<wire>
<p1 x="1320" y="1400"/>
<p2 x="1360" y="1400"/>
</wire>
<wire>
<p1 x="1180" y="1020"/>
<p2 x="1280" y="1020"/>
</wire>
<wire>
<p1 x="1300" y="1020"/>
<p2 x="1360" y="1020"/>
</wire>
<wire>
<p1 x="260" y="380"/>
<p2 x="420" y="380"/>
</wire>
<wire>
<p1 x="640" y="460"/>
<p2 x="640" y="1300"/>
</wire>
<wire>
<p1 x="1280" y="1420"/>
<p2 x="1280" y="1440"/>
</wire>
<wire>
<p1 x="1280" y="1020"/>
<p2 x="1280" y="1040"/>
</wire>
<wire>
<p1 x="580" y="800"/>
<p2 x="580" y="1300"/>
</wire>
<wire>
<p1 x="740" y="580"/>
<p2 x="740" y="1300"/>
</wire>
<wire>
<p1 x="1220" y="1480"/>
<p2 x="1220" y="1500"/>
</wire>
<wire>
<p1 x="1220" y="1080"/>
<p2 x="1220" y="1100"/>
</wire>
<wire>
<p1 x="360" y="340"/>
<p2 x="360" y="360"/>
</wire>
<wire>
<p1 x="360" y="360"/>
<p2 x="360" y="480"/>
</wire>
<wire>
<p1 x="360" y="900"/>
<p2 x="360" y="1000"/>
</wire>
<wire>
<p1 x="360" y="700"/>
<p2 x="360" y="900"/>
</wire>
<wire>
<p1 x="360" y="480"/>
<p2 x="360" y="580"/>
</wire>
<wire>
<p1 x="360" y="1000"/>
<p2 x="360" y="1100"/>
</wire>
<wire>
<p1 x="360" y="580"/>
<p2 x="360" y="700"/>
</wire>
<wire>
<p1 x="520" y="1080"/>
<p2 x="520" y="1300"/>
</wire>
<wire>
<p1 x="1320" y="1380"/>
<p2 x="1320" y="1400"/>
</wire>
<wire>
<p1 x="1320" y="980"/>
<p2 x="1320" y="1000"/>
</wire>
<wire>
<p1 x="1480" y="1180"/>
<p2 x="1480" y="1360"/>
</wire>
<wire>
<p1 x="1480" y="960"/>
<p2 x="1480" y="1140"/>
</wire>
<wire>
<p1 x="620" y="560"/>
<p2 x="620" y="1300"/>
</wire>
<wire>
<p1 x="780" y="360"/>
<p2 x="780" y="1300"/>
</wire>
<wire>
<p1 x="1260" y="1440"/>
<p2 x="1260" y="1460"/>
</wire>
<wire>
<p1 x="1260" y="1040"/>
<p2 x="1260" y="1060"/>
</wire>
<wire>
<p1 x="560" y="880"/>
<p2 x="560" y="1300"/>
</wire>
<wire>
<p1 x="720" y="680"/>
<p2 x="720" y="1300"/>
</wire>
<wire>
<p1 x="1200" y="1500"/>
<p2 x="1200" y="1520"/>
</wire>
<wire>
<p1 x="1200" y="1100"/>
<p2 x="1200" y="1120"/>
</wire>
<wire>
<p1 x="660" y="320"/>
<p2 x="660" y="1300"/>
</wire>
<wire>
<p1 x="1300" y="1400"/>
<p2 x="1300" y="1420"/>
</wire>
<wire>
<p1 x="1300" y="1000"/>
<p2 x="1300" y="1020"/>
</wire>
<wire>
<p1 x="1240" y="1460"/>
<p2 x="1240" y="1480"/>
</wire>
<wire>
<p1 x="1240" y="1060"/>
<p2 x="1240" y="1080"/>
</wire>
<wire>
<p1 x="600" y="660"/>
<p2 x="600" y="1300"/>
</wire>
<wire>
<p1 x="760" y="480"/>
<p2 x="760" y="1300"/>
</wire>
<wire>
<p1 x="1340" y="1360"/>
<p2 x="1340" y="1380"/>
</wire>
<wire>
<p1 x="1340" y="960"/>
<p2 x="1340" y="980"/>
</wire>
<wire>
<p1 x="380" y="300"/>
<p2 x="380" y="340"/>
</wire>
<wire>
<p1 x="380" y="800"/>
<p2 x="380" y="860"/>
</wire>
<wire>
<p1 x="380" y="560"/>
<p2 x="380" y="660"/>
</wire>
<wire>
<p1 x="380" y="340"/>
<p2 x="380" y="460"/>
</wire>
<wire>
<p1 x="380" y="860"/>
<p2 x="380" y="960"/>
</wire>
<wire>
<p1 x="380" y="660"/>
<p2 x="380" y="800"/>
</wire>
<wire>
<p1 x="380" y="960"/>
<p2 x="380" y="1060"/>
</wire>
<wire>
<p1 x="380" y="460"/>
<p2 x="380" y="560"/>
</wire>
<wire>
<p1 x="540" y="980"/>
<p2 x="540" y="1300"/>
</wire>
</wires>
<measurementOrdering/>
</circuit>

2
main.dig

@ -11,7 +11,7 @@
<visualElement>
<elementName>alu.dig</elementName>
<elementAttributes/>
<pos x="540" y="580"/>
<pos x="580" y="580"/>
</visualElement>
</visualElements>
<wires/>

253
multiply-add.dig

@ -0,0 +1,253 @@
<?xml version="1.0" encoding="utf-8"?>
<circuit>
<version>1</version>
<attributes/>
<visualElements>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>S</string>
</entry>
</elementAttributes>
<pos x="1120" y="280"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>a</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1120" y="320"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>b</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1120" y="360"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
<string>32</string>
</entry>
<entry>
<string>Output Splitting</string>
<string>16,16</string>
</entry>
</elementAttributes>
<pos x="1600" y="300"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>m0</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1680" y="280"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>m1</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1680" y="340"/>
</visualElement>
<visualElement>
<elementName>Add</elementName>
<elementAttributes>
<entry>
<string>Bits</string>
<int>32</int>
</entry>
</elementAttributes>
<pos x="1420" y="300"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>c</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1120" y="400"/>
</visualElement>
<visualElement>
<elementName>BitExtender</elementName>
<elementAttributes>
<entry>
<string>inputBits</string>
<int>16</int>
</entry>
<entry>
<string>outputBits</string>
<int>32</int>
</entry>
</elementAttributes>
<pos x="1220" y="400"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>C_i</string>
</entry>
</elementAttributes>
<pos x="1120" y="440"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>C_o</string>
</entry>
</elementAttributes>
<pos x="1680" y="400"/>
</visualElement>
<visualElement>
<elementName>signed_mul.dig</elementName>
<elementAttributes/>
<pos x="1260" y="280"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="1620" y="320"/>
<p2 x="1660" y="320"/>
</wire>
<wire>
<p1 x="1360" y="320"/>
<p2 x="1420" y="320"/>
</wire>
<wire>
<p1 x="1480" y="320"/>
<p2 x="1580" y="320"/>
</wire>
<wire>
<p1 x="1120" y="320"/>
<p2 x="1180" y="320"/>
</wire>
<wire>
<p1 x="1200" y="320"/>
<p2 x="1260" y="320"/>
</wire>
<wire>
<p1 x="1580" y="400"/>
<p2 x="1680" y="400"/>
</wire>
<wire>
<p1 x="1280" y="400"/>
<p2 x="1360" y="400"/>
</wire>
<wire>
<p1 x="1120" y="400"/>
<p2 x="1220" y="400"/>
</wire>
<wire>
<p1 x="1660" y="340"/>
<p2 x="1680" y="340"/>
</wire>
<wire>
<p1 x="1400" y="340"/>
<p2 x="1420" y="340"/>
</wire>
<wire>
<p1 x="1660" y="280"/>
<p2 x="1680" y="280"/>
</wire>
<wire>
<p1 x="1120" y="280"/>
<p2 x="1260" y="280"/>
</wire>
<wire>
<p1 x="1120" y="360"/>
<p2 x="1200" y="360"/>
</wire>
<wire>
<p1 x="1120" y="440"/>
<p2 x="1400" y="440"/>
</wire>
<wire>
<p1 x="1620" y="300"/>
<p2 x="1660" y="300"/>
</wire>
<wire>
<p1 x="1480" y="300"/>
<p2 x="1600" y="300"/>
</wire>
<wire>
<p1 x="1320" y="300"/>
<p2 x="1420" y="300"/>
</wire>
<wire>
<p1 x="1180" y="300"/>
<p2 x="1260" y="300"/>
</wire>
<wire>
<p1 x="1360" y="320"/>
<p2 x="1360" y="400"/>
</wire>
<wire>
<p1 x="1200" y="320"/>
<p2 x="1200" y="360"/>
</wire>
<wire>
<p1 x="1400" y="340"/>
<p2 x="1400" y="440"/>
</wire>
<wire>
<p1 x="1580" y="320"/>
<p2 x="1580" y="400"/>
</wire>
<wire>
<p1 x="1660" y="280"/>
<p2 x="1660" y="300"/>
</wire>
<wire>
<p1 x="1660" y="320"/>
<p2 x="1660" y="340"/>
</wire>
<wire>
<p1 x="1180" y="300"/>
<p2 x="1180" y="320"/>
</wire>
</wires>
<measurementOrdering/>
</circuit>

334
registers.dig

@ -641,8 +641,78 @@
</elementAttributes>
<pos x="-360" y="840"/>
</visualElement>
<visualElement>
<elementName>Multiplexer</elementName>
<elementAttributes>
<entry>
<string>Selector Bits</string>
<int>5</int>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="1900" y="3380"/>
</visualElement>
<visualElement>
<elementName>Out</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Rc</string>
</entry>
<entry>
<string>Bits</string>
<int>16</int>
</entry>
</elementAttributes>
<pos x="2080" y="3700"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
<rotation rotation="3"/>
</entry>
<entry>
<string>NetName</string>
<string>sc</string>
</entry>
</elementAttributes>
<pos x="1920" y="4060"/>
</visualElement>
<visualElement>
<elementName>In</elementName>
<elementAttributes>
<entry>
<string>Label</string>
<string>Sc</string>
</entry>
<entry>
<string>Bits</string>
<int>5</int>
</entry>
</elementAttributes>
<pos x="-360" y="1140"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
<string>sc</string>
</entry>
</elementAttributes>
<pos x="-120" y="1140"/>
</visualElement>
</visualElements>
<wires>
<wire>
<p1 x="1700" y="3840"/>
<p2 x="1900" y="3840"/>
</wire>
<wire>
<p1 x="-120" y="260"/>
<p2 x="980" y="260"/>
@ -667,6 +737,10 @@
<p1 x="340" y="2320"/>
<p2 x="1900" y="2320"/>
</wire>
<wire>
<p1 x="1640" y="3600"/>
<p2 x="1900" y="3600"/>
</wire>
<wire>
<p1 x="-360" y="20"/>
<p2 x="100" y="20"/>
@ -683,6 +757,10 @@
<p1 x="560" y="20"/>
<p2 x="1020" y="20"/>
</wire>
<wire>
<p1 x="340" y="3860"/>
<p2 x="1900" y="3860"/>
</wire>
<wire>
<p1 x="-120" y="280"/>
<p2 x="1440" y="280"/>
@ -711,10 +789,18 @@
<p1 x="-360" y="1060"/>
<p2 x="-120" y="1060"/>
</wire>
<wire>
<p1 x="280" y="3620"/>
<p2 x="1900" y="3620"/>
</wire>
<wire>
<p1 x="220" y="2600"/>
<p2 x="1900" y="2600"/>
</wire>
<wire>
<p1 x="800" y="3880"/>
<p2 x="1900" y="3880"/>
</wire>
<wire>
<p1 x="100" y="1580"/>
<p2 x="140" y="1580"/>
@ -755,10 +841,18 @@
<p1 x="740" y="2100"/>
<p2 x="1900" y="2100"/>
</wire>
<wire>
<p1 x="220" y="3380"/>
<p2 x="1900" y="3380"/>
</wire>
<wire>
<p1 x="1260" y="2360"/>
<p2 x="1900" y="2360"/>
</wire>
<wire>
<p1 x="740" y="3640"/>
<p2 x="1900" y="3640"/>
</wire>
<wire>
<p1 x="100" y="1340"/>
<p2 x="140" y="1340"/>
@ -779,6 +873,10 @@
<p1 x="680" y="2620"/>
<p2 x="1900" y="2620"/>
</wire>
<wire>
<p1 x="1260" y="3900"/>
<p2 x="1900" y="3900"/>
</wire>
<wire>
<p1 x="120" y="1600"/>
<p2 x="140" y="1600"/>
@ -839,6 +937,10 @@
<p1 x="-360" y="840"/>
<p2 x="-140" y="840"/>
</wire>
<wire>
<p1 x="680" y="3400"/>
<p2 x="1900" y="3400"/>
</wire>
<wire>
<p1 x="100" y="1100"/>
<p2 x="140" y="1100"/>
@ -859,6 +961,10 @@
<p1 x="1720" y="2380"/>
<p2 x="1900" y="2380"/>
</wire>
<wire>
<p1 x="1200" y="3660"/>
<p2 x="1900" y="3660"/>
</wire>
<wire>
<p1 x="-360" y="80"/>
<p2 x="120" y="80"/>
@ -911,6 +1017,10 @@
<p1 x="1140" y="2640"/>
<p2 x="1900" y="2640"/>
</wire>
<wire>
<p1 x="1720" y="3920"/>
<p2 x="1900" y="3920"/>
</wire>
<wire>
<p1 x="-40" y="1620"/>
<p2 x="140" y="1620"/>
@ -967,6 +1077,10 @@
<p1 x="1660" y="2140"/>
<p2 x="1900" y="2140"/>
</wire>
<wire>
<p1 x="1140" y="3420"/>
<p2 x="1900" y="3420"/>
</wire>
<wire>
<p1 x="120" y="1120"/>
<p2 x="140" y="1120"/>
@ -1003,6 +1117,10 @@
<p1 x="360" y="2400"/>
<p2 x="1900" y="2400"/>
</wire>
<wire>
<p1 x="1660" y="3680"/>
<p2 x="1900" y="3680"/>
</wire>
<wire>
<p1 x="0" y="1380"/>
<p2 x="140" y="1380"/>
@ -1023,6 +1141,10 @@
<p1 x="1600" y="2660"/>
<p2 x="1900" y="2660"/>
</wire>
<wire>
<p1 x="360" y="3940"/>
<p2 x="1900" y="3940"/>
</wire>
<wire>
<p1 x="-120" y="360"/>
<p2 x="1420" y="360"/>
@ -1087,6 +1209,14 @@
<p1 x="1940" y="2160"/>
<p2 x="2080" y="2160"/>
</wire>
<wire>
<p1 x="1600" y="3440"/>
<p2 x="1900" y="3440"/>
</wire>
<wire>
<p1 x="-360" y="1140"/>
<p2 x="-120" y="1140"/>
</wire>
<wire>
<p1 x="40" y="1140"/>
<p2 x="140" y="1140"/>
@ -1107,10 +1237,22 @@
<p1 x="820" y="2420"/>
<p2 x="1900" y="2420"/>
</wire>
<wire>
<p1 x="300" y="3700"/>
<p2 x="1900" y="3700"/>
</wire>
<wire>
<p1 x="1940" y="3700"/>
<p2 x="2080" y="3700"/>
</wire>
<wire>
<p1 x="240" y="2680"/>
<p2 x="1900" y="2680"/>
</wire>
<wire>
<p1 x="820" y="3960"/>
<p2 x="1900" y="3960"/>
</wire>
<wire>
<p1 x="-120" y="380"/>
<p2 x="20" y="380"/>
@ -1151,10 +1293,18 @@
<p1 x="760" y="2180"/>
<p2 x="1900" y="2180"/>
</wire>
<wire>
<p1 x="240" y="3460"/>
<p2 x="1900" y="3460"/>
</wire>
<wire>
<p1 x="1280" y="2440"/>
<p2 x="1900" y="2440"/>
</wire>
<wire>
<p1 x="760" y="3720"/>
<p2 x="1900" y="3720"/>
</wire>
<wire>
<p1 x="-120" y="140"/>
<p2 x="80" y="140"/>
@ -1163,6 +1313,10 @@
<p1 x="700" y="2700"/>
<p2 x="1900" y="2700"/>
</wire>
<wire>
<p1 x="1280" y="3980"/>
<p2 x="1900" y="3980"/>
</wire>
<wire>
<p1 x="-120" y="400"/>
<p2 x="480" y="400"/>
@ -1187,10 +1341,18 @@
<p1 x="1220" y="2200"/>
<p2 x="1900" y="2200"/>
</wire>
<wire>
<p1 x="700" y="3480"/>
<p2 x="1900" y="3480"/>
</wire>
<wire>
<p1 x="1740" y="2460"/>
<p2 x="1900" y="2460"/>
</wire>
<wire>
<p1 x="1220" y="3740"/>
<p2 x="1900" y="3740"/>
</wire>
<wire>
<p1 x="-120" y="160"/>
<p2 x="540" y="160"/>
@ -1199,6 +1361,10 @@
<p1 x="1160" y="2720"/>
<p2 x="1900" y="2720"/>
</wire>
<wire>
<p1 x="1740" y="4000"/>
<p2 x="1900" y="4000"/>
</wire>
<wire>
<p1 x="100" y="1700"/>
<p2 x="140" y="1700"/>
@ -1235,6 +1401,14 @@
<p1 x="1680" y="2220"/>
<p2 x="1900" y="2220"/>
</wire>
<wire>
<p1 x="1160" y="3500"/>
<p2 x="1900" y="3500"/>
</wire>
<wire>
<p1 x="1680" y="3760"/>
<p2 x="1900" y="3760"/>
</wire>
<wire>
<p1 x="100" y="1460"/>
<p2 x="140" y="1460"/>
@ -1311,6 +1485,10 @@
<p1 x="320" y="2240"/>
<p2 x="1900" y="2240"/>
</wire>
<wire>
<p1 x="1620" y="3520"/>
<p2 x="1900" y="3520"/>
</wire>
<wire>
<p1 x="100" y="1220"/>
<p2 x="140" y="1220"/>
@ -1327,6 +1505,10 @@
<p1 x="1480" y="1220"/>
<p2 x="1520" y="1220"/>
</wire>
<wire>
<p1 x="320" y="3780"/>
<p2 x="1900" y="3780"/>
</wire>
<wire>
<p1 x="120" y="1480"/>
<p2 x="140" y="1480"/>
@ -1427,6 +1609,10 @@
<p1 x="780" y="2260"/>
<p2 x="1900" y="2260"/>
</wire>
<wire>
<p1 x="260" y="3540"/>
<p2 x="1900" y="3540"/>
</wire>
<wire>
<p1 x="120" y="1240"/>
<p2 x="140" y="1240"/>
@ -1459,6 +1645,10 @@
<p1 x="1500" y="1240"/>
<p2 x="1520" y="1240"/>
</wire>
<wire>
<p1 x="780" y="3800"/>
<p2 x="1900" y="3800"/>
</wire>
<wire>
<p1 x="-20" y="1500"/>
<p2 x="140" y="1500"/>
@ -1535,6 +1725,10 @@
<p1 x="1240" y="2280"/>
<p2 x="1900" y="2280"/>
</wire>
<wire>
<p1 x="720" y="3560"/>
<p2 x="1900" y="3560"/>
</wire>
<wire>
<p1 x="20" y="1260"/>
<p2 x="140" y="1260"/>
@ -1551,6 +1745,10 @@
<p1 x="1400" y="1260"/>
<p2 x="1520" y="1260"/>
</wire>
<wire>
<p1 x="1240" y="3820"/>
<p2 x="1900" y="3820"/>
</wire>
<wire>
<p1 x="-120" y="240"/>
<p2 x="520" y="240"/>
@ -1595,6 +1793,10 @@
<p1 x="1700" y="2300"/>
<p2 x="1900" y="2300"/>
</wire>
<wire>
<p1 x="1180" y="3580"/>
<p2 x="1900" y="3580"/>
</wire>
<wire>
<p1 x="0" y="460"/>
<p2 x="0" y="1380"/>
@ -1615,6 +1817,10 @@
<p1 x="1280" y="1720"/>
<p2 x="1280" y="2440"/>
</wire>
<wire>
<p1 x="1280" y="3200"/>
<p2 x="1280" y="3980"/>
</wire>
<wire>
<p1 x="1920" y="2480"/>
<p2 x="1920" y="2520"/>
@ -1623,10 +1829,18 @@
<p1 x="1920" y="3240"/>
<p2 x="1920" y="3280"/>
</wire>
<wire>
<p1 x="1920" y="4020"/>
<p2 x="1920" y="4060"/>
</wire>
<wire>
<p1 x="260" y="820"/>
<p2 x="260" y="1120"/>
</wire>
<wire>
<p1 x="260" y="2760"/>
<p2 x="260" y="3540"/>
</wire>
<wire>
<p1 x="260" y="2000"/>
<p2 x="260" y="2760"/>
@ -1663,6 +1877,10 @@
<p1 x="1160" y="1000"/>
<p2 x="1160" y="1960"/>
</wire>
<wire>
<p1 x="1160" y="2720"/>
<p2 x="1160" y="3500"/>
</wire>