mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-24 04:42:51 -04:00
adds a async ram
This commit is contained in:
parent
e4b900f297
commit
577de5f4ab
@ -98,20 +98,6 @@
|
||||
</elementAttributes>
|
||||
<pos x="220" y="160"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>RAMDualPort</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>AddrBits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="420" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
<elementAttributes>
|
||||
@ -202,7 +188,7 @@
|
||||
<string>1*4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="520" y="220"/>
|
||||
<pos x="620" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -216,7 +202,7 @@
|
||||
<string>5</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="220"/>
|
||||
<pos x="680" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -230,7 +216,7 @@
|
||||
<string>7</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="260"/>
|
||||
<pos x="680" y="240"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -244,7 +230,7 @@
|
||||
<string>9</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="300"/>
|
||||
<pos x="680" y="280"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -258,7 +244,7 @@
|
||||
<string>11</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="340"/>
|
||||
<pos x="680" y="320"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -324,7 +310,7 @@
|
||||
<visualElement>
|
||||
<elementName>PowerSupply</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="620" y="440"/>
|
||||
<pos x="680" y="40"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -342,7 +328,7 @@
|
||||
<value v="1" z="false"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="440"/>
|
||||
<pos x="640" y="40"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -356,7 +342,7 @@
|
||||
<string>8</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="480"/>
|
||||
<pos x="640" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
@ -366,7 +352,39 @@
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="320" y="200"/>
|
||||
<pos x="500" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Driver</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>flipSelPos</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="580" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>RAMAsync</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>AddrBits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>*</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="420" y="180"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
@ -382,25 +400,17 @@
|
||||
<p1 x="220" y="320"/>
|
||||
<p2 x="260" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="640" y="320"/>
|
||||
<p2 x="680" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="160"/>
|
||||
<p2 x="260" y="160"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="480"/>
|
||||
<p2 x="400" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="480"/>
|
||||
<p2 x="600" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="260"/>
|
||||
<p2 x="580" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="260"/>
|
||||
<p2 x="420" y="260"/>
|
||||
<p2 x="580" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="40"/>
|
||||
@ -410,37 +420,49 @@
|
||||
<p1 x="220" y="40"/>
|
||||
<p2 x="260" y="40"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="640" y="40"/>
|
||||
<p2 x="680" y="40"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="200"/>
|
||||
<p2 x="320" y="200"/>
|
||||
<p2 x="420" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="200"/>
|
||||
<p2 x="260" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="200"/>
|
||||
<p2 x="420" y="200"/>
|
||||
<p1 x="640" y="200"/>
|
||||
<p2 x="680" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="600" y="460"/>
|
||||
<p2 x="620" y="460"/>
|
||||
<p1 x="600" y="200"/>
|
||||
<p2 x="620" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="480" y="200"/>
|
||||
<p2 x="500" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="200"/>
|
||||
<p2 x="560" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="460"/>
|
||||
<p2 x="300" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="300"/>
|
||||
<p2 x="580" y="300"/>
|
||||
<p1 x="640" y="240"/>
|
||||
<p2 x="680" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="240"/>
|
||||
<p2 x="260" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="240"/>
|
||||
<p2 x="420" y="240"/>
|
||||
<p1 x="640" y="80"/>
|
||||
<p2 x="660" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="80"/>
|
||||
@ -450,10 +472,6 @@
|
||||
<p1 x="360" y="400"/>
|
||||
<p2 x="380" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="340"/>
|
||||
<p2 x="580" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="180"/>
|
||||
<p2 x="420" y="180"/>
|
||||
@ -467,16 +485,20 @@
|
||||
<p2 x="280" y="500"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="440"/>
|
||||
<p2 x="620" y="440"/>
|
||||
<p1 x="640" y="280"/>
|
||||
<p2 x="680" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="280"/>
|
||||
<p2 x="260" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="120"/>
|
||||
<p2 x="260" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="280"/>
|
||||
<p2 x="260" y="280"/>
|
||||
<p1 x="660" y="60"/>
|
||||
<p2 x="680" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="380"/>
|
||||
@ -486,18 +508,10 @@
|
||||
<p1 x="240" y="380"/>
|
||||
<p2 x="280" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="540" y="220"/>
|
||||
<p2 x="580" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="220"/>
|
||||
<p2 x="420" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="480" y="220"/>
|
||||
<p2 x="520" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="460"/>
|
||||
<p2 x="240" y="500"/>
|
||||
@ -507,12 +521,12 @@
|
||||
<p2 x="240" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="260"/>
|
||||
<p2 x="400" y="480"/>
|
||||
<p1 x="580" y="220"/>
|
||||
<p2 x="580" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="600" y="460"/>
|
||||
<p2 x="600" y="480"/>
|
||||
<p1 x="660" y="60"/>
|
||||
<p2 x="660" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="40"/>
|
||||
@ -520,11 +534,8 @@
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="220"/>
|
||||
<p2 x="380" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="380" y="240"/>
|
||||
<p2 x="380" y="400"/>
|
||||
</wire>
|
||||
</wires>
|
||||
<measurementOrdering/>
|
||||
</circuit>
|
@ -20,24 +20,6 @@
|
||||
</entry>
|
||||
</attributes>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>RAMDualPort</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>AddrBits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Addr Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="460" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
<elementAttributes>
|
||||
@ -54,7 +36,7 @@
|
||||
<string>1*4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="560" y="220"/>
|
||||
<pos x="660" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -68,7 +50,7 @@
|
||||
<string>11</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="740" y="280"/>
|
||||
<pos x="840" y="260"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -82,7 +64,7 @@
|
||||
<string>5</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="600" y="220"/>
|
||||
<pos x="700" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -96,7 +78,7 @@
|
||||
<string>7</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="740" y="240"/>
|
||||
<pos x="840" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
@ -110,7 +92,7 @@
|
||||
<string>9</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="600" y="260"/>
|
||||
<pos x="700" y="240"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
@ -120,7 +102,7 @@
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="400" y="200"/>
|
||||
<pos x="520" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
@ -134,7 +116,7 @@
|
||||
<string>4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="80"/>
|
||||
<pos x="380" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -148,7 +130,7 @@
|
||||
<string>1</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="80"/>
|
||||
<pos x="200" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -162,7 +144,7 @@
|
||||
<string>15</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="100"/>
|
||||
<pos x="340" y="100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -176,7 +158,7 @@
|
||||
<string>14</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="120"/>
|
||||
<pos x="200" y="120"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -190,7 +172,7 @@
|
||||
<string>13</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="140"/>
|
||||
<pos x="340" y="140"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Splitter</elementName>
|
||||
@ -204,7 +186,7 @@
|
||||
<string>4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="200"/>
|
||||
<pos x="380" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -218,7 +200,7 @@
|
||||
<string>4</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="200"/>
|
||||
<pos x="200" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -232,7 +214,7 @@
|
||||
<string>6</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="220"/>
|
||||
<pos x="340" y="220"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -246,7 +228,7 @@
|
||||
<string>10</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="240"/>
|
||||
<pos x="200" y="240"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -260,7 +242,7 @@
|
||||
<string>12</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="260"/>
|
||||
<pos x="340" y="260"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -278,12 +260,12 @@
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="300"/>
|
||||
<pos x="200" y="300"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="180" y="300"/>
|
||||
<pos x="220" y="300"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -301,27 +283,27 @@
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="420"/>
|
||||
<pos x="200" y="420"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="180" y="420"/>
|
||||
<pos x="220" y="420"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Or</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="280" y="380"/>
|
||||
<pos x="320" y="380"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="280" y="300"/>
|
||||
<pos x="320" y="300"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>PowerSupply</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="200" y="480"/>
|
||||
<pos x="240" y="480"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -339,7 +321,7 @@
|
||||
<value v="1" z="false"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="480"/>
|
||||
<pos x="200" y="480"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
@ -353,169 +335,194 @@
|
||||
<string>8</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="160" y="520"/>
|
||||
<pos x="200" y="520"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Driver</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>flipSelPos</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="600" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>RAMAsync</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>*</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>AddrBits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Bits</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="440" y="180"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="240" y="300"/>
|
||||
<p2 x="260" y="380"/>
|
||||
<p1 x="280" y="300"/>
|
||||
<p2 x="300" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="340"/>
|
||||
<p2 x="240" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="320"/>
|
||||
<p2 x="400" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="480"/>
|
||||
<p2 x="200" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="300" y="260"/>
|
||||
<p2 x="340" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="260"/>
|
||||
<p2 x="600" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="260"/>
|
||||
<p2 x="460" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="300" y="100"/>
|
||||
<p2 x="340" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="420"/>
|
||||
<p2 x="180" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="420"/>
|
||||
<p2 x="240" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="420"/>
|
||||
<p1 x="300" y="340"/>
|
||||
<p2 x="280" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="200"/>
|
||||
<p2 x="460" y="200"/>
|
||||
<p1 x="380" y="320"/>
|
||||
<p2 x="420" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="200"/>
|
||||
<p2 x="340" y="200"/>
|
||||
<p1 x="200" y="480"/>
|
||||
<p2 x="240" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="200"/>
|
||||
<p2 x="400" y="200"/>
|
||||
<p1 x="340" y="260"/>
|
||||
<p2 x="380" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="520"/>
|
||||
<p2 x="180" y="520"/>
|
||||
<p1 x="680" y="260"/>
|
||||
<p2 x="840" y="260"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="300"/>
|
||||
<p2 x="240" y="300"/>
|
||||
<p1 x="340" y="100"/>
|
||||
<p2 x="380" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="300"/>
|
||||
<p2 x="180" y="300"/>
|
||||
<p1 x="200" y="420"/>
|
||||
<p2 x="220" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="300"/>
|
||||
<p1 x="260" y="420"/>
|
||||
<p2 x="280" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="420"/>
|
||||
<p2 x="320" y="420"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="200"/>
|
||||
<p2 x="440" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="200"/>
|
||||
<p2 x="380" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="200"/>
|
||||
<p2 x="700" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="620" y="200"/>
|
||||
<p2 x="660" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="500" y="200"/>
|
||||
<p2 x="520" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="560" y="200"/>
|
||||
<p2 x="580" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="520"/>
|
||||
<p2 x="220" y="520"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="300"/>
|
||||
<p2 x="280" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="300" y="140"/>
|
||||
<p2 x="340" y="140"/>
|
||||
<p1 x="200" y="300"/>
|
||||
<p2 x="220" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="400"/>
|
||||
<p2 x="440" y="400"/>
|
||||
<p1 x="280" y="300"/>
|
||||
<p2 x="320" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="240"/>
|
||||
<p2 x="740" y="240"/>
|
||||
<p1 x="340" y="140"/>
|
||||
<p2 x="380" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="240"/>
|
||||
<p2 x="340" y="240"/>
|
||||
<p1 x="680" y="240"/>
|
||||
<p2 x="700" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="240"/>
|
||||
<p2 x="460" y="240"/>
|
||||
<p1 x="200" y="240"/>
|
||||
<p2 x="380" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="360" y="80"/>
|
||||
<p2 x="440" y="80"/>
|
||||
<p1 x="380" y="400"/>
|
||||
<p2 x="600" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="80"/>
|
||||
<p2 x="340" y="80"/>
|
||||
<p1 x="400" y="80"/>
|
||||
<p2 x="420" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="340"/>
|
||||
<p2 x="280" y="340"/>
|
||||
<p1 x="200" y="80"/>
|
||||
<p2 x="380" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="180"/>
|
||||
<p2 x="460" y="180"/>
|
||||
<p1 x="300" y="340"/>
|
||||
<p2 x="320" y="340"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="500"/>
|
||||
<p2 x="200" y="500"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="280"/>
|
||||
<p2 x="740" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="160" y="120"/>
|
||||
<p2 x="340" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="260" y="380"/>
|
||||
<p2 x="280" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="300" y="220"/>
|
||||
<p2 x="340" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="580" y="220"/>
|
||||
<p2 x="600" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="520" y="220"/>
|
||||
<p2 x="560" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="220"/>
|
||||
<p2 x="460" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="220"/>
|
||||
<p2 x="400" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="400" y="240"/>
|
||||
<p2 x="400" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="500"/>
|
||||
<p2 x="180" y="520"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="80"/>
|
||||
<p1 x="420" y="180"/>
|
||||
<p2 x="440" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="440" y="260"/>
|
||||
<p2 x="440" y="400"/>
|
||||
<p1 x="220" y="500"/>
|
||||
<p2 x="240" y="500"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="120"/>
|
||||
<p2 x="380" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="220"/>
|
||||
<p2 x="840" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="340" y="220"/>
|
||||
<p2 x="380" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="220"/>
|
||||
<p2 x="440" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="300" y="380"/>
|
||||
<p2 x="320" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="220"/>
|
||||
<p2 x="420" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="420" y="80"/>
|
||||
<p2 x="420" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="600" y="220"/>
|
||||
<p2 x="600" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="220" y="500"/>
|
||||
<p2 x="220" y="520"/>
|
||||
</wire>
|
||||
</wires>
|
||||
<measurementOrdering/>
|
||||
</circuit>
|
@ -162,6 +162,13 @@ public class ElementAttributes implements HGSMap {
|
||||
return get(Keys.LABEL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if this is flagged as program memory.
|
||||
*/
|
||||
public boolean isProgramMemory() {
|
||||
return getLabel().contains("PROGRAM MEMORY") || get(Keys.IS_PROGRAM_MEMORY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the int number format
|
||||
*/
|
||||
|
@ -63,7 +63,7 @@ public class BlockRAMDualPort extends Node implements Element, RAMInterface {
|
||||
size = 1 << addrBits;
|
||||
memory = new DataField(size);
|
||||
label = attr.getLabel();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
}
|
||||
|
||||
|
||||
|
@ -79,7 +79,7 @@ public class EEPROM extends Node implements Element, RAMInterface, ROMInterface
|
||||
.setToHighZ()
|
||||
.setPinDescription(DESCRIPTION)
|
||||
.setBidirectional();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
formatter = attr.getValueFormatter();
|
||||
}
|
||||
|
||||
|
127
src/main/java/de/neemann/digital/core/memory/RAMAsync.java
Normal file
127
src/main/java/de/neemann/digital/core/memory/RAMAsync.java
Normal file
@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Helmut Neemann.
|
||||
* Use of this source code is governed by the GPL v3 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
package de.neemann.digital.core.memory;
|
||||
|
||||
import de.neemann.digital.core.Node;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
import de.neemann.digital.core.element.Keys;
|
||||
|
||||
import static de.neemann.digital.core.element.PinInfo.input;
|
||||
|
||||
/**
|
||||
* A asynchronous memory
|
||||
*/
|
||||
public class RAMAsync extends Node implements Element, RAMInterface {
|
||||
|
||||
/**
|
||||
* The RAMs {@link ElementTypeDescription}
|
||||
*/
|
||||
public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(RAMAsync.class,
|
||||
input("A"),
|
||||
input("D"),
|
||||
input("we"))
|
||||
.addAttribute(Keys.ROTATE)
|
||||
.addAttribute(Keys.BITS)
|
||||
.addAttribute(Keys.ADDR_BITS)
|
||||
.addAttribute(Keys.IS_PROGRAM_MEMORY)
|
||||
.addAttribute(Keys.INVERTER_CONFIG)
|
||||
.addAttribute(Keys.LABEL);
|
||||
|
||||
private final DataField memory;
|
||||
private final ObservableValue output;
|
||||
private final int addrBits;
|
||||
private final int bits;
|
||||
private final String label;
|
||||
private final int size;
|
||||
private final boolean isProgramMemory;
|
||||
private ObservableValue we;
|
||||
private ObservableValue addrIn;
|
||||
private ObservableValue dataIn;
|
||||
private long outputVal;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param attr the elements attributes
|
||||
*/
|
||||
public RAMAsync(ElementAttributes attr) {
|
||||
super(true);
|
||||
bits = attr.get(Keys.BITS);
|
||||
output = new ObservableValue("Q", bits).setPinDescription(DESCRIPTION);
|
||||
addrBits = attr.get(Keys.ADDR_BITS);
|
||||
size = 1 << addrBits;
|
||||
memory = new DataField(size);
|
||||
label = attr.getLabel();
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setInputs(ObservableValues inputs) throws NodeException {
|
||||
addrIn = inputs.get(0).checkBits(addrBits, this).addObserverToValue(this);
|
||||
dataIn = inputs.get(1).checkBits(bits, this).addObserverToValue(this);
|
||||
we = inputs.get(2).checkBits(1, this).addObserverToValue(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readInputs() throws NodeException {
|
||||
int addr = (int) addrIn.getValue();
|
||||
if (we.getBool())
|
||||
memory.setData(addr, dataIn.getValue());
|
||||
outputVal = memory.getDataWord(addr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeOutputs() throws NodeException {
|
||||
output.setValue(outputVal);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObservableValues getOutputs() {
|
||||
return output.asList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataField getMemory() {
|
||||
return memory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAddrBits() {
|
||||
return addrBits;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProgramMemory() {
|
||||
return isProgramMemory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProgramMemory(DataField dataField) {
|
||||
memory.setDataFrom(dataField);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDataBits() {
|
||||
return bits;
|
||||
}
|
||||
|
||||
}
|
@ -72,7 +72,7 @@ public class RAMDualAccess extends Node implements Element, RAMInterface {
|
||||
size = 1 << addrBits;
|
||||
memory = new DataField(size);
|
||||
label = attr.getLabel();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -66,7 +66,7 @@ public class RAMDualPort extends Node implements Element, RAMInterface {
|
||||
size = 1 << addrBits;
|
||||
memory = createDataField(attr, size);
|
||||
label = attr.getLabel();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
formatter = attr.getValueFormatter();
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ public class RAMSinglePortSel extends Node implements Element, RAMInterface {
|
||||
.setToHighZ()
|
||||
.setPinDescription(DESCRIPTION)
|
||||
.setBidirectional();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -71,7 +71,7 @@ public class ROM extends Node implements Element, ROMInterface, ProgramMemory {
|
||||
addrBits = attr.get(Keys.ADDR_BITS);
|
||||
autoLoad = attr.get(Keys.AUTO_RELOAD_ROM);
|
||||
label = attr.getLabel();
|
||||
isProgramMemory = attr.get(Keys.IS_PROGRAM_MEMORY);
|
||||
isProgramMemory = attr.isProgramMemory();
|
||||
if (autoLoad) {
|
||||
hexFile = attr.getFile(LAST_DATA_FILE_KEY);
|
||||
} else
|
||||
|
@ -189,6 +189,7 @@ public class ElementLibrary implements Iterable<ElementLibrary.ElementContainer>
|
||||
.add(RAMSinglePortSel.DESCRIPTION)
|
||||
.add(RegisterFile.DESCRIPTION)
|
||||
.add(RAMDualAccess.DESCRIPTION)
|
||||
.add(RAMAsync.DESCRIPTION)
|
||||
.add(GraphicCard.DESCRIPTION))
|
||||
.add(new LibraryNode(Lang.get("lib_eeprom"))
|
||||
.add(EEPROM.DESCRIPTION)
|
||||
|
@ -97,6 +97,7 @@ public final class ShapeFactory {
|
||||
map.put(RAMDualAccess.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMDualAccess.DESCRIPTION));
|
||||
map.put(RegisterFile.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RegisterFile.DESCRIPTION, 4));
|
||||
map.put(BlockRAMDualPort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, BlockRAMDualPort.DESCRIPTION));
|
||||
map.put(RAMAsync.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMAsync.DESCRIPTION));
|
||||
|
||||
map.put(In.DESCRIPTION.getName(), InputShape::new);
|
||||
map.put(Reset.DESCRIPTION.getName(), ResetShape::new);
|
||||
|
@ -625,6 +625,15 @@
|
||||
</string>
|
||||
<string name="elem_RAMDualPort_pin_str">Ist diese Leitung high, wird das Datenwort gespeichert, wenn der Takt ansteigt.</string>
|
||||
|
||||
<string name="elem_RAMAsync">RAM, asynchron</string>
|
||||
<string name="elem_RAMAsync_tt">Solange we gesetzt ist, wird gespeichert. Entspricht einem sehr einfachem RAM, bei
|
||||
welchem die Adress- und Datenleitungen direkt mit den Decodern der Speicherzellen verbunden sind.</string>
|
||||
<string name="elem_RAMAsync_pin_A">Die Adresse, an der gelesen bzw. geschrieben wird.</string>
|
||||
<string name="elem_RAMAsync_pin_D">Die Daten, die gespeichert werden sollen.</string>
|
||||
<string name="elem_RAMAsync_pin_we">Schreibfreigabe. Solange hier eine 1 anliegt, wird bei jeder Änderung von A oder D
|
||||
der Wert der an D anliegt an der Adresse gespeichert welche bei A anliegt.</string>
|
||||
<string name="elem_RAMAsync_pin_Q">Ausgabe der gespeicherten Daten.</string>
|
||||
|
||||
<string name="elem_BlockRAMDualPort">Block-RAM, getrennte Ports</string>
|
||||
<string name="elem_BlockRAMDualPort_short">RAM</string>
|
||||
<string name="elem_BlockRAMDualPort_tt">Ein RAM Modul mit getrennten Daten-Anschlüssen für Lesen und Schreiben.
|
||||
|
@ -691,6 +691,15 @@
|
||||
stored.
|
||||
</string>
|
||||
|
||||
<string name="elem_RAMAsync">RAM, async.</string>
|
||||
<string name="elem_RAMAsync_tt">As long as we is set, it is stored. Corresponds to a very simple RAM, where the
|
||||
address and data lines are directly connected to the decoders of the memory cells.</string>
|
||||
<string name="elem_RAMAsync_pin_A">The address at which reading or writing takes place.</string>
|
||||
<string name="elem_RAMAsync_pin_D">The data to be stored.</string>
|
||||
<string name="elem_RAMAsync_pin_we">Write enable. As long as this input is set to 1, the value applied to D is
|
||||
stored at the address applied to A whenever A or D is changed.</string>
|
||||
<string name="elem_RAMAsync_pin_Q">Output of the stored data.</string>
|
||||
|
||||
<string name="elem_RegisterFile">Register File</string>
|
||||
<string name="elem_RegisterFile_short">Register</string>
|
||||
<string name="elem_RegisterFile_tt">Memory with one port that allows to write and two ports that allow to read from
|
||||
|
Loading…
x
Reference in New Issue
Block a user