<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
	<id>http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=CID_Aplicatii_12</id>
	<title>CID Aplicatii 12 - Revizia istoricului</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=CID_Aplicatii_12"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_12&amp;action=history"/>
	<updated>2026-05-23T06:57:23Z</updated>
	<subtitle>Istoricul versiunilor pentru această pagină din wiki</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_12&amp;diff=6955&amp;oldid=prev</id>
		<title>Cbira: Cbira a redenumit pagina CID Aplicatii 11 în CID Aplicatii 12 fără a lăsa o redirecționare în loc</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_12&amp;diff=6955&amp;oldid=prev"/>
		<updated>2021-05-06T06:15:55Z</updated>

		<summary type="html">&lt;p&gt;Cbira a redenumit pagina &lt;a href=&quot;/index.php/CID_Aplicatii_11&quot; title=&quot;CID Aplicatii 11&quot;&gt;CID Aplicatii 11&lt;/a&gt; în &lt;a href=&quot;/index.php/CID_Aplicatii_12&quot; title=&quot;CID Aplicatii 12&quot;&gt;CID Aplicatii 12&lt;/a&gt; fără a lăsa o redirecționare în loc&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ro&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versiunea anterioară&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versiunea de la data 6 mai 2021 06:15&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ro&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nicio diferență)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Cbira</name></author>
	</entry>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_12&amp;diff=6944&amp;oldid=prev</id>
		<title>Gvpopescu: Pagină nouă: == Automate finite. Introducere == Automatul finit este folosit pentru a descrie sisteme ce tranziteaza un numar finit de stari. Acest tip de sistem este foarte util atunci cand st...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_12&amp;diff=6944&amp;oldid=prev"/>
		<updated>2021-05-04T08:36:43Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Automate finite. Introducere == Automatul finit este folosit pentru a descrie sisteme ce tranziteaza un numar finit de stari. Acest tip de sistem este foarte util atunci cand st...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Automate finite. Introducere ==&lt;br /&gt;
