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.

Pipeline.vhd 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date: 19.04.2021 16:57:41
  6. -- Design Name:
  7. -- Module Name: Pipeline - 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. -- Uncomment the following library declaration if using
  23. -- arithmetic functions with Signed or Unsigned values
  24. --use IEEE.NUMERIC_STD.ALL;
  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 Pipeline is
  30. Generic (Nb_bits : Natural := 8;
  31. Instruction_En_Memoire_Size : Natural := 29;
  32. Addr_Memoire_Instruction_Size : Natural := 3;
  33. Memoire_Instruction_Size : Natural := 8;
  34. Instruction_Bus_Size : Natural := 5;
  35. Nb_Instructions : Natural := 32;
  36. Nb_Registres : Natural := 16;
  37. Addr_registres_size : Natural := 4;
  38. Memoire_Size : Natural := 32;
  39. Adresse_mem_size : Natural := 5;
  40. Memoire_Adresses_Retour_Size : Natural := 16;
  41. Adresse_Memoire_Adresses_Retour_Size : Natural := 4);
  42. Port (CLK : in STD_LOGIC;
  43. RST : in STD_LOGIC;
  44. STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  45. STD_IN_Av : in STD_LOGIC;
  46. STD_IN_Request : out STD_LOGIC;
  47. STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  48. STD_OUT_Av : out STD_LOGIC;
  49. STD_OUT_Int : out STD_LOGIC);
  50. end Pipeline;
  51. architecture Behavioral of Pipeline is
  52. component Etage1_LectureInstruction is
  53. Generic (Instruction_size_in_memory : Natural;
  54. Addr_size_mem_instruction : Natural;
  55. Mem_instruction_size : Natural;
  56. Nb_bits : Natural;
  57. Instruction_bus_size : Natural;
  58. Nb_registres : Natural;
  59. Mem_adresse_retour_size : Natural;
  60. Adresse_size_mem_adresse_retour : Natural;
  61. Instructions_critiques_lecture_A : STD_LOGIC_VECTOR;
  62. Instructions_critiques_lecture_B : STD_LOGIC_VECTOR;
  63. Instructions_critiques_lecture_C : STD_LOGIC_VECTOR;
  64. Instructions_critiques_ecriture : STD_LOGIC_VECTOR;
  65. Code_Instruction_JMP : STD_LOGIC_VECTOR;
  66. Code_Instruction_JMZ : STD_LOGIC_VECTOR;
  67. Code_Instruction_PRI : STD_LOGIC_VECTOR;
  68. Code_Instruction_PRIC : STD_LOGIC_VECTOR;
  69. Code_Instruction_CALL : STD_LOGIC_VECTOR;
  70. Code_Instruction_RET : STD_LOGIC_VECTOR;
  71. Code_Instruction_STOP : STD_LOGIC_VECTOR);
  72. Port ( CLK : in STD_LOGIC;
  73. RST : in STD_LOGIC;
  74. Z : in STD_LOGIC;
  75. STD_IN_Request : in STD_LOGIC;
  76. A : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  77. B : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  78. C : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  79. Instruction : out STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0));
  80. end component;
  81. component Etage2_5_Registres is
  82. Generic ( Nb_bits : Natural; -- Taille d'un mot binaire
  83. Nb_registres : Natural; -- Nombre de registres du processeurs
  84. Addr_registres_size : Natural; -- Nombre de bits pour adresser les registres
  85. Instruction_bus_size : Natural; -- Nombre de bits du bus d'instruction (Taille d'un code instruction)
  86. Bits_Controle_LC_5 : STD_LOGIC_VECTOR; -- Vecteur de bit controlant le Link Controler de l'étage 5 (cf LC.vhd)
  87. Bits_Controle_MUX_2_A : STD_LOGIC_VECTOR; -- Vecteur de bit controlant le multiplexeur de l'étage 2 sur A (cf MUX.vhd)
  88. Bits_Controle_MUX_2_B : STD_LOGIC_VECTOR; -- Vecteur de bit controlant le multiplexeur de l'étage 2 sur B (cf MUX.vhd)
  89. Code_Instruction_PRI : STD_LOGIC_VECTOR; -- Numéro de l'instruction PRI
  90. Code_Instruction_PRIC : STD_LOGIC_VECTOR; -- Numéro de l'instruction PRIC
  91. Code_Instruction_GET : STD_LOGIC_VECTOR); -- Numéro de l'instruction GET
  92. Port ( CLK : in STD_LOGIC; -- Clock
  93. RST : in STD_LOGIC; -- Reset
  94. STD_IN : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de données depuis l'exterieur du processeur
  95. STD_IN_Av : in STD_LOGIC;
  96. STD_IN_Request : out STD_LOGIC;
  97. STD_OUT : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Sortie de données vers l'exterieur du processeur
  98. STD_OUT_Av : out STD_LOGIC;
  99. STD_OUT_Int : out STD_LOGIC;
  100. IN_2_A : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de l'opérande A de l'étage 2
  101. IN_2_B : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de l'opérande B de l'étage 2
  102. IN_2_C : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de l'opérande C de l'étage 2
  103. IN_2_Instruction : in STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0); -- Entrée de l'instruction de l'étage 2
  104. OUT_2_A : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Sortie de l'opérande A de l'étage 2
  105. OUT_2_B : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Sortie de l'opérande B de l'étage 2
  106. OUT_2_C : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Sortie de l'opérande C de l'étage 2
  107. OUT_2_Instruction : out STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0); -- Sortie de l'instruction de l'étage 2
  108. IN_5_A : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de l'opérande A de l'étage 5
  109. IN_5_B : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0); -- Entrée de l'opérande B de l'étage 5
  110. IN_5_Instruction : in STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0)); -- Entrée de l'instruction de l'étage 5
  111. end component;
  112. component Etage3_Calcul is
  113. Generic ( Nb_bits : Natural;
  114. Instruction_bus_size : Natural;
  115. Bits_Controle_LC : STD_LOGIC_VECTOR;
  116. Bits_Controle_MUX : STD_LOGIC_VECTOR);
  117. Port ( RST : in STD_LOGIC;
  118. IN_A : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  119. IN_B : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  120. IN_C : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  121. IN_Instruction : in STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0);
  122. OUT_A : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  123. OUT_B : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  124. OUT_Instruction : out STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0);
  125. N : out STD_LOGIC;
  126. O : out STD_LOGIC;
  127. Z : out STD_LOGIC;
  128. C : out STD_LOGIC);
  129. end component;
  130. component Etage4_Memoire is
  131. Generic ( Nb_bits : Natural;
  132. Mem_size : Natural;
  133. Adresse_mem_size : Natural;
  134. Instruction_bus_size : Natural;
  135. Mem_EBP_size : Natural;
  136. Adresse_size_mem_EBP : Natural;
  137. Bits_Controle_LC : STD_LOGIC_VECTOR;
  138. Bits_Controle_MUX_IN : STD_LOGIC_VECTOR;
  139. Bits_Controle_MUX_IN_EBP : STD_LOGIC_VECTOR;
  140. Bits_Controle_MUX_OUT : STD_LOGIC_VECTOR;
  141. Code_Instruction_CALL : STD_LOGIC_VECTOR;
  142. Code_Instruction_RET : STD_LOGIC_VECTOR);
  143. Port ( CLK : in STD_LOGIC;
  144. RST : in STD_LOGIC;
  145. IN_A : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  146. IN_B : in STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  147. IN_Instruction : in STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0);
  148. OUT_A : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  149. OUT_B : out STD_LOGIC_VECTOR (Nb_bits - 1 downto 0);
  150. OUT_Instruction : out STD_LOGIC_VECTOR (Instruction_bus_size - 1 downto 0));
  151. end component;
  152. signal A_from_1 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  153. signal A_from_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  154. signal A_from_3 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  155. signal A_from_4 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  156. signal A_to_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  157. signal A_to_3 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  158. signal A_to_4 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  159. signal A_to_5 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  160. signal B_from_1 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  161. signal B_from_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  162. signal B_from_3 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  163. signal B_from_4 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  164. signal B_to_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  165. signal B_to_3 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  166. signal B_to_4 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  167. signal B_to_5 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  168. signal C_from_1 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  169. signal C_from_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  170. signal C_to_2 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  171. signal C_to_3 : STD_LOGIC_VECTOR (Nb_bits - 1 downto 0) := (others => '0');
  172. signal Instruction_from_1 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  173. signal Instruction_from_2 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  174. signal Instruction_from_3 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  175. signal Instruction_from_4 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  176. signal Instruction_to_2 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  177. signal Instruction_to_3 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  178. signal Instruction_to_4 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  179. signal Instruction_to_5 : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := (others => '0');
  180. signal N : STD_LOGIC := '0';
  181. signal Z : STD_LOGIC := '0';
  182. signal O : STD_LOGIC := '0';
  183. signal C : STD_LOGIC := '0';
  184. signal intern_STD_IN_Request : STD_LOGIC := '0';
  185. constant Bits_Controle_MUX_2_A : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11110011101111111111111";
  186. constant Bits_Controle_MUX_2_B : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11111111000011000000001";
  187. constant Bits_Controle_LC_3 : STD_LOGIC_VECTOR (Nb_Instructions * 3 - 1 downto 0) := "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "000" & "111" & "110" & "101" & "100" & "010" & "011" & "001" & "000";
  188. constant Bits_Controle_MUX_3 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11111111111111100000001";
  189. constant Bits_Controle_LC_4 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11111111001011111111111";
  190. constant Bits_Controle_MUX_4_IN : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11111111110101111111111";
  191. constant Bits_Controle_MUX_4_IN_EBP : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "11111111011001111111111";
  192. constant Bits_Controle_MUX_4_OUT : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00000000001010000000000";
  193. constant Bits_Controle_LC_5 : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00010000001011111111110";
  194. constant Code_Instruction_JMP : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "01111";
  195. constant Code_Instruction_JMZ : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10000";
  196. constant Code_Instruction_PRI : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10001";
  197. constant Code_Instruction_PRIC : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10010"; -------- TO BE DONE
  198. constant Code_Instruction_GET : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10011";
  199. constant Code_Instruction_CALL : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10100";
  200. constant Code_Instruction_RET : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10101";
  201. constant Code_Instruction_STOP : STD_LOGIC_VECTOR (Instruction_Bus_Size - 1 downto 0) := "10110";
  202. constant Instructions_critiques_lecture_A : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00001100010000000000000";
  203. constant Instructions_critiques_lecture_B : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00000000111100111111110";
  204. constant Instructions_critiques_lecture_C : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00000000000000011111110";
  205. constant Instructions_critiques_ecriture : STD_LOGIC_VECTOR (Nb_Instructions - 1 downto 0) := "111111111" & "00010000001011111111110";
  206. begin
  207. instance_Etage1 : Etage1_LectureInstruction
  208. generic map (Instruction_size_in_memory => Instruction_En_Memoire_Size,
  209. Addr_size_mem_instruction => Addr_Memoire_Instruction_Size,
  210. Mem_instruction_size => Memoire_Instruction_Size,
  211. Nb_bits => Nb_bits,
  212. Instruction_bus_size => Instruction_Bus_Size,
  213. Nb_registres => Nb_Registres,
  214. Mem_adresse_retour_size => Memoire_Adresses_Retour_Size,
  215. Adresse_size_mem_adresse_retour => Adresse_Memoire_Adresses_Retour_Size,
  216. Instructions_critiques_lecture_A => Instructions_critiques_lecture_A,
  217. Instructions_critiques_lecture_B => Instructions_critiques_lecture_B,
  218. Instructions_critiques_lecture_C => Instructions_critiques_lecture_C,
  219. Instructions_critiques_ecriture => Instructions_critiques_ecriture,
  220. Code_Instruction_JMP => Code_Instruction_JMP,
  221. Code_Instruction_JMZ => Code_Instruction_JMZ,
  222. Code_Instruction_PRI => Code_Instruction_PRI,
  223. Code_Instruction_PRIC => Code_Instruction_PRIC,
  224. Code_Instruction_CALL => Code_Instruction_CALL,
  225. Code_Instruction_RET => Code_Instruction_RET,
  226. Code_Instruction_STOP => Code_Instruction_STOP
  227. )
  228. port map (
  229. CLK => CLK,
  230. RST => RST,
  231. Z => Z,
  232. STD_IN_Request => intern_STD_IN_Request,
  233. A => A_from_1,
  234. B => B_from_1,
  235. C => C_from_1,
  236. Instruction => Instruction_from_1
  237. );
  238. instance_Etage2_5 : Etage2_5_Registres
  239. generic map( Nb_bits => Nb_bits,
  240. Nb_Registres => Nb_Registres,
  241. Addr_registres_size => Addr_registres_size,
  242. Instruction_bus_size => Instruction_Bus_Size,
  243. Bits_Controle_LC_5 => Bits_Controle_LC_5,
  244. Bits_Controle_MUX_2_A => Bits_Controle_MUX_2_A,
  245. Bits_Controle_MUX_2_B => Bits_Controle_MUX_2_B,
  246. Code_Instruction_PRI => Code_Instruction_PRI,
  247. Code_Instruction_PRIC => Code_Instruction_PRIC,
  248. Code_Instruction_GET => Code_Instruction_GET
  249. )
  250. port map( CLK => CLK,
  251. RST => RST,
  252. STD_IN => STD_IN,
  253. STD_IN_Av => STD_IN_Av,
  254. STD_IN_Request => intern_STD_IN_Request,
  255. STD_OUT => STD_OUT,
  256. STD_OUT_Av => STD_OUT_Av,
  257. STD_OUT_Int => STD_OUT_Int,
  258. IN_2_A => A_to_2,
  259. IN_2_B => B_to_2,
  260. IN_2_C => C_to_2,
  261. IN_2_Instruction => Instruction_to_2,
  262. OUT_2_A => A_from_2,
  263. OUT_2_B => B_from_2,
  264. OUT_2_C => C_from_2,
  265. OUT_2_Instruction => Instruction_from_2,
  266. IN_5_A => A_to_5,
  267. IN_5_B => B_to_5,
  268. IN_5_Instruction => Instruction_to_5
  269. );
  270. instance_Etage3 : Etage3_Calcul
  271. generic map( Nb_bits => Nb_bits,
  272. Instruction_bus_size => Instruction_Bus_Size,
  273. Bits_Controle_LC => Bits_Controle_LC_3,
  274. Bits_Controle_MUX => Bits_Controle_MUX_3
  275. )
  276. port map( RST => RST,
  277. IN_A => A_to_3,
  278. IN_B => B_to_3,
  279. IN_C => C_to_3,
  280. IN_Instruction => Instruction_to_3,
  281. OUT_A => A_from_3,
  282. OUT_B => B_from_3,
  283. OUT_Instruction => Instruction_from_3,
  284. N => N,
  285. O => O,
  286. Z => Z,
  287. C => C
  288. );
  289. instance_Etage4 : Etage4_Memoire
  290. generic map( Nb_bits => Nb_bits,
  291. Mem_size => Memoire_Size,
  292. Adresse_mem_size => Adresse_mem_size,
  293. Instruction_bus_size => Instruction_Bus_Size,
  294. Mem_EBP_size => Memoire_Adresses_Retour_Size,
  295. Adresse_size_mem_EBP => Adresse_Memoire_Adresses_Retour_Size,
  296. Bits_Controle_LC => Bits_Controle_LC_4,
  297. Bits_Controle_MUX_IN => Bits_Controle_MUX_4_IN,
  298. Bits_Controle_MUX_IN_EBP => Bits_Controle_MUX_4_IN_EBP,
  299. Bits_Controle_MUX_OUT => Bits_Controle_MUX_4_OUT,
  300. Code_Instruction_CALL => Code_Instruction_CALL,
  301. Code_Instruction_RET => Code_Instruction_RET
  302. )
  303. port map( CLK => CLK,
  304. RST => RST,
  305. IN_A => A_to_4,
  306. IN_B => B_to_4,
  307. IN_Instruction => Instruction_to_4,
  308. OUT_A => A_from_4,
  309. OUT_B => B_from_4,
  310. OUT_Instruction => Instruction_from_4
  311. );
  312. STD_IN_Request <= intern_STD_IN_Request;
  313. process
  314. begin
  315. wait until CLK'event and CLK = '1';
  316. if (intern_STD_IN_Request = '0') then
  317. A_to_2 <= A_from_1;
  318. B_to_2 <= B_from_1;
  319. C_to_2 <= C_from_1;
  320. Instruction_to_2 <= Instruction_from_1;
  321. A_to_3 <= A_from_2;
  322. B_to_3 <= B_from_2;
  323. C_to_3 <= C_from_2;
  324. Instruction_to_3 <= Instruction_from_2;
  325. A_to_4 <= A_from_3;
  326. B_to_4 <= B_from_3;
  327. Instruction_to_4 <= Instruction_from_3;
  328. A_to_5 <= A_from_4;
  329. B_to_5 <= B_from_4;
  330. Instruction_to_5 <= Instruction_from_4;
  331. end if;
  332. end process;
  333. end Behavioral;