Commit 71388fd5c75f285ae02833501290a824e5b87093

Authored by bilalelhasnaoui
0 parents

seance 2

Exercice_1/Asynchrone_64Bits.png 0 โ†’ 100644

162 KB

Exercice_1/Asynchronous_Reset.vhd 0 โ†’ 100644
  1 +++ a/Exercice_1/Asynchronous_Reset.vhd
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company:
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 17.10.2023 17:47:42
  6 +-- Design Name:
  7 +-- Module Name: Exercice_1 - Behavioral
  8 +-- Project Name:
  9 +-- Target Devices:
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +
  21 +
  22 +library IEEE;
  23 +use IEEE.STD_LOGIC_1164.ALL;
  24 +use IEEE.NUMERIC_STD.ALL;
  25 +-- Uncomment the following library declaration if using
  26 +-- arithmetic functions with Signed or Unsigned values
  27 +
  28 +-- Uncomment the following library declaration if instantiating
  29 +-- any Xilinx leaf cells in this code.
  30 +--library UNISIM;
  31 +--use UNISIM.VComponents.all;
  32 +
  33 +entity Asynchronous_Reset is
  34 + generic(N : natural := 64);
  35 + Port (
  36 + reset : in std_logic;
  37 + clk_in : in std_logic;
  38 + A : in SIGNED(N-1 downto 0);
  39 + B : in SIGNED(N-1 downto 0);
  40 + Resultat : out SIGNED(2*N -1 downto 0)
  41 + );
  42 +end Asynchronous_Reset;
  43 +
  44 +architecture Behavioral of Asynchronous_Reset is
  45 + signal produit : signed(2*N-1downto 0);
  46 +begin
  47 +-- Reset asynchrone process.
  48 +Mlutiplier: process(clk_in, reset)
  49 + begin
  50 + if reset='1' then
  51 + produit <= (others =>'0');
  52 + elsif rising_edge(clk_in) then
  53 + produit <= A*B;
  54 + end if;
  55 + end process;
  56 + Resultat <= produit;
  57 +end Behavioral;
0 \ No newline at end of file 58 \ No newline at end of file
Exercice_1/README.md 0 โ†’ 100644
  1 +++ a/Exercice_1/README.md
Exercice_1/Synchrone_64Bits.png 0 โ†’ 100644

159 KB

Exercice_1/Synchronous_Reset.vhd 0 โ†’ 100644
  1 +++ a/Exercice_1/Synchronous_Reset.vhd
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company: ร‰COLE POLYTECHNIQUE DE LILLE - POLYTECH LILLE.
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 17.10.2023 17:47:42
  6 +-- Design Name: Synchronous Reset signed generic multiplier.
  7 +-- Module Name: Synchronous RESET - Behavioral
  8 +-- Project Name: Synchronous Reset signed generic multiplier.
  9 +-- Target Devices: BASYS3
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +
  21 +library IEEE;
  22 +use IEEE.STD_LOGIC_1164.ALL;
  23 +use IEEE.NUMERIC_STD.ALL;
  24 +-- Uncomment the following library declaration if using
  25 +-- arithmetic functions with Signed or Unsigned values
  26 +
  27 +-- Uncomment the following library declaration if instantiating
  28 +-- any Xilinx leaf cells in this code.
  29 +--library UNISIM;
  30 +--use UNISIM.VComponents.all;
  31 +
  32 +entity Synchronous_Reset is
  33 + -- Dรฉclaration de N comme generic pour varier le nombre des bits des entrรฉs A et B.
  34 + generic(N : natural := 64);
  35 + Port (
  36 + reset : in std_logic; -- Dรฉclaration du reset comme input.
  37 + clk_in : in std_logic; -- Dรฉclaration de l'horloge.
  38 + A : in SIGNED(N-1 downto 0); -- L'entrรฉe A sur N Bits.
  39 + B : in SIGNED(N-1 downto 0); -- L'entrรฉe B sur N Bits
  40 + Resultat : out SIGNED(2*N -1 downto 0) -- Le rรฉsultat du produit sur 2*N Bits.
  41 + );
  42 +end Synchronous_Reset;
  43 +
  44 +architecture Behavioral of Synchronous_Reset is
  45 + signal produit : signed(2*N-1downto 0); -- Dรฉclarataion du signal intรฉrmidiaire pour les calculs.
  46 +begin
  47 +-- Reset synchrone process. => liste de sensibilitรฉ du processus ne contient pas le RESET.
  48 +Mlutiplier: process(clk_in)
  49 + begin
  50 + if rising_edge(clk_in) then -- Tester si il y a un font montant sur l'horloge.
  51 + if reset='1' then -- Teseter le reset pour le remise ร  ZERO du systรจme.
  52 + produit <= (others =>'0');
  53 + else
  54 + produit <= A*B; -- Calculer le produit A*B a l'aide du bibliothรฉque IEEE.NUMERIC_STD
  55 + end if;
  56 + end if;
  57 + end process;
  58 + Resultat <= produit; -- Affectation du signal a la rรฉsultat.
  59 +end Behavioral;
