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
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:
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
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
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
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
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
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`
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
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 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;
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
Top Related