<?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_13</id>
	<title>CID Aplicatii 13 - 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_13"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_13&amp;action=history"/>
	<updated>2026-06-04T16:13:37Z</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_13&amp;diff=6953&amp;oldid=prev</id>
		<title>Cbira: Cbira a redenumit pagina CID Aplicatii 12 în CID Aplicatii 13</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_13&amp;diff=6953&amp;oldid=prev"/>
		<updated>2021-05-06T06:09:06Z</updated>

		<summary type="html">&lt;p&gt;Cbira a redenumit pagina &lt;a href=&quot;/index.php/CID_Aplicatii_12&quot; title=&quot;CID Aplicatii 12&quot;&gt;CID Aplicatii 12&lt;/a&gt; în &lt;a href=&quot;/index.php/CID_Aplicatii_13&quot; title=&quot;CID Aplicatii 13&quot;&gt;CID Aplicatii 13&lt;/a&gt;&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:09&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_13&amp;diff=6949&amp;oldid=prev</id>
		<title>Gvpopescu: Pagină nouă: == Automate finite. Exercitii== ===Exercitiul 1=== Sa se implementeze un circuit care genereaza un semnal PWM cu un factor de umplere ce variaza triungular, la fiecare front cazato...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_13&amp;diff=6949&amp;oldid=prev"/>
		<updated>2021-05-04T09:09:45Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Automate finite. Exercitii== ===Exercitiul 1=== Sa se implementeze un circuit care genereaza un semnal PWM cu un factor de umplere ce variaza triungular, la fiecare front cazato...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Automate finite. Exercitii==&lt;br /&gt;