0 \ No newline at end of file 60 \ No newline at end of file
Exercice_2/RAM_Memory_ReadWrite_256Bits.png 0 โ†’ 100644

167 KB

Exercice_2/RAM_ReadWrite.vhd 0 โ†’ 100644
  1 +++ a/Exercice_2/RAM_ReadWrite.vhd
@@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company: ร‰COLE POLYTECHNIQUE DE LILLE
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 19.10.2023 15:35:32
  6 +-- Design Name: Random Access Memory Read Write.
  7 +-- Module Name: RAM_ReadWrite - Behavioral
  8 +-- Project Name: Random Access Memory Read Write.
  9 +-- Target Devices:
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +
  21 +
  22 +library IEEE;
  23 +use IEEE.STD_LOGIC_1164.ALL;
  24 +use IEEE.NUMERIC_STD.ALL; -- Utilisation de NUMERIC_STD pour faire la conversion std_logic_vector to integer.
  25 +use IEEE.STD_LOGIC_UNSIGNED.ALL;
  26 +-- Uncomment the following library declaration if using
  27 +-- arithmetic functions with Signed or Unsigned values
  28 +--use IEEE.NUMERIC_STD.ALL;
  29 +
  30 +-- Uncomment the following library declaration if instantiating
  31 +-- any Xilinx leaf cells in this code.
  32 +--library UNISIM;
  33 +--use UNISIM.VComponents.all;
  34 +
  35 +entity RAM_ReadWrite is
  36 + generic(
  37 + Address_Bits : positive :=8; -- Declaration de nombre des Bits de l'adress mรฉmoire 8Bits => 256 case mรฉmoire.
  38 + Data_Bits : positive :=8 -- Dรฉclaration de nombre des Bits des donnรฉes.
  39 + );
  40 + Port (
  41 + clk_in, Read_en, Write_en : std_logic; -- Le signal d'horloge, Enable lecture mรฉmoire et รฉcriture mรฉmoire signals
  42 + Address : in std_logic_vector(Address_Bits-1 downto 0); -- L'address pour acceder au case mรฉmoire.
  43 + Data_in : in std_logic_vector(Data_Bits-1 downto 0); -- Les donnรฉes a รฉcrire dans le RAM.
  44 + Data_out : out std_logic_vector(Data_Bits-1 downto 0) -- Les donnรฉes a lire depuis la mรฉmoire RAM.
  45 + );
  46 +end RAM_ReadWrite;
  47 +-- Dรฉfinition de l'archรฉticture de l'entitรฉ RAM_ReadWrite.
  48 +architecture Behavioral of RAM_ReadWrite is
  49 +-- Dรฉclaration de la mรฉmoire comme un tableau de 2**Address_Bits = 256 cases mรฉmoires.
  50 +-- Chaque case est une vecteur de 8 Btis (Data_Bits-1 donwto 0) = 8
  51 +type RAM is array (0 to 2**Address_Bits-1) of std_logic_vector(Data_Bits-1 downto 0);
  52 +-- Dรฉclaration d'un signal mรฉmoire pour la manipulation de lรฉcture et รฉcriture.
  53 +signal memory : RAM := (others => (others => '0'));
  54 +begin
  55 + RAM_ReadWrite :process(clk_in)
  56 + begin
  57 + if(rising_edge(clk_in)) then
  58 + if(Write_en = '1') then -- Si l'option รฉcriture de mรฉmoire est activรฉ on รฉcris dans le mรฉmoire
  59 + memory(to_integer(unsigned(Address))) <= Data_in; -- Affectation des donnรฉes ร  la case avec (address)
  60 + end if;
  61 + if(Read_en = '1') then -- Si l'option lรฉcture de mรฉmoire est activรฉ on lit dans le mรฉmoire
  62 + Data_out <= memory(to_integer(unsigned(Address))); -- Lรฉcriture de la case en Data_out.
  63 + end if;
  64 + end if;
  65 + end process;
  66 +end Behavioral;
