recapitulare 04 pcid

61
1 Modelarea HDL a numărătoarelor si a automatelor cu stări finite

Transcript of recapitulare 04 pcid

  • Modelarea HDL a numrtoarelor si a automatelor cu stri finite

  • I. Modelarea numrtoarelor

  • Aplicaii specifice pentru numrtoarele binareFurnizeaz suport logic pentru funciile de:

    Divizor de frecvenContorizarea strilor automatelor cu stari finite: util n implementarea protocoalelor de comunicaie seriala SPI, I2C, etc.Generarea semnalelor de control pentru transmiterea multiplexata in timp a informatiei, de pe mai multe canale pe unul singurGenerarea adreselor pentru segmente de memorie

  • Funcia de numrare a strilor automatelor Permite controlul buclelor ntre strile automatului

    Utilizat n implementarea protocoalelor de comunicaii serialeiteratie < NSeciune din diagrama de tranziii a automatului cu stri finiteactivare ceas

  • Funcia de generare a semnalelor de control: exemplu: multiplexarea n timp a fluxului de datedatele de pe canalele de intrare sunt transmise secvenial (fiecare pe durata unui TCLK) pe canalul de transmisie

  • Funcia de generare a adreselor segmentelor de memorie pentru accesarea unui segment de memorieadresele locaiilor de memorie din segmentul de memorie asupra cruia se opereaz sunt generate secvenial, fiecare pe durata TCLK

  • Numrtoare binare fr semnale de controlqclkrstcntComportament: La fiecare front activ al semnalului de ceas, numrtorul trece ntr-o nou stare; Starea numrtorului este codificat binar i furnizat la ieirea sa.module cnt (rst, clk, q); // numrtor binar pe N biti, parameter N = 3; // N = dimensiunea cuvntului care codific starea numrtorului // numarul total de stari ale numaratorului = 2**N // dimensiunea se poate modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clk; // intrare ceas output reg [N-1:0] q; // iesire date (pe N biti) always @(posedge rst or posedge clk) if (rst) q
  • Sinteza logic i implementarea FPGA a numrtorului binarCircuitul obinut dup sinteza logic: numrtorul binar este interpretat de ctre instrumentul software de sintez ca primitiv logic i din acest motiv nu genereaz schema electronic intern a acestuia.Circuitul dup implementarea FPGA:

  • Semnalizarea unei anumite stri la numrtoareComportament: semnalul rco semnalizeaz trecerea numrtorului printr-o anumit stare a sa.module cntRco (rst, clk, q, rco); // numrtor binar pe N biti, cu semnalizare a strii S parameter N = 3; // N = dimensiunea cuvntului care codific starea numrtorului // numarul total de stari ale numaratorului = 2**N parameter S = 4; // S = starea care este semnalizata la iesirea co // parametrii se pot modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clk; // intrare ceas output reg [N-1:0] q; // iesire date (pe N biti) output rco; // semnalizeaza prin 1 starea S; always @(posedge rst or posedge clk) if (rst) q
  • Controlul funcionrii numrtoruluiControlul funciei de numrare

    Controlul ciclului de numrare (cazul numrtoarelor UP):numrtoare modulo N: controleaz valoarea maximnumrtoare cu ncrcare: controleaz valoarea minim

  • Numrtoarelor binare cu control pentru operaiunea de numrare (cu semnal de activare pentru ceas)qclkrstcntCeObservaie: controlul funciei de numrare se realizeaz prin introducerea unui semnal de control pentru ceas: Clock Enable; acest semnal permite dezactivarea ceasului i n consecin inhibarea funciei de numrare.Aplicaie specific: implementarea sistemelor care lucreaz la frecvene generate prin divizarea frecvenei semnalului de ceas master (soluii insensibile la tranziii false).Comportament: dac este activ semnalul CE (Clock Enable) de activare al ceasului, la fiecare front activ al semnalului de ceas, numrtorul numr = trece ntr-o nou stare; starea numrtorului este codificat binar i furnizat la ieirea sa.Forme de undDezactivarea ceasului determin inhibarea procesului de numrareceControleaz activarea semnalului de ceasN

  • Modelarea Verilog a numrtoarelor binare cu control semnalul de ceasmodule cntCe (rst, ce, clk, q); // numarator binar pe N biti, cu semnal activare pt. ceas parameter N = 3; // N = dimensiunea cuvntului care codifica starea numaratorului // numarul total de stari ale numaratorului = 2**N // dimensiunea se poate modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clk; // intrare ceas input ce; // intrare de activare a ceasului; semnal sincron, activ in 1 output reg [N-1:0] q; // iesire date (pe N biti) always @(posedge rst or posedge clk) if (rst) q
  • Sinteza logic i implementarea FPGA a numrtorului binarCircuitul obinut dup sinteza logic: numrtorul binar este interpretat de ctre instrumentul software de sintez ca primitiv logic i din acest motiv nu genereaz schema electronic intern a acestuia.Semnalul Clock Enable

  • Controlul ciclului de numrare - numrtoare binare modulo XqclkrstcntXAplicaie specific: implementarea divizoarelor de frecven programabile.Comportament: la fiecare front activ al semnalului de ceas, numrtorul numr = trece ntr-o nou stare; starea numrtorului este codificat binar i furnizat la ieirea sa. numrtorul numr ntodeauna X stri.Forme de undCiclul de numrareN

  • Modelarea Verilog a numrtoarelor modulo Xmodule cntX (rst, clk, q); // numarator modulo X+1: numara de la 0 la X parameter X = 5; // X = starea maxima a numaratorului; parameter N = 3; // N = dimensiunea cuvntului care codifica starea numaratorului // numarul total de stari ale numaratorului = 2**N 2**N >= X; // parametrii se pot modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clk; // intrare ceas output [N-1:0] q; // iesire date (pe N biti) reg [N-1:0] q; always @(posedge rst or posedge clk) if (rst) q
  • Sinteza logic i implementarea FPGA a numrtorului modulo XCircuitul obinut dup sinteza logicControlul ciclului de numrare este realizat prin intermediul unei reacii implementate cu pori logice

  • Implementarea unui divizor de frecven pe baza unui numrtor modulo X (nu are factor de umplere 50%)module divX (rst, clkI, clkO); // divizor de frecventa;factor de divizare X+1 // realizat pe baza unui numarator modulo X+1

    parameter X = 4; // X = starea maxima a numaratorului; parameter N = 3; // N = dimensiunea numaratorului; // parametrii se pot modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clkI; // intrare ceas output clkO; // iesire ceas divizat reg [N-1:0] q; // semnal intern = starea numaratorului always @(posedge rst or posedge clkI) if (rst) q

  • Numrtoarelor binare cu ncrcare a datelorqclkrstcntLObservaie: prin operaiunea de ncrcare se permite setarea strii curente a numrtorului de ctre utilizator, sub controlul acestuia.Comportament: la activarea semnalului de ncrcare ld (load), data de intrare este ncrcat n numrtor, sincron cu frontul activ al semnalului de ceas; operaiunea de ncrcare a datei este mai prioritar dect cea de numrare; la fiecare front activ al semnalului de ceas, numrtorul numr = trece ntr-o nou stare; starea numrtorului este codificat binar i furnizat la ieirea sa.Forme de undNControleaz operaiunea de ncrcare a datei de intrare n numrtorNlddla activare semnalului ld SI aparitia frontului activ al semnalului de ceas, valoarea 6 (aplicat pe intrarea d) se ncarc n numrtor; noua stare a numrtorului devine 6A 2a comand de ncrcare este ignorat (numrtorul i continu numrarea) fiind insuficient ca durat de timp pentru prinderea frontului activ al ceasului

  • Modelarea Verilog a numrtoarelor cu ncrcare a datelormodule cntL (rst, clk, ld, d, q); // numarator binar pe N biti, parameter N = 3; // N = dimensiunea cuvntului care codifica starea numaratorului // numarul total de stari ale numaratorului = 2**N // dimensiunea se poate modifica la instantierea modulului input rst; // semnal de initializare asincron, activ in 1; input clk; // intrare ceas input ld; // intrare incarcare date de intrare; sincrona activa pe 1 input [N-1:0] d; // intrare de date (pe N-1 biti) output [N-1:0] reg q; // iesire date (pe N biti) always @(posedge rst or posedge clk) if (rst) q
  • Sinteza logic i implementarea FPGA a numrtorului cu ncrcare a datelorCircuitul obinut dup sinteza logicCircuitul obinut dup implementarea FPGA:Semnalul de ncrcare a datelorDatele de intrare

  • Automate cu stri finite Comportament: sunt blocuri secveniale care trec printr-o succesiune de stri distincte, stabilite de ctre proiectant. Starea curent a automatului depinde de starea anterioar i de valorile curente ale semnalelor de intrare Aplicaii specifice: implementarea blocurilor de control; blocurile de control furnizeaz semnalele de control necesare blocului de date; semnalele de control, depind de starea curent a automatului. Tipuri de automate cu stri finite: 1. automate de tip Moore = valorile ieirilor depind numai de starea curent 2. automate de tip Mealy = valorile ieirilor depind att de starea curent ct i de valorile curente ale intrrilor

  • Structura automatelor cu stri finiteBloc combinaional pentru calculul strii urmtoareRegistru de stareBloc combinaional pentru calculul valorilor ieirilorAutomat MooreAutomat Mealydecodificator staredecodificator ieiredecodificator staredecodificator ieire

  • Descrierea automatului cu strri finite de tip MooreDescrierea funcionrii automatului de tip Moore se bazeaz pe 2 elemente:

    Diagrama de tranziii: furnizeaz o imagine grafic a condiiilor n care automatul tranziteaz ntre striile sale;

    Tabelul cu valorile ieirilor: furnizeaz valorile ieirilor n funcie de starea curent a automatului.starepe arce se precizeaz condiiile n care se realizeaz o tranziie din starea curent n cea viitoare; dac nu se ndeplinete condiia precizat, automatul rmne n starea curent

  • 1. se definesc strile automatului ca parametri ai modulului precum si semnalele interne stare_curenta, respectiv stare_viitoare:Modelarea Verilog a unui automat cu stri finite Mooreparameter IDLE = cod;.;reg [:] stare_curenta, stare_viitoare;always @ (stare_curenta or intrari). ;always @ (posedge rst or posedge clk). ;2. se modeleaz blocul de calcul al strii viitoare pe baza diagramei de tranziii:3. se modeleaz registrul de stare:4. se modeleaz blocul de calcul al valorilor semnalelor de ieire:always @ (stare_curenta). ;

  • 1. Definirea strilor automatuluiAlegerea modului de codare al strilor

  • 2. Modelarea blocului de calcul al strii noiBloc combinaionalalways @ (stare_curenta or d) // in lista de senzitivitati se trec toate // semnalele de intrare in blocul de calcul case (stare_curenta) IDLE: if (!d) stare_viitoare = S1; // tranzitie in S1 daca d = 0 else if (d) stare_viitoare = S2; // tranzitie in S2 daca d = 1 else stare_viitoare = IDLE; // ramine in IDLE daca d 0 SI d 1 S1: if (!d) stare_viitoare = S3; // tranzitie in S3 daca d = 0 else stare_viitoare = S1; // ramine in S1 daca d 0 S2: if (d) stare_viitoare = S3; // tranzitie in S3 daca d = 1 else stare_viitoare = S2; // ramine in S2 daca d 1 S3: stare_viitoare = IDLE; // tranzitie neconditionata (la front activ clk) default: stare_viitoare = IDLE; // automatul trece in IDLE pt. alte valori ale endcase // lui dDescrierea diagramei de tranziii

  • 3. Modelarea registrului de stareBloc secvenialalways @ (posedge(rst) or posedge (clk)) // in lista de senzitivitati se trec toate // semnalul de ceas si cel de reset daca este // asincron if (rst) stare_curenta
  • 4. Modelarea blocului de calcul al valorilor ieirilorBloc combinaionalalways @ (stare_curenta) // in lista de senzitivitati se trece numai starea curenta

    case (stare_curenta) // selectia valorilor iesirilor se face dupa starea curenta

    IDLE: begin y1 = 1b 0; y0 = 1b 0; end // iesirile in IDLE S1: begin y1 = 1b 0; y0 = 1b 1; end // iesirile in S1

    S2: begin y1 = 1b 1; y0 = 1b 0; end // iesirile in S2

    S3: begin y1 = 1b 1; y0 = 1b 1; end // iesirile in S3

    default: begin y1 = 1b x; y0 = 1b x; end // iesirile in cazul in care automatul // ajunge intr/o stare necunoscuta

    endcase

  • Modelul Verilog al automatului cu stri finite Moore// descrierea diagramei de tranzitiialways @ (stare_curenta or d)case (stare_curenta) IDLE: if (!d) stare_viitoare = S1; else if (d) stare_viitoare = S2; else stare_viitoare = IDLE; S1: if (!d) stare_viitoare = S3; else stare_viitoare = S1; S2: if (d) stare_viitoare = S3; else stare_viitoare = S2; S3: stare_viitoare = IDLE; default: stare_viitoare = IDLE; endcase

    // descrierea registrului de stare always @ (posedge rst or posedge clk) if (rst) stare_curenta

  • Simularea automatului cu stri finite Moored

  • Sinteza logic a automatului cu stri finite MoorePentru sinteza logic a registrului de stare sunt utilizate 4 bistabile D; cte 1 registru pentru fiecare bit din codul strilorPentru sinteza logic a blocurilor de calcul a strii viitoare i a ieirilor se utilizeaz pori logicedetaliuCircuitul obinut dup sinteza logic

  • Implementarea FPGA a automatului cu stri finite MoorePentru implementarea registrului de stare sunt utilizate 4 bistabile D din Celulele Logice ale FPGAuluin cele 7 blocuri LUT ale Celulelor Logice ale FPGAului sunt implementate toate blocurile combinaionale

  • Optimizarea consumului de resurse logice ale automatului cu stri finite Moore codarea strilor dup codul binarCircuitul obinut dup sinteza logicCircuitul obinut dup implementarea FPGAPentru sinteza logic/implementarea FPGA a registrului de stare sunt utilizate doar 2 bistabile de tip D deoarece codul utilizat pentru stri este reprezentat pe 2 bii; circuitele combinaionale necesit mai puine resurse logice

  • Descrierea automatului cu strri finite de tip Mealype arce se precizeaz:numarator = condiiile n care se realizeaz o tranziie din starea curent n cea viitoare; numitor = valorile semnalelor de ieire in starea curenta: de exemplu, in starea IDLE iesirile pot fi 10 daca d=0, 01 daca d=1, sau 00 in rest (d = x sau d = z)Descrierea funcionrii automatului de tip Mealy se realizeaz pe baza unei diagrame de tranziii ntre stri

  • 1. se definesc strile automatului ca parametri ai modulului si semnalele interne stare_curenta, respectiv stare_viitoare:Modelarea Verilog a unui automat cu stri finite Mealyparameter IDLE = cod;.;reg stare_curenta, stare_viitoare;// identic cu Moorealways @ (stare_curenta or intrari). ; // identic cu Moorealways @ (posedge (rst) or posedge (clk)). ; // identic cu Moore2. se modeleaz blocul de calcul al strii viitoare pe baza diagramei de tranziii:3. se modeleaz registrul de stare:4. se modeleaz blocul de calcul al valorilor semnalelor de ieire pe baza starii curente si a intrrilor de date:always @ (stare_curenta or intrari). ;

  • 4. Modelarea blocului de calcul al valorilor ieirilor pentru automatul MealyBloc combinaional// in lista de senzitivitati se trece starea curenta si semnalul de intrare

    always @ (stare_curenta or d) case (stare_curenta) IDLE: if (!d) begin y1 = 1b 1; y0 = 1b 0; end else if (d) begin y1 = 1b 0; y0 = 1b 1; end else begin y1 = 1b 0; y0 = 1b 0; end S1: if (!d) begin y1 = 1b 1; y0 = 1b 1; end else begin y1 = 1b 0; y0 = 1b 1; end S2: if (d) begin y1 = 1b 1; y0 = 1b 1; end else begin y1 = 1b 1; y0 = 1;b 0; end S3: begin y1 = 1b 0; y0 = 1b 0; end default: begin y1 = 1b x; y0 = 1b x; end endcase

  • Modelul Verilog al automatului cu stri finite Mealy// descrierea registrului de stare always @ (posedge(rst) or posedge (clk)) if (rst) stare_curenta
  • Simularea automatului cu stri finite Mealy

  • Implementarea FPGA a automatului cu stri finite Mealy

  • Sincronizarea ieirilor cu frontul activ al semnalului de ceas la automatul cu stri finite MealySincronizarea ieirilor cu semnalul de ceas: semnalele de ieire asincrone devin semnale interne automatului, transmise ca date de intrare pentru registrul de stare; acesta furnizeaz pe ieirile sale att starea curent a automatului ct i ieirile sincronizate cu semnalul de ceas

  • Modelul Verilog al automatului cu stri finite Mealy sincron// exemplu de automat de tip Mealy cu iesiri sincronemodule Fsm (rst, clk, d, y1, y0);input rst, clk, d;output y1, y0; reg y1, y0; reg tmpy1, tmpy0; // iesirile asincrone devin interne se declara ca interne

    // definirea starilor = cod Grayparameter IDLE = 2'b 00;parameter S1 = 2'b 01;parameter S2 = 2'b 11;parameter S3 = 2'b 10;

    // declararea semnalelor internereg [1:0] stare_curenta;reg [1:0] stare_viitoare;

    // descrierea diagramei de tranzitii; in acest segment de cod nu sunt modificarialways @ (stare_curenta or d)case (stare_curenta) IDLE: if (!d) stare_viitoare = S1; else if (d) stare_viitoare = S2; else stare_viitoare = IDLE; S1: if (!d) stare_viitoare = S3; else stare_viitoare = S1; S2: if (d) stare_viitoare = S3; else stare_viitoare = S2; S3: stare_viitoare = IDLE; default: stare_viitoare = IDLE; endcase`

  • Modelul Verilog al automatului cu stri finite Mealy sincron - continuare // descrierea registrului de stare always @ (posedge(rst) or posedge (clk)) if (rst) begin stare_curenta
  • Simularea automatului cu stri finite Mealy sincronFormele de unda IDLE S1 S3 IDLE S2 S3 IDLE S2 S3

  • Modelarea VHDL a numrtoarelor

  • Descrierea VHDL a numrtoarelor binare fr semnal de controllibrary ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity counter isgeneric (size: natural :=4);port (clk,rst : in std_logic;d: in std_logic_vector (size-1 downto 0);q: out std_logic_vector (size-1 downto 0));end counter;architecture beh of counter is signal tmp : std_logic_vector (size-1 downto 0); begin process (clk,rst) beginif (rst='1') then tmp 0);elsif (rising_edge(clk)) then

    tmp

  • Descrierea VHDL a numrtoarelor binare: controlul numrrii

    entity counter isgeneric (size: natural :=4);port (clk,rst : in std_logic;en: in std_logic;q: out std_logic_vector (size-1 downto 0));end counter;architecture beh of counter is signal tmp : std_logic_vector (size-1 downto 0); begin process (clk,rst) beginif (rst='1') then tmp 0);elsif (rising_edge(clk)) then if (en = 1) thentmp

  • Descrierea VHDL a numrtoarelor binare modulo N

    entity counter isgeneric (size: natural :=4);port (clk,rst : in std_logic;q : out std_logic_vector (size-1 downto 0));end counter;architecture beh of counter is signal tmp : std_logic_vector (size-1 downto 0); cosntant N : std_logic_vector (size-1 downto 0):=1000; begin process (clk,rst) beginif (rst='1') then tmp 0);elsif (rising_edge(clk)) then if (tmp = N) thentmp 0); else tmp

  • Descrierea VHDL a numrtoarelor cu ncrcare a datelor

    entity counter isgeneric (size: natural :=4);port (clk,rst : in std_logic;ld : in std_logic;d : in std_logic_vector (size-1 downto 0);q : out std_logic_vector (size-1 downto 0));end counter;architecture beh of counter is signal tmp : std_logic_vector (size-1 downto 0); begin process (clk,rst) beginif (rst='1') then tmp 0);elsif (rising_edge(clk)) then if (ld = 1) thentmp

  • Sinteza automatelor (mainilor) secveniale cu stri finite Automate MooreAutomate Mealy

  • 1. se definesc strile automatului:2. se descrie diagrama de tranziii blocul 1:3. se descrie registrul de stocare bocul 2:4. se descrie decodorul de stri blocul 3:Descrierea VHDL a unui automat sincron MooreTYPE stari IS (Initializare,..., Starea3); signal stare_curenta, stare_viitoare : stari;Tranzitii : process (stare_curenta, intrari)begin....end process Tranzitii ;Registru : process (reset,clock) begin...end process Registru;Iesiri : process (stare_curenta)begin......end process Iesiri;valoare ieiri n starea respectivvaloare intrri pentru tranziia ntre 2 stri

  • Descrierea VHDL a diagramei de tranziiiTranzitii:process( ) begin case is when Initializare => if (X1=0 and X0=0) then stare_viitoare ... when Starea3 => ... end case;end process Tranzitii;stare_curenta, X1, X0stare_curenta

  • Descrierea VHDL a registrului de stareRegistru:process( ) begin if (reset='1') then stare_curenta
  • Descrierea VHDL a blocului de ieireIesiri : process( ) begin case stare_curenta is when Initializare => Y1 ... when Starea2 => ... when Starea3 => ... end case;end process Iesiri;stare_curentawith stare_curenta selectiesire
  • Eliminarea blocului de determinare a ieirilorIndicaie: strile automatului se vor codifica astfel nct s furnizeze valorile ieirilor automatuluiExemplu:ieirile nu pot furniza 2 coduri diferite pentru starile 1, respectiv 2se introduce un nou bit care permite codarea diferit a strilor 1, respectiv 2constant initializare : std_logic_vector (2 downto 0) : = 000;constant stare0 : std_logic_vector (2 downto 0) : = 100;...signal stare_curenta : std_logic_vector (2 downto 0);signal stare_viitoare : std_logic_vector (2 downto 0); declararea codului strilordeclararea strilorY1
  • Automate cu stri finite de tip Mealyieirile depind de starea curent a automatului i de starea curent a intrrilor

    Automat Mealy asincron: ieirile sunt actualizate asincron la tranziiile intrrilor

    Automat Mealy sincron: ieirile sunt actualizate sincron cu frontul activ al ceasului, a tranziiile intrrilor

  • Descrierea VHDL a unui automat sincron Mealy asincrondescrierea blocului 1 diagrama de tranziii: rmne neschimbatdescrierea blocului 2 registrul de stare: rmne neschimbatdescrierea blocului 3 blocul de ieire: valorile ieirilor sunt specificate n funcie de starea curent i de intrri;

  • Descrierea VHDL a blocului de ieireIesiri : process( stare_curenta, intrari ) Begin case stare_curenta is when stare_* => if intrare = nivel_activ then iesiri
  • Descrierea VHDL a unui automat sincron Mealy sincron se introduce un semnal intern tmp care preia valorile ieirilor

    ieirile vor fi actualizate sincron cu frontul activ al semnalului de ceas, n cadrul procesului care descrie registrul automatului, prin furnizarea valorilor semnalului intern tmp semnalului de ieire.

    Modificri: blocul 2 registrul de stare: se adaug o instruciune de atribuire n care ieirea preia valoarea semnalului intern tmp, pe frontul activ al semnalului de ceas. blocul 3 blocul de ieire: valorile semnalului intern tmp sunt specificate n funcie de starea curent i de intrri;

  • Registru:process(clock,reset) beginif (reset = '1') thenstare_curenta
  • Automate cu stri finite cu bucle de stri

    Utilizate n implementarea protocoalelor de comunicaii serialeUtilizate pentru controlul operaiilor repetitiveStare 1Stare 2Stare 3index < Nindex = NBucla: N repetiiinumarator modulo Nindexcontrol numaratorincrementceqIDLErstautomat stari finitecontroleaz numararea

  • entity counter isport (clk,rst,ce: in std_logic;q : out std_logic_vector (3 downto 0));end counter;architecture beh of NUMARATOR is signal tmp : std_logic_vector (3 downto 0); constant N : std_logic_vector (3 downto 0):=1001; begin process (clk,rst) beginif (rst='1') then tmp 0);elsif (rising_edge(clk)) then if (ce=1) then if (tmp = N) then tmp 0); else tmp increment=>1; when STARE3=> increment=>0; end case;end process Iesiri;end beh;starea n care numrtorul i schimb stareastarea n care se d comanda de numrare