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:
1 edited
2 copied

Legend:

Unmodified
Added
Removed
  • 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 =>
Note: See TracChangeset for help on using the changeset viewer.