Exercice_2/README.md 0 โ†’ 100644
  1 +++ a/Exercice_2/README.md
Exercice_2/ROM_Infering.vhd 0 โ†’ 100644
  1 +++ a/Exercice_2/ROM_Infering.vhd
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company:
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 19.10.2023 16:14:20
  6 +-- Design Name:
  7 +-- Module Name: ROM_Infering - Behavioral
  8 +-- Project Name:
  9 +-- Target Devices:
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +
  21 +
  22 +library IEEE;
  23 +use IEEE.STD_LOGIC_1164.ALL;
  24 +use IEEE.NUMERIC_STD.ALL; -- Utilisation de NUMERIC_STD pour faire la conversion std_logic_vector to integer.
  25 +-- Uncomment the following library declaration if using
  26 +-- arithmetic functions with Signed or Unsigned values
  27 +--use IEEE.NUMERIC_STD.ALL;
  28 +
  29 +-- Uncomment the following library declaration if instantiating
  30 +-- any Xilinx leaf cells in this code.
  31 +--library UNISIM;
  32 +--use UNISIM.VComponents.all;
  33 +
  34 +entity ROM_Infering is
  35 + generic(
  36 + Address_Bits : Integer := 5; -- Les adress mรฉmoires sot sur 5 bits donc 32 Case mรฉmoire. (Juste pour simplifier loading aprรฉs).
  37 + Data_Bits : Integer := 8 -- Dรฉclaration de nombre des Bits des donnรฉes.
  38 + );
  39 + Port (
  40 + Read_en, clk_in : in std_logic; -- Le signal d'horloge,
  41 + address: in std_logic_vector(Address_Bits-1 downto 0); -- L'address pour acceder au case mรฉmoire.
  42 + Data_out : out std_logic_vector(Data_Bits-1 downto 0) -- Les donnรฉes a lire depuis la mรฉmoire RAM.
  43 + );
  44 +end ROM_Infering;
  45 +
  46 +architecture Behavioral of ROM_Infering is
  47 +-- Dรฉclaration de la mรฉmoire comme un tableau de 2**Address_Bits = 32 cases mรฉmoires.
  48 +-- Chaque case est une vecteur de 8 Btis (Data_Bits-1 donwto 0) = 8
  49 +type ROM is array (0 to 2**Address_Bits-1) of std_logic_vector(Data_Bits-1 downto 0);
  50 +-- Affectation manuelle des 32 cases mรฉmoire avec des valeurs en Hexadรฉcimal X"AA" ou en binaire par "00001101" example.
  51 +signal ROM_memory : ROM := (X"00",X"01",X"10",X"11",X"20",X"21",X"22",X"30",
  52 + X"31",X"32",X"33",X"40",X"41",X"42",X"43",X"44",
  53 + X"50",X"51",X"52",X"53", X"54",X"55",X"60",X"61",
  54 + X"62",X"63",X"64",X"65", X"66",X"67",X"68",X"69");
  55 +begin
  56 + ROM_Read : process(clk_in)
  57 + begin
  58 + if(rising_edge(clk_in)) then
  59 + if Read_en = '1' then -- Si le signal d'entrรฉes Read_enable est activรฉ en lit a partir du mรฉmoire.
  60 + Data_out <= ROM_memory(to_integer(unsigned(address)));
  61 + end if;
  62 + end if;
  63 + end process;
  64 +end Behavioral;
Exercice_2/ROM_Memory_32CaseMemoire_8Bits.png 0 โ†’ 100644

155 KB

Exercice_3/InOut_Pin.vhd 0 โ†’ 100644
  1 +++ a/Exercice_3/InOut_Pin.vhd
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company:
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 19.10.2023 17:24:45
  6 +-- Design Name:
  7 +-- Module Name: InOut_Pin - Behavioral
  8 +-- Project Name:
  9 +-- Target Devices:
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +
  21 +
  22 +library IEEE;
  23 +use IEEE.STD_LOGIC_1164.ALL;
  24 +
  25 +-- Uncomment the following library declaration if using
  26 +-- arithmetic functions with Signed or Unsigned values
  27 +--use IEEE.NUMERIC_STD.ALL;
  28 +
  29 +-- Uncomment the following library declaration if instantiating
  30 +-- any Xilinx leaf cells in this code.
  31 +--library UNISIM;
  32 +--use UNISIM.VComponents.all;
  33 +
  34 +entity InOut_Pin is
  35 + Port ( Pin : inout STD_LOGIC);
  36 +end InOut_Pin;
  37 +
  38 +architecture Behavioral of InOut_Pin is
  39 +begin
  40 + Inout_Pin :process(Pin)
  41 + begin
  42 + if(rising_edge(Pin)) then
  43 + Pin <= '0';
  44 + end if;
  45 + end process;
  46 +end Behavioral;
