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/EX2_FSM.vhd

    r15 r39  
    9191signal data_to_write_fifo :  std_logic_vector(Word-1 downto 0);
    9292signal Ex2_on : std_logic:='0';
    93 signal rd_ok ,wr_ok:std_logic:='0';
     93signal dma_rd,dma_wr,rd_ok ,wr_ok:std_logic:='0';
    9494
    9595begin
     
    169169                                                                      end if;   
    170170                        when execute_put2 =>    if unsigned( packet_length) > 1  then
     171                                                                                               
    171172                                                                                        if switch_data_available = '1' and dma_wr_grant='1'  then
    172                                                                                                         -- n<=n+1;
    173                                                                                                          --if delai=0 then
     173                                                                                                         
    174174                                                                                                                 packet_length <= packet_length - 1;
    175175                                                                                                                 dest_address <= dest_address + 1;
    176176                                                                                                                 ex2_state_mach <= execute_put2;
    177177                                                                                                                 rd_ok<='1';
     178                                                                                                                 wr_ok<='1';
    178179                                                                                                                 data_to_ram<=switch_port_out_data;
    179                                                                                                         --else
    180                                                                                                         --  delai:=0;
    181                                                                                                         -- end if;
    182                                                                                                  else
    183                                                                                                         if switch_data_available = '1' and dma_wr_grant='0'then
     180                                                                                        else
     181                                                                                                        if switch_data_available = '1' and dma_wr_grant='0' then
    184182                                                                                                                if delai=0 then
    185                                                                                                                 data_to_ram<=switch_port_out_data;
     183                                                                                                                data_to_ram<=switch_port_out_data; --met en registre la donnée présente sur le port du switch
    186184                                                                                                                end if;
    187185                                                                                                                delai:=1;--indique qu'un temps supplémentaire est
     
    189187                                                                                                        end if;
    190188                                                                                                        ex2_state_mach <= execute_put2;
    191                                                                                                         rd_ok<='0';
    192                                                                                                 end if;
     189                                                                                                        rd_ok<='0'; --bloaque la lecture du switch pour ne pas perdre les données
     190                                                                                        end if;
    193191                                                                                else
    194192                                                                                        if switch_data_available = '1' then
    195193                                                                                                --la dernière donnée à écrire en RAM
    196194                                                                                                data_to_ram<=switch_port_out_data;
     195                                                                                                rd_ok<='0';
     196                                                                                                wr_ok<='1';
     197                                                                                        else
     198                                                                                                rd_ok<='1';
     199                                                                                                wr_ok<='0';
    197200                                                                                        end if;
    198                                                                                         rd_ok<='0';
    199                                                                                          
    200201                                                                                        if dma_wr_grant='1' then
    201202
    202203                                                                                                 ex2_state_mach <= execute_put3;
    203 
     204                                                                                                Wr_ok<='0';
    204205                                                                                                 
    205206                                                                                         end if;
     
    214215                                                                                                end if;
    215216                       
    216                         when execute_put4 => if n=0 then
     217                        when execute_put4 => if n <=4 then     
     218                       
     219                                                                                                dma_wr<='1';  --demander un accès exclusif au bus
     220                                                                                                dma_rd<='1'; -- pour éviter une mauvaise mise à jour des données
     221                                                                                        else
     222                                                                                                dma_wr<='0';                                                                           
     223                                                                                                dma_rd<='0';
     224                                                                                        end if;
     225                                                                                if n=0 then
    217226                                                                                        if dma_rd_grant='1' then
    218227                                                                                                n<=n+1;
    219                                                                                                 tempval:=Ram_data_in;
    220                                                                                                 tempval(4):='1';                        --SET du bit DReceived
    221                                                                                                 data_to_ram<=tempval;
    222                                                                                                
     228                                                                                        else
     229                                                                                        rd_ok<='1';
     230                                                                                        wr_ok<='0';
    223231                                                                                        end if;
     232                                                                                        elsif n=1 then
     233                                                                                                if dma_rd_grant='1' then
     234                                                                                                        n<=n+1;
     235                                                                                                else
    224236                                                                                                rd_ok<='1';
    225237                                                                                                wr_ok<='0';
    226                                                                                         elsif n=1 then
    227                                                                                                 rd_ok<='0';
    228                                                                                                 wr_ok<='1';
    229                                                                                                 n<=n+1;
     238                                                                                                end if;
    230239                                                                                        elsif n=2 then
     240                                                                                                if dma_rd_grant='1' then
     241                                                                                                        n<=n+1;
     242                                                                                                        tempval:=Ram_data_in;
     243                                                                                                        tempval(4):='1';                        --SET du bit DReceived
     244                                                                                                        data_to_ram<=tempval;
     245                                                                                                        rd_ok<='0';
     246                                                                                                        wr_ok<='1';
     247                                                                                                else
     248                                                                                                rd_ok<='1';
     249                                                                                                wr_ok<='0';
     250                                                                                                n<=n-1;
     251                                                                                                end if;
     252                                                                                        elsif n=3 then
     253                                                                                                if dma_wr_grant='1' then
     254                                                                                                        rd_ok<='0';
     255                                                                                                        wr_ok<='1';
     256                                                                                                        n<=n+1;
     257                                                                                                end if;
     258                                                                                        elsif n=4 then
    231259                                                                                                if dma_wr_grant='1' then
    232260                                                                                                        rd_ok<='0';
     
    250278                                                                                          wr_ok<='1';
    251279                                                                      end if;   
    252                         when execute_get2 => if fifo_full = '0'and switch_data_available ='1' and packet_length > 0 then
     280                        when execute_get2 => if fifo_full = '0' and switch_data_available ='1' and packet_length > 0 then
    253281                                                                                   data_to_write_fifo <= switch_port_out_data;
    254282                                                                                        packet_length <= packet_length - 1;
     
    271299                                                                                       
    272300                                                                                dest_address<=std_logic_vector(to_unsigned(core_base_adr+4,16));
    273                         when execute_get4 =>
     301                        when execute_get4 => if n <4 then     
     302                       
     303                                                                                                dma_wr<='1';  --demander un accès exclusif au bus
     304                                                                                                dma_rd<='1'; -- pour éviter une mauvaise mise à jour des données
     305                                                                                        else
     306                                                                                                dma_wr<='0';                                                                           
     307                                                                                                dma_rd<='0';
     308                                                                                        end if;
    274309                                                                                        if n=0 then
    275                                                                                                         if dma_rd_grant='1' then
     310                                                                                                if dma_rd_grant='1' then
     311                                                                                                n<=n+1;
     312                                                                                               
     313                                                                                                end if;
     314                                                                                                rd_ok<='1';
     315                                                                                                wr_ok<='0';
     316                                                                                        elsif n=1 then
     317                                                                                                if dma_rd_grant='1' then
     318                                                                                                        n<=n+1;
     319                                                                                                       
     320                                                                                                        end if;
     321                                                                                                        rd_ok<='1';
     322                                                                                                        wr_ok<='0';
     323                                                                                               
     324                                                                                        elsif n=2 then
     325                                                                                                        if dma_rd_grant='1' and dma_wr_grant='1' then
    276326                                                                                                                n<=n+1;
    277327                                                                                                                tempval:=Ram_data_in;
    278328                                                                                                                tempval(2):='1';        --mise à 1 du Bit Dreceiving
    279                                                                                                                 tempval(5):='0';                --Mise à 0 du Bit Sent
     329                                                                                                                --tempval(5):='0';              --Mise à 0 du Bit Sent
    280330                                                                                                                data_to_ram<=tempval;
    281                                                                                                         end if;
     331                                                                                                                rd_ok<='0';
     332                                                                                                                wr_ok<='1';
     333                                                                                                        else
    282334                                                                                                        rd_ok<='1';
    283335                                                                                                        wr_ok<='0';
    284                                                                                         elsif n=1 then
    285                                                                                                 n<=n+1;
    286                                                                                         elsif n=2 then
     336                                                                                                end if;
     337                                                                                       
     338                                                                                        elsif n=3 then
     339                                                                                                if dma_wr_grant = '1' then
    287340                                                                                                n<=n+1;
    288341                                                                                                rd_ok<='0';
    289342                                                                                                wr_ok<='1';
    290                                                                                         elsif n=3 then
     343                                                                                                end if;
     344                                                                                        elsif n=4 then
    291345                                                                                          if dma_wr_grant = '1' then
    292346                                                                                                        n<="0000";
    293347                                                                                                        ex2_state_mach <= fetch_packet_type; -- fin du mpi_get
    294                                                                                           end if;
    295                                                                                            rd_ok<='0';
    296                                                                                                 wr_ok<='1';
     348                                                                                          else
     349                                                                                                        rd_ok<='0';
     350                                                                                                        wr_ok<='1';
     351                                                                                                        --n<=n-1;
     352                                                                                         end if;
    297353                                                                                        end if;
    298354                                                                                   
     
    439495                                                                           switch_port_out_rd_en <=rd_ok;       
    440496                                                                                --ne pas corrompre le contenu de la RAM
    441                                                                                 Ram_data_out<=data_to_ram;                                     
     497                                                                                --Ram_data_out<=data_to_ram;                                   
    442498                                                                                Ram_wr<='0';
    443499                                                                                Ram_rd<='1';
     
    453509                                                                                switch_port_out_rd_en <= '0';
    454510                                                                                 packet_received <= '1';
    455                                                                                  dma_rd_request <= rd_ok;
    456                                                                                  dma_wr_request <=wr_ok;
     511                                                                                 dma_rd_request <= dma_rd;
     512                                                                                 dma_wr_request <=dma_wr;
    457513                                                                                 Ram_wr<=wr_ok;
    458514                                                                                 Ram_rd<=rd_ok;
    459515                                                                                 AppInitReq<='0';       
    460516                                                                                 barrier_completed <= '0';     
    461                                                                                  Ram_data_out<=Ram_data_in or "00000010"; -- le résultat de l'exécution
     517                                                                                 Ram_data_out<=data_to_ram;--Ram_data_in or "00000010"; -- le résultat de l'exécution
    462518                                                                                       
    463519                when execute_put5 =>             
     
    468524                                                                        AppInitReq<='0';
    469525                                                                        barrier_completed <= '0';
    470                                                                         dma_rd_request <= rd_ok;
    471                                                                                 dma_wr_request <= wr_ok;
     526                                                                        dma_rd_request <= dma_rd;
     527                                                                                dma_wr_request <= dma_wr;
    472528                                                                                Ram_rd<=rd_ok;
    473529                                                                                Ram_wr<=wr_ok;
    474                                                                                 Ram_data_out<=ram_data_in or "00000010";
     530                                                                                Ram_data_out<=data_to_ram;
    475531                                                                                --Result <=(1=>'1',others=>'0'); --put completed                                                                 
    476532               
     
    516572                                                                                  AppInitReq<='0';     
    517573                                                                                  barrier_completed <= '0';     
    518                                                                                  Ram_data_out<=Ram_data_in or "00000010"; -- activer le bit DSending
     574                                                                                 --Ram_data_out<=Ram_data_in or "00000010"; -- activer le bit DSending
    519575                                                                                       
    520576                when execute_get4 =>             
     
    525581                                                                        packet_received <= '1';
    526582                                                                        AppInitReq<='0';
    527                                                                         dma_rd_request <= rd_ok;
    528                                                                                 dma_wr_request <= wr_ok;
     583                                                                        dma_rd_request <= dma_rd;
     584                                                                                dma_wr_request <= dma_wr;
    529585                                                                                Ram_rd<=rd_ok;
    530586                                                                                Ram_wr<=wr_ok;
    531                                                                                 Ram_data_out<=ram_data_in or "00000010"; --activer le bit DSending
     587                                                                                Ram_data_out<=data_to_ram; --activer le bit DSending
    532588               
    533589               
Note: See TracChangeset for help on using the changeset viewer.