diff --git a/src/hdl/operativeUnit.vhd b/src/hdl/operativeUnit.vhd
index 4ea1b9493be25ad89fed58b7f7bcc65b78193b77..4eb63167e1a53339d1419db26611969bf158d56c 100644
--- a/src/hdl/operativeUnit.vhd
+++ b/src/hdl/operativeUnit.vhd
@@ -114,29 +114,28 @@ begin
                         );
     
     -- Process to describe the shift register storing the input samples
-    shift : process (I_clock,I_reset) is
+    shift : process (I_clock, I_reset) is
     begin  -- process shift
         if I_reset = '1' then           -- asynchronous reset (active high)
             SR_shiftRegister <= (others => (others => '0'));
-        elsif rising_edge(I_clock) then
-            if I_loadShift = '1' then
-                for i in 15 downto 1 loop
-                    SR_shiftRegister(i) <= SR_shiftRegister(i-1);
-                end loop;
+        elsif rising_edge (I_clock) then 
+            if I_loadshift='1' then
+                SR_shiftRegister(0 downto 14) <= SR_shiftRegister(1 downto 15); 
                 SR_shiftRegister(0) <= signed(I_inputSample);
             end if;
         end if;
     end process shift;
 
-    -- Process for incrementing and initializing the read address
+    -- Process to describe the counter providing the selection adresses
+    -- of the multiplexers
     incr_address : process (I_clock, I_reset) is
     begin
-        if I_reset = '1' then
+        if I_reset = '1' then               -- asynchronous reset (active high)
             SR_readAddress <= 0;
-        elsif rising_edge(I_clock) then
-            if I_initAddress = '1' then
+        elsif rising_edge (I_clock) then 
+            if I_initAddress ='1' then 
                 SR_readAddress <= 0;
-            elsif I_incrAddress = '1' then
+            elsif I_incrAddress = '1' then  
                 SR_readAddress <= SR_readAddress + 1;
             end if;
         end if;
@@ -146,31 +145,46 @@ begin
     -- providing the last product used to compute the convolution
     O_processingDone <= '1' when SR_readAddress = 15 else '0';
 
-   -- Multiplication operands
-    SC_multOperand1 <= SR_shiftRegister(SR_readAddress);
-    SC_multOperand2 <= SR_coefRegister(SR_readAddress);
+    -- Signals connected with multiplexers (SIMPLY inferred with table indices)
+    SC_multOperand1 <= SR_shiftRegister(SR_readAddress);             -- 16 bits
+    SC_multOperand2 <= SR_coefRegister(SR_readAddress);             -- 16 bits
+
+    -- Multiplication of the operands
+    SC_MultResult   <= SC_multOperand1*SC_multOperand2;             -- 32 bits
 
-    -- Multiplication
-    SC_MultResult   <= resize(SC_multOperand1, 32) * resize(SC_multOperand2, 32);
     -- Sum of the multiplication result and the accumulated value
     SC_addResult    <= resize(SC_MultResult, SC_addResult'length) + SR_sum;
 
     -- Register to store the accumulated value if the loadSum is active
     -- It also reduces the width of the sum to fit to the input and output
     -- signal widths (be careful with truncating/rounding)
-    sum_acc : process (_BLANK_) is
+    sum_acc : process (I_clock, I_reset) is
     begin
         if I_reset = '1' then               -- asynchronous reset (active high)
             SR_sum <= (others => '0');
-        elsif _BLANK_
+        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;
 
     -- Register to store the final result if the loadOuput is active
-    store_result : process (_BLANK_) is
+    store_result : process (I_clock, I_reset) is
     begin
-        _BLANK_
-
+        if I_reset='1' then 
+            SR_filteredSample <= (others => '0');
+        elsif rising_edge (I_clock) then
+            if I_loadY = '1' then
+                if SC_addResult(14) = '1' then
+                    SR_filteredSample <= SC_addResult(30 downto 15) + 1;
+                else    
+                    SR_filteredSample <= SC_addResult(30 downto 15);
+                end if;
+            end if;
+         end if;
     end process store_result;
 
     O_filteredSample <= std_logic_vector(SR_filteredSample);