No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

System.vhd 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. ----------------------------------------------------------------------------------
  2. -- Company: INSA-Toulouse
  3. -- Engineer: Paul Faure
  4. --
  5. -- Create Date: 13.04.2021 10:19:15
  6. -- Module Name: System - Behavioral
  7. -- Project Name: Processeur sécurisé
  8. -- Target Devices: Basys 3 ARTIX7
  9. -- Tool Versions: Vivado 2016.4
  10. -- Description: Environnement du processeur, mapping entre le processeur et les periphériques, affectation des ports la carte
  11. --
  12. -- Dependencies:
  13. -- - Clock_Divider
  14. -- - Pipeline
  15. -- - Pipeline_NS
  16. -- - PeripheriqueEcran
  17. -- - PeripheriqueClavier
  18. ----------------------------------------------------------------------------------
  19. library IEEE;
  20. use IEEE.STD_LOGIC_1164.ALL;
  21. -- Lien avec le fichier de contraintes
  22. -- Récupération du VGA
  23. -- Récupération du PS2
  24. -- Récupération d'un bouton pour RST
  25. -- Récupération de la clock
  26. entity System is
  27. Port ( vgaRed : out STD_LOGIC_VECTOR (3 downto 0);
  28. vgaBlue : out STD_LOGIC_VECTOR (3 downto 0);
  29. vgaGreen : out STD_LOGIC_VECTOR (3 downto 0);
  30. Hsync : out STD_LOGIC;
  31. Vsync : out STD_LOGIC;
  32. PS2Clk : in STD_LOGIC;
  33. PS2Data : in STD_LOGIC;
  34. btnC : in STD_LOGIC;
  35. CLK : STD_LOGIC);
  36. end System;
  37. architecture Structural of System is
  38. component Pipeline is
  39. Generic (Nb_bits : Natural := 8;
  40. Instruction_En_Memoire_Size : Natural := 29;
  41. Addr_Memoire_Instruction_Size : Natural := 3;
  42. Memoire_Instruction_Size : Natural := 8;
  43. Instruction_Bus_Size : Natural := 5;
  44. Nb_Instructions : Natural := 32;
  45. Nb_Registres : Natural := 16;
  46. Addr_registres_size : Natural := 4;
  47. Memoire_Size : Natural := 32;
  48. Adresse_mem_size : Natural := 5;
  49. Memoire_Adresses_Retour_Size : Natural := 16;
  50. Adresse_Memoire_Adresses_Retour_Size : Natural := 4);
  51. Port (CLK : in STD_LOGIC;
  52. RST : in STD_LOGIC;
  53. STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  54. STD_IN_Av : in STD_LOGIC;
  55. STD_IN_Request : out STD_LOGIC;
  56. STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  57. STD_OUT_Av : out STD_LOGIC;
  58. STD_OUT_Int : out STD_LOGIC);
  59. end component;
  60. component Pipeline_NS is
  61. Generic (Nb_bits : Natural := 8;
  62. Instruction_En_Memoire_Size : Natural := 29;
  63. Addr_Memoire_Instruction_Size : Natural := 3;
  64. Memoire_Instruction_Size : Natural := 8;
  65. Instruction_Bus_Size : Natural := 5;
  66. Nb_Instructions : Natural := 32;
  67. Nb_Registres : Natural := 16;
  68. Addr_registres_size : Natural := 4;
  69. Memoire_Size : Natural := 32;
  70. Adresse_mem_size : Natural := 5);
  71. Port (CLK : STD_LOGIC;
  72. RST : STD_LOGIC;
  73. STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  74. STD_IN_Av : in STD_LOGIC;
  75. STD_IN_Request : out STD_LOGIC;
  76. STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  77. STD_OUT_Av : out STD_LOGIC;
  78. STD_OUT_Int : out STD_LOGIC);
  79. end component;
  80. component PeripheriqueEcran
  81. Generic ( Nb_Bits : Natural);
  82. Port ( CLK : in STD_LOGIC;
  83. CLK_VGA : in STD_LOGIC;
  84. RST : in STD_LOGIC;
  85. vgaRed : out STD_LOGIC_VECTOR (3 downto 0);
  86. vgaBlue : out STD_LOGIC_VECTOR (3 downto 0);
  87. vgaGreen : out STD_LOGIC_VECTOR (3 downto 0);
  88. Hsync : out STD_LOGIC;
  89. Vsync : out STD_LOGIC;
  90. STD_OUT : in STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
  91. STD_OUT_Av : in STD_LOGIC;
  92. STD_OUT_Int : in STD_LOGIC);
  93. end component;
  94. component PeripheriqueClavier
  95. Generic (Nb_Bits : Natural);
  96. Port ( CLK : in STD_LOGIC;
  97. RST : in STD_LOGIC;
  98. PS2Clk : in STD_LOGIC;
  99. PS2Data : in STD_LOGIC;
  100. STD_IN : out STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
  101. STD_IN_Av : out STD_LOGIC;
  102. STD_IN_Request : in STD_LOGIC;
  103. STD_OUT : out STD_LOGIC_VECTOR (Nb_Bits - 1 downto 0);
  104. STD_OUT_Av : out STD_LOGIC);
  105. end component;
  106. component Clock_Divider is
  107. Port ( CLK_IN : in STD_LOGIC;
  108. CLK_OUT : out STD_LOGIC);
  109. end component;
  110. -- signaux auxiliaires
  111. signal my_RST : STD_LOGIC; -- Signal de RST (inversion par rapport au btnC)
  112. signal my_CLK : STD_LOGIC; -- Signal de clock (divisée par rapport CLK)
  113. -- signaux de gestion de l'entrée
  114. signal STD_IN : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Entrée
  115. signal STD_IN_Av : STD_LOGIC := '0'; -- Entrée disponible en lecture sur le clavier
  116. signal STD_IN_Request : STD_LOGIC := '0'; -- Demande d'une entrée au clavier
  117. -- signaux de gestion de la sortie
  118. signal STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie vers l'écran
  119. signal STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible pour l'écran
  120. signal STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) pour l'écran
  121. signal pipeline_STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie depuis le Pipeline
  122. signal pipeline_STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible depuis le Pipeline
  123. signal pipeline_STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) depuis le pipeline
  124. signal clavier_STD_OUT : STD_LOGIC_VECTOR (15 downto 0) := (others => '0'); -- Sortie depuis le Clavier
  125. signal clavier_STD_OUT_Av : STD_LOGIC := '0'; -- Sortie disponible depuis le Clavier
  126. signal clavier_STD_OUT_Int : STD_LOGIC := '0'; -- Type de la sortie (entier ou ASCII) depuis le Clavier
  127. constant SECURISED : boolean := false; -- Booléen de sélection entre la version sécurisée et non sécurisée
  128. begin
  129. -- Diviseur de clock
  130. clk_div : Clock_Divider
  131. port map (CLK_IN => CLK,
  132. CLK_OUT => my_CLK);
  133. -- Generation du pipeline en fonction de la condition sécurisé ou non
  134. instance: if (SECURISED) generate
  135. instance_securisee : entity work.Pipeline
  136. generic map (Nb_bits => 16,
  137. Instruction_En_Memoire_Size => 53,
  138. Addr_Memoire_Instruction_Size => 9,
  139. Memoire_Instruction_Size => 512,
  140. Instruction_Bus_Size => 5,
  141. Nb_Instructions => 32,
  142. Nb_Registres => 16,
  143. Addr_registres_size => 4,
  144. Memoire_Size => 64,
  145. Adresse_mem_size => 6,
  146. Memoire_Adresses_Retour_Size => 4,
  147. Adresse_Memoire_Adresses_Retour_Size => 2)
  148. port map (CLK => my_CLK,
  149. RST => my_RST,
  150. STD_IN => STD_IN,
  151. STD_IN_Av => STD_IN_Av,
  152. STD_IN_Request => STD_IN_Request,
  153. STD_OUT => pipeline_STD_OUT,
  154. STD_OUT_Av => pipeline_STD_OUT_Av,
  155. STD_OUT_Int => pipeline_STD_OUT_Int);
  156. else generate
  157. instance_non_securisee : entity work.Pipeline_NS
  158. generic map (Nb_bits => 16,
  159. Instruction_En_Memoire_Size => 53,
  160. Addr_Memoire_Instruction_Size => 9,
  161. Memoire_Instruction_Size => 512,
  162. Instruction_Bus_Size => 5,
  163. Nb_Instructions => 32,
  164. Nb_Registres => 16,
  165. Addr_registres_size => 4,
  166. Memoire_Size => 64,
  167. Adresse_mem_size => 6)
  168. port map (CLK => my_CLK,
  169. RST => my_RST,
  170. STD_IN => STD_IN,
  171. STD_IN_Av => STD_IN_Av,
  172. STD_IN_Request => STD_IN_Request,
  173. STD_OUT => pipeline_STD_OUT,
  174. STD_OUT_Av => pipeline_STD_OUT_Av,
  175. STD_OUT_Int => pipeline_STD_OUT_Int);
  176. end generate;
  177. instance_perif_ecran : PeripheriqueEcran
  178. generic map ( Nb_Bits => 16)
  179. port map ( CLK => my_CLK,
  180. CLK_VGA => CLK,
  181. RST => my_RST,
  182. vgaRed => vgaRed,
  183. vgaBlue => vgaBlue,
  184. vgaGreen => vgaGreen,
  185. Hsync => Hsync,
  186. Vsync => Vsync,
  187. STD_OUT => STD_OUT,
  188. STD_OUT_Av => STD_OUT_Av,
  189. STD_OUT_Int => STD_OUT_Int);
  190. instance_perif_clavier : PeripheriqueClavier
  191. generic map (Nb_Bits => 16)
  192. port map ( CLK => my_CLK,
  193. RST => my_RST,
  194. PS2Clk => PS2Clk,
  195. PS2Data => PS2Data,
  196. STD_IN => STD_IN,
  197. STD_IN_Av => STD_IN_Av,
  198. STD_IN_Request => STD_IN_Request,
  199. STD_OUT => clavier_STD_OUT,
  200. STD_OUT_Av => clavier_STD_OUT_Av);
  201. -- Gestion du RST (inversion d'état)
  202. my_RST <= '1' when btnC = '0' else
  203. '0';
  204. -- Gestion de l'affichage sur l'écran lors d'une demande d'entrée le clavier affiche sur l'écran
  205. STD_OUT <= clavier_STD_OUT when STD_IN_Request = '1' else pipeline_STD_OUT;
  206. STD_OUT_Av <= clavier_STD_OUT_Av when STD_IN_Request = '1' else pipeline_STD_OUT_Av;
  207. STD_OUT_Int <= clavier_STD_OUT_Int when STD_IN_Request = '1' else pipeline_STD_OUT_Int;
  208. end Structural;