diff --git a/docs/img/FSM.drawio b/docs/img/FSM.drawio index bd839a9b01be6c20eb7b6840fcbab9fd73e2336d..99d7eb328651c1c52020d0df7e39679ef199adbb 100644 --- a/docs/img/FSM.drawio +++ b/docs/img/FSM.drawio @@ -1,93 +1,84 @@ -<mxfile host="Electron" modified="2023-04-28T15:06:41.325Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="FiJOiTXp0n2vq3d9UAum" version="21.2.1" type="device"> +<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:135.0) Gecko/20100101 Firefox/135.0" version="26.1.3"> <diagram name="Page-1" id="lufUWjv2mjaYaQ6cVEt1"> - <mxGraphModel dx="798" dy="1290" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <mxGraphModel dx="2170" dy="1977" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="bw7OO0sNot4gaAuLXok9-1" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-1" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> <mxGeometry x="240" y="40" width="160" height="80" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-2" value="<font style="font-size: 21px;" face="Ubuntu Mono">Wait Sample</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-2" value="<font style="font-size: 21px;" face="Ubuntu Mono">Wait Sample</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> <mxGeometry x="250" y="50" width="140" height="60" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-3" value="Store" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-3" value="Store" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> <mxGeometry x="240" y="160" width="160" height="80" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-5" value="Processing<br>Loop" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-5" value="Processing<br>Loop 1" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> <mxGeometry x="240" y="280" width="160" height="80" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-6" value="Output" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-6" value="Output 1" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> <mxGeometry x="240" y="400" width="160" height="80" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-7" value="Wait End<br>Sample" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> - <mxGeometry x="240" y="520" width="160" height="80" as="geometry" /> + <mxCell id="bw7OO0sNot4gaAuLXok9-7" value="Wait End<br>Sample" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="1262" width="160" height="80" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-8" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-1" target="bw7OO0sNot4gaAuLXok9-3"> + <mxCell id="bw7OO0sNot4gaAuLXok9-8" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="bw7OO0sNot4gaAuLXok9-1" target="bw7OO0sNot4gaAuLXok9-3" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="560" y="650" as="sourcePoint" /> <mxPoint x="610" y="600" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-9" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-5"> + <mxCell id="bw7OO0sNot4gaAuLXok9-9" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="bw7OO0sNot4gaAuLXok9-5" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="319.76" y="240" as="sourcePoint" /> <mxPoint x="319.76" y="320" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-10" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-6"> + <mxCell id="bw7OO0sNot4gaAuLXok9-10" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="bw7OO0sNot4gaAuLXok9-6" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="319.76" y="360" as="sourcePoint" /> <mxPoint x="320" y="400" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-11" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-6" target="bw7OO0sNot4gaAuLXok9-7"> + <mxCell id="bw7OO0sNot4gaAuLXok9-11" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="bw7OO0sNot4gaAuLXok9-6" target="0pIHDGSdodyyA8C9MTDx-32" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="319.76" y="480" as="sourcePoint" /> - <mxPoint x="319.76" y="560" as="targetPoint" /> + <mxPoint x="320" y="521" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-12" value="" style="curved=1;endArrow=block;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-7" target="bw7OO0sNot4gaAuLXok9-1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-12" value="" style="curved=1;endArrow=block;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;endFill=1;exitX=0.275;exitY=0.975;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="bw7OO0sNot4gaAuLXok9-7" target="bw7OO0sNot4gaAuLXok9-1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="510" y="320" as="sourcePoint" /> + <mxPoint x="217" y="599" as="sourcePoint" /> <mxPoint x="560" y="270" as="targetPoint" /> <Array as="points"> - <mxPoint x="320" y="670" /> - <mxPoint x="170" y="640" /> + <mxPoint x="237" y="1371" /> + <mxPoint x="185" y="1300" /> <mxPoint x="180" y="80" /> <mxPoint x="230" y="20" /> </Array> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-14" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-14" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="300" y="140" as="sourcePoint" /> <mxPoint x="340" y="140" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-17" value="<font style="font-size: 15px;" face="Ubuntu Mono">Condition 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="bw7OO0sNot4gaAuLXok9-14"> + <mxCell id="bw7OO0sNot4gaAuLXok9-17" value="<font face="Ubuntu Mono">I_inputSampleValid = 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" parent="bw7OO0sNot4gaAuLXok9-14" vertex="1" connectable="0"> <mxGeometry x="0.564" relative="1" as="geometry"> <mxPoint x="10" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-15" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-15" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="300" y="380" as="sourcePoint" /> <mxPoint x="340" y="380" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-16" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> - <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="300" y="620" as="sourcePoint" /> - <mxPoint x="340" y="620" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-18" value="<font style="font-size: 15px;" face="Ubuntu Mono">Condition 2</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-18" value="<font face="Ubuntu Mono">I_processingDone = 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" parent="1" vertex="1" connectable="0"> <mxGeometry x="340.00279069767436" y="380" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-19" value="<font style="font-size: 15px;" face="Ubuntu Mono">Condition 3</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="1"> - <mxGeometry x="340.00279069767436" y="620" as="geometry" /> - </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-20" value="" style="curved=1;endArrow=block;html=1;rounded=0;endFill=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-20" value="" style="curved=1;endArrow=block;html=1;rounded=0;endFill=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="bw7OO0sNot4gaAuLXok9-1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="350" y="-10" as="sourcePoint" /> <mxPoint x="460" y="90" as="targetPoint" /> @@ -96,54 +87,210 @@ </Array> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-21" value="<font face="Ubuntu Mono"><span style="font-size: 15px;">Rst = '1'</span></font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-21" value="<font face="Ubuntu Mono"><span style="font-size: 15px;">Rst = '1'</span></font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];" parent="1" vertex="1" connectable="0"> <mxGeometry x="350.00279069767436" y="-10" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-23" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift = '0'<br>InitAddress = '0'<br>IncrAddress = '0'<br>InitSum = '0'<br>LoadSum = '0'<br>LoadOutput = '1'<br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;container=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-23" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_2 = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">InitAddress = 1<br></font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">InitSum = 1</font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;container=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> <mxGeometry x="480" y="380" width="240" height="110" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-24" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-24" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="439.77" as="sourcePoint" /> <mxPoint x="480" y="439.77" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-33" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift =&nbsp;<br>InitAddress =&nbsp;<br>IncrAddress =&nbsp;<br>InitSum =&nbsp;<br>LoadSum =&nbsp;<br>LoadOutput =&nbsp;<br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-33" value="" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> <mxGeometry x="480" y="20" width="240" height="110" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-34" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-34" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="79.80999999999995" as="sourcePoint" /> <mxPoint x="480" y="79.80999999999995" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-30" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift =&nbsp;<br>InitAddress =&nbsp;<br>IncrAddress =&nbsp;<br>InitSum =&nbsp;<br>LoadSum =&nbsp;<br>LoadOutput =&nbsp;<br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-30" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_1 = 1<br>InitAddress = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">InitSum = 1</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono"><br></font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> <mxGeometry x="480" y="140" width="240" height="110" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-31" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-31" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="199.80999999999995" as="sourcePoint" /> <mxPoint x="480" y="199.80999999999995" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-25" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift =&nbsp;<br>InitAddress =&nbsp;<br>IncrAddress =&nbsp;<br>InitSum =&nbsp;<br>LoadSum =&nbsp;<br>LoadOutput =&nbsp;<br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-25" value="<font style="font-size: 15px;" face="Ubuntu Mono">IncrAddress = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">LoadSum = 1<br></font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> <mxGeometry x="480" y="260" width="240" height="110" as="geometry" /> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-27" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1"> + <mxCell id="bw7OO0sNot4gaAuLXok9-27" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="319.80999999999995" as="sourcePoint" /> <mxPoint x="480" y="319.80999999999995" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-36" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift =&nbsp;<br>InitAddress =&nbsp;<br>IncrAddress =&nbsp;<br>InitSum =&nbsp;<br>LoadSum =&nbsp;<br>LoadOutput =&nbsp;<br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"> - <mxGeometry x="480" y="500" width="240" height="110" as="geometry" /> + <mxCell id="bw7OO0sNot4gaAuLXok9-36" value="" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="1242" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-37" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="1301.81" as="sourcePoint" /> + <mxPoint x="480" y="1301.81" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-32" value="Processing<br>Loop 2.1" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="526" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-33" value="Output 2" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="897" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-35" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="0pIHDGSdodyyA8C9MTDx-33" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="319.76" y="606" as="sourcePoint" /> + <mxPoint x="320" y="646" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-38" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="300" y="877" as="sourcePoint" /> + <mxPoint x="340" y="877" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-39" value="<font face="Ubuntu Mono">I_processingDone = 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" parent="1" vertex="1" connectable="0"> + <mxGeometry x="340.00279069767436" y="877" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-40" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_3 = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">InitAddress = 1<br></font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">InitSum = 1</font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;container=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="877" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-41" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="936.77" as="sourcePoint" /> + <mxPoint x="480" y="936.77" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-44" value="<font style="font-size: 15px;" face="Ubuntu Mono">IncrAddress = 1 <br>LoadSum = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">coef_select = 01</font></div><div><br></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="506" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-45" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="565.81" as="sourcePoint" /> + <mxPoint x="480" y="565.81" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-47" value="Processing<br>Loop 3" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="1021" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-48" value="Output 3" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="1141" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-50" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="0pIHDGSdodyyA8C9MTDx-48" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="319.76" y="1101" as="sourcePoint" /> + <mxPoint x="320" y="1141" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-53" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="300" y="1121" as="sourcePoint" /> + <mxPoint x="340" y="1121" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-54" value="<font face="Ubuntu Mono">I_processingDone = 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" parent="1" vertex="1" connectable="0"> + <mxGeometry x="340.00279069767436" y="1121" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-55" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadOutput = 1</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;container=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="1121" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-56" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="1180.77" as="sourcePoint" /> + <mxPoint x="480" y="1180.77" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-59" value="<font style="font-size: 15px;" face="Ubuntu Mono">IncrAddress = 1 <br>LoadSum = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">coef_select = 11</font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="1001" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-60" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="1060.81" as="sourcePoint" /> + <mxPoint x="480" y="1060.81" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-61" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="0pIHDGSdodyyA8C9MTDx-33" target="0pIHDGSdodyyA8C9MTDx-47" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="329.76" y="862" as="sourcePoint" /> + <mxPoint x="320" y="1129" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-62" value="Processing<br>Loop 2.2" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="771" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-63" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="0pIHDGSdodyyA8C9MTDx-62" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="319.76" y="606" as="sourcePoint" /> + <mxPoint x="319.76" y="686" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-67" value="<font style="font-size: 15px;" face="Ubuntu Mono">IncrAddress = 1 <br>LoadSum = 1<br></font><div><font style="font-size: 15px;" face="Ubuntu Mono">coef_select = 10</font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="751" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-68" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="810.81" as="sourcePoint" /> + <mxPoint x="480" y="810.81" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-76" value="Address reset" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="240" y="651" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-77" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="0pIHDGSdodyyA8C9MTDx-76" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="319.76" y="611" as="sourcePoint" /> + <mxPoint x="319.76" y="691" as="targetPoint" /> + </mxGeometry> </mxCell> - <mxCell id="bw7OO0sNot4gaAuLXok9-37" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1"> + <mxCell id="0pIHDGSdodyyA8C9MTDx-78" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="400" y="559.81" as="sourcePoint" /> - <mxPoint x="480" y="559.81" as="targetPoint" /> + <mxPoint x="319.76" y="731" as="sourcePoint" /> + <mxPoint x="320" y="771" as="targetPoint" /> </mxGeometry> </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-81" value="<font style="font-size: 15px;" face="Ubuntu Mono">InitAddress = 1</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="480" y="631" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-82" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="690.81" as="sourcePoint" /> + <mxPoint x="480" y="690.81" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-83" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="0pIHDGSdodyyA8C9MTDx-48" target="bw7OO0sNot4gaAuLXok9-7" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="329.76" y="991" as="sourcePoint" /> + <mxPoint x="330" y="1031" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="0pIHDGSdodyyA8C9MTDx-84" value="<div><font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_1 = 0</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_2 = 0</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_3 = 0</font></div><font style="font-size: 15px;" face="Ubuntu Mono">InitAddress = 0<br>IncrAddress = 0</font><div><font style="font-size: 15px;" face="Ubuntu Mono">InitSum = 0</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">LoadSum = 0</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">LoadOutput = 0</font></div><div><font style="font-size: 15px;" face="Ubuntu Mono">coef_select[0:1] = 00</font></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="-40" y="30" width="197" height="230" as="geometry" /> + </mxCell> + <mxCell id="BXdns4b3WUyTXZ1IiLj_-1" value="<div><font face="Ubuntu Mono">I_inputSampleValid = 0</font></div><div><font face="Ubuntu Mono"><br></font></div>" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="20" y="1286" width="176" height="37" as="geometry" /> + </mxCell> + <mxCell id="BXdns4b3WUyTXZ1IiLj_-2" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="175" y="1299" as="sourcePoint" /> + <mxPoint x="215" y="1299" as="targetPoint" /> + <Array as="points"> + <mxPoint x="177" y="1299" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="BXdns4b3WUyTXZ1IiLj_-3" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="302" y="628" as="sourcePoint" /> + <mxPoint x="342" y="628" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="BXdns4b3WUyTXZ1IiLj_-4" value="<font face="Ubuntu Mono">I_processingDone = 1</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" parent="1" vertex="1" connectable="0"> + <mxGeometry x="342.00279069767436" y="628" as="geometry" /> + </mxCell> </root> </mxGraphModel> </diagram> diff --git a/docs/img/FSM.png b/docs/img/FSM.png index 7f6db881fff5cdfb9351c0348dfec49ff082516d..ce3e56e224739d61ccb8245a4121e76dc23d728c 100644 Binary files a/docs/img/FSM.png and b/docs/img/FSM.png differ diff --git a/docs/img/OperativeUnit.drawio b/docs/img/OperativeUnit.drawio index 9bb0e4be6bf247cea4d08b3cc71698bff753d164..92b94638ef85556e0e5c7b27b3bacb30938901cf 100644 --- a/docs/img/OperativeUnit.drawio +++ b/docs/img/OperativeUnit.drawio @@ -1,274 +1,279 @@ -<mxfile host="Electron" modified="2023-05-02T15:25:12.389Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="-5AHYXFrDsyYUGHEENvj" version="21.2.1" type="device"> +<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:135.0) Gecko/20100101 Firefox/135.0" version="26.1.3"> <diagram name="Page-1" id="HnFJvu7xD7cCTyxCgidn"> - <mxGraphModel dx="1430" dy="830" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <mxGraphModel dx="1930" dy="1977" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="uwrRxOYGmB2LabIKb8In-1" value="<font face="Ubuntu Mono">Address<br style="font-size: 17px;">Generator</font>" style="rounded=0;whiteSpace=wrap;html=1;fontSize=17;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;" vertex="1" parent="1"> - <mxGeometry x="340" y="40" width="120" height="80" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-1" value="<font face="Ubuntu Mono">Address<br style="font-size: 17px;">Generator</font>" style="rounded=0;whiteSpace=wrap;html=1;fontSize=17;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="340" y="-60" width="120" height="80" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-2" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> - <mxGeometry x="340" y="90" width="10" height="20" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-2" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="340" y="-10" width="10" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-3" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-3" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" parent="1" target="uwrRxOYGmB2LabIKb8In-1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="300" y="60" as="sourcePoint" /> - <mxPoint x="550" y="160" as="targetPoint" /> + <mxPoint x="300" y="-40" as="sourcePoint" /> + <mxPoint x="550" y="60" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-4" value="I_initAddress" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-3"> + <mxCell id="uwrRxOYGmB2LabIKb8In-4" value="I_initAddress" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" parent="uwrRxOYGmB2LabIKb8In-3" vertex="1" connectable="0"> <mxGeometry x="0.45" y="1" relative="1" as="geometry"> <mxPoint x="-29" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-5" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-5" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="300" y="79.83" as="sourcePoint" /> - <mxPoint x="340" y="79.83" as="targetPoint" /> + <mxPoint x="300" y="-20.17" as="sourcePoint" /> + <mxPoint x="340" y="-20.17" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-6" value="I_incrAddress" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-5"> + <mxCell id="uwrRxOYGmB2LabIKb8In-6" value="I_incrAddress" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" parent="uwrRxOYGmB2LabIKb8In-5" vertex="1" connectable="0"> <mxGeometry x="0.45" y="1" relative="1" as="geometry"> <mxPoint x="-29" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-7" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-7" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="460" y="60" as="sourcePoint" /> - <mxPoint x="500" y="60" as="targetPoint" /> + <mxPoint x="460" y="-40" as="sourcePoint" /> + <mxPoint x="500" y="-40" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-8" value="O_processingDone" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-7"> + <mxCell id="uwrRxOYGmB2LabIKb8In-8" value="O_processingDone" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" parent="uwrRxOYGmB2LabIKb8In-7" vertex="1" connectable="0"> <mxGeometry x="0.45" y="1" relative="1" as="geometry"> <mxPoint x="11" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-9" value="Samples" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" vertex="1" parent="1"> - <mxGeometry x="160" y="200" width="120" height="280" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-9" value="Samples" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="160" y="100" width="120" height="280" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-11" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-11" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="160" y="280" as="sourcePoint" /> - <mxPoint x="280" y="280" as="targetPoint" /> + <mxPoint x="160" y="180" as="sourcePoint" /> + <mxPoint x="280" y="180" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-12" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-12" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="160" y="240" as="sourcePoint" /> - <mxPoint x="280" y="240" as="targetPoint" /> + <mxPoint x="160" y="140" as="sourcePoint" /> + <mxPoint x="280" y="140" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-13" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-13" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="160" y="440" as="sourcePoint" /> - <mxPoint x="280" y="440" as="targetPoint" /> + <mxPoint x="160" y="340" as="sourcePoint" /> + <mxPoint x="280" y="340" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-14" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;strokeWidth=2;" vertex="1" parent="1"> - <mxGeometry x="190" y="330" width="280" height="20" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-14" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="190" y="230" width="280" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-15" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-15" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="280" y="220" as="sourcePoint" /> - <mxPoint x="320" y="220" as="targetPoint" /> + <mxPoint x="280" y="120" as="sourcePoint" /> + <mxPoint x="320" y="120" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-17" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-17" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="280" y="260" as="sourcePoint" /> - <mxPoint x="320" y="260" as="targetPoint" /> + <mxPoint x="280" y="160" as="sourcePoint" /> + <mxPoint x="320" y="160" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-18" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-18" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="280" y="460" as="sourcePoint" /> - <mxPoint x="320" y="460" as="targetPoint" /> + <mxPoint x="280" y="360" as="sourcePoint" /> + <mxPoint x="320" y="360" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-21" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-21" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="300" y="440" as="sourcePoint" /> - <mxPoint x="300" y="280" as="targetPoint" /> + <mxPoint x="300" y="340" as="sourcePoint" /> + <mxPoint x="300" y="180" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-25" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-25" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="219.89" y="430" as="sourcePoint" /> - <mxPoint x="219.89" y="460" as="targetPoint" /> + <mxPoint x="219.89" y="330" as="sourcePoint" /> + <mxPoint x="219.89" y="360" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-28" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-28" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="219.94" y="230" as="sourcePoint" /> - <mxPoint x="219.94" y="260" as="targetPoint" /> + <mxPoint x="219.94" y="130" as="sourcePoint" /> + <mxPoint x="219.94" y="160" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-29" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-29" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="219.94" y="270" as="sourcePoint" /> - <mxPoint x="219.94" y="300" as="targetPoint" /> + <mxPoint x="219.94" y="170" as="sourcePoint" /> + <mxPoint x="219.94" y="200" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-30" value="Coefficients" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" vertex="1" parent="1"> - <mxGeometry x="520" y="200" width="120" height="280" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-30" value="Coefficients" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="520" y="100" width="120" height="280" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-31" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-31" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="280" as="sourcePoint" /> - <mxPoint x="640" y="280" as="targetPoint" /> + <mxPoint x="520" y="180" as="sourcePoint" /> + <mxPoint x="640" y="180" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-32" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-32" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="240" as="sourcePoint" /> - <mxPoint x="640" y="240" as="targetPoint" /> + <mxPoint x="520" y="140" as="sourcePoint" /> + <mxPoint x="640" y="140" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-33" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-33" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="440" as="sourcePoint" /> - <mxPoint x="640" y="440" as="targetPoint" /> + <mxPoint x="520" y="340" as="sourcePoint" /> + <mxPoint x="640" y="340" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-34" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" vertex="1" parent="1"> - <mxGeometry x="330" y="330" width="280" height="20" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-34" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="330" y="230" width="280" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-35" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-35" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="220" as="sourcePoint" /> - <mxPoint x="480" y="220" as="targetPoint" /> + <mxPoint x="520" y="120" as="sourcePoint" /> + <mxPoint x="480" y="120" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-38" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-38" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="500" y="440" as="sourcePoint" /> - <mxPoint x="500" y="280" as="targetPoint" /> + <mxPoint x="500" y="340" as="sourcePoint" /> + <mxPoint x="500" y="180" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-42" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-42" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="260" as="sourcePoint" /> - <mxPoint x="480" y="260" as="targetPoint" /> + <mxPoint x="520" y="160" as="sourcePoint" /> + <mxPoint x="480" y="160" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-43" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-43" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="520" y="460" as="sourcePoint" /> - <mxPoint x="480" y="460" as="targetPoint" /> + <mxPoint x="520" y="360" as="sourcePoint" /> + <mxPoint x="480" y="360" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-45" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-1" target="uwrRxOYGmB2LabIKb8In-14"> + <mxCell id="uwrRxOYGmB2LabIKb8In-45" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="uwrRxOYGmB2LabIKb8In-1" target="uwrRxOYGmB2LabIKb8In-14" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="400" y="160" as="sourcePoint" /> - <mxPoint x="440" y="160" as="targetPoint" /> + <mxPoint x="400" y="60" as="sourcePoint" /> + <mxPoint x="440" y="60" as="targetPoint" /> <Array as="points"> - <mxPoint x="400" y="160" /> + <mxPoint x="400" y="60" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-46" value="SR_ReadAddress" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-45"> + <mxCell id="uwrRxOYGmB2LabIKb8In-46" value="SR_ReadAddress" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" parent="uwrRxOYGmB2LabIKb8In-45" vertex="1" connectable="0"> <mxGeometry x="0.45" y="1" relative="1" as="geometry"> <mxPoint x="41" y="-51" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-47" value="" style="endArrow=block;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-34"> + <mxCell id="uwrRxOYGmB2LabIKb8In-47" value="" style="endArrow=block;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endFill=1;" parent="1" target="uwrRxOYGmB2LabIKb8In-34" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="400" y="120" as="sourcePoint" /> - <mxPoint x="340" y="220" as="targetPoint" /> + <mxPoint x="400" y="20" as="sourcePoint" /> + <mxPoint x="340" y="120" as="targetPoint" /> <Array as="points"> - <mxPoint x="400" y="160" /> + <mxPoint x="400" y="60" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-49" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-50"> + <mxCell id="uwrRxOYGmB2LabIKb8In-49" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="uwrRxOYGmB2LabIKb8In-14" target="NDYOjcKuVLoNuB3YkQ-f-90" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="340" y="339.71" as="sourcePoint" /> - <mxPoint x="380" y="339.71" as="targetPoint" /> + <mxPoint x="240" y="450" as="targetPoint" /> <Array as="points"> + <mxPoint x="350" y="240" /> <mxPoint x="350" y="340" /> - <mxPoint x="350" y="490" /> + <mxPoint x="350" y="410" /> + <mxPoint x="220" y="410" /> + <mxPoint x="220" y="458" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-50" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-50" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> <mxGeometry x="360" y="500" width="80" height="80" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-51" value="" style="endArrow=block;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-34" target="uwrRxOYGmB2LabIKb8In-50"> + <mxCell id="uwrRxOYGmB2LabIKb8In-51" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=2;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="uwrRxOYGmB2LabIKb8In-34" target="NDYOjcKuVLoNuB3YkQ-f-52" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="350" y="349.71" as="sourcePoint" /> - <mxPoint x="382" y="542" as="targetPoint" /> + <mxPoint x="430" y="430" as="targetPoint" /> <Array as="points"> - <mxPoint x="450" y="340" /> - <mxPoint x="450" y="490" /> + <mxPoint x="450" y="240" /> + <mxPoint x="450" y="400" /> + <mxPoint x="560" y="400" /> + <mxPoint x="560" y="453" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-52" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-50"> + <mxCell id="uwrRxOYGmB2LabIKb8In-52" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-50" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="420" y="610" as="sourcePoint" /> <mxPoint x="470" y="560" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-53" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-50"> + <mxCell id="uwrRxOYGmB2LabIKb8In-53" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-50" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="382" y="598" as="sourcePoint" /> <mxPoint x="438" y="542" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-54" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-54" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> <mxGeometry x="360" y="650" width="80" height="80" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-55" value="" style="endArrow=block;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-54"> + <mxCell id="uwrRxOYGmB2LabIKb8In-55" value="" style="endArrow=block;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-50" target="uwrRxOYGmB2LabIKb8In-54" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="400" y="620" as="sourcePoint" /> <mxPoint x="360" y="710" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-56" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-54"> + <mxCell id="uwrRxOYGmB2LabIKb8In-56" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-54" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="438" y="568" as="sourcePoint" /> <mxPoint x="382" y="512" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-57" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-54"> + <mxCell id="uwrRxOYGmB2LabIKb8In-57" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-54" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="450" y="700" as="sourcePoint" /> <mxPoint x="370" y="700" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-58" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-58" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" parent="1" vertex="1"> <mxGeometry x="160" y="660" width="120" height="60" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-59" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-59" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> <mxGeometry x="160" y="690" width="10" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-63" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> - <mxGeometry x="160" y="450" width="10" height="20" as="geometry" /> + <mxCell id="uwrRxOYGmB2LabIKb8In-63" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="160" y="350" width="10" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-64" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-58" target="uwrRxOYGmB2LabIKb8In-54"> + <mxCell id="uwrRxOYGmB2LabIKb8In-64" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-58" target="uwrRxOYGmB2LabIKb8In-54" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="410" y="580" as="sourcePoint" /> + <mxPoint x="305" y="590" as="sourcePoint" /> <mxPoint x="340" y="650" as="targetPoint" /> <Array as="points"> - <mxPoint x="220" y="620" /> - <mxPoint x="330" y="620" /> + <mxPoint x="220" y="590" /> + <mxPoint x="330" y="590" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-65" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-58"> + <mxCell id="uwrRxOYGmB2LabIKb8In-65" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-54" target="uwrRxOYGmB2LabIKb8In-58" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="230" y="670" as="sourcePoint" /> <mxPoint x="382" y="672" as="targetPoint" /> @@ -278,7 +283,7 @@ </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-67" value="" style="endArrow=block;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=2;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-68"> + <mxCell id="uwrRxOYGmB2LabIKb8In-67" value="" style="endArrow=block;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=2;" parent="1" target="uwrRxOYGmB2LabIKb8In-68" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="399.97" y="730" as="sourcePoint" /> <mxPoint x="399.97" y="810" as="targetPoint" /> @@ -288,138 +293,651 @@ </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-68" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;rotation=90;strokeWidth=2;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-68" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;rotation=90;strokeWidth=2;" parent="1" vertex="1"> <mxGeometry x="480" y="780" width="120" height="60" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-69" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-69" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> <mxGeometry x="510" y="840" width="10" height="20" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-70" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0.007;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=2;" edge="1" parent="1" source="uwrRxOYGmB2LabIKb8In-68"> + <mxCell id="uwrRxOYGmB2LabIKb8In-70" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0.007;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=2;" parent="1" source="uwrRxOYGmB2LabIKb8In-68" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="570" y="809.98" as="sourcePoint" /> <mxPoint x="650" y="810" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-71" value="O_Y" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-71" value="O_Y" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" parent="1" vertex="1" connectable="0"> <mxGeometry x="650.0017647058825" y="810.0000000000002" as="geometry" /> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-72" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeWidth=2;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-9"> + <mxCell id="uwrRxOYGmB2LabIKb8In-72" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" target="uwrRxOYGmB2LabIKb8In-9" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="150" y="120" as="sourcePoint" /> - <mxPoint x="250" y="170" as="targetPoint" /> + <mxPoint x="150" y="20" as="sourcePoint" /> + <mxPoint x="250" y="70" as="targetPoint" /> <Array as="points"> - <mxPoint x="220" y="120" /> - <mxPoint x="230" y="120" /> - <mxPoint x="250" y="140" /> + <mxPoint x="220" y="20" /> + <mxPoint x="230" y="20" /> + <mxPoint x="250" y="40" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-74" value="I_inputSample" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-72"> + <mxCell id="uwrRxOYGmB2LabIKb8In-74" value="I_inputSample" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;" parent="uwrRxOYGmB2LabIKb8In-72" vertex="1" connectable="0"> <mxGeometry x="-0.9128" y="-1" relative="1" as="geometry"> <mxPoint x="-7" y="-1" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-73" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-9"> + <mxCell id="uwrRxOYGmB2LabIKb8In-73" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" target="uwrRxOYGmB2LabIKb8In-9" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="150" y="150" as="sourcePoint" /> - <mxPoint x="190" y="190" as="targetPoint" /> + <mxPoint x="150" y="50" as="sourcePoint" /> + <mxPoint x="190" y="90" as="targetPoint" /> <Array as="points"> - <mxPoint x="180" y="150" /> - <mxPoint x="190" y="160" /> + <mxPoint x="180" y="50" /> + <mxPoint x="190" y="60" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-76" value="I_loadShift" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-73"> + <mxCell id="uwrRxOYGmB2LabIKb8In-76" value="I_loadShift1" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" parent="uwrRxOYGmB2LabIKb8In-73" vertex="1" connectable="0"> <mxGeometry x="-0.7861" relative="1" as="geometry"> <mxPoint x="-9" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-77" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-77" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="130" y="630" as="sourcePoint" /> - <mxPoint x="170" y="660" as="targetPoint" /> + <mxPoint x="135" y="630" as="sourcePoint" /> + <mxPoint x="175" y="660" as="targetPoint" /> <Array as="points"> - <mxPoint x="160" y="630" /> - <mxPoint x="170" y="640" /> + <mxPoint x="165" y="630" /> + <mxPoint x="175" y="640" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-78" value="I_loadSum" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-77"> + <mxCell id="uwrRxOYGmB2LabIKb8In-78" value="I_loadSum" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" parent="uwrRxOYGmB2LabIKb8In-77" vertex="1" connectable="0"> <mxGeometry x="-0.7298" y="1" relative="1" as="geometry"> <mxPoint x="-9" y="1" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-79" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="uwrRxOYGmB2LabIKb8In-58"> + <mxCell id="uwrRxOYGmB2LabIKb8In-79" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="130" y="610" as="sourcePoint" /> - <mxPoint x="170" y="641" as="targetPoint" /> + <mxPoint x="135" y="610" as="sourcePoint" /> + <mxPoint x="195" y="660" as="targetPoint" /> <Array as="points"> - <mxPoint x="170" y="610" /> - <mxPoint x="190" y="630" /> + <mxPoint x="175" y="610" /> + <mxPoint x="195" y="630" /> </Array> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-80" value="I_initSum" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-79"> + <mxCell id="uwrRxOYGmB2LabIKb8In-80" value="I_initSum" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" parent="uwrRxOYGmB2LabIKb8In-79" vertex="1" connectable="0"> <mxGeometry x="-0.7298" y="1" relative="1" as="geometry"> <mxPoint x="-13" y="1" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-81" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-81" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="130" y="830" as="sourcePoint" /> <mxPoint x="510" y="830" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-82" value="I_loadY" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-81"> + <mxCell id="uwrRxOYGmB2LabIKb8In-82" value="I_loadY" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" parent="uwrRxOYGmB2LabIKb8In-81" vertex="1" connectable="0"> <mxGeometry x="-0.9221" y="-1" relative="1" as="geometry"> <mxPoint x="-15" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-83" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-83" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="590" y="820" as="sourcePoint" /> <mxPoint x="610" y="800" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-84" value="??" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-83"> + <mxCell id="uwrRxOYGmB2LabIKb8In-84" value="11 bits" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="uwrRxOYGmB2LabIKb8In-83" vertex="1" connectable="0"> <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> <mxPoint x="5" y="-4" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-85" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-85" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="440" y="820" as="sourcePoint" /> <mxPoint x="460" y="800" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-86" value="??" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-85"> + <mxCell id="uwrRxOYGmB2LabIKb8In-86" value="(11, 0)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="uwrRxOYGmB2LabIKb8In-85" vertex="1" connectable="0"> <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> <mxPoint x="5" y="-4" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-87" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-87" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="390" y="620" as="sourcePoint" /> <mxPoint x="410" y="600" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-88" value="??" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-87"> + <mxCell id="uwrRxOYGmB2LabIKb8In-88" value="(12,10)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="uwrRxOYGmB2LabIKb8In-87" vertex="1" connectable="0"> <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> <mxPoint x="5" y="-4" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-89" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxCell id="uwrRxOYGmB2LabIKb8In-89" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="180" y="130" as="sourcePoint" /> - <mxPoint x="200" y="110" as="targetPoint" /> + <mxPoint x="180" y="30" as="sourcePoint" /> + <mxPoint x="200" y="10" as="targetPoint" /> </mxGeometry> </mxCell> - <mxCell id="uwrRxOYGmB2LabIKb8In-90" value="8" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" vertex="1" connectable="0" parent="uwrRxOYGmB2LabIKb8In-89"> + <mxCell id="uwrRxOYGmB2LabIKb8In-90" value="11 bits" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="uwrRxOYGmB2LabIKb8In-89" vertex="1" connectable="0"> <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> <mxPoint x="5" y="-4" as="offset" /> </mxGeometry> </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-31" value="Coefficients" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="760" y="100" width="120" height="280" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-32" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="180" as="sourcePoint" /> + <mxPoint x="880" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-33" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="140" as="sourcePoint" /> + <mxPoint x="880" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-34" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="340" as="sourcePoint" /> + <mxPoint x="880" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-35" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="570" y="230" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-36" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="120" as="sourcePoint" /> + <mxPoint x="720" y="120" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-37" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="740" y="340" as="sourcePoint" /> + <mxPoint x="740" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-38" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="160" as="sourcePoint" /> + <mxPoint x="720" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-39" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="360" as="sourcePoint" /> + <mxPoint x="720" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-40" value="Coefficients" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="970" y="100" width="120" height="280" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-41" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="180" as="sourcePoint" /> + <mxPoint x="1090" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-42" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="140" as="sourcePoint" /> + <mxPoint x="1090" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-43" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="340" as="sourcePoint" /> + <mxPoint x="1090" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-44" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="780" y="230" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-45" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="120" as="sourcePoint" /> + <mxPoint x="930" y="120" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-46" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="950" y="340" as="sourcePoint" /> + <mxPoint x="950" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-47" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="160" as="sourcePoint" /> + <mxPoint x="930" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-48" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="970" y="360" as="sourcePoint" /> + <mxPoint x="930" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-49" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=2;entryX=0.621;entryY=1.15;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-52" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="702" y="240" as="sourcePoint" /> + <mxPoint x="550" y="470" as="targetPoint" /> + <Array as="points"> + <mxPoint x="692" y="240" /> + <mxPoint x="690" y="470" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-50" value="" style="endArrow=block;html=1;rounded=0;entryX=0.424;entryY=1.025;entryDx=0;entryDy=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=2;entryPerimeter=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-52" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="912" y="230" as="sourcePoint" /> + <mxPoint x="880" y="502" as="targetPoint" /> + <Array as="points"> + <mxPoint x="902" y="230" /> + <mxPoint x="900" y="488" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-51" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" target="uwrRxOYGmB2LabIKb8In-50" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="515.86" y="480" as="sourcePoint" /> + <mxPoint x="430" y="510" as="targetPoint" /> + <Array as="points"> + <mxPoint x="465.86" y="480" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-52" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="470" y="470" width="110" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-53" value="Samples" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="-60" y="100" width="120" height="280" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-54" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-60" y="180" as="sourcePoint" /> + <mxPoint x="60" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-55" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-60" y="140" as="sourcePoint" /> + <mxPoint x="60" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-56" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-60" y="340" as="sourcePoint" /> + <mxPoint x="60" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-57" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="-30" y="230" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-58" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="60" y="120" as="sourcePoint" /> + <mxPoint x="100" y="120" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-59" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="60" y="160" as="sourcePoint" /> + <mxPoint x="100" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-60" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="60" y="360" as="sourcePoint" /> + <mxPoint x="100" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-61" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="80" y="340" as="sourcePoint" /> + <mxPoint x="80" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-62" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-0.11000000000001364" y="330" as="sourcePoint" /> + <mxPoint x="-0.11000000000001364" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-63" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-0.060000000000002274" y="130" as="sourcePoint" /> + <mxPoint x="-0.060000000000002274" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-64" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-0.060000000000002274" y="170" as="sourcePoint" /> + <mxPoint x="-0.060000000000002274" y="200" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-65" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="-60" y="350" width="10" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-66" value="Samples" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="-280" y="100" width="120" height="280" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-67" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-280" y="180" as="sourcePoint" /> + <mxPoint x="-160" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-68" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-280" y="140" as="sourcePoint" /> + <mxPoint x="-160" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-69" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-280" y="340" as="sourcePoint" /> + <mxPoint x="-160" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-70" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="-250" y="230" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-71" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-160" y="120" as="sourcePoint" /> + <mxPoint x="-120" y="120" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-72" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-160" y="160" as="sourcePoint" /> + <mxPoint x="-120" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-73" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-160" y="360" as="sourcePoint" /> + <mxPoint x="-120" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-74" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-140" y="340" as="sourcePoint" /> + <mxPoint x="-140" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-75" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-220.11" y="330" as="sourcePoint" /> + <mxPoint x="-220.11" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-76" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-220.06" y="130" as="sourcePoint" /> + <mxPoint x="-220.06" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-77" value="" style="endArrow=block;html=1;rounded=0;endFill=1;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-220.06" y="170" as="sourcePoint" /> + <mxPoint x="-220.06" y="200" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-78" value="" style="triangle;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="-280" y="350" width="10" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-79" value="Coefficients" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;fontFamily=Ubuntu Mono;fontSize=17;" parent="1" vertex="1"> + <mxGeometry x="1190" y="100" width="120" height="280" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="180" as="sourcePoint" /> + <mxPoint x="1310" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-81" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="140" as="sourcePoint" /> + <mxPoint x="1310" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-82" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="340" as="sourcePoint" /> + <mxPoint x="1310" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-83" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="1000" y="230" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-84" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="120" as="sourcePoint" /> + <mxPoint x="1150" y="120" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-85" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1170" y="340" as="sourcePoint" /> + <mxPoint x="1170" y="180" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-86" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="160" as="sourcePoint" /> + <mxPoint x="1150" y="160" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-87" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1190" y="360" as="sourcePoint" /> + <mxPoint x="1150" y="360" as="targetPoint" /> + <Array as="points" /> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-88" value="" style="endArrow=block;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;endFill=1;strokeWidth=2;" parent="1" source="NDYOjcKuVLoNuB3YkQ-f-83" target="NDYOjcKuVLoNuB3YkQ-f-52" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="1127" y="250" as="sourcePoint" /> + <mxPoint x="750" y="513" as="targetPoint" /> + <Array as="points"> + <mxPoint x="1120" y="240" /> + <mxPoint x="1120" y="508" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-89" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.079;entryY=0.188;entryDx=0;entryDy=0;strokeWidth=2;entryPerimeter=0;" parent="1" source="NDYOjcKuVLoNuB3YkQ-f-90" target="uwrRxOYGmB2LabIKb8In-50" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="394" y="450" as="sourcePoint" /> + <mxPoint x="356" y="532" as="targetPoint" /> + <Array as="points"> + <mxPoint x="320" y="480" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-90" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;strokeWidth=2;" parent="1" vertex="1"> + <mxGeometry x="234" y="470" width="90" height="20" as="geometry" /> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-91" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-90" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="120" y="240" as="sourcePoint" /> + <mxPoint x="49" y="438" as="targetPoint" /> + <Array as="points"> + <mxPoint x="130" y="240" /> + <mxPoint x="130" y="340" /> + <mxPoint x="130" y="410" /> + <mxPoint x="130" y="480" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-92" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-90" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-100" y="240" as="sourcePoint" /> + <mxPoint x="49" y="460" as="targetPoint" /> + <Array as="points"> + <mxPoint x="-90" y="240" /> + <mxPoint x="-90" y="340" /> + <mxPoint x="-90" y="410" /> + <mxPoint x="-90" y="500" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-93" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-66" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="740" as="sourcePoint" /> + <mxPoint x="-240" y="690" as="targetPoint" /> + <Array as="points"> + <mxPoint x="400" y="770" /> + <mxPoint x="-440" y="770" /> + <mxPoint x="-440" /> + <mxPoint x="-220" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NDYOjcKuVLoNuB3YkQ-f-94" value="" style="endArrow=block;html=1;rounded=0;endFill=1;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-53" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="740" as="sourcePoint" /> + <mxPoint x="-220" y="100" as="targetPoint" /> + <Array as="points"> + <mxPoint x="400" y="770" /> + <mxPoint x="-440" y="770" /> + <mxPoint x="-440" /> + <mxPoint /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-1" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="210" y="630" as="sourcePoint" /> + <mxPoint x="230" y="610" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-2" value="(19, 10)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="NJnLxzagAcODFD03IEvC-1" vertex="1" connectable="0"> + <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> + <mxPoint x="5" y="-4" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-3" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="130" y="780" as="sourcePoint" /> + <mxPoint x="150" y="760" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-4" value="(11, 0)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="NJnLxzagAcODFD03IEvC-3" vertex="1" connectable="0"> + <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> + <mxPoint x="5" y="-4" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-5" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="240" y="760" as="sourcePoint" /> + <mxPoint x="260" y="740" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-6" value="(19, 10)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="NJnLxzagAcODFD03IEvC-5" vertex="1" connectable="0"> + <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> + <mxPoint x="5" y="-4" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-7" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="470" y="490" as="sourcePoint" /> + <mxPoint x="490" y="470" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-8" value="<div>(1, 10)</div>" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="NJnLxzagAcODFD03IEvC-7" vertex="1" connectable="0"> + <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> + <mxPoint x="5" y="-4" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-9" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="300" y="490" as="sourcePoint" /> + <mxPoint x="320" y="470" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="NJnLxzagAcODFD03IEvC-10" value="(11, 0)" style="edgeLabel;html=1;align=left;verticalAlign=bottom;resizable=0;points=[];labelPosition=right;verticalLabelPosition=top;" parent="NJnLxzagAcODFD03IEvC-9" vertex="1" connectable="0"> + <mxGeometry x="0.5519" y="1" relative="1" as="geometry"> + <mxPoint x="5" y="-4" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-3" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-80" y="50" as="sourcePoint" /> + <mxPoint x="-40" y="100" as="targetPoint" /> + <Array as="points"> + <mxPoint x="-50" y="50" /> + <mxPoint x="-40" y="60" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-4" value="I_loadShift2" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="x3sh3fDmEHBjpIoTDSR_-3"> + <mxGeometry x="-0.7861" relative="1" as="geometry"> + <mxPoint x="-9" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-5" value="" style="endArrow=block;html=1;rounded=0;endFill=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="-300" y="50" as="sourcePoint" /> + <mxPoint x="-260" y="100" as="targetPoint" /> + <Array as="points"> + <mxPoint x="-270" y="50" /> + <mxPoint x="-260" y="60" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-6" value="I_loadShift3" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=14;fontFamily=Ubuntu Mono;" vertex="1" connectable="0" parent="x3sh3fDmEHBjpIoTDSR_-5"> + <mxGeometry x="-0.7861" relative="1" as="geometry"> + <mxPoint x="-9" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-7" value="" style="endArrow=block;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-90"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="410" as="sourcePoint" /> + <mxPoint x="330" y="459" as="targetPoint" /> + <Array as="points"> + <mxPoint x="400" y="430" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-8" value="I_coefSelect" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];fontFamily=Ubuntu Mono;fontSize=14;fontStyle=0" vertex="1" connectable="0" parent="x3sh3fDmEHBjpIoTDSR_-7"> + <mxGeometry x="0.45" y="1" relative="1" as="geometry"> + <mxPoint x="32" y="-41" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="x3sh3fDmEHBjpIoTDSR_-9" value="" style="endArrow=block;html=1;rounded=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" target="NDYOjcKuVLoNuB3YkQ-f-52"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="400" y="410" as="sourcePoint" /> + <mxPoint x="470" y="459" as="targetPoint" /> + <Array as="points"> + <mxPoint x="400" y="430" /> + </Array> + </mxGeometry> + </mxCell> </root> </mxGraphModel> </diagram> diff --git a/docs/img/OperativeUnit.png b/docs/img/OperativeUnit.png index 64a947ab89b5c179f8cda30834baa893918774d1..12b344251c2d86da2dd0fdc330bdd96af0867535 100644 Binary files a/docs/img/OperativeUnit.png and b/docs/img/OperativeUnit.png differ diff --git a/src/hdl/controlUnit.vhd b/src/hdl/controlUnit.vhd new file mode 100644 index 0000000000000000000000000000000000000000..4b08342baf8b23039bac65422d7b94614007bfd1 --- /dev/null +++ b/src/hdl/controlUnit.vhd @@ -0,0 +1,147 @@ +------------------------------------------------------------------------------- +-- Title : controlUnit +-- Project : +------------------------------------------------------------------------------- +-- File : operativeUnit.vhd +-- Author : Jean-Noel BAZIN <jnbazin@pc-disi-026.enst-bretagne.fr> +-- Company : +-- Created : 2018-04-11 +-- Last update: 2019-02-13 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: Control unit of a sequential FIR filter. +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-04-11 1.0 jnbazin Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity controlUnit is + + port ( + I_clock : in std_logic; -- global clock + I_reset : in std_logic; -- asynchronous global reset + I_inputSampleValid : in std_logic; -- Control signal to load the input sample in the sample shift register and shift the register + I_processingDone : in std_logic; + O_loadShift1 : out std_logic; -- filtered sample + O_loadShift2 : out std_logic; -- filtered sample + O_loadShift3 : out std_logic; -- filtered sample + O_initAddress : out std_logic; -- Control signal to initialize register read address + O_incrAddress : out std_logic; -- Control signal to increment register read address + O_initSum : out std_logic; -- Control signal to initialize the MAC register + O_loadSum : out std_logic; -- Control signal to load the MAC register; + O_loadY : out std_logic; -- Control signal to load Y register + O_coefSelect : out std_logic_vector(1 downto 0); + O_FilteredSampleValid : out std_logic -- Data valid signal for filtered sample + ); + +end entity controlUnit; +architecture archi_operativeUnit of controlUnit is + + + type T_state is (WAIT_SAMPLE, STORE, PROCESSING_LOOP_1, PROCESSING_LOOP_2_1, PROCESSING_LOOP_2_2, PROCESSING_LOOP_3, OUTPUT_1, OUTPUT_2, OUTPUT_3, ADDRESS_RESET, WAIT_END_SAMPLE); -- state list + signal SR_presentState : T_state; + signal SR_futurState : T_state; + +begin + + process (I_clock,I_reset) is + begin + if I_reset = '1' then -- asynchronous reset (active high) + SR_presentState <= WAIT_SAMPLE; + elsif rising_edge(I_clock) then -- rising clock edge + SR_presentState <= SR_futurState; + end if; + end process; + + process (SR_presentState, I_inputSampleValid, I_processingDone) is + begin + case SR_presentState is + + when WAIT_SAMPLE => + if I_inputSampleValid = '1' then + SR_futurState <= STORE; + else + SR_futurState <= WAIT_SAMPLE; + end if; + + when STORE => + SR_futurState <= PROCESSING_LOOP_1; + + when PROCESSING_LOOP_1 => + O_coefSelect <= "00"; + if I_processingDone = '1' then + SR_futurState <= OUTPUT_1; + else + SR_futurState <= PROCESSING_LOOP_1; + end if; + + when OUTPUT_1 => + SR_futurState <= PROCESSING_LOOP_2_1; + + when PROCESSING_LOOP_2_1 => + O_coefSelect <= "01"; + if I_processingDone = '1' then + SR_futurState <= ADDRESS_RESET; + else + SR_futurState <= PROCESSING_LOOP_2_1; + end if; + + when ADDRESS_RESET => + SR_futurState <= PROCESSING_LOOP_2_2; + + when PROCESSING_LOOP_2_2 => + O_coefSelect <= "10"; + if I_processingDone = '1' then + SR_futurState <= OUTPUT_2; + else + SR_futurState <= PROCESSING_LOOP_2_2; + end if; + + when OUTPUT_2 => + SR_futurState <= PROCESSING_LOOP_3; + + when PROCESSING_LOOP_3 => + O_coefSelect <= "11"; + if I_processingDone = '1' then + SR_futurState <= OUTPUT_3; + else + SR_futurState <= PROCESSING_LOOP_3; + end if; + + when OUTPUT_3 => + SR_futurState <= WAIT_END_SAMPLE; + + when WAIT_END_SAMPLE => + if I_inputSampleValid = '0' then + SR_futurState <= WAIT_SAMPLE; + else + SR_futurState <= WAIT_END_SAMPLE; + end if; + + when others => null; + end case; + end process; + + O_loadShift1 <= '1' when SR_presentState = Store else '0'; + O_loadShift2 <= '1' when SR_presentState = OUTPUT_1 else '0'; + O_loadShift3 <= '1' when SR_presentState = OUTPUT_2 else '0'; + O_initAddress <= '1' when SR_presentState = Store or SR_presentState = OUTPUT_1 or SR_presentState = OUTPUT_2 or SR_presentState = ADDRESS_RESET else '0'; + O_incrAddress <= '1' when SR_presentState = PROCESSING_LOOP_1 or SR_presentState = PROCESSING_LOOP_2_1 or SR_presentState = PROCESSING_LOOP_2_2 or SR_presentState = PROCESSING_LOOP_3 else '0'; + O_initSum <= '1' when SR_presentState = Store or SR_presentState = OUTPUT_1 or SR_presentState = OUTPUT_2 else '0'; + O_loadSum <= '1' when SR_presentState = PROCESSING_LOOP_1 or SR_presentState = PROCESSING_LOOP_2_1 or SR_presentState = PROCESSING_LOOP_2_2 or SR_presentState = PROCESSING_LOOP_3 else '0'; + O_loadY <= '1' when SR_presentState = OUTPUT_3 else '0'; + O_FilteredSampleValid <= '1' when SR_presentState = WAIT_END_SAMPLE else '0'; + + + + + +end architecture archi_operativeUnit; diff --git a/src/hdl/filterUnit.vhd b/src/hdl/filterUnit.vhd new file mode 100644 index 0000000000000000000000000000000000000000..ac96ccdf5023741b75ca669803ab6cef946078b4 --- /dev/null +++ b/src/hdl/filterUnit.vhd @@ -0,0 +1,125 @@ +------------------------------------------------------------------------------- +-- Title : firUnit +-- Project : +------------------------------------------------------------------------------- +-- File : operativeUnit.vhd +-- Author : Jean-Noel BAZIN <jnbazin@pc-disi-026.enst-bretagne.fr> +-- Company : +-- Created : 2018-04-11 +-- Last update: 2018-04-11 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: 8 bit FIR +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-04-11 1.0 jnbazin Created +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity filterUnit is + + port ( + I_clock : in std_logic; -- global clock + I_reset : in std_logic; -- asynchronous global reset + I_inputSample : in std_logic_vector(10 downto 0); -- 8 bit input sample + I_inputSampleValid : in std_logic; + O_filteredSample : out std_logic_vector(10 downto 0); -- filtered sample + O_filteredSampleValid : out std_logic + ); + +end entity filterUnit; + +architecture archi_filterUnit of filterUnit is + + component controlUnit is + port ( + I_clock : in std_logic; + I_reset : in std_logic; + I_inputSampleValid : in std_logic; + I_processingDone : in std_logic; + O_loadShift1 : out std_logic; + O_loadShift2 : out std_logic; + O_loadShift3 : out std_logic; + O_initAddress : out std_logic; + O_incrAddress : out std_logic; + O_initSum : out std_logic; + O_loadSum : out std_logic; + O_loadY : out std_logic; + O_coefSelect : out std_logic_vector(1 downto 0); + O_FilteredSampleValid : out std_logic); + end component controlUnit; + + component operativeUnit is + port ( + I_clock : in std_logic; + I_reset : in std_logic; + I_inputSample : in std_logic_vector(10 downto 0); + I_loadShift1 : in std_logic; + I_loadShift2 : in std_logic; + I_loadShift3 : in std_logic; + I_initAddress : in std_logic; + I_incrAddress : in std_logic; + I_initSum : in std_logic; + I_loadSum : in std_logic; + I_loadY : in std_logic; + I_coefSelect : out std_logic_vector(1 downto 0); + O_processingDone : out std_logic; + O_Y : out std_logic_vector(10 downto 0)); + end component operativeUnit; + + signal SC_processingDone : std_logic; + signal SC_loadShift1 : std_logic; + signal SC_loadShift2 : std_logic; + signal SC_loadShift3 : std_logic; + signal SC_initAddress : std_logic; + signal SC_incrAddress : std_logic; + signal SC_initSum : std_logic; + signal SC_loadSum : std_logic; + signal SC_loadY : std_logic; + signal SC_coefSelect : std_logic_vector(1 downto 0); + + +begin + + controlUnit_1 : entity work.controlUnit + port map ( + I_clock => I_clock, + I_reset => I_reset, + I_inputSampleValid => I_inputSampleValid, + I_processingDone => SC_processingDone, + O_loadShift1 => SC_loadShift1, + O_loadShift2 => SC_loadShift2, + O_loadShift3 => SC_loadShift3, + O_initAddress => SC_initAddress, + O_incrAddress => SC_incrAddress, + O_initSum => SC_initSum, + O_loadSum => SC_loadSum, + O_loadY => SC_loadY, + O_coefSelect => SC_coefSelect, + O_FilteredSampleValid => O_FilteredSampleValid); + + operativeUnit_1 : entity work.operativeUnit + port map ( + I_clock => I_clock, + I_reset => I_reset, + I_inputSample => I_inputSample, + I_loadShift1 => SC_loadShift1, + I_loadShift2 => SC_loadShift2, + I_loadShift3 => SC_loadShift3, + I_initAddress => SC_initAddress, + I_incrAddress => SC_incrAddress, + I_initSum => SC_initSum, + I_loadSum => SC_loadSum, + I_loadY => SC_loadY, + I_coefSelect => SC_coefSelect, + O_processingDone => SC_processingDone, + O_Y => O_filteredSample); + +end architecture archi_filterUnit; diff --git a/src/hdl/mac.vhd b/src/hdl/mac.vhd new file mode 100644 index 0000000000000000000000000000000000000000..a38ab016b58d1bf18142b34c778108614911d756 --- /dev/null +++ b/src/hdl/mac.vhd @@ -0,0 +1,37 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity mac is + Port ( clk : in STD_LOGIC; + rst : in STD_LOGIC; + sum_rst : in std_logic; + enable : in std_logic; + smpl : in signed(10 downto 0); -- 11-bit input a + coef : in signed(10 downto 0); -- 11-bit input b + acc_out : inout signed(28 downto 0) -- 29-bit acc output + ); +end entity mac; + +architecture Behavioral of mac is + signal acc : signed(28 downto 0) := (others => '0'); -- 29-bit acc +begin + + -- Process that handles multiplication and accumulation + process(clk, rst) + begin + if rst = '1' then + acc <= (others => '0'); -- Reset acc to 0 + elsif rising_edge(clk) then + if (sum_rst = '1') then + acc <= (others => '0'); + elsif (enable = '1') then + acc <= acc_out; -- Add prod to acc + end if; + end if; + end process; + + -- Output the acc + acc_out <= acc + smpl * coef; + +end Behavioral; \ No newline at end of file diff --git a/src/hdl/mux4.vhd b/src/hdl/mux4.vhd new file mode 100644 index 0000000000000000000000000000000000000000..ed8ff12b23da2934a5d673ad085b9e4620c7e397 --- /dev/null +++ b/src/hdl/mux4.vhd @@ -0,0 +1,31 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity mux4to1 is + generic ( + DATA_WIDTH : integer := 11 -- Default width of the input data (can be changed) + ); + Port ( + sel : in STD_LOGIC_VECTOR(1 downto 0); -- 2-bit select input to choose between 4 entries + a : in signed(DATA_WIDTH-1 downto 0); -- 1st input (configurable width) + b : in signed(DATA_WIDTH-1 downto 0); -- 2nd input (configurable width) + c : in signed(DATA_WIDTH-1 downto 0); -- 3rd input (configurable width) + d : in signed(DATA_WIDTH-1 downto 0); -- 4th input (configurable width) + mux_out : out signed(DATA_WIDTH-1 downto 0) -- Output with configurable width + ); +end entity mux4to1; + +architecture Behavioral of mux4to1 is +begin + process(sel, a, b, c, d) + begin + case sel is + when "00" => mux_out <= a; -- Select input 'a' + when "01" => mux_out <= b; -- Select input 'b' + when "10" => mux_out <= c; -- Select input 'c' + when "11" => mux_out <= d; -- Select input 'd' + when others => mux_out <= (others => '0'); -- Default case + end case; + end process; +end Behavioral; \ No newline at end of file diff --git a/src/hdl/operativeUnit.vhd b/src/hdl/operativeUnit.vhd new file mode 100644 index 0000000000000000000000000000000000000000..ff5665cab44be00c980217aae0d8ac714cabb0cf --- /dev/null +++ b/src/hdl/operativeUnit.vhd @@ -0,0 +1,380 @@ +------------------------------------------------------------------------------- +-- Title : operativeUnit +-- Project : +------------------------------------------------------------------------------- +-- File : operativeUnit.vhd +-- Author : Jean-Noel BAZIN <jnbazin@pc-disi-026.enst-bretagne.fr> +-- Company : +-- Created : 2018-04-11 +-- Last update: 2019-02-13 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: Operative unit of a sequential FIR filter. Including shift +-- register for samples, registers for coefficients, a MAC and a register to +-- store the result +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2019-02-13 1.1 marzel Update to provide a 16-tap filter and improve +-- the user experience ;) +-- 2018-04-11 1.0 jnbazin Created +-- 2018-04-18 1.0 marzel Modification of SR_Y assignment to a round +-- instead of a trunc +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity operativeUnit is + + port ( + I_clock : in std_logic; -- global clock + I_reset : in std_logic; -- asynchronous global reset + I_inputSample : in std_logic_vector(10 downto 0); -- 8 bit input sample + I_loadShift1 : in std_logic; -- filtered sample + I_loadShift2 : in std_logic; -- filtered sample + I_loadShift3 : in std_logic; -- filtered sample + I_initAddress : in std_logic; -- Control signal to initialize register read address + I_incrAddress : in std_logic; -- Control signal to increment register read address + I_initSum : in std_logic; -- Control signal to initialize the MAC register + I_loadSum : in std_logic; -- Control signal to load the MAC register; + I_loadY : in std_logic; -- Control signal to load Y register + I_coefSelect : in std_logic_vector(1 downto 0); + O_processingDone : out std_logic; -- Indicate that processing is done + O_Y : out std_logic_vector(10 downto 0) -- filtered sample + ); + +end entity operativeUnit; + +architecture arch_operativeUnit of operativeUnit is + signal SC_smpl : signed(10 downto 0); + signal SC_coef : signed(10 downto 0); + signal SC_result : signed(28 downto 0); -- result of the accumulation addition + signal SR_Y : signed(10 downto 0); -- filtered sample storage register + signal SR_readAddress : integer range 0 to 94; -- register files read address + + signal SR_readAddress2_1 : integer range 0 to 2; -- register files read address + signal SR_readAddress2_2 : integer range 0 to 1; -- register files read address + signal SR_readAddress3 : integer range 0 to 10; -- register files read address + + + type registerFile1 is array(0 to 94) of signed(10 downto 0); + signal sampleReg1 : registerFile1; + type registerFile2 is array(0 to 2) of signed(10 downto 0); + signal sampleReg2 : registerFile2; + type registerFile3 is array(0 to 10) of signed(10 downto 0); + signal sampleReg3 : registerFile3; + signal maxSum : integer; + + signal SR_coefRegister1 : registerFile1; + signal SR_coefRegister2_1 : registerFile2; + type registerFile2_2 is array(0 to 1) of signed(10 downto 0); + signal SR_coefRegister2_2 : registerFile2_2; + signal SR_coefRegister3 : registerFile3; + + component mac is + Port ( clk : in STD_LOGIC; + rst : in STD_LOGIC; + sum_rst : in std_logic; + enable: in std_logic; + smpl : in signed(10 downto 0); -- 11-bit input a + coef : in signed(10 downto 0); -- 11-bit input b + acc_out : inout signed(28 downto 0) -- 29-bit acc output + ); + end component mac; + + component mux4to1 is + generic ( + DATA_WIDTH : integer := 11 -- Default width of the input data (can be changed) + ); + Port ( + sel : in STD_LOGIC_VECTOR(1 downto 0); -- 2-bit select input to choose between 4 entries + a : in signed(DATA_WIDTH-1 downto 0); -- 1st input (configurable width) + b : in signed(DATA_WIDTH-1 downto 0); -- 2nd input (configurable width) + c : in signed(DATA_WIDTH-1 downto 0); -- 3rd input (configurable width) + d : in signed(DATA_WIDTH-1 downto 0); -- 4th input (configurable width) + mux_out : out signed(DATA_WIDTH-1 downto 0) -- Output with configurable width + ); +end component mux4to1; + +begin + + mac1 : mac + port map ( + clk => I_clock, + rst => I_reset, + sum_rst => I_initSum, + enable => I_loadSum, + smpl => SC_smpl, + coef => SC_coef, + acc_out => SC_result + ); + +-- mux_coef : mux4to1 +-- port map( +-- sel => I_coefSelect, +-- a => SR_coefRegister1(SR_readAddress), +-- b => SR_coefRegister2_1(SR_readAddress), +-- c => SR_coefRegister2_2(SR_readAddress), +-- d => SR_coefRegister3(SR_readAddress), +-- mux_out => SC_coef +-- ); + + + SR_readAddress2_1 <= SR_readAddress when(I_coefSelect = "01") else 0; + SR_readAddress2_2 <= SR_readAddress when(I_coefSelect = "10") else 0; + SR_readAddress3 <= SR_readAddress when(I_coefSelect = "11") else 0; + + SC_coef <= SR_coefRegister1(SR_readAddress) when(I_coefSelect = "00")else + SR_coefRegister2_1(SR_readAddress2_1) when(I_coefSelect = "01")else + SR_coefRegister2_2(SR_readAddress2_2) when(I_coefSelect = "10")else + SR_coefRegister3(SR_readAddress3); + +-- mux_smpl : mux4to1 +-- port map( +-- sel => I_coefSelect, +-- a => sampleReg1(SR_readAddress), +-- b => sampleReg2(SR_readAddress2_1), +-- c => sampleReg3(SR_readAddress2_2), +-- d => sampleReg3(SR_readAddress3), +-- mux_out => SC_smpl +-- ); + + SC_smpl <= sampleReg1(SR_readAddress) when(I_coefSelect = "00")else + sampleReg2(SR_readAddress2_1) when(I_coefSelect = "01")else + sampleReg3(SR_readAddress3); + + shift : process (I_clock, I_reset) is + begin -- process shift + if I_reset = '1' then -- asynchronous reset (active high) + sampleReg1 <= (others => (others => '0')); + sampleReg2 <= (others => (others => '0')); + sampleReg3 <= (others => (others => '0')); + elsif rising_edge(I_clock) then + if I_loadShift1 = '1' then + + for i in 0 to 93 loop + + sampleReg1(i+1) <= sampleReg1(i); + + end loop; + + sampleReg1(0) <= Signed(I_inputSample); + + elsif I_loadShift2 = '1' then + + for i in 0 to 1 loop + + sampleReg2(i+1) <= sampleReg2(i); + + end loop; + + sampleReg2(0) <= signed(SC_result(20 downto 10)); + + elsif I_loadShift3 = '1' then + + for i in 0 to 9 loop + + sampleReg3(i+1) <= sampleReg3(i); + + end loop; + + sampleReg3(0) <= signed(SC_result(19 downto 9)); + + end if; + + end if; + end process shift; + + incr_address : process (I_clock, I_reset) is + begin + if I_reset = '1' then -- asynchronous reset (active high) + SR_readAddress <= 0; + + elsif rising_edge(I_clock) then + if I_initAddress = '1' then + SR_readAddress <= 0; + elsif I_incrAddress = '1' then + SR_readAddress <= SR_readAddress+1; + end if; + + end if; + end process incr_address; + + maxSumSel : process (I_coefSelect) is + begin + case I_coefSelect is + when "00" => + maxSum <= 93; + when "01" => + maxSum <= 1; + when "10" => + maxSum <= 0; + when "11" => + maxSum <= 9; + when others => + maxSum <= 0; + end case; + end process maxSumSel; + + O_processingDone <= '1' when SR_readAddress = maxSum else '0' ; + + -- SC_multOperand1 <= SR_shiftRegister(SR_readAddress) ; -- 8 bits + -- SC_multOperand2 <= SR_coefRegister(SR_readAddress) ; -- 8 bits + -- SC_MultResult <= SC_multOperand1 * SC_multOperand2 ; -- 16 bits + -- SC_addResult <= resize(SC_MultResult, SC_addResult'length) + SR_sum; + + -- sum_acc : process (I_clock, I_reset) is + -- begin + -- if I_reset = '1' then -- asynchronous reset (active high) + -- SR_sum <= (others => '0'); + -- elsif rising_edge(I_clock) then + -- if I_initSum = '1' then + -- SR_sum <= (others => '0'); + -- elsif I_loadSum = '1' then + -- SR_sum <= SC_addResult; + -- end if; + + -- end if; + -- end process sum_acc; + + store_result : process (I_clock, I_reset) is + begin + if I_reset = '1' then -- asynchronous reset (active high) + SR_Y <= (others => '0'); + elsif rising_edge(I_clock) then + if I_loadY = '1' then + SR_Y <= SC_result(20 downto 10); --TODO: changer la sortie + end if; + + end if; + end process store_result; + + O_Y <= std_logic_vector(SR_Y); + + +-- Low-pass filter provided with octave (or Matlab ;)) command +--fir1(15, .001)/sqrt(sum(fir1(15, .001).^2))*2^6 +SR_coefRegister1 <= (to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-2, 11), +to_signed(-2, 11), +to_signed(-2, 11), +to_signed(-3, 11), +to_signed(-3, 11), +to_signed(-3, 11), +to_signed(-4, 11), +to_signed(-4, 11), +to_signed(-5, 11), +to_signed(-5, 11), +to_signed(-6, 11), +to_signed(-6, 11), +to_signed(-7, 11), +to_signed(-7, 11), +to_signed(-8, 11), +to_signed(-8, 11), +to_signed(-9, 11), +to_signed(-10, 11), +to_signed(-10, 11), +to_signed(-11, 11), +to_signed(-11, 11), +to_signed(-12, 11), +to_signed(-13, 11), +to_signed(-13, 11), +to_signed(-14, 11), +to_signed(-14, 11), +to_signed(-15, 11), +to_signed(-15, 11), +to_signed(-16, 11), +to_signed(-16, 11), +to_signed(-17, 11), +to_signed(-17, 11), +to_signed(-18, 11), +to_signed(-18, 11), +to_signed(-18, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(1004, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-19, 11), +to_signed(-18, 11), +to_signed(-18, 11), +to_signed(-18, 11), +to_signed(-17, 11), +to_signed(-17, 11), +to_signed(-16, 11), +to_signed(-16, 11), +to_signed(-15, 11), +to_signed(-15, 11), +to_signed(-14, 11), +to_signed(-14, 11), +to_signed(-13, 11), +to_signed(-13, 11), +to_signed(-12, 11), +to_signed(-11, 11), +to_signed(-11, 11), +to_signed(-10, 11), +to_signed(-10, 11), +to_signed(-9, 11), +to_signed(-8, 11), +to_signed(-8, 11), +to_signed(-7, 11), +to_signed(-7, 11), +to_signed(-6, 11), +to_signed(-6, 11), +to_signed(-5, 11), +to_signed(-5, 11), +to_signed(-4, 11), +to_signed(-4, 11), +to_signed(-3, 11), +to_signed(-3, 11), +to_signed(-3, 11), +to_signed(-2, 11), +to_signed(-2, 11), +to_signed(-2, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11), +to_signed(-1, 11)); + + +SR_coefRegister2_1 <= (to_signed(480, 11), +to_signed(-777, 11), +to_signed(480, 11)); + +SR_coefRegister2_2 <= (to_signed(777, 11), +to_signed(-449, 11)); + +SR_coefRegister3 <= (to_signed(-119, 11), +to_signed(122, 11), +to_signed(149, 11), +to_signed(191, 11), +to_signed(226, 11), +to_signed(239, 11), +to_signed(226, 11), +to_signed(191, 11), +to_signed(149, 11), +to_signed(122, 11), +to_signed(-119, 11)); + + + +end architecture arch_operativeUnit; diff --git a/src/hdl/tb_firUnit.vhd b/src/hdl/tb_firUnit.vhd new file mode 100644 index 0000000000000000000000000000000000000000..614b3dc83c7a8262707f2ef24df123b73ad26804 --- /dev/null +++ b/src/hdl/tb_firUnit.vhd @@ -0,0 +1,79 @@ +------------------------------------------------------------------------------- +-- Title : FirUnit +-- Project : +------------------------------------------------------------------------------- +-- File : operativeUnit.vhd +-- Author : Jean-Noel BAZIN <jnbazin@pc-disi-026.enst-bretagne.fr> +-- Company : +-- Created : 2018-04-11 +-- Last update: 2019-02-26 +-- Platform : +-- Standard : VHDL'93/02 +------------------------------------------------------------------------------- +-- Description: 8 bit FIR +------------------------------------------------------------------------------- +-- Copyright (c) 2018 +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2018-04-11 1.0 jnbazin Created +-- 2018-04-18 1.1 marzel Modified to add more test inputs +-- 2019-02-26 1.1 marzel Adapted to 16-tap filtering +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity tb_filterUnit is +end entity tb_filterUnit; + +architecture archi_tb_filterUnit of tb_filterUnit is + component filterUnit is + port ( + I_clock : in std_logic; + I_reset : in std_logic; + I_inputSample : in std_logic_vector(10 downto 0); + I_inputSampleValid : in std_logic; + O_filteredSample : out std_logic_vector(10 downto 0); + O_filteredSampleValid : out std_logic); + end component filterUnit; + + signal SC_clock : std_logic := '0'; + signal SC_reset : std_logic; + signal SC_inputSample : std_logic_vector(10 downto 0); + signal SC_inputSampleValid : std_logic:='0'; + signal SC_filteredSample : std_logic_vector(10 downto 0); + signal SC_filteredSampleValid : std_logic; + +begin + + SC_clock <= not SC_clock after 5 ns; + SC_reset <= '0', '1' after 19 ns, '0' after 57 ns; + + -- Sample period = 20 clk period + SC_inputSampleValid <= not SC_inputSampleValid after 100 ns; + + -- Null signal followed by a Dirac and then an arbitrary sequence + SC_inputSample <= "00000000000", + "01111111111" after 401 ns, + "00000000000" after 5601 ns; + + +-- the filter output on 8 bits is a sequence of signed numbers (with the assumption +-- of rounding the output, so the accuracy can be slightly different depending +-- on your final stage): + -- 0 2 3 6 10 15 20 24 26 26 24 20 15 10 6 3 2 0 0 0 1 2 3 5 7 7 8 4 -1 -8 + -- -17 -27 -38 -49 -61 -71 -82 -93 -101 -107 -112 -113 -116 + + + filterUnit_1 : entity work.filterUnit + port map ( + I_clock => SC_clock, + I_reset => SC_reset, + I_inputSample => SC_inputSample, + I_inputSampleValid => SC_inputSampleValid, + O_filteredSample => SC_filteredSample, + O_filteredSampleValid => SC_filteredSampleValid); + +end architecture archi_tb_filterUnit;