diff --git a/Processeur.srcs/sim_1/new/Test_Pipeline.vhd b/Processeur.srcs/sim_1/new/Test_Pipeline.vhd index f1a74b4..c7682c2 100644 --- a/Processeur.srcs/sim_1/new/Test_Pipeline.vhd +++ b/Processeur.srcs/sim_1/new/Test_Pipeline.vhd @@ -63,6 +63,8 @@ architecture Behavioral of Test_Pipeline is begin instance : Pipeline + generic map (Addr_Memoire_Instruction_Size => 7, + Memoire_Instruction_Size => 128) port map (CLK => my_CLK, RST => my_RST, STD_IN => my_STD_IN, @@ -78,7 +80,6 @@ begin process begin - my_RST <= '0' after 34 ns, '1' after 57 ns; wait; end process; end Behavioral; diff --git a/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd b/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd index 305ff15..14bbf93 100644 --- a/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd +++ b/Processeur.srcs/sources_1/new/Etage2-5_Registres.vhd @@ -34,6 +34,7 @@ use IEEE.STD_LOGIC_1164.ALL; entity Etage2_5_Registres is Generic ( Nb_bits : Natural; Nb_registres : Natural; + Addr_registres_size : Natural; Instruction_bus_size : Natural; Bits_Controle_LC_5 : STD_LOGIC_VECTOR; Bits_Controle_MUX_2_A : STD_LOGIC_VECTOR; @@ -130,12 +131,12 @@ begin instance_BancRegistres : BancRegistres generic map (Nb_bits => Nb_bits, - Addr_size => Nb_bits, + Addr_size => Addr_registres_size, Nb_regs => Nb_registres) - port map ( AddrA => IN_2_A, - AddrB => IN_2_B, - AddrC => IN_2_C, - AddrW => IN_5_A, + port map ( AddrA => IN_2_A(Addr_registres_size - 1 downto 0), + AddrB => IN_2_B(Addr_registres_size - 1 downto 0), + AddrC => IN_2_C(Addr_registres_size - 1 downto 0), + AddrW => IN_5_A(Addr_registres_size - 1 downto 0), W => Commande_BancRegistres(0), DATA => Entree_BancRegistre_DATA, RST => RST, diff --git a/Processeur.srcs/sources_1/new/Etage4_Memoire.vhd b/Processeur.srcs/sources_1/new/Etage4_Memoire.vhd index 375e318..82deed6 100644 --- a/Processeur.srcs/sources_1/new/Etage4_Memoire.vhd +++ b/Processeur.srcs/sources_1/new/Etage4_Memoire.vhd @@ -35,6 +35,7 @@ use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Etage4_Memoire is Generic ( Nb_bits : Natural; Mem_size : Natural; + Adresse_mem_size : Natural; Instruction_bus_size : Natural; Mem_EBP_size : Natural; Adresse_size_mem_EBP : Natural; @@ -99,13 +100,14 @@ architecture Structural of Etage4_Memoire is OUTPUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0)); end component; - signal Addr_MemoireDonnees : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); - signal IN_Addr_MemoireDonnees : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); - signal Addr_MemoireDonnees_EBP : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); + signal Addr_MemoireDonnees : STD_LOGIC_VECTOR (Adresse_mem_size - 1 downto 0) := (others => '0'); + signal IN_Addr_MemoireDonnees : STD_LOGIC_VECTOR (Adresse_mem_size - 1 downto 0) := (others => '0'); + signal Addr_MemoireDonnees_EBP : STD_LOGIC_VECTOR (Adresse_mem_size - 1 downto 0) := (others => '0'); signal Commande_MemoireDonnees : STD_LOGIC_VECTOR (0 downto 0) := "0"; signal Sortie_MemoireDonnees : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); signal intern_OUT_B : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); - signal EBP : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0'); + signal EBP : STD_LOGIC_VECTOR (Adresse_mem_size - 1 downto 0) := (others => '0'); + signal New_EBP : STD_LOGIC_VECTOR (Adresse_mem_size - 1 downto 0) := (others => '0'); signal R_Aux : STD_LOGIC := '0'; signal W_Aux : STD_LOGIC := '0'; signal E : STD_LOGIC; @@ -121,16 +123,16 @@ begin Commande => Commande_MemoireDonnees); instance_MUX_IN : MUX - generic map (Nb_bits => Nb_bits, + generic map (Nb_bits => Adresse_mem_size, Instruction_Vector_Size => Instruction_bus_size, Bits_Controle => Bits_Controle_MUX_IN) port map ( Instruction => IN_Instruction, - IN1 => IN_A, - IN2 => IN_B, + IN1 => IN_A (Adresse_mem_size - 1 downto 0), + IN2 => IN_B (Adresse_mem_size - 1 downto 0), OUTPUT => IN_Addr_MemoireDonnees); instance_MUX_IN_EBP : MUX - generic map (Nb_bits => Nb_bits, + generic map (Nb_bits => Adresse_mem_size, Instruction_Vector_Size => Instruction_bus_size, Bits_Controle => Bits_Controle_MUX_IN_EBP) port map ( Instruction => IN_Instruction, @@ -149,7 +151,7 @@ begin instance_MemoireDonnees : MemoireDonnees generic map (Nb_bits => Nb_bits, - Addr_size => Nb_bits, + Addr_size => Adresse_mem_size, Mem_size => Mem_size) port map ( Addr => Addr_MemoireDonnees, RW => Commande_MemoireDonnees(0), @@ -159,13 +161,13 @@ begin D_OUT => Sortie_MemoireDonnees); instance_MemoireEBP : MemoireAdressesRetour - generic map (Nb_bits => Nb_bits, + generic map (Nb_bits => Adresse_mem_size, Addr_size => Adresse_size_mem_EBP, Mem_size => Mem_EBP_size ) port map ( R => R_Aux, W => W_Aux, - D_IN => IN_B, + D_IN => New_EBP, RST => RST, CLK => CLK, D_OUT => EBP, @@ -187,4 +189,5 @@ begin '0'; Addr_MemoireDonnees_EBP <= IN_Addr_MemoireDonnees + EBP; + New_EBP <= EBP + IN_B (Adresse_mem_size - 1 downto 0); end Structural; diff --git a/Processeur.srcs/sources_1/new/MemoireDonnees.vhd b/Processeur.srcs/sources_1/new/MemoireDonnees.vhd index 57aece4..cad7f8c 100644 --- a/Processeur.srcs/sources_1/new/MemoireDonnees.vhd +++ b/Processeur.srcs/sources_1/new/MemoireDonnees.vhd @@ -54,9 +54,9 @@ begin else if (RW = '0') then MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits - 1) downto Nb_bits * to_integer(unsigned(Addr))) <= D_IN; - else - D_OUT <= MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits) - 1 downto Nb_bits * to_integer(unsigned(Addr))); end if; end if; end process; + + D_OUT <= MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits) - 1 downto Nb_bits * to_integer(unsigned(Addr))); end Behavioral; \ No newline at end of file diff --git a/Processeur.srcs/sources_1/new/MemoireInstructions.vhd b/Processeur.srcs/sources_1/new/MemoireInstructions.vhd index e53af13..4ffbb62 100644 --- a/Processeur.srcs/sources_1/new/MemoireInstructions.vhd +++ b/Processeur.srcs/sources_1/new/MemoireInstructions.vhd @@ -40,7 +40,8 @@ entity MemoireInstructions is end MemoireInstructions; architecture Behavioral of MemoireInstructions is - signal MEMORY : STD_LOGIC_VECTOR ((Mem_Size * Nb_bits)-1 downto 0) := "10100"&x"000000"&"10001"&x"020000"&"01111"&x"010000"&"10101"&x"0a0000"&"10001"&x"000000"&"10101"&x"0a0000"&"10001"&x"010000"&"01001"&x"01ff00"; + signal MEMORY : STD_LOGIC_VECTOR ((Mem_Size * Nb_bits)-1 downto 0) := + "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "00000000000000000000000000000" & "10101000000000000000000000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "01010000000100000010100000000" & "00010000000000000000100000000" & "01001000000010000000100000000" & "01110000001010000000100000000" & "01001000000010000000000000000" & "01001000000000000000000000000" & "10011000101110000010000000000" & "01011000001010000001100000000" & "01011000000110000001000000000" & "01110000001000000000100000000" & "01001000000010000000000000000" & "01011000001100000000100000000" & "01101000000100000001100000000" & "01001000000110000110000000000" & "00001000000100000000000000010" & "01010000000000000010000000000" & "01011000000100000000000000000" & "00010000000100000000100000010" & "01001000000010000000100000000" & "01110000001000000000100000000" & "01001000000010000000000000000" & "01011000001010000000100000000" & "01001000000100000000100000000" & "01101000000000000001100000000" & "01001000000110000000100000000" & "00001000000000000001000000000" & "01010000000100000001100000000" & "00010000000000000000100000000" & "01001000000010000000100000000" & "01110000000110000000100000000" & "01001000000010000000000000000" & "01001000000000000000000000000" & "10100000000000000000000000000" & "01011000000010000000000000000" & "01011000000000000000100000000" & "01000000000010000000000000000" & "01001000000000000000100000000" & "10011000000010000000100000000" & "01011000000110000001100000000" & "01011000000100000001000000000" & "01011000000010000000000000000" & "01000000000000000000100000000" & "01101000000000000001000000000" & "01001000000100000101000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01001000000000000000100000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01010000000010000000000000000" & "01001000000000000000000000000" & "10100000000000000000000000000" & "01011000000110000001100000000" & "01011000000100000001000000000" & "01011000000010000000000000000" & "01011000000000000000100000000" & "01000000000010000000000000000" & "01001000000000000001000000000" & "01101000000000000001000000000" & "01001000000100000111000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01001000000000000000000000000" & "10001000000000000000000000000" & "01100000000000000000000000000" & "00001000000000000001000000000" & "00010000000000000001100000000" & "01001000000110000000100000000" & "01000000000100000000100000000" & "01010000000010000000000000000" & "01001000000000000000100000000" & "01111001100000000000000000000"; begin D_OUT <= MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits) - 1 downto Nb_bits * to_integer(unsigned(Addr))); end Behavioral; \ No newline at end of file diff --git a/Processeur.srcs/sources_1/new/Pipeline.vhd b/Processeur.srcs/sources_1/new/Pipeline.vhd index dc30301..2d2d639 100644 --- a/Processeur.srcs/sources_1/new/Pipeline.vhd +++ b/Processeur.srcs/sources_1/new/Pipeline.vhd @@ -39,7 +39,9 @@ entity Pipeline is Instruction_Bus_Size : Natural := 5; Nb_Instructions : Natural := 32; Nb_Registres : Natural := 16; + Addr_registres_size : Natural := 4; Memoire_Size : Natural := 32; + Adresse_mem_size : Natural := 5; Memoire_Adresses_Retour_Size : Natural := 16; Adresse_Memoire_Adresses_Retour_Size : Natural := 4); Port (CLK : STD_LOGIC; @@ -80,6 +82,7 @@ architecture Behavioral of Pipeline is component Etage2_5_Registres is Generic ( Nb_bits : Natural; Nb_registres : Natural; + Addr_registres_size : Natural; Instruction_bus_size : Natural; Bits_Controle_LC_5 : STD_LOGIC_VECTOR; Bits_Controle_MUX_2_A : STD_LOGIC_VECTOR; @@ -125,6 +128,7 @@ architecture Behavioral of Pipeline is component Etage4_Memoire is Generic ( Nb_bits : Natural; Mem_size : Natural; + Adresse_mem_size : Natural; Instruction_bus_size : Natural; Mem_EBP_size : Natural; Adresse_size_mem_EBP : Natural; @@ -183,7 +187,7 @@ architecture Behavioral of Pipeline is constant Bits_Controle_MUX_3 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "1111111111111100000001"; constant Bits_Controle_LC_4 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "1111111001011111111111"; constant Bits_Controle_MUX_4_IN : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "1111111110101111111111"; - constant Bits_Controle_MUX_4_IN_EBP : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "1111111100001111111111"; + constant Bits_Controle_MUX_4_IN_EBP : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "1111111011001111111111"; constant Bits_Controle_MUX_4_OUT : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "0000000001010000000000"; constant Bits_Controle_LC_5 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "1111111111" & "0001000001011111111110"; constant Code_Instruction_JMP : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "01111"; @@ -231,6 +235,7 @@ begin instance_Etage2_5 : Etage2_5_Registres generic map( Nb_bits => Nb_bits, Nb_Registres => Nb_Registres, + Addr_registres_size => Addr_registres_size, Instruction_bus_size => Instruction_Bus_Size, Bits_Controle_LC_5 => Bits_Controle_LC_5, Bits_Controle_MUX_2_A => Bits_Controle_MUX_2_A, @@ -278,6 +283,7 @@ begin instance_Etage4 : Etage4_Memoire generic map( Nb_bits => Nb_bits, Mem_size => Memoire_Size, + Adresse_mem_size => Adresse_mem_size, Instruction_bus_size => Instruction_Bus_Size, Mem_EBP_size => Memoire_Adresses_Retour_Size, Adresse_size_mem_EBP => Adresse_Memoire_Adresses_Retour_Size, diff --git a/Processeur.srcs/sources_1/new/System.vhd b/Processeur.srcs/sources_1/new/System.vhd index 3f91bad..7944604 100644 --- a/Processeur.srcs/sources_1/new/System.vhd +++ b/Processeur.srcs/sources_1/new/System.vhd @@ -75,6 +75,8 @@ begin CLK_OUT => my_CLK); instance : Pipeline + generic map (Addr_Memoire_Instruction_Size => 7, + Memoire_Instruction_Size => 128) port map (CLK => my_CLK, RST => my_RST, STD_IN => sw, diff --git a/Processeur.xpr b/Processeur.xpr index dfa3d43..937fb6b 100644 --- a/Processeur.xpr +++ b/Processeur.xpr @@ -32,7 +32,7 @@