Ignore:
Timestamp:
May 21, 2014, 11:36:19 AM (10 years ago)
Author:
rolagamo
Message:

Ceci est la version 16 bits de la plateforme ainsi que la version hierarchique du NoCNoC

Location:
PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0
Files:
12 edited
4 copied

Legend:

Unmodified
Added
Removed
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/CoreTypes.vhd

    r101 r139  
    99use IEEE.numeric_std.all;
    1010package CoreTypes is
    11 CONSTANT Word :POSITIVE:= 8;
     11CONSTANT Word :POSITIVE:= 16;
    1212CONSTANT ADRLEN:POSITIVE:=16;
    1313CONSTANT LZFILL :std_logic_vector(2*Word-ADRLEN to 0):=(others=>'0');--indique le nombre de zero à utiliser pour completer le bus de données lorsque la longueur restante du bus d'adresse est inférueure à la largeur du bus de données
     
    3737   array(natural range <>) of std_logic_vector( Word-1 downto 0);
    3838       
     39        type Typ_PortIO8 is
     40   array(natural range <>) of std_logic_vector( 7 downto 0);
    3941        type memory is
    4042        array (natural range <>) of std_logic_vector(word-1 downto 0);
     
    176178end component SWITCH_GEN;
    177179-- déclaration des fonctions utilisées
    178  
     180 function wor (din : std_logic_vector) return std_logic;
     181subtype resolved_or is wor std_logic;
     182
    179183 FUNCTION all_ones(s1:std_logic_vector) return std_logic;
    180184  --This function returns if the input vector has all ones and no zeros
     
    330334variable bit_image: String(1 to 3) := std_logic'image(L);
    331335begin
    332 return(bit_image(1 to 1));
     336return(bit_image(2 to 2));
    333337end function image;
    334338
     
    355359return(RetVal);
    356360end function image;
     361function wor (din : std_logic_vector) return std_logic is
     362begin
     363for i in din'range loop
     364if (din(i)='1') then
     365return din(i);
     366end if;
     367end loop;
     368return '0';
     369end function wor;
     370
    357371end CoreTypes;
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/Crossbar.vhd

    r101 r139  
    3838    Port ( clk : in  STD_LOGIC;
    3939                          reset : in  STD_LOGIC; --pour gérer le pipeline
    40                           Port1_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    41            Port2_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    42            Port3_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    43            Port4_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    44                           Port5_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    45            Port6_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    46            Port7_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    47            Port8_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    48                           Port9_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    49            Port10_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    50            Port11_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    51            Port12_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    52                           Port13_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    53            Port14_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    54            Port15_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    55            Port16_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
     40                          Port1_in : in  STD_LOGIC_VECTOR (7 downto 0);
     41           Port2_in : in  STD_LOGIC_VECTOR (7 downto 0);
     42           Port3_in : in  STD_LOGIC_VECTOR (7 downto 0);
     43           Port4_in : in  STD_LOGIC_VECTOR (7 downto 0);
     44                          Port5_in : in  STD_LOGIC_VECTOR (7 downto 0);
     45           Port6_in : in  STD_LOGIC_VECTOR (7 downto 0);
     46           Port7_in : in  STD_LOGIC_VECTOR (7 downto 0);
     47           Port8_in : in  STD_LOGIC_VECTOR (7 downto 0);
     48                          Port9_in : in  STD_LOGIC_VECTOR (7 downto 0);
     49           Port10_in : in  STD_LOGIC_VECTOR (7 downto 0);
     50           Port11_in : in  STD_LOGIC_VECTOR (7 downto 0);
     51           Port12_in : in  STD_LOGIC_VECTOR (7 downto 0);
     52                          Port13_in : in  STD_LOGIC_VECTOR (7 downto 0);
     53           Port14_in : in  STD_LOGIC_VECTOR (7 downto 0);
     54           Port15_in : in  STD_LOGIC_VECTOR (7 downto 0);
     55           Port16_in : in  STD_LOGIC_VECTOR (7 downto 0);
    5656                         
    5757                          Port1_pulse_in : in std_logic;
     
    8989                          Port16_pulse_out : out std_logic;
    9090                         
    91                           Port1_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    92            Port2_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    93            Port3_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    94            Port4_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    95                           Port5_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    96            Port6_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    97            Port7_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    98            Port8_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    99                           Port9_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    100            Port10_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    101            Port11_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    102            Port12_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    103                           Port13_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    104            Port14_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    105            Port15_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
    106            Port16_out : out  STD_LOGIC_VECTOR (Word-1 downto 0);
     91                          Port1_out : out  STD_LOGIC_VECTOR (7 downto 0);
     92           Port2_out : out  STD_LOGIC_VECTOR (7 downto 0);
     93           Port3_out : out  STD_LOGIC_VECTOR (7 downto 0);
     94           Port4_out : out  STD_LOGIC_VECTOR (7 downto 0);
     95                          Port5_out : out  STD_LOGIC_VECTOR (7 downto 0);
     96           Port6_out : out  STD_LOGIC_VECTOR (7 downto 0);
     97           Port7_out : out  STD_LOGIC_VECTOR (7 downto 0);
     98           Port8_out : out  STD_LOGIC_VECTOR (7 downto 0);
     99                          Port9_out : out  STD_LOGIC_VECTOR (7 downto 0);
     100           Port10_out : out  STD_LOGIC_VECTOR (7 downto 0);
     101           Port11_out : out  STD_LOGIC_VECTOR (7 downto 0);
     102           Port12_out : out  STD_LOGIC_VECTOR (7 downto 0);
     103                          Port13_out : out  STD_LOGIC_VECTOR (7 downto 0);
     104           Port14_out : out  STD_LOGIC_VECTOR (7 downto 0);
     105           Port15_out : out  STD_LOGIC_VECTOR (7 downto 0);
     106           Port16_out : out  STD_LOGIC_VECTOR (7 downto 0);
    107107                         
    108108           Ctrl : in  STD_LOGIC_VECTOR (number_of_crossbar_ports*number_of_crossbar_ports downto 1)
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/FIFO_256_FWFT.vhd

    r101 r139  
    6666attribute RAM_STYLE : string;
    6767
    68 type ram_type is array (2**(MPROOF+word)-1 downto 0) of std_logic_vector (Word-1 downto 0);
     68type ram_type is array (2**(MPROOF+8)-1 downto 0) of std_logic_vector (Word-1 downto 0);
    6969        signal RAM: ram_type;
    7070        attribute RAM_STYLE of RAM: signal is "BLOCK";
    7171-- declaration des signeaux des compteurs
    72 signal push_address_counter: std_logic_vector(MPROOF+Word-1 downto 0);
    73 signal pop_address_counter : std_logic_vector(MPROOF+Word-1 downto 0);
    74 signal fifo_counter : std_logic_vector(MPROOF+Word-1 downto 0);
     72signal push_address_counter: std_logic_vector(MPROOF+8-1 downto 0);
     73signal pop_address_counter : std_logic_vector(MPROOF+8-1 downto 0);
     74signal fifo_counter : std_logic_vector(MPROOF+8-1 downto 0);
    7575--autre signaux
    7676signal empty_signal: std_logic:='1';
     
    105105wr_en_signal <= wr_en and (not full_signal); -- la donnée est ignorée si le fifo est plein
    106106rd_en_signal <= rd_en and (not empty_signal);-- pas de lecture si le fifo est vide
    107 full_signal <= '1' when unsigned(fifo_counter) = 2**(MProof+word)-1 else
     107full_signal <= '1' when unsigned(fifo_counter) = 2**(MProof+8)-1 else
    108108                                   '0';
    109 near_full <= '1' when unsigned(fifo_counter) >= 2**(MProof+word)-5 else
     109near_full <= '1' when unsigned(fifo_counter) >= 2**(MProof+8)-5 else
    110110                                   '0';
    111111--empty_signal <= '1' when fifo_counter = "000000"  else
     
    254254 -- processus de comptage des octets dans le fifo
    255255 fifo_counter_process : process(clk_signal)
    256 variable count : std_logic_vector(MPROOF+word-1 downto 0):= (others=>'0');
     256variable count : std_logic_vector(MPROOF+8-1 downto 0):= (others=>'0');
    257257begin
    258258 if rising_edge(clk_signal) then
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/INPUT_PORT_MODULE.vhd

    r101 r139  
    4040entity INPUT_PORT_MODULE is
    4141    generic(number_of_ports : positive := 4;
    42          
    43          Port_num: natural:=1);  -- port_num est l'id du port
     42                                adr_mask : natural := 0;--le nombre de'1' en partant le la gauche de l'adresse
     43                                adr_len: positive:=10; --la taille en bit de l'adresse 10 bits --> 1024 hotes
     44                                tot_ports: positive :=8; --Nomnre de ports total du réseau
     45                                adr_sub_net : std_logic_vector(9 downto 0) := (others=>'0');--l'adresse du sous-réseau
     46                                Port_num: natural:=1;  -- port_num est l'id du port
     47                                nbyte : positive:=2); -- le nombre de Byte dans chaque mot du port par défaut 2
    4448    Port ( data_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    4549           data_in_en : in  STD_LOGIC; -- signaler la présence des données en entrée
     
    5256                          fifo_empty : out  STD_LOGIC; -- le tampon d'entrée est vide
    5357                          priority_rotation : out std_logic;  -- reserver le canal de transmission
    54            data_out : out  STD_LOGIC_VECTOR (Word-1 downto 0); --données vers le réseau crossbar
     58           data_out : out  STD_LOGIC_VECTOR (7 downto 0); --données vers le réseau crossbar
    5559                          data_out_pulse : out std_logic); -- permet de ...
    5660       
     
    7377
    7478--definition du type etat pour les fsm
    75 type fsm_states is (state0, CmdOn, WaitGrant, ReqPort, state1, state2,strecover,stpulse,stateErr, state3);-- definition du type etat pour le codage des etats des fsm
    76 type fsm_states2 is(cmdstart,cmdwait,cmdread,cmdSetDest,cmdSetCount,cmdSetId,cmdpulse,CmdEnd);
     79type fsm_states is (state0, CmdOn, WaitGrant, ReqPort,addhead,addheadn, state1,state1n, state2,state2n,strecover,stpulse,stpulsen,stateErr, state3);-- definition du type etat pour le codage des etats des fsm
     80type fsm_states2 is(cmdstart,cmdwait,cmdread,cmdSetDest,cmdSetCount,cmdSetId,cmdSetDestn,cmdSetCountn,cmdSetIdn,cmdpulse,cmdpulsen,CmdEnd);
    7781signal pop_state : fsm_states;
    7882signal cmdstate : fsm_states2;
     
    8185signal dat_Err :std_logic:='0'; -- signal une erreur pendant l'exécution
    8286signal wrok,readOk,CmdReadOk : std_logic:='0'; --indique s'il est possible de lire les données
     87--
     88signal rt_err : std_logic;--erreur sur la route
     89signal route :std_logic_vector(9 downto 0);
     90signal dest_port:std_logic_vector(Word/2-1 downto 0);
     91signal nib,cnib:natural range 0 to 4:=1;--indique le sous-octet à traiter
     92signal pulseOn :std_logic:='0';--indique que le prochain état est celui de l'impulsion
    8393-- signaux utilisés dans les fsm
    8494signal request_decoder,req_grant : STD_LOGIC_VECTOR(number_of_ports  downto 1);
     
    8696signal request_latch : STD_LOGIC_VECTOR(4 downto 1):=(others=>'0');   -- pourquoi pas 3 downto 0 ?
    8797signal request_latch_en : std_logic;
    88 signal pipeline_latch : std_logic_vector(Word-1 downto 0);
     98signal pipeline_latch : std_logic_vector(7 downto 0);
    8999signal pipeline_latch_en : std_logic;
    90100signal request_word :  std_logic_vector(5 downto 1);
     
    110120signal fifo_empty_signal : std_logic;
    111121signal fifo_read_signal : std_logic;
    112 signal fifo_out_signal,cmd_data_signal : std_logic_vector(Word-1 downto 0);
    113 signal push_dout : std_logic_vector(Word-1 downto 0);
     122signal fifo_out_signal,fifo_out2,cmd_data_signal : std_logic_vector(Word-1 downto 0);
     123signal push_dout : std_logic_vector(7 downto 0);
    114124signal empty_latch : std_logic ;
    115 signal PORT_ID :std_logic_vector(Word-1 downto 0):=STD_LOGIC_VECTOR(to_unsigned(number_of_ports-1,4))& STD_LOGIC_VECTOR(to_unsigned(port_num-1,4));
     125
    116126-- signaux du compteur de données
    117127signal data_counter : std_logic_vector(Word-1 downto 0);
    118128
     129function count_bits(param:natural) return natural is
     130
     131  variable p : natural range 0 to 127:=0;
     132begin
     133n1: for i in 0 to 127 loop
     134    if param<=2**i then
     135      p:=i;
     136      exit n1;
     137  end if;
     138  end loop n1;
     139  return p;
     140end function;
     141
     142function Get_Port_ID(adr_sub_net:std_logic_vector;adr_mask:natural;n_ports:positive;numport:positive) return std_logic_vector is
     143--cette fonction permet de calculer le port_id ou l'adresse de sous réseau en fonction du masque
     144variable tport_id:std_logic_vector(adr_len-1 downto 0):=(others=>'0'); --
     145variable p : natural range 0 to 9:=0;
     146begin
     147--n1: for i in 0 to 9 loop
     148--    if n_ports-1<2**i then
     149--      p:=i;
     150--      exit n1;
     151--  end if;
     152--  end loop n1;
     153  p:=count_bits(n_ports-1);
     154    tport_id:=adr_sub_net(adr_len-1 downto p) & std_logic_vector(to_unsigned(numport-1,p));
     155    return tport_id;
     156end function;
     157--case n_ports is
     158--when 1|2|3 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     159--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-2):= std_logic_vector(to_unsigned(numport,1));
     160--when 4|5 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     161--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-3):= std_logic_vector(to_unsigned(numport,2));
     162--when 6|9 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     163--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-4):= std_logic_vector(to_unsigned(numport,3));
     164--
     165--when others => --10 to 16
     166--tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1) ;
     167--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-5):= std_logic_vector(to_unsigned(numport,4));
     168--
     169--end case;
     170--  return tport_id;
     171--end function;
     172signal PORT_ID :std_logic_vector(adr_len-1 downto 0):=GET_PORT_ID(adr_sub_net,adr_mask,number_of_ports,port_num);
     173constant n_ports_bits:natural:=count_bits(number_of_ports-1);--compte le nombre de bit par port
     174constant pid_bits:natural:=count_bits(tot_ports); --donne le nombre de bits utiles dans une adresse
    119175begin
    120176-- instantiation du FIFO_256
     
    471527                  pipeline_latch <= push_dout;
    472528                  elsif pipeline_latch_en = '1' and cmd_exec='1' then
    473                   pipeline_latch <= cmd_data_signal;
     529                  pipeline_latch <= cmd_data_signal(8*cnib-1 downto 8*(cnib-1));
    474530          end if;
    475531        end if;
    476532end process;
    477533
     534
    478535--latch qui memorise l'adresse de destination du packet
    479536
    480537request_latch_process : process(clk)
     538variable rt:std_logic_vector(9 downto 0):=(others=>'0');--route
     539variable reql:std_logic_vector(4 downto 1):=(others=>'0');--request_latch
     540--variable adr_e,p:natural range 0 to 15:=0;
     541
    481542begin
    482543        if rising_edge(clk) then
    483544                if reset_signal = '1' then
    484                   request_latch <= (others => '0');
     545                  reql := (others => '0');
    485546                  elsif request_latch_en = '1' and cmd_in_en='0' then  --si la lecture de la destination est autorisée
    486                   request_latch <=fifo_out_signal(3 downto 0); --fifo_out_signal(3) & fifo_out_signal(2) & fifo_out_signal(1) & fifo_out_signal(0);
    487                 assert (unsigned(fifo_out_signal(3 downto 0))<number_of_ports)
    488         report "Input_port_module n° " & integer'image(port_num) & " Le port sollicité n'existe pas le NoC va être bloqué !"
    489         severity failure;
    490                   elsif cmd_in_en='1' and request_latch_en='1' then  --c'est une commande le port de dest est le même que le port d'entrée
     547                  rt:=(others=>'0');
     548                 
     549                  if adr_mask=0 then
     550                    reql(n_ports_bits downto 1):=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     551                    request_latch(n_ports_bits downto 1)<=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     552                    report "Route racine:";
     553                  else
     554                  rt(pid_bits-1 downto pid_bits-adr_mask):=fifo_out_signal(pid_bits-1 downto pid_bits-adr_mask);
     555                  if rt=adr_sub_net then
     556                    report "Route trouvé:" & integer'image(to_integer(unsigned(rt))) & " adr_sub_net=" & integer'image(to_integer(unsigned(adr_sub_net))) & " fifo_out_sig:=" & image(fifo_out_signal) & " sur le port " & integer'image(to_integer(unsigned(port_id))+1);
     557                    reql(n_ports_bits downto 1):=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     558                    request_latch(n_ports_bits downto 1)<=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     559                   
     560                  else
     561                         if number_of_ports=Port_num then --si c'est un paquet descendant alors le détruire
     562                             report "Input_port_module n°" & integer'image(to_integer(unsigned(port_id))) & " La route sollicité n'existe pas dans ce sous réseau le paquet va être détruit ! fifo_out_sig:=" & image(fifo_out_signal);
     563                             request_latch<="0000"; --à revoir il faut empêcher le routeur de se bloquer
     564                             rt_err<='1'; --il faut activer la destruction du paquet
     565                         else --faire monter les données vers le ports supérieur
     566                                  request_latch<=std_logic_vector(to_unsigned(number_of_ports-1,4));
     567                                  reql:=std_logic_vector(to_unsigned(number_of_ports-1,4));
     568                                  rt_err<='0';
     569                         end if;
     570                 
     571                  end if;
     572                 end if;
     573                  report  "fifo_out=" & image(fifo_out_signal) & " pid_bits:=" & integer'image(pid_bits) & " adr_mask:=" & integer'image(adr_mask) & " rt:=" & image(rt) & " adr_sub_net=" & image(adr_sub_net) & " reql:=" & image(reql) & " sur le port "  & integer'image(to_integer(unsigned(port_id))+1);
     574         
     575                        assert (unsigned(reql)<number_of_ports-1)
     576                 report "Input_port_module n° " & integer'image(port_num) & " Le port sollicité n'est pas dans la branche !"
     577                 severity warning;
     578                elsif cmd_in_en='1' and request_latch_en='1' then  --c'est une commande le port de dest est le même que le port d'entrée
    491579                   request_latch<=Port_ID(3 downto 0);  --car les ports commencent à 0
    492580                end if;
    493        
    494         end if;
     581                end if;
     582        --request_latch<=reql;
     583        route<=rt; --pour le débogage uniquement pas besoin de conserver ce paramètre en principe
     584
     585
    495586end process;
    496587
     
    515606                                                                        pop_state <= CmdOn;
    516607                                                                end if;
     608                                                                nib<=nbyte;
    517609                        when CmdOn => if empty_latch='1' and cmd_in_en='0' then
    518610                                                                pop_state <= state0;
     
    533625                                                                                --
    534626                                                                                pop_state <= state1;
    535                                                                                
     627                                                                                fifo_out2<=fifo_out_signal;
    536628                                                                --end if;
    537                
     629                        when addhead =>
     630                                                                        pop_state <= addheadn;
     631                        when addheadn =>  pop_state <= state1;
    538632                        when state1 => if port_granted ='1' then --lecture de la longueur des données
    539633                                                                                data_counter <= fifo_out_signal;
     
    543637                                                                                                readOk<='1';
    544638                                                                                end if;
    545                                                                                 pop_state <= state2;
     639                                                                                pop_state <= state1n;
     640                                                                                nib<=nib-1;
    546641                                                                                wrok<='1';
    547642                                                                                else
    548643                                                                                  wrok<='0';
    549644                                                              end if;
    550                                                                                
     645                                                             
     646                        when state1n =>                 if nib=1 then
     647                                                                                                pop_state <= state2;
     648                                                                                                nib<=nbyte;
     649                                                                                else
     650                                                                                        nib<=nib-1;
     651                                                                                end if;
     652                                                                                wrok<='1';
     653                                                                                fifo_out2<=fifo_out_signal;
    551654                        when state2 => if port_granted='1' then
    552655                                       wrok<='1';
    553656                                                                                if fifo_empty_signal ='0'  then
    554                                                                                   if rd_en_signal ='1' and unsigned(data_counter)<= 3 then
     657                                                                                  if rd_en_signal ='1' and unsigned(data_counter)<= 2 then
    555658                                                                                        data_counter <= data_counter - 1;
    556                                                                                         pop_state <= stpulse;
     659                                                                                        pop_state <= state2n;
     660                                                                                        nib<=nib-1;
    557661                                                                                        ReadOk<='1';
     662                                                                                        pulseon<='1';
    558663                                                                                elsif rd_en_signal ='1' then
    559664                                                                                  data_counter <= data_counter - 1;
    560                                                                                   pop_state <= state2;
     665                                                                                  pop_state <= state2n;
     666                                                                                  nib<=nib-1;
    561667                                                                                  ReadOk<='1';
    562668                                                                                else --fifo_empty_signal='1' fin prématurée de la lecture
     
    580686                                                                                data_counter <= data_counter + 1;
    581687                                                                        end if;
     688                                                         
     689                        when state2n => if nib=1 then
     690                                         if pulseon='1' then
     691                                                                                                pop_state <= stpulse;
     692                                                                                                else
     693                                                                                                 pop_state <= state2;
     694                                                                                                end if;
     695                                                                                                nib<=nbyte;
     696                                                                                else
     697                                                                                        nib<=nib-1;
     698                                                                                end if;
     699                                                                                wrok<='1';
     700                                                                                 fifo_out2<=fifo_out_signal;
    582701                        when strecover => if fifo_empty_signal='0' and port_granted='1' then
    583702                                     pop_state<=state2;
     
    591710                                   
    592711                        when stpulse => if port_granted='1' then
    593                                                                                         pop_state <= state3;            --pousser la dernière donnée dehors             
     712                                                                                        pop_state <= state3;--stpulsen;         --pousser la dernière donnée dehors             
     713                                                                                        --nib<=nib-1;
    594714                                                                                        data_counter <= data_counter - 1;
    595715                                                                                        wrok<='1';
    596                                                                         end if;
    597                                          wrok<='0';
     716                                                                                        pulseon<='0';
     717                                                                        else
     718                                                                                        wrok<='0';
     719                                                                        end if; 
     720                                                                 
     721                        when stpulsen =>        wrok<='0';
     722                                                                        if nib=1 then
     723                                                                                                pop_state <= state3;
     724                                                                                                nib<=nbyte;
     725                                                                                else
     726                                                                                        nib<=nib-1;
     727                                                                                end if;
     728                                                                                 fifo_out2<=fifo_out_signal;
    598729                        when state3 =>  wrok<='0';
    599730                                                                                data_counter <= data_counter - 1;
     
    611742
    612743-- actions associées à chaque etat de la fsm de mealy
    613 pop_fsm_action : process(pop_state, fifo_out_signal,empty_latch, rd_en_signal,readok, port_granted )
     744pop_fsm_action : process(pop_state, fifo_out_signal,fifo_out2,empty_latch, rd_en_signal,readok, port_granted,nib )
    614745  begin   
    615746-- code fonctionnel     
     
    623754                                                                dat_exec<='0';
    624755                                                                dat_Err<='0';
    625                                                                 push_dout<=fifo_out_signal;
     756                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    626757                                                               
    627758                when CmdOn =>           dat_request_latch_en <= '0'; 
     
    633764                                                                dat_exec<='0';
    634765                                                                dat_Err<='0';
    635                                                                 push_dout<=fifo_out_signal;
     766                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    636767                when WaitGrant =>       
    637768                                                                dat_request_latch_en <='1'; --autoriser l'identification du port de destination
     
    643774                                                                dat_exec<='1';
    644775                                                                dat_Err<='0';
    645                                                                 push_dout<=fifo_out_signal(7 downto 4) & PORT_ID(3 downto 0);
     776                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
     777                                                                --push_dout<=fifo_out_signal(Word-1 downto Word/2)  & PORT_ID(Word/2-1 downto 0);
    646778                when ReqPort =>
    647779                                                                dat_request_latch_en <='1'; --autoriser l'identification du port de destination
    648                                                                 dat_pipeline_latch_en <= '1'; --pour le transmettre à travers le réseau
     780                                                                dat_pipeline_latch_en <= '0'; --pour le transmettre à travers le réseau
    649781                                                                dat_fifo_read_signal <= '1';
    650782                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     
    653785                                                                dat_exec<='1';
    654786                                                                dat_Err<='0';
    655                                                                 push_dout<=fifo_out_signal(7 downto 4) & PORT_ID(3 downto 0);
     787                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
     788                                                                --push_dout<=fifo_out_signal(Word-1 downto Word/2) & PORT_ID(Word/2-1 downto 0);
     789                when addhead =>
     790                                                                dat_request_latch_en <='0'; --autoriser l'identification du port de destination
     791                                                                dat_pipeline_latch_en <= '1'; --pour le transmettre à travers le réseau
     792                                                                dat_fifo_read_signal <= '0';
     793                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     794                                                                dat_data_out_pulse <= '0';     --transmettre le signal pour le dernier mot
     795                                                                dat_priority_rotation <= '0';
     796                                                                dat_exec<='1';
     797                                                                dat_Err<='0';
     798                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    656799                                                       
    657800                when state1 =>    dat_request_latch_en <= '0';
    658801                                                                dat_pipeline_latch_en <= rd_en_signal and port_granted;   
    659                                                                 dat_fifo_read_signal <= rd_en_signal and port_granted;
     802                                                                dat_fifo_read_signal <= '0';--rd_en_signal and port_granted;
     803                                                                dat_request_decoder_en <= '1';
     804                                                                dat_data_out_pulse <= '0';--port_granted;
     805                                                                dat_priority_rotation <= '0';
     806                                                                dat_exec<='1';
     807                                                                dat_Err<='0';
     808                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     809                when state1n =>    dat_request_latch_en <= '0';
     810                                                                dat_pipeline_latch_en <= '1'; -- toujours actif pour cet octet
     811                                                                dat_fifo_read_signal <= '0';
    660812                                                                dat_request_decoder_en <= '1';
    661813                                                                dat_data_out_pulse <= port_granted;
     
    663815                                                                dat_exec<='1';
    664816                                                                dat_Err<='0';
    665                                                                 push_dout<=fifo_out_signal;
     817                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
    666818                                                               
    667819          when state2 |strecover =>    dat_request_latch_en <= '0';
     
    669821                                                                dat_fifo_read_signal <= port_granted and readok;   
    670822                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
    671                                                                 dat_data_out_pulse <= port_granted and wrOk and not(fifo_empty_signal);
     823                                                                dat_data_out_pulse <= port_granted and wrOk ;--and not(fifo_empty_signal);
    672824                                                                dat_priority_rotation <= '0';
    673825                                                                dat_exec<='1';
    674826                                                                dat_Err<='0';
    675                                                                 push_dout<=fifo_out_signal;
    676                                                                
    677           when stpulse =>    dat_request_latch_en <= '0'; --pousser la dernière donnée
    678                                                                 dat_pipeline_latch_en <= '0';  --autoriser la lecture du fifo en sortie
     827                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     828                 
     829                 when state2n  =>    dat_request_latch_en <= '0';
     830                                                                dat_pipeline_latch_en <= '1';  --autoriser la lecture du fifo en sortie
     831                                                                dat_fifo_read_signal <= '0';   
     832                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     833                                                                dat_data_out_pulse <= port_granted and wrOk ;--and not(fifo_empty_signal);
     834                                                                dat_priority_rotation <= '0';
     835                                                                dat_exec<='1';
     836                                                                dat_Err<='0';
     837                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));                                         
     838          when stpulse|stpulsen =>    dat_request_latch_en <= '0'; --pousser la dernière donnée
     839                                                                dat_pipeline_latch_en <= wrok;  --autoriser la lecture du fifo en sortie
    679840                                                                dat_fifo_read_signal <='0';   
    680841                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     
    683844                                                                dat_exec<='1';
    684845                                                                dat_Err<='0';
    685                                                                 push_dout<=fifo_out_signal;
     846                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     847       
    686848                                                               
    687849                when state3 =>    dat_request_latch_en <= '0';
     
    693855                                                                dat_exec<='0';
    694856                                                                dat_Err<='0';
    695                                                                 push_dout<=fifo_out_signal;
     857                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    696858                when stateErr =>    dat_request_latch_en <= '0';
    697859                                                                dat_pipeline_latch_en <= '0';
     
    702864                                                                dat_exec<='1';
    703865                                                                dat_Err<='1';
    704                                                                 push_dout<=fifo_out_signal;
     866                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    705867                when others =>    dat_request_latch_en <= '0';
    706868                                                                dat_pipeline_latch_en <= '0';
     
    711873                                                                dat_exec<='0';
    712874                                                                dat_Err<='0';
    713                                                                 push_dout<=fifo_out_signal;
     875                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    714876                                                                               
    715877                end case;
    716878 end process;
    717879 -- traitement des commandes reçues par le switch
    718 fsm_cmd:process(clk,cmd_in_en)
     880fsm_cmd:process(clk)
    719881variable timeout : natural:=0;
    720882variable cmdcode : natural range 0 to 255;
     
    731893                                end if;
    732894                                cmdReadOk<='0';
     895                                cnib<=nbyte;
    733896                when cmdwait => if port_granted='1' then  -- demande du port de sortie
    734897                                                               
     
    754917--                              end if;
    755918                when cmdsetdest =>
     919                               
    756920                                if port_granted='1' then
     921                                        cmdstate<=cmdsetdestn;
     922                                        cnib<=cnib-1;
     923                                end if;
     924                                cmdReadOk<='0';
     925                when cmdsetdestn =>     if cnib=1 then
     926                                                                                                cmdstate<=cmdsetcount;
     927                                                                                                cnib<=nbyte;
     928                                                                                else
     929                                                                                        cnib<=cnib-1;
     930                                                                                end if;
     931                when cmdsetcount =>
     932                                if port_granted='1' then
     933                                        cmdstate<=cmdsetcountn;
     934                                        cnib<=cnib-1;
     935                                else
    757936                                        cmdstate<=cmdsetcount;
    758937                                end if;
    759938                                cmdReadOk<='0';
    760                 when cmdsetcount =>
    761                                 if port_granted='1' then
    762                                         cmdstate<=cmdsetID;
    763                                 else
    764                                         cmdstate<=cmdsetdest;
    765                                 end if;
    766                                 cmdReadOk<='0';
     939                               
     940                when cmdsetcountn =>    if cnib=1 then
     941                                                                                                cmdstate<=cmdsetID;
     942                                                                                                cnib<=nbyte;
     943                                                                                else
     944                                                                                        cnib<=cnib-1;
     945                                                                                end if;
    767946                when cmdsetID=>
    768947                        if port_granted='1' then
    769                         cmdstate <=cmdpulse;
     948                        cmdstate <=cmdsetIDn;
     949                        cnib<=cnib-1;
    770950                        end if;
    771951                        cmdReadOk<='0';
     952                when cmdsetIDn =>       if cnib=1 then
     953                                                                                                cmdstate<=cmdpulse;
     954                                                                                                cnib<=nbyte;
     955                                                                                else
     956                                                                                        cnib<=cnib-1;
     957                                                                                end if;
    772958                when cmdpulse =>
    773959                        if port_granted='1' then
    774                         cmdstate <=cmdEnd;
     960                        cmdstate <=cmdpulsen;
     961                        cnib<=cnib-1;
    775962                        end if;
    776963                        cmdReadOk<='0';
     964                when cmdpulsen => if cnib=1 then
     965                                                                                                cmdstate<=cmdEnd;
     966                                                                                                cnib<=nbyte;
     967                                                                                else
     968                                                                                        cnib<=cnib-1;
     969                                                                                end if;
    777970                when cmdend  =>
    778971                        if cmd_in_en='0' then --éviter l'exécution en boucle
     
    8081001                                                cmd_data_out_pulse <= '0';
    8091002                                                cmd_priority_rotation <= '1';                    --sans priorité
    810                                                 cmd_data_signal<=Port_ID; 
     1003                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID; 
    8111004                when cmdwait =>
    8121005                                                cmd_exec<='1';
     
    8161009                                                cmd_priority_rotation <= '0';    --avec priorité
    8171010                                                cmd_request_decoder_en <= '1';   --demande d'émission
    818                                                 cmd_data_signal<=Port_ID;
     1011                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
    8191012                                                cmd_data_out_pulse <= '0';                                     
    8201013        when cmdsetdest  =>
     
    8271020                                                cmd_data_out_pulse <= '0';
    8281021                                                cmd_priority_rotation <= '0';
    829                                                 cmd_data_signal<=Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
    830         when cmdsetcount =>
     1022                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1023                when cmdsetdestn  =>
     1024                                                --cmd_request_decoder_en <= '1';
     1025                                                cmd_exec<='1';
     1026                                                cmd_pipeline_latch_en <='1'; --empiler dans le tampon de sortie la donnée
     1027                                                cmd_fifo_read_signal <='0';
     1028                                                cmd_request_latch_en<='0';
     1029                                                cmd_request_decoder_en <= '1';          --autoriser le decodeur à activer le dernier bit de request
     1030                                                cmd_data_out_pulse <= '1';
     1031                                                cmd_priority_rotation <= '0';
     1032                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1033
     1034        when cmdsetcount|cmdsetcountn=>
    8311035                                                                 
    8321036                                                cmd_exec<='1';   
     
    8371041                                                cmd_data_out_pulse <= port_granted;
    8381042                                                cmd_priority_rotation <= '0';
    839                                                 cmd_data_signal<=STD_LOGIC_VECTOR(to_unsigned(3,8));                                   
    840         when cmdSetId =>
     1043                                                cmd_data_signal<=STD_LOGIC_VECTOR(to_unsigned(3,Word));                                 
     1044        when cmdSetId| cmdSetIdn=>
    8411045                                                --cmd_request_decoder_en <= '1';
    8421046                                                cmd_exec<='1';
     
    8471051                                                cmd_data_out_pulse <= port_granted;
    8481052                                                cmd_priority_rotation <= '0';
    849                                                 cmd_data_signal<=Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
    850                                                                                        
     1053                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1054                                                report "Le nombre de port est" & integer'image(tot_ports) & " l'id du port est : " & image(port_id);                                   
    8511055        when cmdpulse =>        cmd_exec<='1';
    852                                                 cmd_pipeline_latch_en <='0';
     1056                                                cmd_pipeline_latch_en <='1';
    8531057                                                cmd_fifo_read_signal <='0';
    8541058                                                cmd_request_latch_en<='0';
     
    8561060                                                cmd_data_out_pulse <= '1';--port_granted;     --s'assurer que la dernière donnée est bien lue
    8571061                                                cmd_priority_rotation <= '0';
     1062                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
     1063                                               
     1064        when cmdpulsen  =>      cmd_exec<='1';
     1065                                                cmd_pipeline_latch_en <='0';
     1066                                                cmd_fifo_read_signal <='0';
     1067                                                cmd_request_latch_en<='0';
     1068                                                cmd_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     1069                                                cmd_data_out_pulse <= '0';--port_granted;     --s'assurer que la dernière donnée est bien lue
     1070                                                cmd_priority_rotation <= '0';
    8581071                                                                --cmd_data_signal<=Port_ID ;
    859                                                 cmd_data_signal<=Port_ID;
     1072                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
    8601073                                               
    8611074        when cmdend =>
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/INPUT_PORT_MODULE.vhd.bak

    r101 r139  
    4040entity INPUT_PORT_MODULE is
    4141    generic(number_of_ports : positive := 4;
    42          
    43          Port_num: natural:=1);  -- port_num est l'id du port
     42                                adr_mask : natural := 0;--le nombre de'1' en partant le la gauche de l'adresse
     43                                adr_len: positive:=10; --la taille en bit de l'adresse 10 bits --> 1024 hotes
     44                                tot_ports: positive :=8; --Nomnre de ports total du réseau
     45                                adr_sub_net : std_logic_vector(9 downto 0) := (others=>'0');--l'adresse du sous-réseau
     46                                Port_num: natural:=1;  -- port_num est l'id du port
     47                                nbyte : positive:=2); -- le nombre de Byte dans chaque mot du port par défaut 2
    4448    Port ( data_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    4549           data_in_en : in  STD_LOGIC; -- signaler la présence des données en entrée
     
    5256                          fifo_empty : out  STD_LOGIC; -- le tampon d'entrée est vide
    5357                          priority_rotation : out std_logic;  -- reserver le canal de transmission
    54            data_out : out  STD_LOGIC_VECTOR (Word-1 downto 0); --données vers le réseau crossbar
     58           data_out : out  STD_LOGIC_VECTOR (7 downto 0); --données vers le réseau crossbar
    5559                          data_out_pulse : out std_logic); -- permet de ...
    5660       
     
    7377
    7478--definition du type etat pour les fsm
    75 type fsm_states is (state0, CmdOn, WaitGrant, ReqPort, state1, state2,strecover,stpulse,stateErr, state3);-- definition du type etat pour le codage des etats des fsm
    76 type fsm_states2 is(cmdstart,cmdwait,cmdread,cmdSetDest,cmdSetCount,cmdSetId,cmdpulse,CmdEnd);
     79type fsm_states is (state0, CmdOn, WaitGrant, ReqPort,addhead,addheadn, state1,state1n, state2,state2n,strecover,stpulse,stpulsen,stateErr, state3);-- definition du type etat pour le codage des etats des fsm
     80type fsm_states2 is(cmdstart,cmdwait,cmdread,cmdSetDest,cmdSetCount,cmdSetId,cmdSetDestn,cmdSetCountn,cmdSetIdn,cmdpulse,cmdpulsen,CmdEnd);
    7781signal pop_state : fsm_states;
    7882signal cmdstate : fsm_states2;
     
    8185signal dat_Err :std_logic:='0'; -- signal une erreur pendant l'exécution
    8286signal wrok,readOk,CmdReadOk : std_logic:='0'; --indique s'il est possible de lire les données
     87--
     88signal rt_err : std_logic;--erreur sur la route
     89signal route :std_logic_vector(9 downto 0);
     90signal dest_port:std_logic_vector(Word/2-1 downto 0);
     91signal nib,cnib:natural range 0 to 4:=1;--indique le sous-octet à traiter
     92signal pulseOn :std_logic:='0';--indique que le prochain état est celui de l'impulsion
    8393-- signaux utilisés dans les fsm
    8494signal request_decoder,req_grant : STD_LOGIC_VECTOR(number_of_ports  downto 1);
     
    8696signal request_latch : STD_LOGIC_VECTOR(4 downto 1):=(others=>'0');   -- pourquoi pas 3 downto 0 ?
    8797signal request_latch_en : std_logic;
    88 signal pipeline_latch : std_logic_vector(Word-1 downto 0);
     98signal pipeline_latch : std_logic_vector(7 downto 0);
    8999signal pipeline_latch_en : std_logic;
    90100signal request_word :  std_logic_vector(5 downto 1);
     
    110120signal fifo_empty_signal : std_logic;
    111121signal fifo_read_signal : std_logic;
    112 signal fifo_out_signal,cmd_data_signal : std_logic_vector(Word-1 downto 0);
    113 signal push_dout : std_logic_vector(Word-1 downto 0);
     122signal fifo_out_signal,fifo_out2,cmd_data_signal : std_logic_vector(Word-1 downto 0);
     123signal push_dout : std_logic_vector(7 downto 0);
    114124signal empty_latch : std_logic ;
    115 signal PORT_ID :std_logic_vector(Word-1 downto 0):=STD_LOGIC_VECTOR(to_unsigned(number_of_ports-1,4))& STD_LOGIC_VECTOR(to_unsigned(port_num-1,4));
     125
    116126-- signaux du compteur de données
    117127signal data_counter : std_logic_vector(Word-1 downto 0);
    118128
     129function count_bits(param:natural) return natural is
     130
     131  variable p : natural range 0 to 127:=0;
     132begin
     133n1: for i in 0 to 127 loop
     134    if param<=2**i then
     135      p:=i;
     136      exit n1;
     137  end if;
     138  end loop n1;
     139  return p;
     140end function;
     141
     142function Get_Port_ID(adr_sub_net:std_logic_vector;adr_mask:natural;n_ports:positive;numport:positive) return std_logic_vector is
     143--cette fonction permet de calculer le port_id ou l'adresse de sous réseau en fonction du masque
     144variable tport_id:std_logic_vector(adr_len-1 downto 0):=(others=>'0'); --
     145variable p : natural range 0 to 9:=0;
     146begin
     147--n1: for i in 0 to 9 loop
     148--    if n_ports-1<2**i then
     149--      p:=i;
     150--      exit n1;
     151--  end if;
     152--  end loop n1;
     153  p:=count_bits(n_ports-1);
     154    tport_id:=adr_sub_net(adr_len-1 downto p) & std_logic_vector(to_unsigned(numport-1,p));
     155    return tport_id;
     156end function;
     157--case n_ports is
     158--when 1|2|3 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     159--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-2):= std_logic_vector(to_unsigned(numport,1));
     160--when 4|5 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     161--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-3):= std_logic_vector(to_unsigned(numport,2));
     162--when 6|9 =>tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1);
     163--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-4):= std_logic_vector(to_unsigned(numport,3));
     164--
     165--when others => --10 to 16
     166--tport_id(adr_len-1 downto adr_len-adr_mask-1):=adr_sub_net(adr_len-1 downto adr_len-adr_mask-1) ;
     167--tport_id(adr_len-adr_mask-2 downto adr_len-adr_mask-5):= std_logic_vector(to_unsigned(numport,4));
     168--
     169--end case;
     170--  return tport_id;
     171--end function;
     172signal PORT_ID :std_logic_vector(adr_len-1 downto 0):=GET_PORT_ID(adr_sub_net,adr_mask,number_of_ports,port_num);
     173constant n_ports_bits:natural:=count_bits(number_of_ports-1);--compte le nombre de bit par port
     174constant pid_bits:natural:=count_bits(tot_ports); --donne le nombre de bits utiles dans une adresse
    119175begin
    120176-- instantiation du FIFO_256
     
    145201--end if;               
    146202end process;                     
    147 rd_en_signal <= fifo_empty_signal;--not(empty_latch) ;
     203rd_en_signal <= not(fifo_empty_signal);--not(empty_latch) ;
    148204request <= request_decoder;
    149205reg_grant:process (request_decoder,grant)
     
    471527                  pipeline_latch <= push_dout;
    472528                  elsif pipeline_latch_en = '1' and cmd_exec='1' then
    473                   pipeline_latch <= cmd_data_signal;
     529                  pipeline_latch <= cmd_data_signal(8*cnib-1 downto 8*(cnib-1));
    474530          end if;
    475531        end if;
    476532end process;
    477533
     534
    478535--latch qui memorise l'adresse de destination du packet
    479536
    480537request_latch_process : process(clk)
     538variable rt:std_logic_vector(9 downto 0):=(others=>'0');--route
     539variable reql:std_logic_vector(4 downto 1):=(others=>'0');--request_latch
     540--variable adr_e,p:natural range 0 to 15:=0;
     541
    481542begin
    482543        if rising_edge(clk) then
    483544                if reset_signal = '1' then
    484                   request_latch <= (others => '0');
     545                  reql := (others => '0');
    485546                  elsif request_latch_en = '1' and cmd_in_en='0' then  --si la lecture de la destination est autorisée
    486                   request_latch <=fifo_out_signal(3 downto 0); --fifo_out_signal(3) & fifo_out_signal(2) & fifo_out_signal(1) & fifo_out_signal(0);
    487                 assert (unsigned(fifo_out_signal(3 downto 0))<number_of_ports)
    488         report "Input_port_module n° " & integer'image(port_num) & " Le port sollicité n'existe pas le NoC va être bloqué !"
    489         severity failure;
    490                   elsif cmd_in_en='1' and request_latch_en='1' then  --c'est une commande le port de dest est le même que le port d'entrée
     547                  rt:=(others=>'0');
     548                 
     549                  if adr_mask=0 then
     550                    reql(n_ports_bits downto 1):=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     551                    request_latch(n_ports_bits downto 1)<=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     552                    report "Route racine:";
     553                  else
     554                  rt(pid_bits-1 downto pid_bits-adr_mask):=fifo_out_signal(pid_bits-1 downto pid_bits-adr_mask);
     555                  if rt=adr_sub_net then
     556                    report "Route trouvé:" & integer'image(to_integer(unsigned(rt))) & " adr_sub_net=" & integer'image(to_integer(unsigned(adr_sub_net))) & " fifo_out_sig:=" & image(fifo_out_signal) & " sur le port " & integer'image(to_integer(unsigned(port_id))+1);
     557                    reql(n_ports_bits downto 1):=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     558                    request_latch(n_ports_bits downto 1)<=fifo_out_signal(pid_bits-adr_mask-1 downto pid_bits-adr_mask-n_ports_bits);
     559                   
     560                  else
     561                         if number_of_ports=Port_num then --si c'est un paquet descendant alors le détruire
     562                             report "Input_port_module n°" & integer'image(to_integer(unsigned(port_id))) & " La route sollicité n'existe pas dans ce sous réseau le paquet va être détruit ! fifo_out_sig:=" & image(fifo_out_signal);
     563                             request_latch<="0000"; --à revoir il faut empêcher le routeur de se bloquer
     564                             rt_err<='1'; --il faut activer la destruction du paquet
     565                         else --faire monter les données vers le ports supérieur
     566                                  request_latch<=std_logic_vector(to_unsigned(number_of_ports-1,4));
     567                                  reql:=std_logic_vector(to_unsigned(number_of_ports-1,4));
     568                                  rt_err<='0';
     569                         end if;
     570                 
     571                  end if;
     572                 end if;
     573                  report  "fifo_out=" & image(fifo_out_signal) & " pid_bits:=" & integer'image(pid_bits) & " adr_mask:=" & integer'image(adr_mask) & " rt:=" & image(rt) & " adr_sub_net=" & image(adr_sub_net) & " reql:=" & image(reql) & " sur le port "  & integer'image(to_integer(unsigned(port_id))+1);
     574         
     575                        assert (unsigned(reql)<number_of_ports-1)
     576                 report "Input_port_module n° " & integer'image(port_num) & " Le port sollicité n'est pas dans la branche !"
     577                 severity warning;
     578                elsif cmd_in_en='1' and request_latch_en='1' then  --c'est une commande le port de dest est le même que le port d'entrée
    491579                   request_latch<=Port_ID(3 downto 0);  --car les ports commencent à 0
    492580                end if;
    493        
    494         end if;
     581                end if;
     582        --request_latch<=reql;
     583        route<=rt; --pour le débogage uniquement pas besoin de conserver ce paramètre en principe
     584
     585
    495586end process;
    496587
     
    515606                                                                        pop_state <= CmdOn;
    516607                                                                end if;
     608                                                                nib<=nbyte;
    517609                        when CmdOn => if empty_latch='1' and cmd_in_en='0' then
    518610                                                                pop_state <= state0;
     
    533625                                                                                --
    534626                                                                                pop_state <= state1;
    535                                                                                
     627                                                                                fifo_out2<=fifo_out_signal;
    536628                                                                --end if;
    537                
     629                        when addhead =>
     630                                                                        pop_state <= addheadn;
     631                        when addheadn =>  pop_state <= state1;
    538632                        when state1 => if port_granted ='1' then --lecture de la longueur des données
    539633                                                                                data_counter <= fifo_out_signal;
     
    543637                                                                                                readOk<='1';
    544638                                                                                end if;
    545                                                                                 pop_state <= state2;
     639                                                                                pop_state <= state1n;
     640                                                                                nib<=nib-1;
    546641                                                                                wrok<='1';
    547642                                                                                else
    548643                                                                                  wrok<='0';
    549644                                                              end if;
    550                                                                                
     645                                                             
     646                        when state1n =>                 if nib=1 then
     647                                                                                                pop_state <= state2;
     648                                                                                                nib<=nbyte;
     649                                                                                else
     650                                                                                        nib<=nib-1;
     651                                                                                end if;
     652                                                                                wrok<='1';
     653                                                                                fifo_out2<=fifo_out_signal;
    551654                        when state2 => if port_granted='1' then
    552655                                       wrok<='1';
    553656                                                                                if fifo_empty_signal ='0'  then
    554                                                                                   if rd_en_signal ='1' and unsigned(data_counter)<= 3 then
     657                                                                                  if rd_en_signal ='1' and unsigned(data_counter)<= 2 then
    555658                                                                                        data_counter <= data_counter - 1;
    556                                                                                         pop_state <= stpulse;
     659                                                                                        pop_state <= state2n;
     660                                                                                        nib<=nib-1;
    557661                                                                                        ReadOk<='1';
     662                                                                                        pulseon<='1';
    558663                                                                                elsif rd_en_signal ='1' then
    559664                                                                                  data_counter <= data_counter - 1;
    560                                                                                   pop_state <= state2;
     665                                                                                  pop_state <= state2n;
     666                                                                                  nib<=nib-1;
    561667                                                                                  ReadOk<='1';
    562668                                                                                else --fifo_empty_signal='1' fin prématurée de la lecture
     
    580686                                                                                data_counter <= data_counter + 1;
    581687                                                                        end if;
     688                                                         
     689                        when state2n => if nib=1 then
     690                                         if pulseon='1' then
     691                                                                                                pop_state <= stpulse;
     692                                                                                                else
     693                                                                                                 pop_state <= state2;
     694                                                                                                end if;
     695                                                                                                nib<=nbyte;
     696                                                                                else
     697                                                                                        nib<=nib-1;
     698                                                                                end if;
     699                                                                                wrok<='1';
     700                                                                                 fifo_out2<=fifo_out_signal;
    582701                        when strecover => if fifo_empty_signal='0' and port_granted='1' then
    583702                                     pop_state<=state2;
     
    591710                                   
    592711                        when stpulse => if port_granted='1' then
    593                                                                                         pop_state <= state3;            --pousser la dernière donnée dehors             
     712                                                                                        pop_state <= state3;--stpulsen;         --pousser la dernière donnée dehors             
     713                                                                                        --nib<=nib-1;
    594714                                                                                        data_counter <= data_counter - 1;
    595715                                                                                        wrok<='1';
    596                                                                         end if;
    597                                          wrok<='0';
     716                                                                                        pulseon<='0';
     717                                                                        else
     718                                                                                        wrok<='0';
     719                                                                        end if; 
     720                                                                 
     721                        when stpulsen =>        wrok<='0';
     722                                                                        if nib=1 then
     723                                                                                                pop_state <= state3;
     724                                                                                                nib<=nbyte;
     725                                                                                else
     726                                                                                        nib<=nib-1;
     727                                                                                end if;
     728                                                                                 fifo_out2<=fifo_out_signal;
    598729                        when state3 =>  wrok<='0';
    599730                                                                                data_counter <= data_counter - 1;
     
    611742
    612743-- actions associées à chaque etat de la fsm de mealy
    613 pop_fsm_action : process(pop_state, fifo_out_signal,empty_latch, rd_en_signal,readok, port_granted )
     744pop_fsm_action : process(pop_state, fifo_out_signal,fifo_out2,empty_latch, rd_en_signal,readok, port_granted,nib )
    614745  begin   
    615746-- code fonctionnel     
     
    623754                                                                dat_exec<='0';
    624755                                                                dat_Err<='0';
    625                                                                 push_dout<=fifo_out_signal;
     756                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    626757                                                               
    627758                when CmdOn =>           dat_request_latch_en <= '0'; 
     
    633764                                                                dat_exec<='0';
    634765                                                                dat_Err<='0';
    635                                                                 push_dout<=fifo_out_signal;
     766                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    636767                when WaitGrant =>       
    637768                                                                dat_request_latch_en <='1'; --autoriser l'identification du port de destination
     
    643774                                                                dat_exec<='1';
    644775                                                                dat_Err<='0';
    645                                                                 push_dout<=fifo_out_signal(7 downto 4) & PORT_ID(3 downto 0);
     776                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
     777                                                                --push_dout<=fifo_out_signal(Word-1 downto Word/2)  & PORT_ID(Word/2-1 downto 0);
    646778                when ReqPort =>
    647779                                                                dat_request_latch_en <='1'; --autoriser l'identification du port de destination
    648                                                                 dat_pipeline_latch_en <= '1'; --pour le transmettre à travers le réseau
     780                                                                dat_pipeline_latch_en <= '0'; --pour le transmettre à travers le réseau
    649781                                                                dat_fifo_read_signal <= '1';
    650782                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     
    653785                                                                dat_exec<='1';
    654786                                                                dat_Err<='0';
    655                                                                 push_dout<=fifo_out_signal(7 downto 4) & PORT_ID(3 downto 0);
     787                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
     788                                                                --push_dout<=fifo_out_signal(Word-1 downto Word/2) & PORT_ID(Word/2-1 downto 0);
     789                when addhead =>
     790                                                                dat_request_latch_en <='0'; --autoriser l'identification du port de destination
     791                                                                dat_pipeline_latch_en <= '1'; --pour le transmettre à travers le réseau
     792                                                                dat_fifo_read_signal <= '0';
     793                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     794                                                                dat_data_out_pulse <= '0';     --transmettre le signal pour le dernier mot
     795                                                                dat_priority_rotation <= '0';
     796                                                                dat_exec<='1';
     797                                                                dat_Err<='0';
     798                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    656799                                                       
    657800                when state1 =>    dat_request_latch_en <= '0';
    658801                                                                dat_pipeline_latch_en <= rd_en_signal and port_granted;   
    659                                                                 dat_fifo_read_signal <= rd_en_signal and port_granted;
     802                                                                dat_fifo_read_signal <= '0';--rd_en_signal and port_granted;
     803                                                                dat_request_decoder_en <= '1';
     804                                                                dat_data_out_pulse <= '0';--port_granted;
     805                                                                dat_priority_rotation <= '0';
     806                                                                dat_exec<='1';
     807                                                                dat_Err<='0';
     808                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     809                when state1n =>    dat_request_latch_en <= '0';
     810                                                                dat_pipeline_latch_en <= '1'; -- toujours actif pour cet octet
     811                                                                dat_fifo_read_signal <= '0';
    660812                                                                dat_request_decoder_en <= '1';
    661813                                                                dat_data_out_pulse <= port_granted;
     
    663815                                                                dat_exec<='1';
    664816                                                                dat_Err<='0';
    665                                                                 push_dout<=fifo_out_signal;
     817                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
    666818                                                               
    667819          when state2 |strecover =>    dat_request_latch_en <= '0';
     
    669821                                                                dat_fifo_read_signal <= port_granted and readok;   
    670822                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
    671                                                                 dat_data_out_pulse <= port_granted and wrOk and not(fifo_empty_signal);
     823                                                                dat_data_out_pulse <= port_granted and wrOk ;--and not(fifo_empty_signal);
    672824                                                                dat_priority_rotation <= '0';
    673825                                                                dat_exec<='1';
    674826                                                                dat_Err<='0';
    675                                                                 push_dout<=fifo_out_signal;
    676                                                                
    677           when stpulse =>    dat_request_latch_en <= '0'; --pousser la dernière donnée
    678                                                                 dat_pipeline_latch_en <= '0';  --autoriser la lecture du fifo en sortie
     827                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     828                 
     829                 when state2n  =>    dat_request_latch_en <= '0';
     830                                                                dat_pipeline_latch_en <= '1';  --autoriser la lecture du fifo en sortie
     831                                                                dat_fifo_read_signal <= '0';   
     832                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     833                                                                dat_data_out_pulse <= port_granted and wrOk ;--and not(fifo_empty_signal);
     834                                                                dat_priority_rotation <= '0';
     835                                                                dat_exec<='1';
     836                                                                dat_Err<='0';
     837                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));                                         
     838          when stpulse|stpulsen =>    dat_request_latch_en <= '0'; --pousser la dernière donnée
     839                                                                dat_pipeline_latch_en <= wrok;  --autoriser la lecture du fifo en sortie
    679840                                                                dat_fifo_read_signal <='0';   
    680841                                                                dat_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     
    683844                                                                dat_exec<='1';
    684845                                                                dat_Err<='0';
    685                                                                 push_dout<=fifo_out_signal;
     846                                                                push_dout<=fifo_out2(8*nib-1 downto 8*(nib-1));
     847       
    686848                                                               
    687849                when state3 =>    dat_request_latch_en <= '0';
     
    693855                                                                dat_exec<='0';
    694856                                                                dat_Err<='0';
    695                                                                 push_dout<=fifo_out_signal;
     857                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    696858                when stateErr =>    dat_request_latch_en <= '0';
    697859                                                                dat_pipeline_latch_en <= '0';
     
    702864                                                                dat_exec<='1';
    703865                                                                dat_Err<='1';
    704                                                                 push_dout<=fifo_out_signal;
     866                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    705867                when others =>    dat_request_latch_en <= '0';
    706868                                                                dat_pipeline_latch_en <= '0';
     
    711873                                                                dat_exec<='0';
    712874                                                                dat_Err<='0';
    713                                                                 push_dout<=fifo_out_signal;
     875                                                                push_dout<=fifo_out_signal(8*nib-1 downto 8*(nib-1));
    714876                                                                               
    715877                end case;
    716878 end process;
    717879 -- traitement des commandes reçues par le switch
    718 fsm_cmd:process(clk,cmd_in_en)
     880fsm_cmd:process(clk)
    719881variable timeout : natural:=0;
    720882variable cmdcode : natural range 0 to 255;
     
    731893                                end if;
    732894                                cmdReadOk<='0';
     895                                cnib<=nbyte;
    733896                when cmdwait => if port_granted='1' then  -- demande du port de sortie
    734897                                                               
     
    754917--                              end if;
    755918                when cmdsetdest =>
     919                               
    756920                                if port_granted='1' then
     921                                        cmdstate<=cmdsetdestn;
     922                                        cnib<=cnib-1;
     923                                end if;
     924                                cmdReadOk<='0';
     925                when cmdsetdestn =>     if cnib=1 then
     926                                                                                                cmdstate<=cmdsetcount;
     927                                                                                                cnib<=nbyte;
     928                                                                                else
     929                                                                                        cnib<=cnib-1;
     930                                                                                end if;
     931                when cmdsetcount =>
     932                                if port_granted='1' then
     933                                        cmdstate<=cmdsetcountn;
     934                                        cnib<=cnib-1;
     935                                else
    757936                                        cmdstate<=cmdsetcount;
    758937                                end if;
    759938                                cmdReadOk<='0';
    760                 when cmdsetcount =>
    761                                 if port_granted='1' then
    762                                         cmdstate<=cmdsetID;
    763                                 else
    764                                         cmdstate<=cmdsetdest;
    765                                 end if;
    766                                 cmdReadOk<='0';
     939                               
     940                when cmdsetcountn =>    if cnib=1 then
     941                                                                                                cmdstate<=cmdsetID;
     942                                                                                                cnib<=nbyte;
     943                                                                                else
     944                                                                                        cnib<=cnib-1;
     945                                                                                end if;
    767946                when cmdsetID=>
    768947                        if port_granted='1' then
    769                         cmdstate <=cmdpulse;
     948                        cmdstate <=cmdsetIDn;
     949                        cnib<=cnib-1;
    770950                        end if;
    771951                        cmdReadOk<='0';
     952                when cmdsetIDn =>       if cnib=1 then
     953                                                                                                cmdstate<=cmdpulse;
     954                                                                                                cnib<=nbyte;
     955                                                                                else
     956                                                                                        cnib<=cnib-1;
     957                                                                                end if;
    772958                when cmdpulse =>
    773959                        if port_granted='1' then
    774                         cmdstate <=cmdEnd;
     960                        cmdstate <=cmdpulsen;
     961                        cnib<=cnib-1;
    775962                        end if;
    776963                        cmdReadOk<='0';
     964                when cmdpulsen => if cnib=1 then
     965                                                                                                cmdstate<=cmdEnd;
     966                                                                                                cnib<=nbyte;
     967                                                                                else
     968                                                                                        cnib<=cnib-1;
     969                                                                                end if;
    777970                when cmdend  =>
    778971                        if cmd_in_en='0' then --éviter l'exécution en boucle
     
    8081001                                                cmd_data_out_pulse <= '0';
    8091002                                                cmd_priority_rotation <= '1';                    --sans priorité
    810                                                 cmd_data_signal<=Port_ID; 
     1003                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID; 
    8111004                when cmdwait =>
    8121005                                                cmd_exec<='1';
     
    8161009                                                cmd_priority_rotation <= '0';    --avec priorité
    8171010                                                cmd_request_decoder_en <= '1';   --demande d'émission
    818                                                 cmd_data_signal<=Port_ID;
     1011                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
    8191012                                                cmd_data_out_pulse <= '0';                                     
    8201013        when cmdsetdest  =>
     
    8271020                                                cmd_data_out_pulse <= '0';
    8281021                                                cmd_priority_rotation <= '0';
    829                                                 cmd_data_signal<=Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
    830         when cmdsetcount =>
     1022                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1023                when cmdsetdestn  =>
     1024                                                --cmd_request_decoder_en <= '1';
     1025                                                cmd_exec<='1';
     1026                                                cmd_pipeline_latch_en <='1'; --empiler dans le tampon de sortie la donnée
     1027                                                cmd_fifo_read_signal <='0';
     1028                                                cmd_request_latch_en<='0';
     1029                                                cmd_request_decoder_en <= '1';          --autoriser le decodeur à activer le dernier bit de request
     1030                                                cmd_data_out_pulse <= '1';
     1031                                                cmd_priority_rotation <= '0';
     1032                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1033
     1034        when cmdsetcount|cmdsetcountn=>
    8311035                                                                 
    8321036                                                cmd_exec<='1';   
     
    8371041                                                cmd_data_out_pulse <= port_granted;
    8381042                                                cmd_priority_rotation <= '0';
    839                                                 cmd_data_signal<=STD_LOGIC_VECTOR(to_unsigned(3,8));                                   
    840         when cmdSetId =>
     1043                                                cmd_data_signal<=STD_LOGIC_VECTOR(to_unsigned(3,Word));                                 
     1044        when cmdSetId| cmdSetIdn=>
    8411045                                                --cmd_request_decoder_en <= '1';
    8421046                                                cmd_exec<='1';
     
    8471051                                                cmd_data_out_pulse <= port_granted;
    8481052                                                cmd_priority_rotation <= '0';
    849                                                 cmd_data_signal<=Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
     1053                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;    -- le numéro du port et le nombre total des ports est envoyé
    8501054                                                                                       
    8511055        when cmdpulse =>        cmd_exec<='1';
    852                                                 cmd_pipeline_latch_en <='0';
     1056                                                cmd_pipeline_latch_en <='1';
    8531057                                                cmd_fifo_read_signal <='0';
    8541058                                                cmd_request_latch_en<='0';
     
    8561060                                                cmd_data_out_pulse <= '1';--port_granted;     --s'assurer que la dernière donnée est bien lue
    8571061                                                cmd_priority_rotation <= '0';
     1062                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
     1063                                               
     1064        when cmdpulsen  =>      cmd_exec<='1';
     1065                                                cmd_pipeline_latch_en <='0';
     1066                                                cmd_fifo_read_signal <='0';
     1067                                                cmd_request_latch_en<='0';
     1068                                                cmd_request_decoder_en <= '1';          --autoriser le decodeur activer le dernier bit de request
     1069                                                cmd_data_out_pulse <= '0';--port_granted;     --s'assurer que la dernière donnée est bien lue
     1070                                                cmd_priority_rotation <= '0';
    8581071                                                                --cmd_data_signal<=Port_ID ;
    859                                                 cmd_data_signal<=Port_ID;
     1072                                                cmd_data_signal<=std_logic_vector(to_unsigned(tot_ports,Word-adr_len)) & Port_ID;
    8601073                                               
    8611074        when cmdend =>
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/OUTPUT_PORT_MODULE.vhd

    r101 r139  
    1919-- Additional Comments: Ajout d'un délai pour ignorer les paquets qui sont là depuis
    2020-- longtemps
    21 --
     21--Revision: Mai-02-2014
     22-- Revision 0.01 - File
     23-- Additional Comments: Passage à la version 16 bits
     24-- longtemps
    2225----------------------------------------------------------------------------------
    2326library IEEE;
     
    3437
    3538entity OUTPUT_PORT_MODULE is
    36     Port ( data_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
     39        generic(        nbyte : positive:=2); -- le nombre de Byte dans chaque mot du port par défaut 2
     40 
     41    Port ( data_in : in  STD_LOGIC_VECTOR (7 downto 0);
    3742           reset : in  STD_LOGIC;
    3843           clk : in  STD_LOGIC;
     
    6065type typ_outfsm is (Idle,waiting,dropping,reading);
    6166type typ_receiv is (r_wait,r_head,r_len,r_glen,r_data,r_pulse,r_end);
    62 
     67type typ_store is (idle,accu,transf);
    6368signal EtRec : typ_receiv;
     69signal Et_store,next_et_store: typ_store;
    6470signal Et_out_fsm : typ_outfsm;
    65 signal fifo_empty : std_logic
     71signal fifo_empty ,fifo_wr: std_logic:='0';     
    6672signal sw : std_logic:='0'; -- permet de positionner le mux sur les signaux internes
    6773signal tlimit : natural:=0; --permet de compter les impulsions de temps
    6874signal n : natural:=0; --utiliser pour la mae du tampon de sortie
     75signal nib : natural:=nbyte; --nombre de byte à transférer
    6976signal rcv_start :  std_logic; --début de la réception
    7077signal  rcv_ack : std_logic;   -- acquittement de la réception
    7178signal  rcv_comp :  std_logic; -- fin de la réception
    7279signal   spop,pop,rd_en,dat_avail :  std_logic:='0';
     80signal fifo_in :std_logic_vector(Word-1 downto 0); --le tampon de données d'entrée
    7381signal  mem,fifo_out :  std_logic_vector(Word-1 downto 0); --variable tampon sans intérêt réel
    7482begin
     
    7785                port map (
    7886                        clk => clk,
    79                         din => data_in,
     87                        din => fifo_in,
    8088                        rd_en => rd_en,
    8189                        srst => reset,
    82                         wr_en => wr_en,
     90                        wr_en => fifo_wr,
    8391                        dout => fifo_out,
    8492                        empty => fifo_empty,
    8593                        full => fifo_full);
    86                        
     94--sync_store_state:process (clk)
     95--begin
     96--if rising_edge(clk) then
     97--              if reset='1' then
     98--                      et_store<=idle;
     99--              else
     100--                      et_store<=next_et_store;
     101--              end if;
     102--
     103--end if;
     104--end process sync_store_state;                 
     105next_store_state:process (clk)
     106begin
     107if rising_edge(clk) then
     108case et_store is
     109when idle =>
     110if wr_en='1' then
     111et_store<=transf;
     112nib<=nib-1;
     113else
     114 nib<=nbyte;
     115end if;
     116
     117
     118when accu =>
     119               
     120                if nib=1 then
     121                  et_store<=transf;
     122                 
     123                  nib<=nbyte;
     124                else
     125                 nib<=nib-1;
     126                end if;
     127
     128when transf =>
     129        --next_et_store<=idle; 
     130        if wr_en='1' then
     131          if nib=1 then
     132            nib<=nbyte;
     133           else
     134         nib<=nib-1;
     135          end if;
     136         et_store<=accu;
     137        else
     138         nib<=nbyte;
     139         et_store<=idle;
     140        end if;
     141end case ;
     142
     143end if;
     144end process next_store_state;
     145
     146val_store_state:process (et_store,nib,data_in,wr_en)
     147begin
     148--case et_store is
     149--when transf =>fifo_wr<='1';
     150--when others => fifo_wr<='0';
     151--end case;
     152if nib=1 then
     153  fifo_wr<='1';
     154else
     155  fifo_wr<='0';
     156end if;
     157fifo_in(8*nib-1 downto 8*(nib-1))<=data_in;
     158end process val_store_state;
     159
    87160
    88161outport_proc : process(clk,reset,fifo_empty)
    89162begin
     163
    90164if rising_edge(clk) then
    91165if reset='1' then
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/SCHEDULER3_3.VHD

    r101 r139  
    3030--use UNISIM.VComponents.all;
    3131entity Scheduler3_3 is
    32     Port ( Request : in  STD_LOGIC_VECTOR (9 downto 1);
     32    Port ( Req : in  STD_LOGIC_VECTOR (9 downto 1);
    3333                   Fifo_full : in STD_LOGIC_VECTOR (3 downto 1);
    3434           clk : in  STD_LOGIC;
     
    3939
    4040architecture Behavioral of Scheduler3_3 is
     41constant NB_IO:positive:=3;
    4142--Declaration du types
    4243--tableau de signaux de connexion des cellules arbitres
     
    4647  PORT (P, Fifo_full,Request, West,North : in  STD_LOGIC;
    4748        Grant,East,South : out  STD_LOGIC );
    48 End Component;--Signaux de connexion des cellues
     49End Component;
     50--
     51component Def_Request is
     52generic (NB_IO :positive:=3);
     53    Port ( Req : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     54           clk : in  STD_LOGIC;
     55           reset : in  STD_LOGIC;
     56                          fifo_full : in STD_LOGIC_VECTOR (NB_IO downto 1);
     57           priority_rotation : in  STD_LOGIC_VECTOR (NB_IO downto 1);
     58           grant : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     59           request : out  STD_LOGIC_VECTOR (NB_IO**2 downto 1));
     60end component;
     61constant NB_IO2 :positive:=NB_IO**2; -- le carré du nombre de ports d'E/S
     62--Signaux de connexion des cellues
    4963SIGNAL south_2_north :  C_Bar_Signal_Array; -- connexion south north
    5064SIGNAL east_2_west   :  C_Bar_Signal_Array; -- connexion east west
    5165SIGNAL Signal_mask      : C_Bar_Signal_Array;-- connexion des masques de priorité
    5266SIGNAL Signal_grant     : C_Bar_Signal_Array;-- connexion des signaux de validation
    53 SIGNAL Signal_priority  : STD_LOGIC_VECTOR (5 DOWNTO 1);--signal pour la connection des vecteur de priorité
     67SIGNAL Signal_priority  : STD_LOGIC_VECTOR (2*NB_IO-1 DOWNTO 1);--signal pour la connection des vecteurs de priorité
    5468SIGNAL High         : std_logic;--niveau pour les cellules des extremités nord et ouest
    55  signal grant_latch : std_logic_vector(9 downto 1);
     69
    5670 signal priority_rotation_en : std_logic;
    57  signal Grant,req_grant :  std_logic_vector(9 downto 1);
     71
     72  signal Grant,request :  std_logic_vector(NB_IO2 downto 1):=(others=>'0');
    5873 begin
    5974
    6075--validation de la rotation de priorité lorsque aucun port n'emet
    61  req_grant<=(request and grant_latch);
    62  priority_rotation_en <= '1' when unsigned(priority_rotation) = 7 else  '0';
     76
     77 --priority_rotation_en <= '1' when unsigned(priority_rotation) = 7 else        '0';
     78 priority_rotation_en <= '1' when   unsigned(priority_rotation) = 2**NB_IO-1 else       '0';
    6379--latch servant qui memorise le signal grant pendant a transmission
    64 grant_latch_process : process(clk)
    65  begin
    66   if rising_edge(clk) then
    67    if reset = '1' then
    68                 grant_latch <= (others => '0');
    69          elsif priority_rotation_en = '1' then
    70            grant_latch <= Grant;
    71    end if;
    72    end if;
    73  end process;
    74  port_grant <= grant_latch;
     80--cette instance permet de déterminer le vecteur request
     81--en fonction de l'état fifo_full et de la requête initiale
     82inst_defreq: def_request generic map (NB_IO)
     83port map (clk=>clk,
     84reset=>reset,
     85req=>req,
     86fifo_full=>fifo_full,
     87priority_rotation=>priority_rotation,
     88grant=>grant,
     89request=>request
     90);
     91 port_grant <= grant;
    7592 Grant(1)  <= Signal_grant(1)(1) or Signal_grant(4)(1); --  Grant(1,1)
    7693Grant(2)  <= Signal_grant(2)(2) or Signal_grant(5)(2); --  Grant(1,2)
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/SCHEDULER5_5.VHD

    r101 r139  
    3030--use UNISIM.VComponents.all;
    3131entity Scheduler5_5 is
    32     Port ( Request : in  STD_LOGIC_VECTOR (25 downto 1);
     32    Port ( Req : in  STD_LOGIC_VECTOR (25 downto 1);
    3333                   Fifo_full : in STD_LOGIC_VECTOR (5 downto 1);
    3434           clk : in  STD_LOGIC;
     
    4141--Declaration du types
    4242--tableau de signaux de connexion des cellules arbitres
     43constant NB_IO:positive:=5;
    4344TYPE C_Bar_Signal_Array IS ARRAY(9 downto 1) of STD_LOGIC_VECTOR(5 downto 1);
    4445-- declaration du composant cellule d'arbitrage
     
    4748        Grant,East,South : out  STD_LOGIC );
    4849End Component;--Signaux de connexion des cellues
     50component Def_Request is
     51generic (NB_IO :positive:=5);
     52    Port ( Req : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     53           clk : in  STD_LOGIC;
     54           reset : in  STD_LOGIC;
     55                          fifo_full : in STD_LOGIC_VECTOR (NB_IO downto 1);
     56           priority_rotation : in  STD_LOGIC_VECTOR (NB_IO downto 1);
     57           grant : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     58           request : out  STD_LOGIC_VECTOR (NB_IO**2 downto 1));
     59end component;
     60constant NB_IO2 :positive:=NB_IO**2; -- le carré du nombre de ports d'E/S
    4961SIGNAL south_2_north :  C_Bar_Signal_Array; -- connexion south north
    5062SIGNAL east_2_west   :  C_Bar_Signal_Array; -- connexion east west
     
    5365SIGNAL Signal_priority  : STD_LOGIC_VECTOR (9 DOWNTO 1);--signal pour la connection des vecteur de priorité
    5466SIGNAL High         : std_logic;--niveau pour les cellules des extremités nord et ouest
    55  signal grant_latch : std_logic_vector(25 downto 1);
     67 --signal grant_latch : std_logic_vector(25 downto 1);
    5668 signal priority_rotation_en : std_logic;
    57  signal Grant ,req_grant:  std_logic_vector(25 downto 1);
     69 --signal Grant ,req_grant:  std_logic_vector(25 downto 1);
     70 signal Grant,request :  std_logic_vector(NB_IO2 downto 1):=(others=>'0');
    5871 begin
    5972
    6073--validation de la rotation de priorité lorsque aucun port n'emet
    61   req_grant<=(request and grant_latch);
    62  priority_rotation_en <= '1' when   unsigned(req_grant) = 0 or unsigned(priority_rotation) = 31 else    '0';
     74 -- req_grant<=(request and grant_latch);
     75  priority_rotation_en <= '1' when   unsigned(priority_rotation) = 2**NB_IO-1 else      '0';
     76 --priority_rotation_en <= '1' when   unsigned(req_grant) = 0 or unsigned(priority_rotation) = 31 else  '0';
    6377--latch servant qui memorise le signal grant pendant a transmission
    64 grant_latch_process : process(clk)
    65  begin
    66   if rising_edge(clk) then
    67    if reset = '1' then
    68                 grant_latch <= (others => '0');
    69          elsif priority_rotation_en = '1' then
    70            grant_latch <= Grant;
    71    end if;
    72    end if;
    73  end process;
    74  port_grant <= grant_latch;
     78--cette instance permet de déterminer le vecteur request
     79--en fonction de l'état fifo_full et de la requête initiale
     80inst_defreq: def_request generic map (NB_IO)
     81port map (clk=>clk,
     82reset=>reset,
     83req=>req,
     84fifo_full=>fifo_full,
     85priority_rotation=>priority_rotation,
     86grant=>grant,
     87request=>request
     88);
     89
     90 port_grant <=  grant;
     91 --port_grant <= grant_latch;
    7592 Grant(1)  <= Signal_grant(1)(1) or Signal_grant(6)(1); --  Grant(1,1)
    7693Grant(2)  <= Signal_grant(2)(2) or Signal_grant(7)(2); --  Grant(1,2)
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/SCHEDULER9_9.VHD

    r101 r139  
    3030--use UNISIM.VComponents.all;
    3131entity Scheduler9_9 is
    32     Port ( Request : in  STD_LOGIC_VECTOR (81 downto 1);
     32    Port ( Req : in  STD_LOGIC_VECTOR (81 downto 1);
    3333                   Fifo_full : in STD_LOGIC_VECTOR (9 downto 1);
    3434           clk : in  STD_LOGIC;
     
    3939
    4040architecture Behavioral of Scheduler9_9 is
     41 --déclaration de constantes
     42Constant NB_IO : positive:=9; --le nombre de ports d'entrée/sortie
    4143--Declaration du types
    4244--tableau de signaux de connexion des cellules arbitres
    43 TYPE C_Bar_Signal_Array IS ARRAY(17 downto 1) of STD_LOGIC_VECTOR(9 downto 1);
     45TYPE C_Bar_Signal_Array IS ARRAY(NB_IO*2-1 downto 1) of STD_LOGIC_VECTOR(NB_IO downto 1);
    4446-- declaration du composant cellule d'arbitrage
    4547Component Arbiter
    4648  PORT (P, Fifo_full,Request, West,North : in  STD_LOGIC;
    4749        Grant,East,South : out  STD_LOGIC );
    48 End Component;--Signaux de connexion des cellues
     50End Component;
     51component Def_Request is
     52generic (NB_IO :positive:=9);
     53    Port ( Req : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     54           clk : in  STD_LOGIC;
     55           reset : in  STD_LOGIC;
     56                          fifo_full : in STD_LOGIC_VECTOR (NB_IO downto 1);
     57           priority_rotation : in  STD_LOGIC_VECTOR (NB_IO downto 1);
     58           grant : in  STD_LOGIC_VECTOR (NB_IO**2 downto 1);
     59           request : out  STD_LOGIC_VECTOR (NB_IO**2 downto 1));
     60end component;
     61constant NB_IO2 :positive:=NB_IO**2; -- le carré du nombre de ports d'E/S
     62
     63--Signaux de connexion des cellues
    4964SIGNAL south_2_north :  C_Bar_Signal_Array; -- connexion south north
    5065SIGNAL east_2_west   :  C_Bar_Signal_Array; -- connexion east west
     
    5368SIGNAL Signal_priority  : STD_LOGIC_VECTOR (17 DOWNTO 1);--signal pour la connection des vecteur de priorité
    5469SIGNAL High         : std_logic;--niveau pour les cellules des extremités nord et ouest
    55  signal grant_latch : std_logic_vector(81 downto 1);
     70
    5671 signal priority_rotation_en : std_logic;
    57  signal Grant :  std_logic_vector(81 downto 1);
     72signal Grant,request :  std_logic_vector(NB_IO2 downto 1):=(others=>'0');
    5873 begin
    5974
    6075--validation de la rotation de priorité lorsque aucun port n'emet
    61  priority_rotation_en <= '1' when unsigned(priority_rotation) = 511 else        '0';
    62 --latch servant qui memorise le signal grant pendant a transmission
    63 grant_latch_process : process(clk)
    64  begin
    65   if rising_edge(clk) then
    66    if reset = '1' then
    67                 grant_latch <= (others => '0');
    68          elsif priority_rotation_en = '1' then
    69            grant_latch <= Grant;
    70    end if;
    71    end if;
    72  end process;
    73  port_grant <= Grant and grant_latch;
     76-- priority_rotation_en <= '1' when unsigned(priority_rotation) = 511 else      '0';tation) = 511 else  '0';
     77 priority_rotation_en <= '1' when   unsigned(priority_rotation) = 2**NB_IO-1 else       '0';
     78--evaluation du signal request
     79inst_defreq: def_request generic map (NB_IO=>9)
     80port map (clk=>clk,
     81reset=>reset,
     82req=>req,
     83fifo_full=>fifo_full,
     84priority_rotation=>priority_rotation,
     85grant=>grant,
     86request=>request
     87);
     88
     89 port_grant <=  grant;
    7490 Grant(1)  <= Signal_grant(1)(1) or Signal_grant(10)(1); --  Grant(1,1)
    7591Grant(2)  <= Signal_grant(2)(2) or Signal_grant(11)(2); --  Grant(1,2)
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/SWITCH_GEN.vhd

    r101 r139  
    1414-- nécessaire à l'implémentation  du switch de la dimension voulue
    1515-- Dependencies:
    16 --
     16-- Modifié le 28/04/1975
    1717-- Revision:
    1818-- Revision 0.01 - File Created
     
    3232entity SWITCH_GEN is
    3333 --type portio is array(positive range) of std_logic_vector (7 downto 0);   
    34  generic(number_of_ports : positive := 8);
     34 generic(n_ports : positive := 8;-- :nombre de ports E/S du NoC 2 à 16
     35        tot_ports: positive :=16; -- nombre total de ports
     36         NET_ADR :std_logic_vector(9 downto 0):="0000000000";
     37         NET_MASK:natural:=0); -- Nombre de bits à un du masque en partant de la gauche
    3538     port(
    3639                -- ports d'entree
    37            Port_in : in typ_portIO(1 to number_of_ports) ;
     40           Port_in : in typ_portIO(1 to n_ports) ;
    3841
    3942                         
    4043                          -- port de sortie
    41                           Port_out : out  typ_portIO(1 to number_of_ports);
     44                          Port_out : out  typ_portIO(1 to n_ports);
    4245
    4346                          -- signaux de controle
    44                           data_in_en : in std_logic_vector(number_of_ports downto 1);
    45                           cmd_in_en :  in std_logic_vector(number_of_ports downto 1);
    46                           data_out_en : in std_logic_vector(number_of_ports downto 1);
    47                           fifo_in_full : out std_logic_vector(number_of_ports downto 1);
    48                           fifo_in_empty : out std_logic_vector(number_of_ports downto 1);
    49                           data_available : out std_logic_vector(number_of_ports downto 1);
     47                          data_in_en : in std_logic_vector(n_ports downto 1);
     48                          cmd_in_en :  in std_logic_vector(n_ports downto 1);
     49                          data_out_en : in std_logic_vector(n_ports downto 1);
     50                          fifo_in_full : out std_logic_vector(n_ports downto 1);
     51                          fifo_in_empty : out std_logic_vector(n_ports downto 1);
     52                          data_available : out std_logic_vector(n_ports downto 1);
    5053                          clk       : in   STD_LOGIC;
    5154                          reset     : in   STD_LOGIC);
     
    5861COMPONENT INPUT_PORT_MODULE
    5962  generic(number_of_ports : positive := 8;
    60                         Port_num: natural);
    61     Port ( data_in : in  STD_LOGIC_VECTOR (7 downto 0);
     63                        Port_num: natural;
     64                        adr_mask : natural := NET_MASK;--le nombre de '1' en partant le la gauche de l'adresse
     65                        adr_len: positive:=NET_ADR'length; --la taille en bit de l'adresse 10 bits --> 1024 hotes
     66                        tot_ports: positive :=tot_ports; --Nomnre de ports total du réseau
     67                        adr_sub_net : std_logic_vector(9 downto 0) := NET_ADR;--l'adresse du sous-réseau
     68      nbyte : positive:=2 -- le nombre de Byte dans chaque mot du port par défaut 2
     69                       
     70                        );
     71    Port ( data_in : in  STD_LOGIC_VECTOR (Word-1 downto 0);
    6272           data_in_en : in  STD_LOGIC;
    6373                          cmd_in_en : in  STD_LOGIC;
    6474           reset : in  STD_LOGIC;
    6575                          clk   : in  STD_LOGIC;
    66                           request : out  STD_LOGIC_VECTOR (number_of_ports downto 1);
    67            grant : in  STD_LOGIC_VECTOR (number_of_ports  downto 1);                     
     76                          request : out  STD_LOGIC_VECTOR (n_ports downto 1);
     77           grant : in  STD_LOGIC_VECTOR (n_ports  downto 1);                     
    6878           fifo_full : out  STD_LOGIC;
    6979                          fifo_empty : out  STD_LOGIC;
    7080                          priority_rotation : out std_logic;
    71            data_out : out  STD_LOGIC_VECTOR (7 downto 0);
     81           data_out : out  STD_LOGIC_VECTOR (7 downto 0); -- le crossbar est fixé à 8 bits
    7282                          data_out_pulse : out std_logic);
    7383END COMPONENT;
     
    7787COMPONENT OUTPUT_PORT_MODULE
    7888        PORT(
    79                 data_in : IN std_logic_vector(7 downto 0);
     89                data_in : IN std_logic_vector(7 downto 0); -- le crossbar est fixé à 8 bits
    8090                reset : IN std_logic;
    8191                clk : IN std_logic;
    8292                wr_en : IN std_logic;
    8393                rd_out_en : IN std_logic;         
    84                 data_out : OUT std_logic_vector(7 downto 0);
     94                data_out : OUT std_logic_vector(Word-1 downto 0);
    8595                fifo_full : OUT std_logic;
    8696                data_avalaible : OUT std_logic
     
    185195--declaration des signaux de connection entre les modules du switch
    186196
    187 Signal Request_signal : STD_LOGIC_VECTOR(number_of_ports*number_of_ports downto 1);
    188 Signal grant_signal : STD_LOGIC_VECTOR(number_of_ports*number_of_ports downto 1);
    189 Signal priority_rotation_signal : STD_LOGIC_VECTOR(number_of_ports downto 1);
    190 signal fifo_out_full_signal : std_logic_vector(number_of_ports downto 1);
    191 
    192 signal crossbar_in_port :  Typ_PortIO(1 to number_of_ports);
    193 
    194 
    195 
    196 signal crossbar_out_port  :  Typ_PortIO(1 to number_of_ports);
    197 
    198 
    199 signal crossbar_in_pulse  : std_logic_vector(number_of_ports downto 1);
    200 
    201 
    202 signal crossbar_out_pulse  : std_logic_vector(number_of_ports downto 1);
     197Signal Request_signal : STD_LOGIC_VECTOR(n_ports*n_ports downto 1);
     198Signal grant_signal : STD_LOGIC_VECTOR(n_ports*n_ports downto 1);
     199Signal priority_rotation_signal : STD_LOGIC_VECTOR(n_ports downto 1);
     200signal fifo_out_full_signal : std_logic_vector(n_ports downto 1);
     201
     202signal crossbar_in_port :  Typ_PortIO8(1 to n_ports);
     203
     204
     205
     206signal crossbar_out_port  :  Typ_PortIO8(1 to n_ports);
     207
     208
     209signal crossbar_in_pulse  : std_logic_vector(n_ports downto 1);
     210
     211
     212signal crossbar_out_pulse  : std_logic_vector(n_ports downto 1);
    203213
    204214
     
    208218-- le circuit genere depend du parametre generique nombre de ports
    209219-- switch 2 ports
    210 switch2x2 : if number_of_ports = 2 generate
     220switch2x2 : if n_ports = 2 generate
    211221
    212222PORT1_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    213 GENERIC MAP(number_of_ports =>2,Port_num=>1)
     223GENERIC MAP(number_of_ports =>2,Port_num=>1,
     224adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     225                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     226                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     227                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     228      nbyte =>WORD/8)
    214229PORT MAP(
    215230   data_in => Port_in(1),
     
    230245
    231246PORT2_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    232 GENERIC MAP(number_of_ports =>2,Port_num=>2)
     247GENERIC MAP(number_of_ports =>2,Port_num=>2,
     248adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     249                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     250                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     251                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     252      nbyte =>WORD/8)
    233253PORT MAP(
    234254   data_in => Port_in(2),
     
    252272
    253273-- switch 3 ports
    254 switch3x3 : if number_of_ports = 3 generate
     274switch3x3 : if n_ports = 3 generate
    255275
    256276PORT1_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    257 GENERIC MAP(number_of_ports =>3,Port_num=>1)
     277GENERIC MAP(number_of_ports =>3,Port_num=>1,
     278adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     279                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     280                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     281                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     282      nbyte =>WORD/8)
    258283PORT MAP(
    259284   data_in => Port_in(1),
     
    276301
    277302PORT2_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    278 GENERIC MAP(number_of_ports =>3,Port_num=>2)
     303GENERIC MAP(number_of_ports =>3,Port_num=>2,
     304adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     305                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     306                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     307                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     308      nbyte =>WORD/8)
    279309PORT MAP(
    280310   data_in => Port_in(2),
     
    283313   reset => reset,
    284314   clk =>clk,
    285    grant(4) => grant_signal(4),
    286    grant(5) => grant_signal(5),
    287    grant(6) => grant_signal(6),
     315   grant(1) => grant_signal(4),
     316   grant(2) => grant_signal(5),
     317   grant(3) => grant_signal(6),
    288318   fifo_full =>fifo_in_full(2),
    289319   priority_rotation =>  priority_rotation_signal(2),
     
    291321   data_out =>crossbar_in_port(2),
    292322   data_out_pulse =>crossbar_in_pulse(2),
    293    request(4) =>request_signal(4),
    294    request(5) =>request_signal(5),
    295    request(6) =>request_signal(6)
     323   request(1) =>request_signal(4),
     324   request(2) =>request_signal(5),
     325   request(3) =>request_signal(6)
    296326);
    297327
    298328PORT3_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    299 GENERIC MAP(number_of_ports =>3,Port_num=>3)
     329GENERIC MAP(number_of_ports =>3,Port_num=>3,
     330adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     331                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     332                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     333                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     334      nbyte =>WORD/8)
    300335PORT MAP(
    301336   data_in => Port_in(3),
     
    304339   reset => reset,
    305340   clk =>clk,
    306    grant(7) => grant_signal(7),
    307    grant(8) => grant_signal(8),
    308    grant(9) => grant_signal(9),
     341   grant(1) => grant_signal(7),
     342   grant(2) => grant_signal(8),
     343   grant(3) => grant_signal(9),
    309344   fifo_full =>fifo_in_full(3),
    310345   priority_rotation =>  priority_rotation_signal(3),
     
    312347   data_out =>crossbar_in_port(3),
    313348   data_out_pulse =>crossbar_in_pulse(3),
    314    request(7) =>request_signal(7),
    315    request(8) =>request_signal(8),
    316    request(9) =>request_signal(9)
     349   request(1) =>request_signal(7),
     350   request(2) =>request_signal(8),
     351   request(3) =>request_signal(9)
    317352);
    318353
     
    321356
    322357-- switch 4 à 7 ports
    323 switch4x4_7x7 : if number_of_ports >= 4 and number_of_ports <=7 generate
    324 
    325 switch_4x4_7x7:for i in 1 to number_of_ports generate
    326 
    327 constant j: natural:=number_of_ports*(i-1);
     358switch4x4_7x7 : if n_ports >= 4 and n_ports <=7 generate
     359
     360switch_4x4_7x7:for i in 1 to n_ports generate
     361
     362constant j: natural:=n_ports*(i-1);
    328363begin
    329 --j=number_of_ports*(i-1);
     364--j=n_ports*(i-1);
    330365PORTx4_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    331 GENERIC MAP(number_of_ports =>number_of_ports,Port_num=>i)
     366GENERIC MAP(number_of_ports =>n_ports,Port_num=>i,
     367adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     368                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     369                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     370                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     371      nbyte =>WORD/8)
    332372PORT MAP(
    333373   data_in => Port_in(i),
     
    336376   reset => reset,
    337377   clk =>clk,
    338         grant =>grant_signal(j+NUMBER_OF_PORTS downto j+1),
     378        grant =>grant_signal(j+n_ports downto j+1),
    339379 
    340380   fifo_full =>fifo_in_full(i),
     
    343383   data_out =>crossbar_in_port(i),
    344384   data_out_pulse =>crossbar_in_pulse(i),
    345         request =>request_signal(j+NUMBER_OF_PORTS downto j+1)
     385        request =>request_signal(j+n_ports downto j+1)
    346386   
    347387);
     
    351391
    352392---- switch 5 ports
    353 --switch5x5 : if number_of_ports = 5 generate
     393--switch5x5 : if n_ports = 5 generate
    354394--
    355395--PORT1_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    356 --GENERIC MAP(number_of_ports =>5)
     396--GENERIC MAP(n_ports =>5)
    357397--PORT MAP(
    358398--   data_in => Port_in(1),
     
    378418--
    379419--PORT2_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    380 --GENERIC MAP(number_of_ports =>5)
     420--GENERIC MAP(n_ports =>5)
    381421--PORT MAP(
    382422--   data_in => Port_in(2),
     
    402442--
    403443--PORT3_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    404 --GENERIC MAP(number_of_ports =>5)
     444--GENERIC MAP(n_ports =>5)
    405445--PORT MAP(
    406446--   data_in => Port_in(3),
     
    426466--
    427467--PORT4_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    428 --GENERIC MAP(number_of_ports =>5)
     468--GENERIC MAP(n_ports =>5)
    429469--PORT MAP(
    430470--   data_in => Port_in(4),
     
    450490--
    451491--PORT5_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    452 --GENERIC MAP(number_of_ports =>5)
     492--GENERIC MAP(n_ports =>5)
    453493--PORT MAP(
    454494--   data_in => Port_in(5),
     
    477517--
    478518---- switch 6 ports
    479 --switch6x6 : if number_of_ports = 6 generate
     519--switch6x6 : if n_ports = 6 generate
    480520--
    481521--PORT1_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    482 --GENERIC MAP(number_of_ports =>6)
     522--GENERIC MAP(n_ports =>6)
    483523--PORT MAP(
    484524--   data_in => Port_in(1),
     
    845885
    846886-- switch 8 ports
    847 switch8x8 : if number_of_ports = 8 generate
    848 switch_8x8:for i in 1 to number_of_ports generate
    849 constant j: natural:=number_of_ports*(i-1);
     887switch8x8 : if n_ports = 8 generate
     888switch_8x8:for i in 1 to n_ports generate
     889constant j: natural:=n_ports*(i-1);
    850890begin
    851891--j<=number_of_ports*(i-1);
    852892PORTx8_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    853 GENERIC MAP(number_of_ports =>8,Port_num=>i)
     893GENERIC MAP(number_of_ports =>8,Port_num=>i,
     894adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     895                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     896                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     897                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     898      nbyte =>WORD/8)
    854899PORT MAP(
    855900   data_in => Port_in(i),
     
    858903   reset => reset,
    859904   clk =>clk,
    860         grant =>grant_signal(j+NUMBER_OF_PORTS downto j+1),
     905        grant =>grant_signal(j+n_ports downto j+1),
    861906   fifo_full =>fifo_in_full(i),
    862907   priority_rotation =>  priority_rotation_signal(i),
     
    865910   data_out_pulse =>crossbar_in_pulse(i),
    866911
    867         request =>request_signal(j+NUMBER_OF_PORTS downto j+1)
     912        request =>request_signal(j+n_ports downto j+1)
    868913);
    869914end generate switch_8x8;
     
    871916
    872917-- switch 9 ports
    873 switch9x9_to_15 : if (number_of_ports >= 9)and (number_of_ports <= 15) generate
    874 
    875 switch_9x9_to_15:for i in 1 to number_of_ports generate
    876 
    877 constant j: natural:=number_of_ports*(i-1);
     918switch9x9_to_15 : if (n_ports >= 9)and (n_ports <= 15) generate
     919
     920switch_9x9_to_15:for i in 1 to n_ports generate
     921
     922constant j: natural:=n_ports*(i-1);
    878923begin
    879924
    880925PORTx9_INPUT_PORT_MODULE: INPUT_PORT_MODULE
    881 GENERIC MAP(number_of_ports =>NUMBER_OF_PORTS,Port_num=>i)
     926GENERIC MAP(number_of_ports =>n_ports,Port_num=>i,
     927adr_mask => NET_MASK,--le nombre de '1' en partant le la gauche de l'adresse
     928                        adr_len=>NET_ADR'length, --la taille en bit de l'adresse 10 bits --> 1024 hotes
     929                        tot_ports=>tot_ports, --Nomnre de ports total du réseau
     930                        adr_sub_net => NET_ADR,--l'adresse du sous-réseau
     931      nbyte =>WORD/8)
    882932PORT MAP(
    883933   data_in => Port_in(i),
     
    886936   reset => reset,
    887937   clk =>clk,
    888    grant => grant_signal(j+NUMBER_OF_PORTS downto j+1),
     938   grant => grant_signal(j+n_ports downto j+1),
    889939   fifo_full =>fifo_in_full(i),
    890940   priority_rotation =>  priority_rotation_signal(i),
     
    893943   data_out_pulse =>crossbar_in_pulse(i),
    894944
    895         request =>request_signal(j+NUMBER_OF_PORTS downto j+1)
     945        request =>request_signal(j+n_ports downto j+1)
    896946);
    897947end generate switch_9x9_to_15;
     
    38973947
    38983948-- switch 16 ports
    3899 switch16x16 : if number_of_ports = 16 generate
    3900 switch_16x16 :for i in 1 to number_of_ports generate
    3901 Constant j : natural:=number_of_ports*(i-1);
     3949switch16x16 : if n_ports = 16 generate
     3950switch_16x16 :for i in 1 to n_ports generate
     3951Constant j : natural:=n_ports*(i-1);
    39023952begin
    39033953--j<=number_of_ports*(i-1);
     
    46444694-- le circuit genere depend du parametre generique nombre de ports
    46454695-- switch 2 ports
    4646 port_out_switch2x2 : if number_of_ports = 2 generate
     4696port_out_switch2x2 : if n_ports = 2 generate
    46474697
    46484698PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    46744724
    46754725-- switch 3 ports
    4676 port_out_switch3x3 : if number_of_ports = 3 generate
     4726port_out_switch3x3 : if n_ports = 3 generate
    46774727
    46784728PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    47164766
    47174767-- switch 4 ports
    4718 port_out_switch4x4 : if number_of_ports = 4 generate
     4768port_out_switch4x4 : if n_ports = 4 generate
    47194769
    47204770PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    47704820
    47714821-- switch 5 ports
    4772 port_out_switch5x5 : if number_of_ports = 5 generate
     4822port_out_switch5x5 : if n_ports = 5 generate
    47734823
    47744824PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    48364886
    48374887-- switch 6 ports
    4838 port_out_switch6x6 : if number_of_ports = 6 generate
     4888port_out_switch6x6 : if n_ports = 6 generate
    48394889
    48404890PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    49144964
    49154965-- switch 7 ports
    4916 port_out_switch7x7 : if number_of_ports = 7 generate
     4966port_out_switch7x7 : if n_ports = 7 generate
    49174967
    49184968PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    50045054
    50055055-- switch 8 ports
    5006 port_out_switch8x8 : if number_of_ports = 8 generate
     5056port_out_switch8x8 : if n_ports = 8 generate
    50075057
    50085058PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    51065156
    51075157-- switch 9 ports
    5108 port_out_switch9x9 : if number_of_ports = 9 generate
     5158port_out_switch9x9 : if n_ports = 9 generate
    51095159
    51105160PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    52205270
    52215271-- switch 10 ports
    5222 port_out_switch10x10 : if number_of_ports = 10 generate
     5272port_out_switch10x10 : if n_ports = 10 generate
    52235273
    52245274PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    53465396
    53475397-- switch 11 ports
    5348 port_out_switch11x11 : if number_of_ports = 11 generate
     5398port_out_switch11x11 : if n_ports = 11 generate
    53495399
    53505400PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    54845534
    54855535-- switch 12 ports
    5486 port_out_switch12x12 : if number_of_ports = 12 generate
     5536port_out_switch12x12 : if n_ports = 12 generate
    54875537
    54885538PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    56345684
    56355685-- switch 13 ports
    5636 port_out_switch13x13 : if number_of_ports = 13 generate
     5686port_out_switch13x13 : if n_ports = 13 generate
    56375687
    56385688PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    57965846
    57975847-- switch 14 ports
    5798 port_out_switch14x14 : if number_of_ports = 14 generate
     5848port_out_switch14x14 : if n_ports = 14 generate
    57995849
    58005850PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    59706020
    59716021-- switch 15 ports
    5972 port_out_switch15x15 : if number_of_ports = 15 generate
     6022port_out_switch15x15 : if n_ports = 15 generate
    59736023
    59746024PORT1_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    61566206
    61576207-- switch 16 ports
    6158 port_out_switch16x16 : if number_of_ports = 16 generate
    6159 port_out_switch_16x16:for i in 1 to number_of_ports generate
     6208port_out_switch16x16 : if n_ports = 16 generate
     6209port_out_switch_16x16:for i in 1 to n_ports generate
    61606210  begin
    61616211  PORTx16_OUTPUT_PORT_MODULE: OUTPUT_PORT_MODULE
     
    61776227-- le circuit genere depend du parametre generique nombre de ports
    61786228-- switch 2 ports
    6179 crossbar_switch2x2 : if number_of_ports = 2 generate
     6229crossbar_switch2x2 : if n_ports = 2 generate
    61806230
    61816231Switch_Crossbar2_2: Crossbar
     
    62256275
    62266276-- switch 3 ports
    6227 crossbar_switch3x3 : if number_of_ports = 3 generate
     6277crossbar_switch3x3 : if n_ports = 3 generate
    62286278
    62296279Switch_Crossbar3_3: Crossbar
     
    62756325
    62766326-- switch 4 ports
    6277 crossbar_switch4x4 : if number_of_ports = 4 generate
     6327crossbar_switch4x4 : if n_ports = 4 generate
    62786328
    62796329Switch_Crossbar4_4: Crossbar
     
    63276377
    63286378-- switch 5 ports
    6329 crossbar_switch5x5 : if number_of_ports = 5 generate
     6379crossbar_switch5x5 : if n_ports = 5 generate
    63306380
    63316381Switch_Crossbar5_5: Crossbar
     
    63816431
    63826432-- switch 6 ports
    6383 crossbar_switch6x6 : if number_of_ports = 6 generate
     6433crossbar_switch6x6 : if n_ports = 6 generate
    63846434
    63856435Switch_Crossbar6_6: Crossbar
     
    64386488
    64396489-- switch 7 ports
    6440 crossbar_switch7x7 : if number_of_ports = 7 generate
     6490crossbar_switch7x7 : if n_ports = 7 generate
    64416491
    64426492Switch_Crossbar7_7: Crossbar
     
    64966546
    64976547-- switch 8 ports
    6498 crossbar_switch8x8 : if number_of_ports = 8 generate
     6548crossbar_switch8x8 : if n_ports = 8 generate
    64996549
    65006550Switch_Crossbar8_8: Crossbar
     
    65566606
    65576607-- switch 9 ports
    6558 crossbar_switch9x9 : if number_of_ports = 9 generate
     6608crossbar_switch9x9 : if n_ports = 9 generate
    65596609
    65606610Switch_Crossbar9_9: Crossbar
     
    66186668
    66196669-- switch 10 ports
    6620 crossbar_switch10x10 : if number_of_ports = 10 generate
     6670crossbar_switch10x10 : if n_ports = 10 generate
    66216671
    66226672Switch_Crossbar10_10: Crossbar
     
    66826732
    66836733-- switch 11 ports
    6684 crossbar_switch11x11 : if number_of_ports = 11 generate
     6734crossbar_switch11x11 : if n_ports = 11 generate
    66856735
    66866736Switch_Crossbar11_11: Crossbar
     
    67486798
    67496799-- switch 12 ports
    6750 crossbar_switch12x12 : if number_of_ports = 12 generate
     6800crossbar_switch12x12 : if n_ports = 12 generate
    67516801
    67526802Switch_Crossbar12_12: Crossbar
     
    68166866
    68176867-- switch 13 ports
    6818 crossbar_switch13x13 : if number_of_ports = 13 generate
     6868crossbar_switch13x13 : if n_ports = 13 generate
    68196869
    68206870Switch_Crossbar13_13: Crossbar
     
    68866936
    68876937-- switch 14 ports
    6888 crossbar_switch14x14 : if number_of_ports = 14 generate
     6938crossbar_switch14x14 : if n_ports = 14 generate
    68896939
    68906940Switch_Crossbar14_14: Crossbar
     
    69587008
    69597009-- switch 15 ports
    6960 crossbar_switch15x15 : if number_of_ports = 15 generate
     7010crossbar_switch15x15 : if n_ports = 15 generate
    69617011
    69627012Switch_Crossbar15_15: Crossbar
     
    70327082
    70337083-- switch 16 ports
    7034 crossbar_switch16x16 : if number_of_ports = 16 generate
     7084crossbar_switch16x16 : if n_ports = 16 generate
    70357085
    70367086Switch_Crossbar16_16: Crossbar
     
    71087158-- le circuit genere depend du parametre generique nombre de ports
    71097159-- switch 2 ports
    7110 scheduler_switch2x2 : if number_of_ports = 2 generate
     7160scheduler_switch2x2 : if n_ports = 2 generate
    71117161
    71127162Scheduler2_2: Scheduler
     
    71257175
    71267176-- switch 3 ports
    7127 scheduler_switch3x3 : if number_of_ports = 3 generate
     7177scheduler_switch3x3 : if n_ports = 3 generate
    71287178
    71297179Scheduler3_3: Scheduler
     
    71427192
    71437193-- switch 4 ports
    7144 scheduler_switch4x4 : if number_of_ports = 4 generate
     7194scheduler_switch4x4 : if n_ports = 4 generate
    71457195
    71467196Scheduler4_4: Scheduler
     
    71597209
    71607210-- switch 5 ports
    7161 scheduler_switch5x5 : if number_of_ports = 5 generate
     7211scheduler_switch5x5 : if n_ports = 5 generate
    71627212
    71637213Scheduler5_5: Scheduler
     
    71767226
    71777227-- switch 6 ports
    7178 scheduler_switch6x6 : if number_of_ports = 6 generate
     7228scheduler_switch6x6 : if n_ports = 6 generate
    71797229
    71807230Scheduler6_6: Scheduler
     
    71937243
    71947244-- switch 7 ports
    7195 scheduler_switch7x7 : if number_of_ports = 7 generate
     7245scheduler_switch7x7 : if n_ports = 7 generate
    71967246
    71977247Scheduler7_7: Scheduler
     
    72107260
    72117261-- switch 8 ports
    7212 scheduler_switch8x8 : if number_of_ports = 8 generate
     7262scheduler_switch8x8 : if n_ports = 8 generate
    72137263
    72147264Scheduler8_8: Scheduler
     
    72277277
    72287278-- switch 9 ports
    7229 scheduler_switch9x9 : if number_of_ports = 9 generate
     7279scheduler_switch9x9 : if n_ports = 9 generate
    72307280
    72317281Scheduler9_9: Scheduler
     
    72447294
    72457295-- switch 10 ports
    7246 scheduler_switch10x10 : if number_of_ports = 10 generate
     7296scheduler_switch10x10 : if n_ports = 10 generate
    72477297
    72487298Scheduler10_10: Scheduler
     
    72617311
    72627312-- switch 11 ports
    7263 scheduler_switch11x11 : if number_of_ports = 11 generate
     7313scheduler_switch11x11 : if n_ports = 11 generate
    72647314
    72657315Scheduler11_11: Scheduler
     
    72787328
    72797329-- switch 12 ports
    7280 scheduler_switch12x12 : if number_of_ports = 12 generate
     7330scheduler_switch12x12 : if n_ports = 12 generate
    72817331
    72827332Scheduler12_12: Scheduler
     
    72957345
    72967346-- switch 13 ports
    7297 scheduler_switch13x13 : if number_of_ports = 13 generate
     7347scheduler_switch13x13 : if n_ports = 13 generate
    72987348
    72997349Scheduler13_13: Scheduler
     
    73127362
    73137363-- switch 14 ports
    7314 scheduler_switch14x14 : if number_of_ports = 14 generate
     7364scheduler_switch14x14 : if n_ports = 14 generate
    73157365
    73167366Scheduler14_14: Scheduler
     
    73297379
    73307380-- switch 15 ports
    7331 scheduler_switch15x15 : if number_of_ports = 15 generate
     7381scheduler_switch15x15 : if n_ports = 15 generate
    73327382
    73337383Scheduler15_15: Scheduler
     
    73467396
    73477397-- switch 16 ports
    7348 scheduler_switch16x16 : if number_of_ports = 16 generate
     7398scheduler_switch16x16 : if n_ports = 16 generate
    73497399
    73507400Scheduler16_16: Scheduler
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/Scheduler.vhd

    r101 r139  
    6161COMPONENT Scheduler3_3
    6262   PORT(
    63       Request : IN std_logic_vector(9 downto 1);
     63      Req : IN std_logic_vector(9 downto 1);
    6464      Fifo_full : IN std_logic_vector(3 downto 1);
    6565      clk : IN std_logic;
     
    8383COMPONENT Scheduler5_5
    8484   PORT(
    85       Request : IN std_logic_vector(25 downto 1);
     85      Req : IN std_logic_vector(25 downto 1);
    8686      Fifo_full : IN std_logic_vector(5 downto 1);
    8787      clk : IN std_logic;
     
    9494COMPONENT Scheduler6_6
    9595   PORT(
    96       Request : IN std_logic_vector(36 downto 1);
     96      Req : IN std_logic_vector(36 downto 1);
    9797      Fifo_full : IN std_logic_vector(6 downto 1);
    9898      clk : IN std_logic;
     
    105105COMPONENT Scheduler7_7
    106106   PORT(
    107       Request : IN std_logic_vector(49 downto 1);
     107      Req : IN std_logic_vector(49 downto 1);
    108108      Fifo_full : IN std_logic_vector(7 downto 1);
    109109      clk : IN std_logic;
     
    127127COMPONENT Scheduler9_9
    128128   PORT(
    129       Request : IN std_logic_vector(81 downto 1);
     129      Req : IN std_logic_vector(81 downto 1);
    130130      Fifo_full : IN std_logic_vector(9 downto 1);
    131131      clk : IN std_logic;
     
    240240  Inst_Scheduler3_3 : Scheduler3_3
    241241   PORT MAP(
    242      Request => Request_latch,
     242     Req => Request_latch,
    243243     Fifo_full => Fifo_full_latch,
    244244     clk => clk ,
     
    268268  Inst_Scheduler5_5 : Scheduler5_5
    269269   PORT MAP(
    270      Request => Request,
     270     Req => Request,
    271271     Fifo_full => Fifo_full,
    272272     clk => clk ,
     
    282282  Inst_Scheduler6_6 : Scheduler6_6
    283283   PORT MAP(
    284      Request => Request_latch,
     284     Req => Request_latch,
    285285     Fifo_full => Fifo_full_latch,
    286286     clk => clk ,
     
    296296  Inst_Scheduler7_7 : Scheduler7_7
    297297   PORT MAP(
    298      Request => Request_latch,
     298     Req => Request_latch,
    299299     Fifo_full => Fifo_full_latch,
    300300     clk => clk ,
     
    324324  Inst_Scheduler9_9 : Scheduler9_9
    325325   PORT MAP(
    326      Request => Request_latch,
     326     Req => Request_latch,
    327327     Fifo_full => Fifo_full_latch,
    328328     clk => clk ,
  • PROJECT_CORE_MPI/MPI_HCL/BRANCHES/v2.0/NOC/Scheduler.vhd.bak

    r101 r139  
    6161COMPONENT Scheduler3_3
    6262   PORT(
    63       Request : IN std_logic_vector(9 downto 1);
     63      Req : IN std_logic_vector(9 downto 1);
    6464      Fifo_full : IN std_logic_vector(3 downto 1);
    6565      clk : IN std_logic;
     
    7272COMPONENT Scheduler4_4
    7373   PORT(
    74       Request : IN std_logic_vector(16 downto 1);
     74      Req : IN std_logic_vector(16 downto 1);
    7575      Fifo_full : IN std_logic_vector(4 downto 1);
    7676      clk : IN std_logic;
     
    8383COMPONENT Scheduler5_5
    8484   PORT(
    85       Request : IN std_logic_vector(25 downto 1);
     85      Req : IN std_logic_vector(25 downto 1);
    8686      Fifo_full : IN std_logic_vector(5 downto 1);
    8787      clk : IN std_logic;
     
    9494COMPONENT Scheduler6_6
    9595   PORT(
    96       Request : IN std_logic_vector(36 downto 1);
     96      Req : IN std_logic_vector(36 downto 1);
    9797      Fifo_full : IN std_logic_vector(6 downto 1);
    9898      clk : IN std_logic;
     
    105105COMPONENT Scheduler7_7
    106106   PORT(
    107       Request : IN std_logic_vector(49 downto 1);
     107      Req : IN std_logic_vector(49 downto 1);
    108108      Fifo_full : IN std_logic_vector(7 downto 1);
    109109      clk : IN std_logic;
     
    240240  Inst_Scheduler3_3 : Scheduler3_3
    241241   PORT MAP(
    242      Request => Request_latch,
     242     Req => Request_latch,
    243243     Fifo_full => Fifo_full_latch,
    244244     clk => clk ,
     
    254254  Inst_Scheduler4_4 : Scheduler4_4
    255255   PORT MAP(
    256      Request => Request_latch,
     256     Req => Request_latch,
    257257     Fifo_full => Fifo_full_latch,
    258258     clk => clk ,
     
    268268  Inst_Scheduler5_5 : Scheduler5_5
    269269   PORT MAP(
    270      Request => Request,
     270     Req => Request,
    271271     Fifo_full => Fifo_full,
    272272     clk => clk ,
     
    282282  Inst_Scheduler6_6 : Scheduler6_6
    283283   PORT MAP(
    284      Request => Request_latch,
     284     Req => Request_latch,
    285285     Fifo_full => Fifo_full_latch,
    286286     clk => clk ,
     
    296296  Inst_Scheduler7_7 : Scheduler7_7
    297297   PORT MAP(
    298      Request => Request_latch,
     298     Req => Request_latch,
    299299     Fifo_full => Fifo_full_latch,
    300300     clk => clk ,
Note: See TracChangeset for help on using the changeset viewer.