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="&lt;font style=&quot;font-size: 21px;&quot; face=&quot;Ubuntu Mono&quot;&gt;Wait Sample&lt;/font&gt;" 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&lt;br&gt;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&lt;br&gt;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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;I_inputSample =&#39;1&#39;&lt;/font&gt;" 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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;O_processingDone_x =&#39;1&#39;&lt;/font&gt;" 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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;I_loadY =&#39;1&#39;&lt;/font&gt;" 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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;Rst = &#39;1&#39;&lt;/span&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift = &#39;0&#39;&lt;br&gt;InitAddress = &#39;0&#39;&lt;br&gt;IncrAddress = &#39;0&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;1&#39;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_x = &#39;0&#39;&lt;br&gt;InitAddress_x = &#39;0&#39;&lt;br&gt;IncrAddress_x = &#39;0&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_z = &#39;0&#39;&lt;br&gt;InitAddress_z_b = &#39;0&#39;&lt;br&gt;IncrAddress_z_b = &#39;0&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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&lt;br&gt;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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_y = &#39;1&#39;&lt;br&gt;InitAddress_y = &#39;1&#39;&lt;br&gt;IncrAddress_y = &#39;0&#39;&lt;br&gt;InitSum = &#39;1&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_x = &#39;1&#39;&lt;br&gt;InitAddress_x = &#39;1&#39; &lt;br&gt;IncrAddress_x = &#39;0&#39; &lt;br&gt;InitSum = &#39;1&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_x = &#39;0&#39; &lt;br&gt;InitAddress_x = &#39;0&#39;&lt;br&gt;IncrAddress_x = &#39;1&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;1&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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&lt;br&gt;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&lt;br&gt;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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;O_processingDone_z_a =&#39;1&#39;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_z = &#39;1&#39;&lt;br&gt;InitAddress_z_b = &#39;1&#39;&lt;br&gt;IncrAddress_z_b = &#39;0&#39;&lt;br&gt;InitSum = &#39;1&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_y = &#39;0&#39; &lt;br&gt;InitAddress_y = &#39;0&#39;&lt;br&gt;IncrAddress_y = &#39;1&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;1&#39;&lt;br&gt;LoadOutput = &#39;0&#39; &lt;br&gt;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_z = &#39;1&#39;&lt;br&gt;InitAddress_z_a = &#39;0&#39; &lt;br&gt;IncrAddress_z_a = &#39;1&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;1&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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&lt;br&gt;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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;O_processingDone_z_b =&#39;1&#39;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_z = &#39;0&#39; &lt;br&gt;InitAddress_z_b = &#39;0&#39;&lt;br&gt;IncrAddress_z_b = &#39;1&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;1&#39;&lt;br&gt;LoadOutput = &#39;0&#39;&lt;/font&gt;" 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="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift_z = &#39;0&#39; &lt;br&gt;InitAddress_z_b = &#39;0&#39;&lt;br&gt;IncrAddress_z_b = &#39;0&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;1&#39;&lt;/font&gt;" 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="&lt;font face=&quot;Ubuntu Mono&quot;&gt;O_processingDone_y =&#39;1&#39;&lt;/font&gt;" 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