Ignore:
Timestamp:
Dec 7, 2012, 11:31:34 AM (12 years ago)
Author:
rolagamo
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v0.01/MPI_RMA.vhd

    r35 r39  
    3131                                                                        base :std_logic_vector; size : Mpi_Aint;disp_unit:natural;
    3232                                                                        info:natural; comm:Mpi_Comm; Win: inout MPI_Win );
     33procedure pMPI_Win_wait( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; Win :MPI_Win);
    3334-- declare functions and procedure       
    3435 procedure ReadMem(NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram;
     
    8586                                                       
    8687                                                        elsif dcount=4 then
     88                                                        if interf.ramsel='0' then
    8789                                                                SysRam.we<='1';
    8890                                                                SysRam.ena<='1';
     
    9294                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    9395                                                                dcount:=dcount+1;
     96                                                        end if;
    9497                                                        elsif dcount=5 then
     98                                                                if interf.ramsel='0' then
    9599                                                                adresse:=core_put_adr+1;
    96100                                                                sysRam.Data_in<=std_logic_vector(to_unsigned(Orig_Count,8)) ;--la longueur
    97101                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    98102                                                                dcount:=dcount+1;
     103                                                                end if;
    99104                                                        elsif dcount=6 then
     105                                                                if interf.ramsel='0' then
    100106                                                                adresse:=core_put_adr+2;
    101107                                                                sysRam.Data_in<= Addr1(ADRLEN-1 downto Word) ; --source Haut
    102108                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    103109                                                                dcount:=dcount+1;
     110                                                                end if;
    104111                                                        elsif dcount=7 then
     112                                                                if interf.ramsel='0' then
    105113                                                                adresse:=core_put_adr+3;
    106114                                                                sysRam.Data_in<=Addr1(Word-1 downto 0);  --source Bas
    107115                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    108116                                                                dcount:=dcount+1;
     117                                                                end if;
    109118                                                        elsif dcount=8 then
     119                                                                if interf.ramsel='0' then
    110120                                                                adresse:=core_put_adr+4;
    111121                                                                sysRam.Data_in<= Addr2(ADRLEN-1 downto Word) ; -- destination haut
    112122                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    113123                                                                dcount:=dcount+1;
     124                                                                end if;
    114125                                                        elsif dcount=9 then
     126                                                                if interf.ramsel='0' then
    115127                                                                adresse:=core_put_adr+5;
    116128                                                                sysRam.Data_in<=Addr2(Word-1 downto 0); -- destination bas
    117129                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    118130                                                                dcount:=dcount+1;
     131                                                                end if;
    119132                                                        elsif dcount=10 then
     133                                                               
    120134                                                                SysRam.we<='1';
    121135                                                                SysRam.ena<='1';
    122136                                                                SysRam.enb<='1';
     137                                                                if interf.ramsel='0' then
    123138                                                                adresse:=core_base_adr+1;
    124139                                                                SysRam.addr_rd<=std_logic_vector(to_unsigned(core_base_adr+1,ADRLEN));
     
    127142                                                                Interf.Instr_En<='1'; --active la prise en compte de l'instruction
    128143                                                                dcount:=dcount+1;
     144                                                                end if;
    129145                                                        elsif dcount=11 then
    130146                                                                if Interf.Instr_ack='1' then -- le Core a reçu l'instruction ?
     
    146162                                                                        SysRam.ena<='1';  -- préparer l'écriture du résultat du Put
    147163                                                                        SysRam.enb<='1';
     164                                                                        if interf.ramsel='0' then
    148165                                                                        config_reg:=SysRam.data_out and x"f6";
    149166                                                                        SysRam.Data_in<=config_reg ; --ramener le IPulse à 0;
    150167                                                                        dcount:=dcount+1;
     168                                                                        end if;
    151169                                                                        SysRam.addr_rd<=std_logic_vector(to_unsigned(core_base_adr+1,ADRLEN));
    152170                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     
    183201  Target_Rank : natural; Target_disp : std_logic_vector; Target_Count : natural;
    184202  Target_Datatype :natural; Win : natural) is
    185 variable i,dcount : natural:=0;
     203variable i,wcount,dcount : natural range 0 to 255:=0;
    186204variable adresse :natural;
    187205variable addr1 :std_logic_vector(Orig_Addr'length-1 downto 0):=Orig_Addr;
     
    201219                                       
    202220                                if rising_edge(clkin) then             
    203                                                         if dcount>=0 and dcount <=3 then
     221                                                       
     222                                                if dcount =0 then       
     223                                                        dcount:=dcount+1;
     224                                                elsif dcount>=1 and dcount <=3 then
    204225                                                                        if interf.ramsel='0' then
    205226                                                                                        SysRam.we<='1';
    206227                                                                                        SysRam.ena<='1';
    207228                                                                                        SysRam.enb<='0';
    208                                                                                         WritePtr (get_adr,dcount,SysRam);
    209                                                                                         if dcount =4 then
    210                                                                                                 -- fin de l'écriture du pointeur en mémoire
     229                                                                                        wcount:=interf.intstate1;
     230                                                                                        WritePtr (get_adr,wcount,SysRam);
     231                                                                                        interf.intstate1<=wcount;
     232                                                                                        if wcount =0 then
     233                                                                                                dcount:=4;
    211234                                                                                        end if;                                                         
    212235                                                                        end if;
     
    220243                                                                sysRam.Data_in<=MPI_GET & std_logic_vector(to_unsigned(Target_Rank,4)); --code fonction
    221244                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     245                                                               
    222246                                                                dcount:=dcount+1;
    223247                                                        end if;
    224248                                                        elsif dcount=5 then
    225                                                                 if Interf.RamSel='0' then
     249                                                                if Interf.RamSel='0' then       
    226250                                                                        SysRam.we<='1';
    227251                                                                        SysRam.ena<='1';
     
    229253                                                                        sysRam.Data_in<=std_logic_vector(to_unsigned(Orig_Count,8)) ;--la longueur
    230254                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     255                                                               
    231256                                                                        dcount:=dcount+1;
    232257                                                                end if;
     
    238263                                                                        sysRam.Data_in<= Addr1(ADRLEN-1 downto Word) ; --source Haut
    239264                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    240                                                                         dcount:=dcount+1;
     265                                                                       
     266                                                                        dcount:=dcount+1;
     267                                                                else
     268                                                                        dcount:=dcount-1;
    241269                                                                end if;
    242270                                                        elsif dcount=7 then
     
    247275                                                                        sysRam.Data_in<=Addr1(Word-1 downto 0);  --source Bas
    248276                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    249                                                                         dcount:=dcount+1;
     277                                                                       
     278                                                                        dcount:=dcount+1;
     279                                                                else
     280                                                                        dcount:=dcount-1;
    250281                                                                end if;
    251282                                                        elsif dcount=8 then
     
    256287                                                                        sysRam.Data_in<= Addr2(ADRLEN-1 downto Word) ; -- destination haut
    257288                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    258                                                                         dcount:=dcount+1;
     289                                                               
     290                                                                        dcount:=dcount+1;
     291                                                                else
     292                                                                        dcount:=dcount-1;
    259293                                                                end if;
    260294                                                        elsif dcount=9 then
    261                                                                 if Interf.RamSel='0' then 
     295                                                                if Interf.RamSel='0' then
    262296                                                                        SysRam.we<='1';
    263297                                                                        SysRam.ena<='1';
     
    265299                                                                        sysRam.Data_in<=Addr2(Word-1 downto 0); -- destination bas
    266300                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     301                                                                 
    267302                                                                        dcount:=dcount+1;
    268303                                                                end if;
    269304                                                        elsif dcount=10 then
    270                                                                 if Interf.RamSel='0' then
     305                                                               
    271306                                                                        SysRam.we<='1';
    272307                                                                        SysRam.ena<='1';
     
    277312                                                                        sysRam.Data_in<=x"01"; --instruction pulse enable via la mémoire;
    278313                                                                        Interf.Instr_En<='1'; --active la prise en compte de l'instruction
     314                                                                if Interf.RamSel='0' then
    279315                                                                        dcount:=dcount+1;
    280316                                                                end if;
     
    294330                                                                        SysRam.enb<='1';                                               
    295331                                                        elsif dcount=12 then
    296                                                                 if Interf.RamSel='0' then
     332                                                               
    297333                                                                        adresse:=core_base_adr+1;
    298334                                                                        SysRam.we<='1';
    299335                                                                        SysRam.ena<='1';  -- préparer l'écriture du résultat du get
    300336                                                                        SysRam.enb<='1';
     337                                                                if Interf.RamSel='0' then       
    301338                                                                        config_reg:=SysRam.data_out and x"f6";
    302339                                                                        SysRam.Data_in<=config_reg ; --ramener le IPulse à 0;
    303340                                                                        dcount:=dcount+1;
     341                                                                end if;
    304342                                                                        SysRam.addr_rd<=std_logic_vector(to_unsigned(core_base_adr+1,ADRLEN));
    305343                                                                        sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
    306                                                                 end if;
     344                                                               
    307345                                                        elsif dcount=13 then
    308                                                                         if Interf.RamSel='0' then
     346                                                                       
    309347                                                                                SysRam.we<='1';
    310348                                                                                SysRam.ena<='1';  -- préparer l'écriture du résultat du GET
    311349                                                                                SysRam.enb<='0';
     350                                                                                adresse:=core_base_adr+1;
     351                                                                                sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     352                                                                        if Interf.RamSel='0' then
    312353                                                                                config_reg:=SysRam.data_out and x"f6";
    313354                                                                                SysRam.Data_in<=config_reg ; --ramener le IPulse à 0;
    314355                                                                                dcount:=dcount+1;
    315                                                                                 adresse:=core_base_adr+1;
    316                                                                                 sysRam.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN));
     356                                                                               
    317357                                                                        end if;
    318358                                                        elsif dcount=14 then   
     
    332372                                                       
    333373                                                  NExtCtx:=dcount;
    334                                 end if;
     374                        end if;
    335375        end procedure;
    336376Procedure pMPI_Comm_group(NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam : inout typ_dpram; COMM :in MPI_Comm; signal grp : out Mpi_group ) is
     
    361401                        adresse_rd:=CORE_INIT_ADR+1;
    362402                        sysRam.Addr_rd<=Std_logic_vector(to_unsigned(adresse_rd,ADRLEN));
    363                         if Interf.Ramsel='0' then
     403                       
    364404                                NextCtx:=1;
    365                         end if;
     405               
    366406                elsif NextCtx=1 then
    367407                        SysRam.we<='0';
     
    600640 procedure pMPI_Win_wait( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; Win :MPI_Win) is
    601641--permet de synchroniser la fin des opérations sur une fenêtre
     642variable dcount : natural range 0 to 255:=0;
     643variable cstatus : std_logic_vector(Word-1 downto 0);
     644
    602645begin
     646
     647       
     648       
     649                if NextCtx =0 then
     650                        NextCtx:=NextCtx+1;
     651                elsif NextCtx=1 then
     652                        if interf.ramsel='0' then
     653                                        SysRam.we<='0';
     654                                        SysRam.ena<='0';
     655                                        SysRam.enb<='1';
     656                                        SysRam.addr_rd<=Std_logic_vector(to_unsigned(core_base_adr+4,Adrlen));
     657                                                        if SysRam.Data_out(5)='1' and  SysRam.Data_out(4)='1' and SysRam.Data_out(2)='0' then
     658                                                                        NextCtx:=NextCtx+1;
     659                                                        end if;                                                 
     660                        end if;
     661       
     662        elsif NextCtx=2 then
     663                NextCtx:=0;
     664        end if;
     665
    603666
    604667end procedure;
Note: See TracChangeset for help on using the changeset viewer.