From 6eca866e4333a2352d638e7a4a42b7a789969bf7 Mon Sep 17 00:00:00 2001 From: Paul Faure Date: Fri, 3 Sep 2021 14:36:09 +0200 Subject: [PATCH] Optimisation code --- .../new/Etage1_LectureInstruction.vhd | 28 +++---------------- .../sources_1/new/Etage2-5_Registres.vhd | 8 +----- Processeur.srcs/sources_1/new/Keyboard.vhd | 6 ++-- Processeur.xpr | 2 +- 4 files changed, 9 insertions(+), 35 deletions(-) diff --git a/Processeur.srcs/sources_1/new/Etage1_LectureInstruction.vhd b/Processeur.srcs/sources_1/new/Etage1_LectureInstruction.vhd index 8b86aea..0402b5a 100644 --- a/Processeur.srcs/sources_1/new/Etage1_LectureInstruction.vhd +++ b/Processeur.srcs/sources_1/new/Etage1_LectureInstruction.vhd @@ -177,25 +177,13 @@ -- S'il ne faut pas injecter de bulles ont traite l'instruction (Possible code factorisable sur ce if) if ((Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits) = Code_Instruction_CALL) or (Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits) = Code_Instruction_JMP)) then -- CAS PARTICULIER : CALL ou JMP, on transmet et on saute - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); Pointeur_Instruction <= Instruction_courante (2 * Nb_bits + Addr_size_mem_instruction - 1 downto 2 * Nb_bits); elsif (Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits) = Code_Instruction_RET) then -- CAS PARTICULIER : RET, on transmet et on revient - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); Pointeur_Instruction <= Adresse_Retour; elsif (Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits) = Code_Instruction_JMZ) then -- CAS PARTICULIER : JMZ, on attends que l'instruction précedente arrive sur l'ALU, si le flag Zero est a un on saute, sinon on continue normalement compteur <= compteur + 1; - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); if (compteur = 2) then if (Z = '1') then Pointeur_Instruction <= Instruction_courante (2 * Nb_bits + Addr_size_mem_instruction - 1 downto 2 * Nb_bits); @@ -218,29 +206,21 @@ compteur <= 0; end if; end if; - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); elsif (Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits) = Code_Instruction_PRI) then -- CAS PARTICULIER : PRI, on transmet l'instruction et fixe le compteur pour proteger des collisions Compteur_PRI <= Nb_bits/4 + 1; - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); Pointeur_Instruction <= Pointeur_Instruction + 1; else -- CAS GENERAL : On transmet l'instruction et les opérandes, si elle est critique en ecriture, on enregistre le registre associé dans le tableau - C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); - B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); - A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); - Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); if (Instructions_critiques_ecriture(to_integer(unsigned(Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits)))) = '1') then Tableau(1) <= to_integer(unsigned(Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits))); end if; Pointeur_Instruction <= Pointeur_Instruction + 1; end if; + C <= Instruction_courante (1 * Nb_bits - 1 downto 0 * Nb_bits); + B <= Instruction_courante (2 * Nb_bits - 1 downto 1 * Nb_bits); + A <= Instruction_courante (3 * Nb_bits - 1 downto 2 * Nb_bits); + Instruction <= Instruction_courante (Instruction_bus_size + 3 * Nb_bits - 1 downto 3 * Nb_bits); else -- Si besoin de bulle, on l'injecte C <= Argument_nul; diff --git a/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd b/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd index 601cad2..5675807 100644 --- a/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd +++ b/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd @@ -167,13 +167,7 @@ begin process begin wait until CLK'event and CLK='1'; - if (RST='0') then - Request_Stopped <= false; - elsif (STD_IN_Av = '1') then - Request_Stopped <= true; - else - Request_Stopped <= false; - end if; + Request_Stopped <= (STD_IN_Av = '1') and (RST = '1'); end process; STD_IN_Request <= '1' when not(Request_Stopped) and IN_5_Instruction = Code_Instruction_GET and not(RST='0') else '0'; diff --git a/Processeur.srcs/sources_1/new/Keyboard.vhd b/Processeur.srcs/sources_1/new/Keyboard.vhd index 4e4a226..2f5d3e2 100644 --- a/Processeur.srcs/sources_1/new/Keyboard.vhd +++ b/Processeur.srcs/sources_1/new/Keyboard.vhd @@ -53,7 +53,7 @@ architecture Behavioral of Keyboard is end component; signal buffer_Data : STD_LOGIC_VECTOR (0 to 7); - signal keyboardControleur_Data_av : STD_LOGIC; + signal kbCtrl_Data_av : STD_LOGIC; signal intern_Data_av : STD_LOGIC := '0'; signal intern_Data : STD_LOGIC_VECTOR (0 to 6) := (others => '0'); @@ -66,7 +66,7 @@ begin PS2Clk => PS2Clk, PS2Data => PS2Data, - Data_av => keyboardControleur_Data_av, + Data_av => kbCtrl_Data_av, Data => buffer_Data, alert => alert); @@ -79,7 +79,7 @@ begin begin wait until CLK'event and CLK = '1'; if (intern_Data_av = '0') then - if (keyboardControleur_Data_av = '1') then + if (kbCtrl_Data_av = '1') then Data <= intern_Data; intern_Data_av <= '1'; end if; diff --git a/Processeur.xpr b/Processeur.xpr index 80adc0d..2e1b6f2 100644 --- a/Processeur.xpr +++ b/Processeur.xpr @@ -35,7 +35,7 @@