diff --git a/docs/compte-rendu.md b/docs/compte-rendu.md
index cd056f619d4a6c4caddd9df5b41f43ed435892f3..4dcbe4e6345f6beeb625e75fa352f85a5e403442 100644
--- a/docs/compte-rendu.md
+++ b/docs/compte-rendu.md
@@ -2,24 +2,30 @@
 
 ## Diagramme de la FSM
 
-![Diagramme de la FSM](./img/FSM.png)
+![Diagramme de la FSM](./img/FSM1.png)
 
 
 ## Questions
 
 ### Question filtre 1 : Combien de processus sont utilisés et de quelles natures sont-ils ? Comment les différenciez-vous ?
+Nous avons deux processus. Le premier est synchrone comprenant une horloge et un  reset asynchrone. Le second processus est combinatoire ayant comme liste de sensibilité l'état présent et les conditions entre les différentes entrées. Il y a aussi un troisième processus implicite asynchrone pour attribuer les variables de chaques états. 
 
 
 ### Question filtre 2 : La simulation vous permet-elle de valider votre description VHDL ? Justifiez.
 
+La simualtion permet de valider la description VHDL. nous retrouvons les valeurs demandées pour chaque inputSampleValid. On retrouve en effet ces valeurs sur la simulation ci-dessous.
 
 ### Question filtre 3 : Validez-vous la conception de l’unité de contrôle ?
-
+Le filtre passe bas est fonctionnel car il coupe bien les hautes fréquences.
 
 ### Question filtre 4 : Combien de processus sont utilisés et de quelles natures sont-ils ?
-
+ On a 4 processus synchrones dont 3 possèdent un bouton reset asynchrone présent dans la liste de sensibilité. On a de plus un processus combinatoire implicite pour attribuer les valeurs de O_processingDone et O_Y.
 
 ### Question filtre 5 : La simulation vous permet-elle de valider votre description VHDL ? Sinon, quel élément pose problème ? Comment pouvez-vous le corriger ? Justifiez
-
+Nous avons vérifié chacun des processus synchrones de l'opérative unit. On obtient les bonnes valeurs aux bons instants pour SC_addResult ou Sr_Sum.
+Néanmoins, nos valeurs de sortie sont approximés et différent par moment de la valeur souhaitée (avec un écart de 1). Cela est due aux approximations quand on sélectionne seulement une partie des bits (8 sur 20). Pour y remédier', on ajoute une condition qui teste le bit précédent (le bit 6 en l'occurence) pour ajouter 1 à la valeur de sortie si ce dernier vaut 1, et 0 sinon.
+On obtient alors exactement les valeurs souhaitées.
 
 ### Question filtre 6 : Validez-vous la conception de l’unité opérative ? Sinon, quel élément pose problème ? Comment pouvez-vous le corriger ?
+
+Le filtre passe bas est fonctionnel car il coupe bien les hautes fréquences.
diff --git a/docs/img/FSM1.png b/docs/img/FSM1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a1317f15ae016d927500831eb2a252c8f24ed6f
Binary files /dev/null and b/docs/img/FSM1.png differ
diff --git a/src/hdl/controlUnit.vhd b/src/hdl/controlUnit.vhd
index 705905d8efbad8482d22e650f8cce92ef78290f4..68cb949054d6f1d00fe352baeb8864af9bb79d98 100644
--- a/src/hdl/controlUnit.vhd
+++ b/src/hdl/controlUnit.vhd
@@ -1,9 +1,10 @@
--------------------------------------------------------------------------------
+------------------------------------------------------------------------------
 -- Title      : controlUnit
 -- Project    :
 -------------------------------------------------------------------------------
 -- File       : operativeUnit.vhd
--- Author     : Jean-Noel BAZIN  <jnbazin@pc-disi-026.enst-bretagne.fr>
+-- Author     : Jean-Noel BAZIN  <jnbazin@pc-disi-026.enst-bretagne.fr
+>
 -- Company    :
 -- Created    : 2018-04-11
 -- Last update: 2019-02-13
@@ -18,13 +19,10 @@
 -- 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
@@ -38,47 +36,62 @@ entity controlUnit is
     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, PROCESSING_LOOP, OUTPUT, WAIT_END_SAMPLE);  -- state list
   signal SR_presentState : T_state;
   signal SR_futurState   : T_state;
-
 begin
-
-  process (_BLANK_) is
+  process (I_clock, I_reset) is
   begin
     if I_reset = '1' then               -- asynchronous reset (active high)
-      SR_presentState <= _BLANK_
+      SR_presentState <= WAIT_SAMPLE;
     elsif rising_edge(I_clock) then     -- rising clock edge
-      _BLANK_
+      SR_presentState <= SR_futurState;
     end if;
   end process;
-
-  process (_BLANK_) is
+  process (SR_presentState,I_inputSampleValid,I_processingDone) is
   begin
     case SR_presentState is
-
       when WAIT_SAMPLE =>