0 \ No newline at end of file 47 \ No newline at end of file
Exercice_3/README.md 0 โ†’ 100644
  1 +++ a/Exercice_3/README.md
Exercice_4/Adder_Generic.vhd 0 โ†’ 100644
  1 +++ a/Exercice_4/Adder_Generic.vhd
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +----------------------------------------------------------------------------------
  2 +-- Company:
  3 +-- Engineer:
  4 +--
  5 +-- Create Date: 08.10.2023 15:22:15
  6 +-- Design Name:
  7 +-- Module Name: Generic unsigned full Adder - Behavioral
  8 +-- Project Name:
  9 +-- Target Devices:
  10 +-- Tool Versions:
  11 +-- Description:
  12 +--
  13 +-- Dependencies:
  14 +--
  15 +-- Revision:
  16 +-- Revision 0.01 - File Created
  17 +-- Additional Comments:
  18 +--
  19 +----------------------------------------------------------------------------------
  20 +library IEEE;
  21 +use IEEE.STD_LOGIC_1164.ALL;
  22 +use IEEE.NUMERIC_STD.ALL;
  23 +use ieee.std_logic_unsigned.all;
  24 +
  25 +-- Uncomment the following library declaration if instantiating
  26 +-- any Xilinx leaf cells in this code.
  27 +--library UNISIM;
  28 +--use UNISIM.VComponents.all;
  29 +entity Adder_Generic is
  30 + generic( N : Integer := 256);
  31 + Port (
  32 + clk_in, reset : in std_logic;
  33 + a_in, b_in : in std_logic_vector(N-1 downto 0);
  34 + s_out : out std_logic_vector(N downto 0)
  35 + );
  36 +end Adder_Generic;
  37 +--
  38 +architecture Behavioral of Adder_Generic is
  39 +signal ain_add : signed(N downto 0);
  40 +signal bin_add : signed(N downto 0);
  41 +signal s_out_d : signed(N downto 0);
  42 +begin
  43 + s_out_d <= ain_add + bin_add;
  44 + process(clk_in, reset)
  45 + begin
  46 + if reset = '1' then
  47 + s_out <= (others => '0');
  48 + elsif rising_edge(clk_in) then
  49 + ain_add <= resize(signed(a_in),N+1);
  50 + bin_add <= resize(signed(b_in),N+1);
  51 + s_out <= std_logic_vector(s_out_d);
  52 + end if;
  53 + end process;
  54 +end Behavioral;
0 \ No newline at end of file 55 \ No newline at end of file
Exercice_4/Adder_full_signed.vhd 0 โ†’ 100644
  1 +++ a/Exercice_4/Adder_full_signed.vhd
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +library ieee;
  2 +use ieee.std_logic_1164.all;
  3 +use ieee.numeric_std.all;
  4 +
  5 +entity Adder_full_signed is
  6 +generic( N : integer := 512);
  7 +port (
  8 + i_clk : in std_logic;
  9 + i_add1 : in std_logic_vector(N-1 downto 0);
  10 + i_add2 : in std_logic_vector(N-1 downto 0);
  11 + o_sum : out std_logic_vector(N downto 0));
  12 +end Adder_full_signed;
  13 +
  14 +architecture rtl of Adder_full_signed is
  15 +
  16 +signal r_add1 : signed(N downto 0);
  17 +signal r_add2 : signed(N downto 0);
  18 +signal w_sum : signed(N downto 0);
  19 +
  20 +begin
  21 +
  22 +-- combinatorial adder
  23 + w_sum <= r_add1 + r_add2;
  24 +
  25 +r_process : process(i_clk)
  26 +begin
  27 + if(rising_edge(i_clk)) then
  28 +
  29 + -- register input and extend sign
  30 + r_add1 <= resize(signed(i_add1),N+1);
  31 + r_add2 <= resize(signed(i_add2),N+1);
  32 +
  33 + -- register output
  34 + o_sum <= std_logic_vector(w_sum);
  35 +
  36 + end if;
  37 +end process r_process;
  38 +
  39 +end rtl;
0 \ No newline at end of file 40 \ No newline at end of file
README.md 0 โ†’ 100644
  1 +++ a/README.md