source: PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v1.00/PE.vhd

Last change on this file was 76, checked in by rolagamo, 11 years ago
File size: 8.2 KB
Line 
1----------------------------------------------------------------------------------
2-- Company:
3-- Engineer: GAMOM Roland Christian
4--
5-- Create Date:    21:20:54 07/16/2012
6-- Design Name:
7-- Module Name:    PE - Behavioral
8-- Project Name:
9-- Target Devices:
10-- Tool versions:
11-- Description: Ce module permet d'encapsuler une tâche matérielle
12-- et lui donne la possiblité de communiquer à l'aide des fonctions MPI-2 RMA
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 ;
23library Std;
24--use IEEE.STD_LOGIC_ARITH.ALL;
25--use IEEE.STD_LOGIC_UNSIGNED.ALL;
26use NocLib.CoreTypes.all;
27use work.Packet_type.all;
28use work.MPI_RMA.all;
29-- synthesis translate_off
30use std.textio.all;
31-- synthesis translate_on
32use IEEE.NUMERIC_STD.ALL;
33
34
35entity PE is
36        Generic (DestId : natural:=0 );
37    Port ( Instruction : out  STD_LOGIC_VECTOR (Word-1 downto 0);
38           Instruction_en : out  STD_LOGIC;
39                          Core_PushOut : in STD_LOGIC_VECTOR (Word-1 downto 0);
40           clk : in  STD_LOGIC;
41           reset : in  STD_LOGIC;
42                          CE : in STD_LOGIC; -- Active le  PE après sa synthèse
43           Core_RAM_Data_Out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
44           Core_RAM_Data_In : in  STD_LOGIC_VECTOR (Word-1 downto 0);
45           Core_RAM_WE : in  STD_LOGIC;
46           Core_RAM_EN : in  STD_LOGIC;
47           --Core_RAM_ENB : in  STD_LOGIC;
48           Core_RAM_ADDRESS_WR : in  STD_LOGIC_VECTOR (ADRLEN-1 downto 0);
49           Core_RAM_ADDRESS_RD : in  STD_LOGIC_VECTOR (ADRLEN-1 downto 0);
50           Core_Hold_req : in  STD_LOGIC;
51           Core_Hold_Ack : out  STD_LOGIC);
52end PE;
53
54architecture Behavioral of PE is
55COMPONENT RAM_v
56  generic (width : positive;size :positive);
57        PORT(
58                clka : IN std_logic;
59                clkb : IN std_logic;
60                wea : IN std_logic;
61                ena : IN std_logic;
62                enb : IN std_logic;
63                addra : IN std_logic_vector;
64                addrb : IN std_logic_vector;
65                dia : IN std_logic_vector;         
66                dob : OUT std_logic_vector
67                );
68        END COMPONENT;
69COMPONENT HT_process is
70                generic (Task_Id : natural);
71    Port ( clk : in  STD_LOGIC;
72           reset : in  STD_LOGIC;
73                          en : in std_logic; -- active la tâche
74           Interf_i : in  core_i; --signaux pour l'interface I
75           Interf_o : out  core_o; --signaux pour l'interface IO
76           mem_i : in typ_dpram_i; -- signaux pour l'accès à la mémoire
77           mem_o : out typ_dpram_o -- signaux pour l'accès à la mémoire
78                          );
79end COMPONENT HT_process;
80 
81COMPONENT Hold_FSM is
82       
83    Port ( Hold_Req : in  STD_LOGIC;
84           Ram_busy : in  STD_LOGIC;
85           Clk : in  STD_LOGIC;
86           Reset : in  STD_LOGIC;
87           Ramsel : out  STD_LOGIC;
88           Hold_Ack : out  STD_LOGIC);
89end COMPONENT Hold_FSM;
90--données du programme PE
91           --signaux pour l'interconnexionsignal datain :std_logic_vector(word-1 downto 0):= (others => '0');
92        signal ram_we ,ram_ena,ram_enb,ramsel_i: std_logic:='0';
93        signal pe_ram_we ,pe_ram_ena,pe_ram_enb: std_logic;
94        signal pe_instr_en,pe_hold_ack: std_logic:='0';
95        signal ram_do,ram_din:std_logic_vector(word-1 downto 0):= (others => '0');
96        signal pe_ram_do,pe_ram_din:std_logic_vector(word-1 downto 0):= (others => '0');
97        signal ram_addra,ram_addrb :std_logic_vector(ADRLEN-1 downto 0);
98        signal pe_ram_addra,pe_ram_addrb :std_logic_vector(ADRLEN-1 downto 0);
99        signal sram : typ_dpram;
100        signal clk_ht : std_logic;
101        signal MyGroup:mpi_group;
102        signal MyWin : mpi_win;
103        signal SrcAdr0,SrcAdr1,destAdr0,destAdr1,Datalen:std_logic_vector(word-1 downto 0);
104        signal dpid,dpid_i : natural range 0 to 15:=DestId;
105        signal MyRank :std_logic_vector(3 downto 0);
106        signal Libr : Core_io;  --regroupe tous les signaux IO de la bibliothèque
107        signal Lib_Ready:std_logic; --indique que l'exécution de la fonction est terminée
108        signal Lib_instr_ack : std_logic; -- l'instruction est copiée dans le tampon FIFO
109        signal Lib_Init : std_logic; -- l'initialisation est terminée
110        signal Lib_Enable : std_logic:='0';
111        signal Ex1_run,Ex4_run : std_logic:='0'; --indique que ces modules sont en fin d'exécution
112        signal Hold_Ack : std_logic;
113        signal en_task : std_logic;
114        signal ht_reset :std_logic;
115 --signaux pour la gestion de la MAE
116 type typ_mae is (start,Fillmem,NextFill,InitApp,GetRank,WInCreate,WinStart, putdata,getdata,WinCompleted,finalize,st_timeout);
117        type typ_Hld is (Ht_Lock,Core_Lock,Ht_free);
118signal dcount : natural range 0 to 255:=0; 
119signal count,count_i : natural range 0 to 15:=0;
120
121
122                signal RunState : typ_mae;
123                signal Hld_state :typ_hld;
124                signal Ram_busy :std_logic:='0';
125begin
126Inst_RAM_v: RAM_v generic map(width=>word,size=>ADRLEN)
127        PORT MAP(
128                clka =>clk ,
129                clkb => clk ,
130                wea => ram_we,
131                ena => ram_ena,
132                enb => ram_enb,
133                addra => ram_addra,
134                addrb =>ram_addrb,
135                dia => ram_din,
136                dob => ram_do
137        );
138        HT_task:HT_process generic map(Task_id =>DestId)
139        port map (
140        clk=>clk,
141        reset=>ht_reset,
142        en=>en_task,
143   Interf_i =>Libr.i,
144   Interf_o=>Libr.o,
145  mem_i =>sram.i,
146   mem_o =>sram.o       );
147 
148--================================================================
149        --MUX de la RAM
150                               
151Ram_mux: process (clk,ramsel_i,pe_ram_addra,pe_ram_addrb,Core_ram_address_rd,Core_ram_address_wr,
152                                                Core_ram_en,Core_ram_we,Core_ram_data_in,pe_ram_ena,pe_ram_enb,Ram_do,
153                                                Pe_ram_din,Pe_ram_we    )
154 begin                         
155 case ramsel_i is
156       
157        when '1' =>
158                ram_addra <= Core_ram_address_wr ;
159                ram_addrb <= Core_ram_address_rd ;
160                ram_ena <= Core_ram_en;
161                ram_enb <= Core_ram_en;
162                ram_we<= Core_ram_we;
163                ram_din <= Core_ram_data_in;
164                pe_ram_do<=(others=>'U');
165                Core_ram_data_out<=ram_do;
166               
167        when others =>
168                ram_addra <=  pe_ram_addra;
169                ram_addrb <=  pe_ram_addrb;
170                ram_ena <= pe_ram_ena;
171                ram_enb <= pe_ram_enb;
172                ram_we<= pe_ram_we;
173                ram_din <=pe_ram_din;
174                Core_ram_data_out<=(others=>'U');
175                pe_ram_do<=ram_do;
176end case ;
177end process ;
178
179
180
181Instruction_En<=PE_instr_EN; -- Libr.Instr_en; --********A changer **********
182--=== !!!!! attention la suppression de la ligne ci-dessous empêche ce
183-- composant de bien fonctionner !!! !!!!!!!!!!!!!!!!!!!!!!!
184--instruction<=std_logic_vector(to_unsigned(Core_upper_adr,8));
185
186dpid<=dpid_i;
187en_task<= CE or Lib_enable; --l'activation d'une HT peut être directe ou commandée
188Lib_Instr_ack<=Core_Pushout(0); --l'instruction a été copié
189Lib_init<=Core_Pushout(4); -- Initialized
190Lib_Enable<=Core_Pushout(6);-- HT activée par la Librairie.
191Ex1_Run<=Core_Pushout(5);  -- fin de l'exécution de Ex1
192Ex4_Run<=Core_pushout(7); -- fin de l'exécution de Ex4 pour Spawn
193horloge_ht:process (reset,en_task,clk)
194begin
195if reset='1' then
196clk_ht<='0';
197count<=0;
198Ht_reset<='1';
199else
200if en_task='1' then
201  clk_ht<=clk;
202  if count=10 then --circuit de reset pour la  HT
203    ht_reset<='0';
204  else
205  if rising_edge(clk) then
206  count<=count+1;
207  end if;
208  ht_reset<='1';
209  end if;
210else
211  count<=0;
212  clk_ht<='0';
213  Ht_reset<='1';
214end if;
215end if;
216end process horloge_ht;
217
218Hold1: Hold_fsm port map (
219clk=>clk ,
220reset =>reset,
221Ram_Busy=>Ram_busy,
222Hold_Ack=>Hold_Ack,
223Hold_req =>Core_Hold_Req,
224RamSel => RamSel_i);
225Core_Hold_Ack<=Hold_Ack;
226
227--================RAM signals ======================                                   
228sram.I.data_out<=PE_ram_do;
229pe_Ram_addra<=sram.O.addr_wr;
230pe_Ram_addrb<=sram.O.addr_rd ; 
231PE_Ram_we<=sram.O.we;
232PE_Ram_ena<=sram.O.ena;
233PE_Ram_enb<=sram.O.enb;
234PE_ram_din<=sram.O.data_in;
235--==========MPI HCL signals ============================
236
237affect:process (clk,en_task,Lib_enable,Core_hold_req,RamSel_i,Core_pushout,Libr.O)
238begin
239        --if (clk'event and clk='1') then
240if en_task='1' then
241Instruction<=Libr.O.Instruction;                       
242        Ram_busy<=Libr.O.membusy;
243PE_Instr_EN<=Libr.O.instr_en;
244else --si le HT n'est pas activé ces valeurs sont à 0 !
245 Instruction<=(others=>'0');                   
246        Ram_busy<='0';
247  PE_Instr_EN<='0'; 
248end if;
249Libr.I.Instr_ack<=Core_pushout(0);
250Libr.I.InitOk<=Core_pushout(4);
251if Lib_enable='1' then
252Libr.I.Spawned<='1';
253else
254  Libr.I.Spawned<='0';
255end if;
256Libr.I.Hold_Req<=Core_Hold_req;
257--Libr.I.Hold_Ack<=Hold_Ack;
258Libr.I.RamSel<=RamSel_i;               
259--end if;
260assert Lib_enable/='1'
261report "Spawn Activé"
262severity WARNING ;
263
264end process affect;
265--=======================================================================
266--MAE du PE
267--=======================================================================
268
269 
270end Behavioral;
271
Note: See TracBrowser for help on using the repository browser.