<?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_7_%3A_Circuite_secventiale_elementare_%282023%29</id>
	<title>CID aplicatii 7 : Circuite secventiale elementare (2023) - 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_7_%3A_Circuite_secventiale_elementare_%282023%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_aplicatii_7_:_Circuite_secventiale_elementare_(2023)&amp;action=history"/>
	<updated>2026-05-27T09:07: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_7_:_Circuite_secventiale_elementare_(2023)&amp;diff=7750&amp;oldid=prev</id>
		<title>Vserbu: Pagină nouă: ==Hazardul combinațional==   Hazardul apare atunci când modificarea unei intrări a unui circuit combinațional determină modificări nedorite ale ieșirii. Aceste variații apa...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_aplicatii_7_:_Circuite_secventiale_elementare_(2023)&amp;diff=7750&amp;oldid=prev"/>
		<updated>2024-09-20T11:59:26Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Hazardul combinațional==   Hazardul apare atunci când modificarea unei intrări a unui circuit combinațional determină modificări nedorite ale ieșirii. Aceste variații apa...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Hazardul combinațional== &lt;br /&gt;
&lt;br /&gt;
Hazardul apare atunci când modificarea unei intrări a unui circuit combinațional determină modificări nedorite ale ieșirii. Aceste variații apar datorită diferențelor de întârzieri pe diverse căi de la intrare către ieșire.&lt;br /&gt;
&lt;br /&gt;
De unde aceste întârzieri? Fiecare poartă este, așa cum am văzut la începutul aplicațiilor, un circuit electronic format, de obicei, din tranzistoare MOS. Răspunsul acestor dispozitive nu este instantaneu, introducând întârzieri. Timpul scurs de la modificarea unei intrări a unei porți până la modificarea corespunzătoare a ieșirii se numește timp de propagare.&lt;br /&gt;
&lt;br /&gt;
În figura următoare avem evidențiat timpul de propagare printr-o poartă &amp;#039;&amp;#039;SAU&amp;#039;&amp;#039; (Tp). Acesta este reprezentat de timpul scurs de la modificarea lui a până la modificarea ieșirii.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Comutare poarta SAU (2023).png | 400px]]&lt;br /&gt;
&lt;br /&gt;
Avănd un circuit cu mai multe porți în cascadă, căile prin care anumite semnale ajung la intrările unei anumite porți pot diferi. Datorită timpilor de propagare diferiți care afectează aceste semnale până să ajungă la poarta curentă și a timpului de propagare efectiv al porții curente, pot apărea la ieșire tranziții nedorite ale semnalelor. Dacă la ieșire se așteaptă ca linia să rămană constant în 1, dar apare o scurtă tranziție prin 0, hazardul se numește &amp;#039;&amp;#039;1 static&amp;#039;&amp;#039;. Dacă la ieșire se așteaptă ca linia să rămană constant în 0, dar apare o scurtă tranziție prin 1, hazardul se numește &amp;#039;&amp;#039;0 static&amp;#039;&amp;#039;. Dacă se așteaptă o tranziție la ieșire, dar apare un regim tranzitoriu cu numeroase tranziții până la stabilizare, hazardul se numește dinamic.&lt;br /&gt;
&lt;br /&gt;
Pentru a înțelege mai bine, să considerăm exemplul de mai jos:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Circuit comb hazard (2023).png | 400px]]&lt;br /&gt;
&lt;br /&gt;
Observăm că intrările porții &amp;#039;&amp;#039;P2&amp;#039;&amp;#039; urmează căi diferite: semnalul &amp;#039;&amp;#039;c&amp;#039;&amp;#039; este ieșirea unei porți, având o întârziere cauzată de timpul de propagare al porții &amp;#039;&amp;#039;P1&amp;#039;&amp;#039;, pe când semnalul &amp;#039;&amp;#039;b&amp;#039;&amp;#039; vine direct de la intrare, propagarea prin fir fiind neglijabilă. Să considerăm cazul în care intrarea &amp;#039;&amp;#039;a&amp;#039;&amp;#039; rămane permanent în 0, iar intrarea &amp;#039;&amp;#039;b&amp;#039;&amp;#039; comută la un moment dat din 0 în 1. Inițial, semnalul &amp;#039;&amp;#039;c&amp;#039;&amp;#039; este 1, iar &amp;#039;&amp;#039;d&amp;#039;&amp;#039; este 1. După comutarea lui &amp;#039;&amp;#039;b&amp;#039;&amp;#039;, semnalul &amp;#039;&amp;#039;c&amp;#039;&amp;#039; va comuta din 1 in 0, iar &amp;#039;&amp;#039;d&amp;#039;&amp;#039; va rămane 1. Acesta este cazul ideal. În realitate, datorită timpilor de propagare ai porților logice &amp;#039;&amp;#039;P1&amp;#039;&amp;#039; și &amp;#039;&amp;#039;P2&amp;#039;&amp;#039;, vom avea o scurtă tranziție prin 0:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Circuit comb hazard propagare (2023).png | 400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Atribuirea blocanta si non-blocanta==&lt;br /&gt;
Pentru ca simulatorul sa functioneze in mod corect si semnalele sa se modifice in simulare asa cum se modifica si in realitate este nevoie sa folosim atribuirea blocanta ( semnul &amp;quot;=&amp;quot;) la circuite combinationale si atribuirea non-blocanta (semnul &amp;quot;&amp;lt;=&amp;quot;) la circuite secventiale. &lt;br /&gt;
&lt;br /&gt;
In mod uzual orice always combinational ( &amp;#039;&amp;#039;&amp;#039;always@(*)&amp;#039;&amp;#039;&amp;#039; ) va folosi &amp;#039;&amp;#039;&amp;#039;atribuirea blocanta ( = )&amp;#039;&amp;#039;&amp;#039; si orice always pe ceas ( &amp;#039;&amp;#039;&amp;#039;always@(posedge clock)&amp;#039;&amp;#039;&amp;#039; ) va folosi &amp;#039;&amp;#039;&amp;#039;atribuirea non-blocanta ( &amp;lt;= )&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Diferenta dintre cele 2 atribuiri consta in modul in care simulatorul &amp;quot;executa&amp;quot; instructiunea de atribuire. La atribuirea blocanta se simuleaza linie cu linie, in ordinea in care acestea au fost scrise. La atribuirea non-blocanta se salveaza toti termenii din dreapta si se pun deodata (in acelasi pas de simulare) in termenii din stanga. Pentru a clarifica acest concept avem exemplul de mai jos: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
a = b;&lt;br /&gt;
b = a;&lt;br /&gt;
&lt;br /&gt;
c &amp;lt;= d;&lt;br /&gt;
d &amp;lt;= c;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In primul caz, deoarece am folosit atribuirea blocanta, a ia valoarea lui b si apoi b ia valoarea lui a, care deja a devenit b deci concret b ramane pe loc si deci atat a cat si b vor avea aceasi valoare la final.&lt;br /&gt;
&lt;br /&gt;
In al doilea caz, deoarece am folosit atribuirea non-blocanta, ce este in partea dreapta se transfera peste operanzii din stanga deodata, astfel c ia valoarea lui d si d ia valoarea lui c, la final avand loc o interschimbare.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Latch-ul==&lt;br /&gt;
Latch-urile sunt dispozitive elementare de memorare, sensibile la nivelul semnalelor de intrare. Exemple de astfel de dispozitive sunt latch-urile de tip SR și latch-urile de tip D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Latch-ul SR===&lt;br /&gt;
Latch-ul de tip SR poate fi realizat cu două porți &amp;#039;&amp;#039;SI NU&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;SAU NU&amp;#039;&amp;#039; și este un dispozitiv asincron controlat de stările semnalelor &amp;#039;&amp;#039;S&amp;#039;&amp;#039; (set) și &amp;#039;&amp;#039;R&amp;#039;&amp;#039; (reset). Tabelul de adevăr al acestui circuit este prezentat mai jos. &lt;br /&gt;
&lt;br /&gt;
[[Fișier:Latch SR (2023).png|400px]]&lt;br /&gt;
&lt;br /&gt;
Atunci când &amp;#039;&amp;#039;S&amp;#039;&amp;#039; este 1 și &amp;#039;&amp;#039;R&amp;#039;&amp;#039; este 0, ieșirea &amp;#039;&amp;#039;Q&amp;#039;&amp;#039; va deveni 1, iar &amp;#039;&amp;#039;Qn&amp;#039;&amp;#039; va deveni 0. Atunci când &amp;#039;&amp;#039;R&amp;#039;&amp;#039; este 1 și &amp;#039;&amp;#039;S&amp;#039;&amp;#039; este 0, ieșirea &amp;#039;&amp;#039;Q&amp;#039;&amp;#039; se resetează (devine 0), iar &amp;#039;&amp;#039;Qn&amp;#039;&amp;#039; devine 1. Starea de memorare apare atunci când atât &amp;#039;&amp;#039;R&amp;#039;&amp;#039; cât și &amp;#039;&amp;#039;S&amp;#039;&amp;#039; sunt 0 în același timp. Cazul în care &amp;#039;&amp;#039;R&amp;#039;&amp;#039; și &amp;#039;&amp;#039;S&amp;#039;&amp;#039; sunt 1 în același timp duce la un comportament nedorit. (atât &amp;#039;&amp;#039;Q&amp;#039;&amp;#039; cât și &amp;#039;&amp;#039;Qn&amp;#039;&amp;#039; vor fi 0, ceea ce este incorect din punct de vedere al logicii dorite – &amp;#039;&amp;#039;Qn&amp;#039;&amp;#039; să fie negatul lui &amp;#039;&amp;#039;Q&amp;#039;&amp;#039;). În plus, dacă din aceasta stare se dorește trecerea în starea de memorare (&amp;#039;&amp;#039;R&amp;#039;&amp;#039; = 0, &amp;#039;&amp;#039;S&amp;#039;&amp;#039; = 0), poate apărea oscilația. În realitate, cele două porți nu vor avea același timp de propagare datorită variațiilor de producție și circuitul va ajunge în cele din urma într-o stare stabilă, nepredictibilă.&lt;br /&gt;
&lt;br /&gt;
===Latch-ul de tip D===&lt;br /&gt;
Latch-ul de tip D elimină problema combinațiilor nedorite de la ieșire. Acesta modifică ieșire doar atunci când semnalul de enable (&amp;#039;&amp;#039;E&amp;#039;&amp;#039;) este 1. Altfel, atunci când &amp;#039;&amp;#039;E&amp;#039;&amp;#039; este 0, va memora starea anterioara (&amp;#039;&amp;#039;Qt-1&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Latch D (2023).png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bistabilul de tip D==&lt;br /&gt;
Bistabilul de tip D este un dispozitiv de memorare ce salvează valoarea intrării pe unul din fronturile ceasului (în mod uzual, frontul crescător). El poate fi obținut prin conectarea a două latch-uri de tip D, conform schemei de mai jos. De obicei, singura ieșire care ne interesează este &amp;#039;&amp;#039;Q&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Bistabil D (2023).png|300px]]&lt;br /&gt;
&lt;br /&gt;
Comportamentul bistabilului de tip D poate fi observat în forma de undă următoare. Modificările lui &amp;#039;&amp;#039;data_out&amp;#039;&amp;#039; sunt determinate de fronturile crescătoare ale semnalului &amp;#039;&amp;#039;clock&amp;#039;&amp;#039;. La apariția acestora, &amp;#039;&amp;#039;data_out&amp;#039;&amp;#039; va lua valoarea intrării &amp;#039;&amp;#039;data_in&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Forma unda bistabil (2023).png]]&lt;br /&gt;
&lt;br /&gt;
===Bistabilul de tip D cu reset sincron===&lt;br /&gt;
Resetarea unui bistabil înseamnă aducerea valorii memorate la 0 sau la o altă valoare de reset definită de cel care proiectează circuitul. Vom considera în exemplul nostru că semnalul de &amp;#039;&amp;#039;reset&amp;#039;&amp;#039; va fi activ în 0 și va face 0 valoarea memorată atunci când este activ. Un reset sincron înseamnă că acesta va acționa asupra valorii memorate&amp;#039;&amp;#039;data_out&amp;#039;&amp;#039; pe frontul crescător al ceasului.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Forma unda bistabil reset sincron (2023).png]]&lt;br /&gt;
&lt;br /&gt;
===Bistabilul de tip D cu reset asincron===&lt;br /&gt;
Un reset asincron înseamnă că acesta va acționa asincron, fără a ține cont de ceas. Acest lucru înseamnă că el va acționa asupra valorii memorate imediat ce devine activ. În exemplele noastre, vom considera semnalul de &amp;#039;&amp;#039;reset&amp;#039;&amp;#039; ca fiind activ în 0. Trecerea sa în 0 (frontul căzător) determină imediat resetarea circuitului. De asemenea, orice eveniment de front crescător de ceas ce apare cât timp reset-ul este activ, va duce la menținerea resetării circuitului. &lt;br /&gt;
&lt;br /&gt;
[[Fișier:Forma unda bistabil reset asincron (2023).png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exemple==&lt;br /&gt;
===Exemplul 1: Evidențierea hazardului combinațional===&lt;br /&gt;
&lt;br /&gt;
Implementați circuitul cu porți logice prezentat în secțiunea de introducere teoretică și reproduceți în modulul de testare variațiile semnalelor &amp;#039;&amp;#039;a&amp;#039;&amp;#039; și &amp;#039;&amp;#039;b&amp;#039;&amp;#039; propuse, astfel încât să observăm pe ieșirea &amp;#039;&amp;#039;d&amp;#039;&amp;#039; hazardul.&lt;br /&gt;
&lt;br /&gt;
Deoarece în simulare propagarea este ideală, va trebui să introducem un timp de propagare folosind &amp;#039;&amp;#039;#n&amp;#039;&amp;#039;. Acesta va avea efect doar în simulare și va fi ignorat la o eventuală sinteză.&lt;br /&gt;
&lt;br /&gt;
Pentru modulul de test, va trebui să alegem un timp de modificare a valorilor semnalelor mai mare decât timpul de propagare ales. Aici, vom folosi 1ns timp de propagare și 5ns timp de variație a intrărilor in testbench.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a circuitului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
`timescale 1ns/1ps&lt;br /&gt;
module Circuit(&lt;br /&gt;
    input a,&lt;br /&gt;
    input b,&lt;br /&gt;
    output c,&lt;br /&gt;
    output d&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
assign #1 c = ~(a | b);&lt;br /&gt;
assign #1 d = ~(c &amp;amp; b);&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 care să evidențieze hazardul&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 Circuit_TB();&lt;br /&gt;
&lt;br /&gt;
reg a_t, b_t;&lt;br /&gt;
wire c_t, d_t;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
       a_t = 0;&lt;br /&gt;
       b_t = 0;&lt;br /&gt;
    #5 b_t = 1;&lt;br /&gt;
    #5 $stop();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Circuit DUT(&lt;br /&gt;
    .a(a_t),&lt;br /&gt;
    .b(b_t),&lt;br /&gt;
    .c(c_t),&lt;br /&gt;
    .d(d_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;
&lt;br /&gt;
[[Fișier:Poza_hazard (2023).png ‎| 800px]]&lt;br /&gt;
&lt;br /&gt;
In acest exemplu se observa ca iesirea c se modifica la 1ns dupa modificarile intrarilor (intarizerea adaugata pentru transmiterea prin porti) si iesirea d se modifica de 2 ori: prima data la 1ns din cauza intrarilor si a doua oara dupa inca 1ns din cauza lui c. In intervalul [6-7]ns apare o valoare parazita, un hazard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Exemplul 2: Descrierea comportamentală a latch-ului de tip D===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Descrierea Verilog a modulului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module latch_D(&lt;br /&gt;
    input D,&lt;br /&gt;
    input E,&lt;br /&gt;
    output Q&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
assign Q = (E == 1) ? D : Q;&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;Modul de test pentru latch-ul D&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 latch_D_TB();&lt;br /&gt;
&lt;br /&gt;
reg D_t, E_t;&lt;br /&gt;
wire Q_t;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
       D_t = 0;&lt;br /&gt;
       E_t = 1;&lt;br /&gt;
    #1 D_t = 1;&lt;br /&gt;
    #1 D_t = 0;&lt;br /&gt;
    #1 E_t = 0;&lt;br /&gt;
    #1 D_t = 1;&lt;br /&gt;
    #1 D_t = 0;&lt;br /&gt;
    #5 $stop();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
latch_D DUT1(&lt;br /&gt;
    .D(D_t),&lt;br /&gt;
    .E(E_t),&lt;br /&gt;
    .Q(Q_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;
===Exemplul 3: Descrierea comportamentală a bistabilului de tip D===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Descrierea Verilog a modulului&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module flipflop_D(&lt;br /&gt;
    input data_in,&lt;br /&gt;
    input clock,&lt;br /&gt;
    output reg data_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
always@(posedge clock) begin&lt;br /&gt;
    data_out &amp;lt;= data_in; // atribuire non-blocanta&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;
&amp;#039;&amp;#039;&amp;#039;Modulul de test pentru bistabilul de tip D&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 flipflop_D_TB();&lt;br /&gt;
&lt;br /&gt;
reg data_in_t, clock_t;&lt;br /&gt;
wire data_out_t;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
       data_in_t = 0;&lt;br /&gt;
    #2 data_in_t = 1;&lt;br /&gt;
    #4 data_in_t = 0;&lt;br /&gt;
    #5 $stop();&lt;br /&gt;
end&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;
flipflop_D DUT(&lt;br /&gt;
    .data_in(data_in_t),&lt;br /&gt;
    .clock(clock_t),&lt;br /&gt;
    .data_out(data_out_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;
&amp;#039;&amp;#039;&amp;#039;Observatie:&amp;#039;&amp;#039;&amp;#039; Atunci cand avem un circuit secvential, se foloseste atribuirea non-blocanta (&amp;quot;&amp;lt;=”)&lt;br /&gt;
&lt;br /&gt;
==Exerciții==&lt;br /&gt;
===Exercițiul 1===&lt;br /&gt;
Descrieți structural latch-ul de tip SR, conform schemei din secțiunea de introducere teoretică. Puteți simula întârzierile prin porți folosind #1.&lt;br /&gt;
&lt;br /&gt;
Realizați un modul de test care să pună în evidență funcționarea. Respectați la generarea stimulilor următoarea variație (fiecare segment de timp durează 5ns).&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Forma unda latchSR (2023).png]]&lt;br /&gt;
&lt;br /&gt;
===Exercițiul 2===&lt;br /&gt;
Modificați descrierea bistabilului de tip D prezentată în exemple, astfel încât acesta să permită resetarea sincronă. Semnalul de reset va fi activ în 0.&lt;br /&gt;
&lt;br /&gt;
Realizați un modul de test care să respecte la generarea stimulilor forma de unda prezentată în secțiunea de introducere teoretică, la &amp;#039;&amp;#039;&amp;#039;Bistabilul de tip D cu reset sincron&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Exercițiul 3===&lt;br /&gt;
Modificați descrierea bistabilului de tip D prezentată în exemple, astfel încât acesta să permită resetarea asincronă. Semnalul de reset va fi activ în 0.&lt;br /&gt;
&lt;br /&gt;
Realizați un modul de test care să respecte la generarea stimulilor forma de unda prezentată în secțiunea de introducere teoretică, la &amp;#039;&amp;#039;&amp;#039;Bistabilul de tip D cu reset asincron&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicație&amp;#039;&amp;#039;&amp;#039;: Frontul căzător al semnalului &amp;#039;&amp;#039;reset&amp;#039;&amp;#039; va trebui să fie adăugat în lista de sensitivități a blocului always care determină modificarea lui &amp;#039;&amp;#039;data_out&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Exercițiul 4===&lt;br /&gt;
Pentru evidentierea hazardului combinational (si a modului in care acesta se rezolva) descrieti in Verilog si simulati urmatoarele 2 circuite:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Poza_circ_secventiale_basic_exercitiu_4_circuit (2023).png ‎| 600px]]&lt;br /&gt;
&lt;br /&gt;
Pentru a putea observa efectele hazardului, portile trebuie descrise ca avand timpi de propagare.&lt;br /&gt;
&lt;br /&gt;
Formele de unda pentru semnalele de la intrare vor fi:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Poza_circ_secventiale_basic_exercitiu_4_forme_unda (2023).png ‎| 600px]]&lt;br /&gt;
&lt;br /&gt;
===Exercițiul 5===&lt;br /&gt;
Pentru evidentierea efectului atribuirii blocant si non-blocante se va implementa si simula circuitul de mai jos. El este alcatuit din 3 registre, fiecare memorand (si punand la iesire) pe frontul pozitiv al ceasului valoarea de la intrare.&lt;br /&gt;
&lt;br /&gt;
Cele 3 registre de sus vor folosii atribuirea blocanta si cele 3 registre de jos vor folosii atribuirea non-blocanta. In simulare se doreste a se vizualiza: intrarile, iesirile, firele interne de legatura dintre registrii.&lt;br /&gt;
&lt;br /&gt;
Pentru a scrie semnificativ mai putin, nu este nevoie sa instantiati fiecare registru dintro serie ca modul separat ci se pot face toate cele 3 atribuiri in cadrul aceluiasi bloc &amp;quot;always&amp;quot;, la nivelul de top. Practic tot circuitul se reduce la un fisier de top ce contine intrari/iesiri, declararea registrilor pe 1b si cele 2 always-uri care dicteaza functionarea.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Poza_circ_secventiale_basic_exercitiu_5_circuit (2023).png ‎| 600px]]&lt;/div&gt;</summary>
		<author><name>Vserbu</name></author>
	</entry>
</feed>