improved the generic barrel-shifter

This commit is contained in:
hneemann 2019-07-11 15:03:23 +02:00
parent d11dd76c25
commit ccd3f1864c
3 changed files with 39 additions and 50 deletions

View File

@ -19,7 +19,7 @@
<intFormat>bin</intFormat> <intFormat>bin</intFormat>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="740" y="140"/> <pos x="740" y="160"/>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>In</elementName> <elementName>In</elementName>
@ -41,7 +41,7 @@
<value v="1" z="false"/> <value v="1" z="false"/>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="160" y="120"/> <pos x="160" y="140"/>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>In</elementName> <elementName>In</elementName>
@ -55,7 +55,7 @@
<int>5</int> <int>5</int>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="380" y="160"/> <pos x="380" y="180"/>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>barrelShifter.dig</elementName> <elementName>barrelShifter.dig</elementName>
@ -70,7 +70,7 @@
dir := &quot;left&quot;;</string> dir := &quot;left&quot;;</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="420" y="120"/> <pos x="420" y="140"/>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Out</elementName> <elementName>Out</elementName>
@ -162,7 +162,7 @@ end loop</dataString>
</testData> </testData>
</entry> </entry>
</elementAttributes> </elementAttributes>
<pos x="580" y="200"/> <pos x="580" y="220"/>
</visualElement> </visualElement>
<visualElement> <visualElement>
<elementName>Testcase</elementName> <elementName>Testcase</elementName>
@ -373,10 +373,6 @@ end loop</dataString>
</visualElement> </visualElement>
</visualElements> </visualElements>
<wires> <wires>
<wire>
<p1 x="380" y="160"/>
<p2 x="420" y="160"/>
</wire>
<wire> <wire>
<p1 x="160" y="400"/> <p1 x="160" y="400"/>
<p2 x="420" y="400"/> <p2 x="420" y="400"/>
@ -385,6 +381,14 @@ end loop</dataString>
<p1 x="480" y="960"/> <p1 x="480" y="960"/>
<p2 x="740" y="960"/> <p2 x="740" y="960"/>
</wire> </wire>
<wire>
<p1 x="480" y="160"/>
<p2 x="740" y="160"/>
</wire>
<wire>
<p1 x="380" y="180"/>
<p2 x="420" y="180"/>
</wire>
<wire> <wire>
<p1 x="480" y="420"/> <p1 x="480" y="420"/>
<p2 x="740" y="420"/> <p2 x="740" y="420"/>
@ -401,17 +405,13 @@ end loop</dataString>
<p1 x="380" y="440"/> <p1 x="380" y="440"/>
<p2 x="420" y="440"/> <p2 x="420" y="440"/>
</wire> </wire>
<wire>
<p1 x="160" y="120"/>
<p2 x="420" y="120"/>
</wire>
<wire> <wire>
<p1 x="480" y="680"/> <p1 x="480" y="680"/>
<p2 x="740" y="680"/> <p2 x="740" y="680"/>
</wire> </wire>
<wire> <wire>
<p1 x="480" y="140"/> <p1 x="160" y="140"/>
<p2 x="740" y="140"/> <p2 x="420" y="140"/>
</wire> </wire>
<wire> <wire>
<p1 x="380" y="700"/> <p1 x="380" y="700"/>

View File

@ -88,11 +88,23 @@
<string>generic</string> <string>generic</string>
<string>dataBits:=16; <string>dataBits:=16;
shiftBits:=int(4); shiftBits:=int(4);
dir:=&quot;left&quot;; circuit:=&quot;shift-fixed-left-inc.dig&quot;;
if (isPresent(args)) { if (isPresent(args)) {
dir=args.dir;
dataBits=args.dataBits; if (args.dir=&quot;right&quot;) {
shiftBits=bitsNeededFor(args.dataBits-1); circuit=&quot;shift-fixed-right-inc.dig&quot;;
} else {
if (args.dir=&quot;arith&quot;) {
circuit=&quot;shift-fixed-arith-right-inc.dig&quot;;
} else {
if (args.dir!=&quot;left&quot;) {
panic(&quot;only \&quot;left\&quot;, \&quot;right\&quot; or \&quot;arith\&quot; is allowed as direction, not \&quot;&quot;+args.dir+&quot;\&quot;!&quot;);
}
}
}
dataBits=args.dataBits;
shiftBits=bitsNeededFor(args.dataBits-1);
}</string> }</string>
</entry> </entry>
</elementAttributes> </elementAttributes>

View File

@ -18,17 +18,7 @@ shift:=8;
if (isPresent(args)) { if (isPresent(args)) {
dataBits = args.dataBits; dataBits = args.dataBits;
shift = 1&lt;&lt;(args.shiftBits-1); shift = 1&lt;&lt;(args.shiftBits-1);
if (args.dir=&quot;right&quot;) { setCircuit(args.circuit);
setCircuit(&quot;shift-fixed-right-inc.dig&quot;);
} else {
if (args.dir=&quot;arith&quot;) {
setCircuit(&quot;shift-fixed-arith-right-inc.dig&quot;);
} else {
if (args.dir!=&quot;left&quot;) {
panic(&quot;only \&quot;left\&quot;, \&quot;right\&quot; or \&quot;arith\&quot; is allowed as direction, not \&quot;&quot;+args.dir+&quot;\&quot;!&quot;);
}
}
}
}</string> }</string>
</entry> </entry>
</elementAttributes> </elementAttributes>
@ -109,29 +99,16 @@ if (isPresent(args)) {
<string>generic</string> <string>generic</string>
<string>dataBits:=16; <string>dataBits:=16;
shiftBits:=3; shiftBits:=3;
dir:=&quot;left&quot;; circuit:=&quot;shift-fixed-left-inc.dig&quot;;
if (isPresent(args)) { if (isPresent(args)) {
dataBits = args.dataBits; dataBits = args.dataBits;
shiftBits = args.shiftBits-1; if (args.shiftBits=2) {
dir=args.dir; export shift := 1;
if (args.shiftBits=2) { setCircuit(args.circuit);
export shift := 1;
if (args.dir=&quot;right&quot;) {
setCircuit(&quot;shift-fixed-right-inc.dig&quot;);
} else { } else {
if (args.dir=&quot;arith&quot;) { shiftBits = args.shiftBits-1;
setCircuit(&quot;shift-fixed-arith-right-inc.dig&quot;); circuit=args.circuit;
} else {
if (args.dir!=&quot;left&quot;) {
panic(&quot;only \&quot;left\&quot;, \&quot;right\&quot; or \&quot;arith\&quot; is allowed as direction, not \&quot;&quot;+args.dir+&quot;\&quot;!&quot;);
}
setCircuit(&quot;shift-fixed-left-inc.dig&quot;);
}
} }
}
}</string> }</string>
</entry> </entry>
</elementAttributes> </elementAttributes>