source: PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v0.04/MPI_NOC.vhd

Last change on this file was 41, checked in by rolagamo, 12 years ago

Ceci est la version stable avant optimisation

File size: 6.5 KB
Line 
1----------------------------------------------------------------------------------
2-- Company:
3-- Engineer:
4--
5-- Create Date:    20:05:07 11/19/2011
6-- Design Name:
7-- Module Name:    MPI_NOC - 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----------------------------------------------------------------------------------
20library IEEE;
21use IEEE.STD_LOGIC_1164.ALL;
22library NocLib ;
23
24use NocLib.CoreTypes.all;
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 primitives in this code.
31--library UNISIM;
32--use UNISIM.VComponents.all;
33
34entity MPI_NOC is
35generic (NPROC : positive:=4);
36 port(
37 
38 MPI_Node_in : in Ar_MPIPort_in(1 to NPROC);
39 MPI_Node_Out : out Ar_MPIPort_out(1 to NPROC)
40 );
41end MPI_NOC;
42
43architecture structural of MPI_NOC is
44-- Declare signals for interconnections
45 
46--constant NPROC : positive :=8 ;
47   --Inputs
48   signal noc_portOut :typ_portio(1 to NPROC);
49   signal noc_portIn  :typ_portio(1 to NPROC);
50           
51   signal noc_fifo_in_full :  std_logic_vector(NPROC downto 1):= (others => '0');
52   signal noc_data_available :   std_logic_vector(NPROC downto 1):= (others => '0');
53   signal noc_fifo_in_empty : std_logic_vector(NPROC downto 1):= (others => '0');
54        signal noc_data_in_en : std_logic_vector(NPROC downto 1) := (others => '0');
55        signal noc_cmd_in_en : std_logic_vector(NPROC downto 1) := (others => '0');
56   signal noc_data_out_en : std_logic_vector(NPROC downto 1) := (others => '0');
57  -- signal noc_clk : std_logic := '0';
58   --signal noc_reset : std_logic := '0';
59       
60-- Declare components
61COMPONENT SWITCH_GEN
62         GENERIC (number_of_ports : positive := NPROC);
63    PORT(
64         Port_in : IN  typ_PortIO(1 to number_of_ports);
65         Port_out : OUT    typ_PortIO(1 to number_of_ports);
66         data_in_en : IN  std_logic_vector(NPROC downto 1);
67                        cmd_in_en : IN  std_logic_vector(NPROC downto 1);
68         data_out_en : IN  std_logic_vector(NPROC downto 1);
69         fifo_in_full : OUT  std_logic_vector(NPROC downto 1);
70         fifo_in_empty : OUT  std_logic_vector(NPROC downto 1);
71         data_available : OUT  std_logic_vector(NPROC downto 1);
72         clk : IN  std_logic;
73         reset : IN  std_logic
74        );
75    END COMPONENT;
76        COMPONENT CORE_MPI is
77    Port ( instruction : in  STD_LOGIC_VECTOR (Word-1 downto 0);
78           instruction_en : in  STD_LOGIC;
79           
80           barrier_completed : out  STD_LOGIC;
81           packet_received : out  STD_LOGIC;
82                          packet_ack : in std_logic;
83           PushOut : out  STD_LOGIC_VECTOR (Word-1 downto 0);
84           ram_we : out  STD_LOGIC;
85                          hold_req       : out STD_Logic;  --requete vers application
86                          hold_ack       : in  STD_Logic;  --autorisation par l'application
87           ram_address_rd : out  STD_LOGIC_VECTOR (ADRLEN-1 downto 0);
88                          ram_address_wr : out  STD_LOGIC_VECTOR (ADRLEN-1 downto 0);
89           ram_data_out : in  STD_LOGIC_VECTOR (Word-1 downto 0);
90                          ram_data_in : out  STD_LOGIC_VECTOR (Word-1 downto 0);
91           switch_port_in_wr_en : out  STD_LOGIC;   -- OK (au switch) pour lire les données
92           switch_port_in_empty : in STD_LOGIC;
93                          switch_port_in_cmd_en : out STD_LOGIC;
94                          switch_port_in_full : in  STD_LOGIC;  -- port d'entréendu switch saturé
95           switch_port_in_data : out  STD_LOGIC_VECTOR (Word-1 downto 0); -- port de donées d'entrée
96           switch_port_out_rd_en : out  STD_LOGIC;    -- OK (au switch) pour écrire les données
97           switch_port_out_data_vailaible : in  STD_LOGIC; -- Donnée disponible à la sortie (du switch)
98                          clk : in  STD_LOGIC;
99                          clkout : out std_logic;
100           reset : in  STD_LOGIC;
101           ram_en : out  STD_LOGIC;
102           instruction_fifo_full : out  STD_LOGIC;
103           switch_port_out_data : in  STD_LOGIC_VECTOR (Word-1 downto 0));
104        end COMPONENT;
105-- cette fonction met en place l'architecture d'exécution de l'environnement
106-- elle permet de construire le Noc et de connecter les différents core MPI
107-- chaque core reçoit un ID qui sera son Rank lors de l'appel à MPI_GET_Rank
108-- faut il créer une petite mémoire chargée de stocker les IDs ?
109-- Oui car cette mémoire sera consultée par la fonction MPI_Init pour associer
110-- un communicateur au MPI Core
111
112
113
114  begin
115Socsyst: if nproc >  1   generate  --nproc
116      -- instancier le switch et connecter les différents ports
117                                 
118switch_gen1: SWITCH_GEN generic map (NPROC)
119                 PORT MAP (
120          Port_in => Noc_PortIn,
121
122          Port_out => noc_Portout,
123
124          --signaux de contrôle de la lecture des ports
125                         data_in_en => noc_data_in_en,
126                         cmd_in_en => noc_cmd_in_en,
127          data_out_en => noc_data_out_en,
128          fifo_in_full => noc_fifo_in_full,
129          fifo_in_empty => noc_fifo_in_empty,
130          data_available => noc_data_available,
131          clk => MPI_Node_in(1).clk,
132          reset => MPI_Node_in(1).reset
133                         );
134                end generate;
135 connect_core:          for i in 1 to nproc generate  -- nproc
136                hardmpi:core_mpi port map (
137               
138                         
139                          PushOut=>MPI_Node_out(i).PushOut, 
140           ram_we=> MPI_Node_out(i).ram_we,
141                          ram_en=>MPI_Node_out(i).ram_en ,
142                          hold_req=>MPI_NODE_out(i).hold_req,
143                          packet_received=>MPI_Node_out(i).packet_received ,
144                          packet_ack=>MPI_Node_in(i).packet_ack,
145                          hold_ack=>MPI_NODE_in(i).hold_ack,
146           ram_address_rd => MPI_Node_out(i).ram_address_rd ,
147                          ram_address_wr => MPI_Node_out(i).ram_address_wr ,
148           ram_data_in=>MPI_Node_out(i).ram_data_in ,
149                          ram_data_out=>MPI_Node_in(i).ram_data_out,
150                          barrier_completed =>MPI_Node_out(i).barrier_completed,                         
151                          instruction => MPI_Node_in(i).instruction,
152                          instruction_en => MPI_Node_in(i).instruction_en,
153                          instruction_fifo_full =>MPI_Node_Out(i).instruction_fifo_full,
154                          switch_port_in_wr_en => noc_data_in_en(i),
155                          switch_port_in_cmd_en=>noc_cmd_in_en(i),
156           switch_port_in_full => noc_fifo_in_full(i),
157                          switch_port_in_empty => noc_fifo_in_empty(i),
158           switch_port_in_data => noc_PortIn(i),
159           switch_port_out_rd_en => noc_data_out_en(i),
160           switch_port_out_data_vailaible => noc_data_available(i),
161                          switch_port_out_data => noc_PortOut(i),
162                          clk =>MPI_Node_in(1).clk,
163           reset =>MPI_Node_in(1).reset
164           
165                          );
166                end generate;
167       
168       
169
170
171end Structural;
172
Note: See TracBrowser for help on using the repository browser.