123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- ----------------------------------------------------------------------------------
- -- Company: INSA-Toulouse
- -- Engineer: Paul Faure
- --
- -- Create Date: 13.04.2021 10:19:15
- -- Module Name: System - Behavioral
- -- Project Name: Processeur sécurisé
- -- Target Devices: Basys 3 ARTIX7
- -- Tool Versions: Vivado 2016.4
- -- Description: Environnement du processeur, mapping entre le processeur et les periphériques, affectation des ports la carte
- --
- -- Dependencies:
- -- - Clock_Divider
- -- - Pipeline
- -- - Pipeline_NS
- -- - PeripheriqueEcran
- -- - PeripheriqueClavier
- ----------------------------------------------------------------------------------
-
-
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
-
- -- Lien avec le fichier de contraintes
- -- Récupération du VGA
- -- Récupération du PS2
- -- Récupération d'un bouton pour RST
- -- Récupération de la clock
- entity System is
- Port ( vgaRed : out STD_LOGIC_VECTOR (3 downto 0);
- vgaBlue : out STD_LOGIC_VECTOR (3 downto 0);
- vgaGreen : out STD_LOGIC_VECTOR (3 downto 0);
- Hsync : out STD_LOGIC;
- Vsync : out STD_LOGIC;
- PS2Clk : in STD_LOGIC;
- PS2Data : in STD_LOGIC;
- btnC : in STD_LOGIC;
- CLK : STD_LOGIC);
- end System;
-
- architecture Structural of System is
-
- component Pipeline is
- Generic (Nb_bits : Natural := 8;
- Instruction_En_Memoire_Size : Natural := 29;
- Addr_Memoire_Instruction_Size : Natural := 3;
- Memoire_Instruction_Size : Natural := 8;
- 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 : in STD_LOGIC;
- RST : in STD_LOGIC;
- STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
- STD_IN_Av : in STD_LOGIC;
- STD_IN_Request : out STD_LOGIC;
- STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
- STD_OUT_Av : out STD_LOGIC;
- STD_OUT_Int : out STD_LOGIC);
- end component;
-
- component Pipeline_NS is
- Generic (Nb_bits : Natural := 8;
- Instruction_En_Memoire_Size : Natural := 29;
- Addr_Memoire_Instruction_Size : Natural := 3;
- Memoire_Instruction_Size : Natural := 8;
- 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);
- Port (CLK : STD_LOGIC;
- RST : STD_LOGIC;
- STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
- STD_IN_Av : in STD_LOGIC;
- STD_IN_Request : out STD_LOGIC;
- STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
- STD_OUT_Av : out STD_LOGIC;
- STD_OUT_Int : out STD_LOGIC);
- end component;
-
- component PeripheriqueEcran
- Generic ( Nb_Bits : Natural);
- Port ( CLK : in STD_LOGIC;
- CLK_VGA : in STD_LOGIC;
- RST : in STD_LOGIC;
-
- vgaRed : out STD_LOGIC_VECTOR (3 downto 0);
- vgaBlue : out STD_LOGIC_VECTOR (3 downto 0);
- vgaGreen : out STD_LOGIC_VECTOR (3 downto 0);
- Hsync : out STD_LOGIC;
- Vsync : out STD_LOGIC;
-
- STD_OUT : in STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
- STD_OUT_Av : in STD_LOGIC;
- STD_OUT_Int : in STD_LOGIC);
- end component;
-
- component PeripheriqueClavier
- Generic (Nb_Bits : Natural);
- Port ( CLK : in STD_LOGIC;
- RST : in STD_LOGIC;
- PS2Clk : in STD_LOGIC;
- PS2Data : in STD_LOGIC;
- STD_IN : out STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
- STD_IN_Av : out STD_LOGIC;
- STD_IN_Request : in STD_LOGIC;
- STD_OUT : out STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
- STD_OUT_Av : out STD_LOGIC);
- end component;
-
- component Clock_Divider is
- Port ( CLK_IN : in STD_LOGIC;
- CLK_OUT : out STD_LOGIC);
- end component;
-
- -- signaux auxiliaires
- signal my_RST : STD_LOGIC; -- Signal de RST (inversion par rapport au btnC)
- signal my_CLK : STD_LOGIC; -- Signal de clock (divisée par rapport CLK)
- -- signaux de gestion de l'entrée
- signal STD_IN : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Entrée
- signal STD_IN_Av : STD_LOGIC := '0'; -- Entrée disponible en lecture sur le clavier
- signal STD_IN_Request : STD_LOGIC := '0'; -- Demande d'une entrée au clavier
- -- signaux de gestion de la sortie
- signal STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie vers l'écran
- signal STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible pour l'écran
- signal STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) pour l'écran
- signal pipeline_STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie depuis le Pipeline
- signal pipeline_STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible depuis le Pipeline
- signal pipeline_STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) depuis le pipeline
- signal clavier_STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie depuis le Clavier
- signal clavier_STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible depuis le Clavier
- signal clavier_STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) depuis le Clavier
-
- constant SECURISED : boolean := false; -- Booléen de sélection entre la version sécurisée et non sécurisée
-
- begin
-
- -- Diviseur de clock
- clk_div : Clock_Divider
- port map (CLK_IN => CLK,
- CLK_OUT => my_CLK);
-
-
- -- Generation du pipeline en fonction de la condition sécurisé ou non
- instance: if (SECURISED) generate
- instance_securisee : entity work.Pipeline
- generic map (Nb_bits => 16,
- Instruction_En_Memoire_Size => 53,
- Addr_Memoire_Instruction_Size => 9,
- Memoire_Instruction_Size => 512,
- Instruction_Bus_Size => 5,
- Nb_Instructions => 32,
- Nb_Registres => 16,
- Addr_registres_size => 4,
- Memoire_Size => 64,
- Adresse_mem_size => 6,
- Memoire_Adresses_Retour_Size => 4,
- Adresse_Memoire_Adresses_Retour_Size => 2)
- port map (CLK => my_CLK,
- RST => my_RST,
- STD_IN => STD_IN,
- STD_IN_Av => STD_IN_Av,
- STD_IN_Request => STD_IN_Request,
- STD_OUT => pipeline_STD_OUT,
- STD_OUT_Av => pipeline_STD_OUT_Av,
- STD_OUT_Int => pipeline_STD_OUT_Int);
- else generate
- instance_non_securisee : entity work.Pipeline_NS
- generic map (Nb_bits => 16,
- Instruction_En_Memoire_Size => 53,
- Addr_Memoire_Instruction_Size => 9,
- Memoire_Instruction_Size => 512,
- Instruction_Bus_Size => 5,
- Nb_Instructions => 32,
- Nb_Registres => 16,
- Addr_registres_size => 4,
- Memoire_Size => 64,
- Adresse_mem_size => 6)
- port map (CLK => my_CLK,
- RST => my_RST,
- STD_IN => STD_IN,
- STD_IN_Av => STD_IN_Av,
- STD_IN_Request => STD_IN_Request,
- STD_OUT => pipeline_STD_OUT,
- STD_OUT_Av => pipeline_STD_OUT_Av,
- STD_OUT_Int => pipeline_STD_OUT_Int);
- end generate;
-
- instance_perif_ecran : PeripheriqueEcran
- generic map ( Nb_Bits => 16)
- port map ( CLK => my_CLK,
- CLK_VGA => CLK,
- RST => my_RST,
-
- vgaRed => vgaRed,
- vgaBlue => vgaBlue,
- vgaGreen => vgaGreen,
- Hsync => Hsync,
- Vsync => Vsync,
-
- STD_OUT => STD_OUT,
- STD_OUT_Av => STD_OUT_Av,
- STD_OUT_Int => STD_OUT_Int);
-
- instance_perif_clavier : PeripheriqueClavier
- generic map (Nb_Bits => 16)
- port map ( CLK => my_CLK,
- RST => my_RST,
- PS2Clk => PS2Clk,
- PS2Data => PS2Data,
- STD_IN => STD_IN,
- STD_IN_Av => STD_IN_Av,
- STD_IN_Request => STD_IN_Request,
- STD_OUT => clavier_STD_OUT,
- STD_OUT_Av => clavier_STD_OUT_Av);
-
-
- -- Gestion du RST (inversion d'état)
- my_RST <= '1' when btnC = '0' else
- '0';
-
-
- -- Gestion de l'affichage sur l'écran lors d'une demande d'entrée le clavier affiche sur l'écran
- STD_OUT <= clavier_STD_OUT when STD_IN_Request = '1' else pipeline_STD_OUT;
- STD_OUT_Av <= clavier_STD_OUT_Av when STD_IN_Request = '1' else pipeline_STD_OUT_Av;
- STD_OUT_Int <= clavier_STD_OUT_Int when STD_IN_Request = '1' else pipeline_STD_OUT_Int;
-
- end Structural;
|