diff --git a/controlUnit.vhd b/controlUnit.vhd new file mode 100644 index 0000000000000000000000000000000000000000..de947e9613ca2c8aaec9eb785e709ad1a28f968a --- /dev/null +++ b/controlUnit.vhd @@ -0,0 +1,146 @@ + +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_X : in std_logic; + I_processingDone_Y : in std_logic; + I_processingDone_Z_A : in std_logic; + I_processingDone_Z_B : in std_logic; + O_loadShift_X : out std_logic; -- filtered sample + O_loadShift_Y : out std_logic; -- filtered sample + O_loadShift_Z : 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_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_X, STORE_Y, STORE_Z, PROCESSING_LOOP_X, PROCESSING_LOOP_Y, PROCESSING_LOOP_Z_A, PROCESSING_LOOP_Z_B, OUTPUT, 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_X, I_processingDone_Y, I_processingDone_Z_A, I_processingDone_Z_B) is + begin + case SR_presentState is + + when WAIT_SAMPLE => + if I_inputSampleValid = '1' then + SR_futurState <= STORE_X; + else + SR_futurState <= WAIT_SAMPLE; + end if; + + when STORE_X => + O_initAddress <= '1'; + O_initSum <= '1'; + O_incrAddress <= '0'; + O_loadSum <= '0'; + SR_futurState <= PROCESSING_LOOP_X; + + when PROCESSING_LOOP_X => + O_initAddress <= '0'; + O_initSum <= '0'; + O_incrAddress <= '1'; + O_loadSum <= '1'; + if I_processingDone_X = '1' then + SR_futurState <= STORE_Y; + else + SR_futurState <= PROCESSING_LOOP_X; + end if; + + when STORE_Y => + O_initAddress <= '1'; + O_initSum <= '1'; + O_incrAddress <= '0'; + O_loadSum <= '0'; + SR_futurState <= PROCESSING_LOOP_Y; + + when PROCESSING_LOOP_Y => + O_initAddress <= '0'; + O_initSum <= '0'; + O_incrAddress <= '1'; + O_loadSum <= '1'; + if I_processingDone_Y = '1' then + SR_futurState <= PROCESSING_LOOP_Z_A; + else + SR_futurState <= PROCESSING_LOOP_Y; + end if; + + when PROCESSING_LOOP_Z_A => + O_initAddress <= '0'; + O_initSum <= '0'; + O_incrAddress <= '1'; + O_loadSum <= '1'; + if I_processingDone_Z_A = '1' then + SR_futurState <= STORE_Z; + else + SR_futurState <= PROCESSING_LOOP_Z_A; + end if; + + when STORE_Z => + O_initAddress <= '1'; + O_initSum <= '1'; + O_incrAddress <= '0'; + O_loadSum <= '0'; + SR_futurState <= PROCESSING_LOOP_Z_B; + + when PROCESSING_LOOP_Z_B => + O_initAddress <= '0'; + O_initSum <= '0'; + O_incrAddress <= '1'; + O_loadSum <= '1'; + if I_processingDone_Z_B = '1' then + SR_futurState <= OUTPUT; + else + SR_futurState <= PROCESSING_LOOP_Z_B; + end if; + + when OUTPUT => + 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_loadShift_X <= '1' when SR_presentState = STORE_X else '0'; +O_loadShift_Y <= '1' when SR_presentState = STORE_Y else '0'; +O_loadShift_Z <= '1' when SR_presentState = STORE_Z else '0'; +O_loadY <= '1' when SR_presentState = OUTPUT else '0'; +O_FilteredSampleValid <= '1' when SR_presentState = WAIT_END_SAMPLE else '0'; + + + + + +end architecture archi_operativeUnit; \ No newline at end of file diff --git a/docs/img/FSM_MEDCON.drawio b/docs/img/FSM_MEDCON.drawio new file mode 100644 index 0000000000000000000000000000000000000000..f478f401a05b9f91ad4c77ab928ec489bb94b116 --- /dev/null +++ b/docs/img/FSM_MEDCON.drawio @@ -0,0 +1,329 @@ +<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="2008" 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;" parent="1" vertex="1"> + <mxGeometry x="357" y="-611" 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;" parent="1" vertex="1"> + <mxGeometry x="367" y="-601" 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;" parent="1" vertex="1"> + <mxGeometry x="357" y="-491" 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;" parent="1" vertex="1"> + <mxGeometry x="357" y="-371" 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;" parent="1" vertex="1"> + <mxGeometry x="357" y="468" 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;" parent="1" source="bw7OO0sNot4gaAuLXok9-1" target="bw7OO0sNot4gaAuLXok9-3" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="677" y="-1" as="sourcePoint" /> + <mxPoint x="727" y="-51" 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;" parent="1" target="bw7OO0sNot4gaAuLXok9-5" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.76" y="-411" as="sourcePoint" /> + <mxPoint x="436.76" y="-331" 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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.76" y="-291" as="sourcePoint" /> + <mxPoint x="437" y="-251" 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;" parent="1" source="bw7OO0sNot4gaAuLXok9-7" target="bw7OO0sNot4gaAuLXok9-1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="627" y="-331" as="sourcePoint" /> + <mxPoint x="677" y="-381" as="targetPoint" /> + <Array as="points"> + <mxPoint x="316" y="700" /> + <mxPoint x="261" y="405" /> + <mxPoint x="261" y="-11" /> + <mxPoint x="270" y="-577" /> + <mxPoint x="347" y="-631" /> + </Array> + </mxGeometry> + </mxCell> + <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="417" y="-511" as="sourcePoint" /> + <mxPoint x="457" y="-511" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-17" value="<font face="Ubuntu Mono">I_inputSample ='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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="-271" as="sourcePoint" /> + <mxPoint x="457" y="-271" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-16" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="401" y="568" as="sourcePoint" /> + <mxPoint x="441" y="568" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-18" value="<font face="Ubuntu Mono">O_processingDone_x ='1'</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2;fontSize=10;" parent="1" vertex="1" connectable="0"> + <mxGeometry x="457.00279069767436" y="-271" as="geometry" /> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-19" value="<font face="Ubuntu Mono">I_loadY ='1'</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2;fontSize=13;" parent="1" vertex="1" connectable="0"> + <mxGeometry x="445.00279069767436" y="566" 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;" parent="1" target="bw7OO0sNot4gaAuLXok9-1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="467" y="-661" as="sourcePoint" /> + <mxPoint x="577" y="-561" as="targetPoint" /> + <Array as="points"> + <mxPoint x="447" y="-651" /> + </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=[];" parent="1" vertex="1" connectable="0"> + <mxGeometry x="467.00279069767436" y="-661" 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;" parent="1" vertex="1"> + <mxGeometry x="597" y="-271" 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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="517" y="-211.23000000000002" as="sourcePoint" /> + <mxPoint x="597" y="-211.23000000000002" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-33" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_x = '0'<br>InitAddress_x = '0'<br>IncrAddress_x = '0'<br>InitSum = '0'<br>LoadSum = '0'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="-631" 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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="517" y="-571.19" as="sourcePoint" /> + <mxPoint x="597" y="-571.19" 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;" parent="1" vertex="1"> + <mxGeometry x="597" y="-511" 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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="517" y="-451.19000000000005" as="sourcePoint" /> + <mxPoint x="597" y="-451.19000000000005" 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;" parent="1" vertex="1"> + <mxGeometry x="597" y="-391" 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;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="517" y="-331.19000000000005" as="sourcePoint" /> + <mxPoint x="597" y="-331.19000000000005" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="bw7OO0sNot4gaAuLXok9-36" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_z = '0'<br>InitAddress_z_b = '0'<br>IncrAddress_z_b = '0'<br>InitSum = '0'<br>LoadSum = '0'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="448" 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="517" y="507.80999999999995" as="sourcePoint" /> + <mxPoint x="597" y="507.80999999999995" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-18" value="Store_X" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="-491" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-19" value="Processing<br>Loop_X" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="-371" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-21" 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="mJV-N2ISSOFKGTkFqcWB-19" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.76" y="-411" as="sourcePoint" /> + <mxPoint x="436.76" y="-331" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-22" 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="436.76" y="-291" as="sourcePoint" /> + <mxPoint x="437" y="-251" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-23" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="-511" as="sourcePoint" /> + <mxPoint x="457" y="-511" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-25" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="-271" as="sourcePoint" /> + <mxPoint x="457" y="-271" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-27" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_y = '1'<br>InitAddress_y = '1'<br>IncrAddress_y = '0'<br>InitSum = '1'<br>LoadSum = '0'<br>LoadOutput = '0'<br></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="597" y="-271" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-28" 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="517" y="-211.23000000000002" as="sourcePoint" /> + <mxPoint x="597" y="-211.23000000000002" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-29" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_x = '1'<br>InitAddress_x = '1' <br>IncrAddress_x = '0' <br>InitSum = '1'<br>LoadSum = '0'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="-511" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-30" 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="517" y="-451.19000000000005" as="sourcePoint" /> + <mxPoint x="597" y="-451.19000000000005" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-31" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_x = '0' <br>InitAddress_x = '0'<br>IncrAddress_x = '1'<br>InitSum = '0'<br>LoadSum = '1'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="-391" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-32" 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="517" y="-331.19000000000005" as="sourcePoint" /> + <mxPoint x="597" y="-331.19000000000005" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-33" value="Processing<br>Loop_Y" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="-132" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-34" value="Processing<br>Loop_Z_A" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="-12" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-35" value="Store_Z" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="108" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-37" 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="mJV-N2ISSOFKGTkFqcWB-35" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.76" y="68" as="sourcePoint" /> + <mxPoint x="437" y="108" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-40" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="88" as="sourcePoint" /> + <mxPoint x="457" y="88" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-41" value="<font face="Ubuntu Mono">O_processingDone_z_a ='1'</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2;fontSize=9.5;" parent="1" vertex="1" connectable="0"> + <mxGeometry x="459.00279069767436" y="86" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-42" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_z = '1'<br>InitAddress_z_b = '1'<br>IncrAddress_z_b = '0'<br>InitSum = '1'<br>LoadSum = '0'<br>LoadOutput = '0'<br></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="597" y="88" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-43" 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="517" y="147.76999999999998" as="sourcePoint" /> + <mxPoint x="597" y="147.76999999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-44" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_y = '0' <br>InitAddress_y = '0'<br>IncrAddress_y = '1'<br>InitSum = '0'<br>LoadSum = '1'<br>LoadOutput = '0' <br></font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="-152" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-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="517" y="-92.19000000000005" as="sourcePoint" /> + <mxPoint x="597" y="-92.19000000000005" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-46" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_z = '1'<br>InitAddress_z_a = '0' <br>IncrAddress_z_a = '1'<br>InitSum = '0'<br>LoadSum = '1'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="-32" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-47" 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="517" y="27.809999999999945" as="sourcePoint" /> + <mxPoint x="597" y="27.809999999999945" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-48" value="Processing<br>Loop_Z_B" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="228" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-49" value="Output" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="357" y="348" width="160" height="80" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-51" 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="mJV-N2ISSOFKGTkFqcWB-49" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.76" y="308" as="sourcePoint" /> + <mxPoint x="436.76" y="388" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-53" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="323" as="sourcePoint" /> + <mxPoint x="457" y="323" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-54" value="<font face="Ubuntu Mono">O_processingDone_z_b ='1'</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2;fontSize=9.5;" parent="mJV-N2ISSOFKGTkFqcWB-53" vertex="1" connectable="0"> + <mxGeometry x="0.564" relative="1" as="geometry"> + <mxPoint x="11" y="-1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-59" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_z = '0' <br>InitAddress_z_b = '0'<br>IncrAddress_z_b = '1'<br>InitSum = '0'<br>LoadSum = '1'<br>LoadOutput = '0'</font>" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1"> + <mxGeometry x="597" y="208" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-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="517" y="267.80999999999995" as="sourcePoint" /> + <mxPoint x="597" y="267.80999999999995" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-61" value="<font style="font-size: 15px;" face="Ubuntu Mono">LoadShift_z = '0' <br>InitAddress_z_b = '0'<br>IncrAddress_z_b = '0'<br>InitSum = '0'<br>LoadSum = '0'<br>LoadOutput = '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="597" y="328" width="240" height="110" as="geometry" /> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-62" 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="517" y="387.80999999999995" as="sourcePoint" /> + <mxPoint x="597" y="387.80999999999995" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-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" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.65999999999997" y="188" as="sourcePoint" /> + <mxPoint x="436.9" y="228" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-64" 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="436.65999999999997" y="428" as="sourcePoint" /> + <mxPoint x="436.9" y="468" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="mJV-N2ISSOFKGTkFqcWB-66" 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="436.58" y="-172" as="sourcePoint" /> + <mxPoint x="436.82" y="-132" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="P7I3-mRKqZhN8ipGGaiO-2" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="417" y="-32" as="sourcePoint" /> + <mxPoint x="457" y="-32" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="P7I3-mRKqZhN8ipGGaiO-3" value="<font face="Ubuntu Mono">O_processingDone_y ='1'</font>" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2;fontSize=9.5;" vertex="1" connectable="0" parent="P7I3-mRKqZhN8ipGGaiO-2"> + <mxGeometry x="0.564" relative="1" as="geometry"> + <mxPoint x="13" y="-1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="P7I3-mRKqZhN8ipGGaiO-4" 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"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="436.58" y="-52" as="sourcePoint" /> + <mxPoint x="436.82" y="-12" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="P7I3-mRKqZhN8ipGGaiO-5" value="Store_Y" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxGeometry x="357" y="-250" width="160" height="80" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/docs/img/FSM_MEDCON.drawio.png b/docs/img/FSM_MEDCON.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..b844d35310c189a3cb17609b46d43d79e7ef330d Binary files /dev/null and b/docs/img/FSM_MEDCON.drawio.png differ