===Exercitiul 1===&lt;br /&gt;
Sa se implementeze un circuit care genereaza un semnal PWM cu un factor de umplere ce variaza triungular, la fiecare front cazator al unui semnal de intrare.&lt;br /&gt;
&lt;br /&gt;
Schema circuitului este:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:FSM Exercitiu.png]]&lt;br /&gt;
&lt;br /&gt;
Modulele componente ale circuitului sunt:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FallingEdgeDetector&amp;#039;&amp;#039;&amp;#039;: Automat ce detecteaza fronturile descrescatoare ale semnalului de intrare.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;TriangularCounter&amp;#039;&amp;#039;&amp;#039;: Automat ce genereaza la iesire secventa de numere 64, 128, 192, 255, 192, 128, 64.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Counter&amp;#039;&amp;#039;&amp;#039;: Numarator pe 8 biti cu reset sincron.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;COMP&amp;#039;&amp;#039;&amp;#039;: Comparator cu doua intrari pe 8 biti. Iesirea sa va fi 1 atunci cand counter &amp;lt; out si 0 in rest.&lt;br /&gt;
&lt;br /&gt;
====Modulul Counter====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module Counter(&lt;br /&gt;
    input clock,&lt;br /&gt;
    input reset,&lt;br /&gt;
    output reg [7:0] count&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
always@(posedge clock) begin&lt;br /&gt;
    if(reset == 0)&lt;br /&gt;
        count &amp;lt;= 0;&lt;br /&gt;
    else&lt;br /&gt;
        count &amp;lt;= count + 1;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Modulul COMP====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module Comparator(&lt;br /&gt;
    input [7:0] in0,&lt;br /&gt;
    input [7:0] in1,&lt;br /&gt;
    output comp_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
assign comp_out = (in0 &amp;lt; in1) ? 1 : 0;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Modulul FallingEdgeDetector====&lt;br /&gt;
Automatul ce detecteaza fronturile descrescatoare 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 descrescator pe &amp;#039;&amp;#039;in&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Graful automatului este:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Graf FSM falling edge.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module FallingEdgeDetector(&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 == 0) state_next = Q1;&lt;br /&gt;
            end&lt;br /&gt;
        Q1: begin&lt;br /&gt;
                if(in == 1) state_next = Q0;&lt;br /&gt;
                if(in == 0) state_next = Q2;&lt;br /&gt;
            end&lt;br /&gt;
        Q2: begin&lt;br /&gt;
                if(in == 1) 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;
====Modulul TriangularCounter====&lt;br /&gt;
Acest modul este un automat ce genereaza la iesire secventa de numere 64, 128, 192, 255, 192, 128, 64.&lt;br /&gt;
&lt;br /&gt;
Graful automatului este:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Graf FSM triangular cnt.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module TriangularCounter(&lt;br /&gt;
    input clock,&lt;br /&gt;
    input in,&lt;br /&gt;
    input reset,&lt;br /&gt;
    output reg [7:0] out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
localparam Q0 = 3&amp;#039;b000;&lt;br /&gt;
localparam Q1 = 3&amp;#039;b001;&lt;br /&gt;
localparam Q2 = 3&amp;#039;b010;&lt;br /&gt;
localparam Q3 = 3&amp;#039;b011;&lt;br /&gt;
localparam Q4 = 3&amp;#039;b100;&lt;br /&gt;
localparam Q5 = 3&amp;#039;b101;&lt;br /&gt;
&lt;br /&gt;
reg [2: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: if(in == 1) state_next = Q1;&lt;br /&gt;
        Q1: if(in == 1) state_next = Q2;&lt;br /&gt;
        Q2: if(in == 1) state_next = Q3;&lt;br /&gt;
        Q3: if(in == 1) state_next = Q4;&lt;br /&gt;
        Q4: if(in == 1) state_next = Q5;&lt;br /&gt;
        Q5: if(in == 1) state_next = Q0;&lt;br /&gt;
        default: state_next = Q0;&lt;br /&gt;
    endcase&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
always@(*) begin&lt;br /&gt;
    if(state == Q0)&lt;br /&gt;
        out = 64;&lt;br /&gt;
    if((state == Q1) || (state == Q5))	&lt;br /&gt;
        out = 128;&lt;br /&gt;
    if((state == Q2) || (state == Q4))	&lt;br /&gt;
        out = 192;	&lt;br /&gt;
    if(state == Q3)&lt;br /&gt;
        out = 255;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Modulul TOP====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea modulului TOP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module TOP(&lt;br /&gt;
    input clock,&lt;br /&gt;
    input reset,&lt;br /&gt;
    input in, &lt;br /&gt;
    output comp_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
wire w1;&lt;br /&gt;
wire [7:0] count, tricount;&lt;br /&gt;
&lt;br /&gt;
FallingEdgeDetector FEDET(&lt;br /&gt;
    .clock(clock),&lt;br /&gt;
    .in(in),&lt;br /&gt;
    .reset(reset),&lt;br /&gt;
    .out(w1)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
Counter COUNT(&lt;br /&gt;
    .clock(clock),&lt;br /&gt;
    .reset(reset),&lt;br /&gt;
    .count(count)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
TriangularCounter TCNT(&lt;br /&gt;
    .clock(clock),&lt;br /&gt;
    .in(w1),&lt;br /&gt;
    .reset(reset),&lt;br /&gt;
    .out(tricount)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
Comparator COMP(&lt;br /&gt;
    .in0(count),&lt;br /&gt;
    .in1(tricount),&lt;br /&gt;
    .comp_out(comp_out)&lt;br /&gt;
);&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 TOP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
`timescale 1ns/1ps&lt;br /&gt;
&lt;br /&gt;
module TOP_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 comp_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;
integer idx;&lt;br /&gt;
	&lt;br /&gt;
initial begin&lt;br /&gt;
        reset_t = 0;&lt;br /&gt;
        in_t = 1;&lt;br /&gt;
    #2 	reset_t = 1;&lt;br /&gt;
        for(idx=0; idx&amp;lt;8; idx=idx+1) begin&lt;br /&gt;
            #1000  in_t = 0;&lt;br /&gt;
            #2     in_t = 1;&lt;br /&gt;
        end&lt;br /&gt;
    #2$stop();	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
TOP DUT(&lt;br /&gt;
    .clock(clock_t),&lt;br /&gt;
    .reset(reset_t),&lt;br /&gt;
    .in(in_t),&lt;br /&gt;
    .comp_out(comp_out_t)&lt;br /&gt;
);&lt;br /&gt;
	&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gvpopescu</name></author>
	</entry>
</feed>