Automatul finit este folosit pentru a descrie sisteme ce tranziteaza un numar finit de stari. Acest tip de sistem este foarte util atunci cand starile nu sunt tranzitate intr-un mod simplu, evident sau repetitiv. &lt;br /&gt;
&lt;br /&gt;
Automatul finit, numit și FSM (Finite State Machine), este un model matematic de computație, definit de următoarele elemente:&lt;br /&gt;
* O mulțime finită de simboluri de intrare, numită alfabet de intrare;&lt;br /&gt;
* O mulțime finită și nevidă de simboluri de ieșire, numită alfabet de ieșire;&lt;br /&gt;
* O mulțime finită și nevidă de stări, din care doar una, numită starea curentă, este activă la un moment dat;&lt;br /&gt;
* O stare inițială, care face parte din mulțimea stărilor;&lt;br /&gt;
* O funcție de tranziție a stărilor, care calculează starea următoare a automatului în funcție de starea curentă și de simbolul de intrare;&lt;br /&gt;
* O funcție de calcul a ieșirii, care determină simbolul de ieșire în funcție de starea curentă (în cazul automatelor de tip Moore) sau în funcție de starea curentă și de simbolul de intrare (în cazul automatelor de tip Mealy).&lt;br /&gt;
&lt;br /&gt;
[[[[Fișier:Fsm.png]]]]&lt;br /&gt;
&lt;br /&gt;
La fiecare front al ceasului, valoarea stării următoare, calculată de către CLC, va fi încărcată în registru. Dacă registrul are n biți, numărul maxim de stări care pot fi reprezentate este 2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;. Acest număr poate fi mai mic, în funcție de schema de codare a stărilor. De exemplu, pentru n = 4, folosind codarea binară se pot reprezenta cel mult 16 stări (0000, 0001, 0010, ..., 1111), în timp ce pentru codarea one-hot, în care doar un singur bit poate lua valoarea 1, se pot reprezenta 4 stări (1000, 0100, 0010, 0001).&lt;br /&gt;
&lt;br /&gt;
Pentru a reprezenta comportamentul unui automat finit, putem folosi grafuri sau organigrame, conventiile de notare depinzand de tipul automatului (Moore sau Mealy).&lt;br /&gt;
&lt;br /&gt;
==1. Automat ce detecteaza secvente de tipul 11....100....0==&lt;br /&gt;
In acest exemplu va fi implementat un automat care detecteaza secventele de tipul 11....100....0. Pentru aceasta, automatul va avea o intrare pe un bit (&amp;#039;&amp;#039;in&amp;#039;&amp;#039;, pe care va veni secventa de biti) si doua iesiri: &amp;#039;&amp;#039;detectOk&amp;#039;&amp;#039;, care semnalizeaza prin 1 ca nu a fost inca detectata o secventa ilegala si &amp;#039;&amp;#039;detectFail&amp;#039;&amp;#039;, care semnalizeaza prin 1 ca a fost detectata o secventa ilegala (un 1 dupa 0). &lt;br /&gt;
&lt;br /&gt;
Automatul va avea 3 stari: &lt;br /&gt;
* Q0 - STATE_READ1: automatul intra in aceasta stare la reset si va ramane in aceasta atata timp cat intrarea este 1 (inca nu a aparut niciun 0).&lt;br /&gt;
* Q1 - STATE_READ0: automatul intra in aceasta stare atunci cand apare pe intrare primul 0 si va ramane in aceasta atata timp cat pe intrare este 0.&lt;br /&gt;
* Q2 - STATE_ERROR: automatul intra in aceasta stare atunci cand apare un 1 dupa 0 si va ramane blocat aici pana la reset.&lt;br /&gt;
&lt;br /&gt;
Pentru a coda cele 3 stari avem nevoie de minim 2 biti: STATE_READ1 = 2&amp;#039;b00, STATE_READ0 = 2&amp;#039;b01, STATE_ERROR = 2&amp;#039;b10.&lt;br /&gt;
&lt;br /&gt;
Graful automatului este:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Organigrama FSM 111000.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea automatului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module FSM1(&lt;br /&gt;
    input clock,&lt;br /&gt;
    input in,&lt;br /&gt;
    input reset,&lt;br /&gt;
    output detectOk,&lt;br /&gt;
    output detectFail&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//Se asociaza sirurilor de biti folositi pentru codarea starilor nume ce pot fi folosite mai usor in cod.&lt;br /&gt;
//La compilare, numele vor fi inlocuite in cod cu numerele asociate la inceput.&lt;br /&gt;
localparam STATE_READ1 = 2&amp;#039;b00;&lt;br /&gt;
localparam STATE_READ0 = 2&amp;#039;b01;&lt;br /&gt;
localparam STATE_ERROR = 2&amp;#039;b10;&lt;br /&gt;
&lt;br /&gt;
reg [1:0] state, state_next;&lt;br /&gt;
&lt;br /&gt;
//registrul de stare&lt;br /&gt;
always@(posedge clock) begin&lt;br /&gt;
    if(reset == 0)&lt;br /&gt;
        state &amp;lt;= STATE_READ1;&lt;br /&gt;
    else&lt;br /&gt;
        state &amp;lt;= state_next;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
//circuit combinational pentru calculul starii urmatoare&lt;br /&gt;
always@(*) begin&lt;br /&gt;
    state_next = state;&lt;br /&gt;
    case(state)&lt;br /&gt;
        STATE_READ1: begin&lt;br /&gt;
                         if(in == 0) state_next = STATE_READ0;&lt;br /&gt;
                     end&lt;br /&gt;
        STATE_READ0: begin&lt;br /&gt;
                         if(in == 1) state_next = STATE_ERROR;&lt;br /&gt;
                     end&lt;br /&gt;
        STATE_ERROR: state_next = STATE_ERROR;&lt;br /&gt;
        default: state_next = STATE_READ1;&lt;br /&gt;
	&lt;br /&gt;
    endcase&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//circuit combinational pentru calculul iesirilor&lt;br /&gt;
assign detectOk   = (state == STATE_READ0) || (state == STATE_READ1);&lt;br /&gt;
assign detectFail = (state == STATE_ERROR);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea unui modul de test pentru FSM1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module FSM1_TB();&lt;br /&gt;
&lt;br /&gt;
reg  clock_t;&lt;br /&gt;
reg  reset_t;&lt;br /&gt;
reg  in_t;&lt;br /&gt;
wire detectOk_t;&lt;br /&gt;
wire detectFail_t;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
    clock_t = 0;&lt;br /&gt;
    forever #1 clock_t = ~clock_t;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
        in_t = 1;&lt;br /&gt;
        reset_t = 0;&lt;br /&gt;
    #2  reset_t = 1;&lt;br /&gt;
    #10 in_t = 0;&lt;br /&gt;
    #10 in_t = 1;&lt;br /&gt;
    #10 $stop();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
FSM1 DUT(&lt;br /&gt;
    .clock(clock_t),&lt;br /&gt;
    .reset(reset_t),&lt;br /&gt;
    .in(in_t),&lt;br /&gt;
    .detectOk(detectOk_t),&lt;br /&gt;
    .detectFail(detectFail_t)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2. Automat ce detecteaza fronturile crescatoare ale unui semnal==&lt;br /&gt;
Automatul ce detecteaza fronturile crescatoare are un singur semnal de intrare &amp;#039;&amp;#039;in&amp;#039;&amp;#039;, care reprezinta semnalul analizat si o singura iesire, &amp;#039;&amp;#039;out&amp;#039;&amp;#039;, generand pe aceasta un puls lung cat o perioada de ceas la fiecare aparitie a unui front crescator pe &amp;#039;&amp;#039;in&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Vom avea nevoie de 3 stari:&lt;br /&gt;
* Q0: automatul intra in aceasta stare la reset si va ramane in aceasta atata timp cat intrarea este 0 (inca nu a aparut niciun front crescator).&lt;br /&gt;
* Q1: automatul intra in aceasta stare atunci cand apare pe intrare un front crescator. Dupa aparitia frontului crescator sunt doua posibilitati: linia ramane in 1, ceea ce duce la trecerea in starea Q2 care va duce iesirea in 0 dupa o perioada de ceas, sau linia trece in 0 dupa un ciclu de ceas, ceea ce duce la revenirea in starea Q0.&lt;br /&gt;
* Q2: automatul intra in aceasta stare atunci cand linia de intrare ramane in 1 mai mult de o perioada de ceas. Automatul va ramane in aceasta stare atata timp cat &amp;#039;&amp;#039;in&amp;#039;&amp;#039; ramane in 1 si va reveni in starea Q0 imediat ce &amp;#039;&amp;#039;in&amp;#039;&amp;#039; revine in 0.&lt;br /&gt;
&lt;br /&gt;
Graful automatului este:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Organigrama FSM rising edge.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea automatului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module FSM2(&lt;br /&gt;
    input clock,&lt;br /&gt;
    input in,&lt;br /&gt;
    input reset,&lt;br /&gt;
    output out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
localparam Q0 = 2&amp;#039;b00;&lt;br /&gt;
localparam Q1 = 2&amp;#039;b01;&lt;br /&gt;
localparam Q2 = 2&amp;#039;b10;&lt;br /&gt;
&lt;br /&gt;
reg [1:0] state, state_next;&lt;br /&gt;
&lt;br /&gt;
always@(posedge clock) begin&lt;br /&gt;
    if(reset == 0)&lt;br /&gt;
        state &amp;lt;= Q0;&lt;br /&gt;
    else&lt;br /&gt;
        state &amp;lt;= state_next;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
always@(*) begin&lt;br /&gt;
    state_next = state;&lt;br /&gt;
    case(state)&lt;br /&gt;
        Q0: begin&lt;br /&gt;
                if(in == 1) state_next = Q1;&lt;br /&gt;
            end&lt;br /&gt;
        Q1: begin&lt;br /&gt;
                if(in == 0) state_next = Q0;&lt;br /&gt;
                if(in == 1) state_next = Q2;&lt;br /&gt;
            end&lt;br /&gt;
        Q2: begin&lt;br /&gt;
                if(in == 0) state_next = Q0;&lt;br /&gt;
            end&lt;br /&gt;
        default: state_next = Q0;&lt;br /&gt;
	endcase&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
assign out   = (state == Q1);&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea unui modul de test pentru FSM2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module FSM2_TB();&lt;br /&gt;
&lt;br /&gt;
reg  clock_t;&lt;br /&gt;
reg  reset_t;&lt;br /&gt;
reg  in_t;&lt;br /&gt;
wire out_t;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
    clock_t = 0;&lt;br /&gt;
    forever #1 clock_t = ~clock_t;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
        in_t = 0;&lt;br /&gt;
        reset_t = 0;&lt;br /&gt;
    #2  reset_t = 1;&lt;br /&gt;
    #10 in_t = 1;&lt;br /&gt;
    #5	in_t = 0;&lt;br /&gt;
    #10 in_t = 1;&lt;br /&gt;
    #5	in_t = 0;&lt;br /&gt;
    #10 $stop();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
FSM2 DUT(&lt;br /&gt;
    .clock(clock_t),&lt;br /&gt;
    .reset(reset_t),&lt;br /&gt;
    .in(in_t),&lt;br /&gt;
    .out(out_t)&lt;br /&gt;
);&lt;br /&gt;
   &lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gvpopescu</name></author>
	</entry>
</feed>