mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 23:06:22 -04:00
improved the generic barrel-shifter
This commit is contained in:
parent
d11dd76c25
commit
ccd3f1864c
@ -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 := "left";</string>
|
dir := "left";</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"/>
|
||||||
|
@ -88,11 +88,23 @@
|
|||||||
<string>generic</string>
|
<string>generic</string>
|
||||||
<string>dataBits:=16;
|
<string>dataBits:=16;
|
||||||
shiftBits:=int(4);
|
shiftBits:=int(4);
|
||||||
dir:="left";
|
circuit:="shift-fixed-left-inc.dig";
|
||||||
if (isPresent(args)) {
|
if (isPresent(args)) {
|
||||||
dir=args.dir;
|
|
||||||
dataBits=args.dataBits;
|
if (args.dir="right") {
|
||||||
shiftBits=bitsNeededFor(args.dataBits-1);
|
circuit="shift-fixed-right-inc.dig";
|
||||||
|
} else {
|
||||||
|
if (args.dir="arith") {
|
||||||
|
circuit="shift-fixed-arith-right-inc.dig";
|
||||||
|
} else {
|
||||||
|
if (args.dir!="left") {
|
||||||
|
panic("only \"left\", \"right\" or \"arith\" is allowed as direction, not \""+args.dir+"\"!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dataBits=args.dataBits;
|
||||||
|
shiftBits=bitsNeededFor(args.dataBits-1);
|
||||||
}</string>
|
}</string>
|
||||||
</entry>
|
</entry>
|
||||||
</elementAttributes>
|
</elementAttributes>
|
||||||
|
@ -18,17 +18,7 @@ shift:=8;
|
|||||||
if (isPresent(args)) {
|
if (isPresent(args)) {
|
||||||
dataBits = args.dataBits;
|
dataBits = args.dataBits;
|
||||||
shift = 1<<(args.shiftBits-1);
|
shift = 1<<(args.shiftBits-1);
|
||||||
if (args.dir="right") {
|
setCircuit(args.circuit);
|
||||||
setCircuit("shift-fixed-right-inc.dig");
|
|
||||||
} else {
|
|
||||||
if (args.dir="arith") {
|
|
||||||
setCircuit("shift-fixed-arith-right-inc.dig");
|
|
||||||
} else {
|
|
||||||
if (args.dir!="left") {
|
|
||||||
panic("only \"left\", \"right\" or \"arith\" is allowed as direction, not \""+args.dir+"\"!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}</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:="left";
|
circuit:="shift-fixed-left-inc.dig";
|
||||||
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="right") {
|
|
||||||
setCircuit("shift-fixed-right-inc.dig");
|
|
||||||
} else {
|
} else {
|
||||||
if (args.dir="arith") {
|
shiftBits = args.shiftBits-1;
|
||||||
setCircuit("shift-fixed-arith-right-inc.dig");
|
circuit=args.circuit;
|
||||||
} else {
|
|
||||||
if (args.dir!="left") {
|
|
||||||
panic("only \"left\", \"right\" or \"arith\" is allowed as direction, not \""+args.dir+"\"!");
|
|
||||||
}
|
|
||||||
setCircuit("shift-fixed-left-inc.dig");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}</string>
|
}</string>
|
||||||
</entry>
|
</entry>
|
||||||
</elementAttributes>
|
</elementAttributes>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user