-        _BLANK_
-
+        if (I_inputSampleValid ='1') then
+           SR_futurState <= STORE;
+        else 
+           SR_futurState <= WAIT_SAMPLE;
+        end if;
+        
+      when STORE =>
+        SR_futurState <= PROCESSING_LOOP;
+ 
+      when PROCESSING_LOOP =>
+        if (I_processingDone ='1') then
+           SR_futurState <= OUTPUT;
+        else 
+           SR_futurState <= PROCESSING_LOOP;
+        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           <= '1' when _BLANK_ ;
-  O_initAddress         <= '1' when _BLANK_ ;
-  O_incrAddress         <= '1' when _BLANK_ ;
-  O_initSum             <= '1' when _BLANK_ ;
-  O_loadSum             <= '1' when _BLANK_ ;
-  O_loadY               <= '1' when _BLANK_ ;
-  O_FilteredSampleValid <= '1' when _BLANK_ ;
-
-
-
-
-
-end architecture archi_operativeUnit;
+  O_loadShift           <= '1' when SR_presentState=STORE else '0';
+  O_initAddress         <= '1' when SR_presentState=STORE else '0';
+  O_incrAddress         <= '1' when  SR_presentState=PROCESSING_LOOP else '0';
+  O_initSum             <= '1' when SR_presentState=STORE  else '0';
+  O_loadSum             <= '1' when SR_presentState=PROCESSING_LOOP else '0' ;
+  O_loadY               <= '1' when SR_presentState=OUTPUT else '0';
+
+end architecture archi_operativeUnit; 
\ No newline at end of file
diff --git a/src/hdl/operativeUnit.vhd b/src/hdl/operativeUnit.vhd
index 1286aff5a65b975b333b4136df7781bb98c0742e..7bca8fc46b5822cb6f1b63435b2d5d0cd5aaf004 100644
--- a/src/hdl/operativeUnit.vhd
+++ b/src/hdl/operativeUnit.vhd
@@ -3,7 +3,8 @@
 -- Project    :
 -------------------------------------------------------------------------------
 -- File       : operativeUnit.vhd
--- Author     : Jean-Noel BAZIN  <jnbazin@pc-disi-026.enst-bretagne.fr>
+-- Author     : Jean-Noel BAZIN  <jnbazin@pc-disi-026.enst-bretagne.fr
+>
 -- Company    :
 -- Created    : 2018-04-11
 -- Last update: 2019-02-13
@@ -24,13 +25,10 @@
 -- 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
@@ -44,14 +42,11 @@ entity operativeUnit is
     O_processingDone : out std_logic;   -- Indicate that processing is done
     O_Y              : out std_logic_vector(7 downto 0)   -- filtered sample
     );
-
 end entity operativeUnit;
-
 architecture arch_operativeUnit of operativeUnit is
   type registerFile is array(0 to 15) of signed(7 downto 0);
   signal SR_coefRegister : registerFile;
 
-
   signal SR_shiftRegister : registerFile;  -- shift register file used to store and shift input samples
   signal SC_multOperand1  : signed(7 downto 0);
   signal SC_multOperand2  : signed(7 downto 0);
@@ -60,11 +55,8 @@ architecture arch_operativeUnit of operativeUnit is
   signal SR_sum           : signed(19 downto 0);  -- Accumulation register
   signal SR_Y             : signed(7 downto 0);  -- filtered sample storage register
   signal SR_readAddress   : integer range 0 to 15;  -- register files read address
-
-
-
+ 
 begin
-
 -- Low-pass filter provided with octave (or Matlab ;)) command
 --fir1(15, .001)/sqrt(sum(fir1(15, .001).^2))*2^6
   SR_coefRegister <= (to_signed(2, 8),  -- ROM register used file to store FIR coefficients
@@ -84,46 +76,65 @@ begin
                       to_signed(3, 8),
                       to_signed(2, 8)
                       );
-
-  shift : process (_BLANK_) is
+  shift : process (I_reset, I_clock) is
   begin  -- process shift
     if I_reset = '1' then               -- asynchronous reset (active high)
       SR_shiftRegister <= (others => (others => '0'));
-    elsif _BLANK_
-
+    elsif (rising_edge(I_clock)) then
+        if (I_loadShift = '1') then
+            SR_shiftRegister(1 to 15) <= SR_shiftRegister(0 to 14);
+            SR_shiftRegister(0) <= signed(I_inputSample);
+        end if;
     end if;
   end process shift;
 
-  incr_address : process (_BLANK_) is
+  incr_address : process (I_reset, I_clock) is
   begin
     if I_reset = '1' then               -- asynchronous reset (active high)
       SR_readAddress <= 0;
-    elsif _BLANK_
-
+    elsif (rising_edge(I_clock)) then
+        if(I_initAddress = '1') then
+            SR_readAddress <= 0;
+        end if;
+            
+        if (I_incrAddress = '1') then
+            if (SR_readAddress < 15) then
+      --          SR_readAddress <= SR_readAddress;
+      --      else
+                SR_readAddress <= SR_readAddress + 1;
+            end if;
+        end if;
     end if;
   end process incr_address;
-
-  O_processingDone <= '1' when _BLANK_ ;
-
-  SC_multOperand1 <= _BLANK_ ;   -- 8 bits
-  SC_multOperand2 <= _BLANK_ ;    -- 8 bits
-  SC_MultResult   <= _BLANK_ ;  -- 16 bits
+  O_processingDone <= '1' when SR_readAddress >= 15 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 (_BLANK_) is
+  sum_acc : process (I_reset, I_clock) 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;
-
-  store_result : process (_BLANK_) is
+  store_result : process (I_clock) is
   begin
-      _BLANK_
-
+    if (rising_edge(I_clock)) then
+        if (I_loadY='1') then
+            if(SR_sum(6)='1') then
+                SR_Y <= SR_sum(14 downto 7) + 1;
+            else
+                SR_Y <= SR_sum(14 downto 7);
+            end if;
+        end if;
+    end if;
+    
   end process store_result;
-
   O_Y <= std_logic_vector(SR_Y);
-
-end architecture arch_operativeUnit;
+end architecture arch_operativeUnit; 
\ No newline at end of file