<?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_6</id>
	<title>CID Aplicatii 6 - 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_6"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_6&amp;action=history"/>
	<updated>2026-05-14T06:22:56Z</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_6&amp;diff=6913&amp;oldid=prev</id>
		<title>Gvpopescu: Pagină nouă: ==1. Tri-State buffer== &#039;&#039;&#039;Tri-State Buffer&#039;&#039;&#039; este un circuit care, prin intermediul unui semnal de enable, controleaza daca intrarea sa va fi conectata la iesire sau nu. In cazul...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=CID_Aplicatii_6&amp;diff=6913&amp;oldid=prev"/>
		<updated>2021-03-27T10:29:08Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==1. Tri-State buffer== &amp;#039;&amp;#039;&amp;#039;Tri-State Buffer&amp;#039;&amp;#039;&amp;#039; este un circuit care, prin intermediul unui semnal de enable, controleaza daca intrarea sa va fi conectata la iesire sau nu. In cazul...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==1. Tri-State buffer==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tri-State Buffer&amp;#039;&amp;#039;&amp;#039; este un circuit care, prin intermediul unui semnal de enable, controleaza daca intrarea sa va fi conectata la iesire sau nu. In cazul in care semnalul de enable este activ, la iesire va fi conectat semnalul de intrare (se comporta ca un buffer obisnuit). Daca enable nu este activ, iesirea sa va fi pusa in stare de high-Z (high-impendance sau open-circuit), deconectand iesirea de la circuitul la care este conectat.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Tri-State buffer.png]]&lt;br /&gt;
&lt;br /&gt;
Acest tip de buffer permite mai multor circuite sa foloseasca aceeasi linie de iesire.&lt;br /&gt;
O aplicatie comuna a acestui tip de buffer este conectarea unui circuit la o magistrala bidirectionala. Modalitatea de conectare a unui circuitului la o astfel de magistrala este descrisa in figura urmatoare:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Connecting Tri-State buffer.png|300px]]&lt;br /&gt;
&lt;br /&gt;
n schema de mai sus, &amp;#039;&amp;#039;TX&amp;#039;&amp;#039; reprezinta data ce trebuie transmisa, &amp;#039;&amp;#039;RX&amp;#039;&amp;#039; data ce se receptioneaza, &amp;#039;&amp;#039;data&amp;#039;&amp;#039; este magistrala bidirectionala, iar &amp;#039;&amp;#039;direction&amp;#039;&amp;#039; controleaza directia datelor (circuitul transmite sau receptioneaza). Transmisia si receptia nu se pot face in acelasi timp.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Implementarea Verilog a circuitului de conectare (magistrala pe 8 biti)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Verilog&amp;quot;&amp;gt;&lt;br /&gt;
module Bidirectional(&lt;br /&gt;
    input [7:0] TX,&lt;br /&gt;
    input direction,&lt;br /&gt;
    output [7:0] RX,&lt;br /&gt;
    inout [7:0] data&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//RX buffer&lt;br /&gt;
assign RX = data;&lt;br /&gt;
//TX Tri-State buffer&lt;br /&gt;
assign data = (direction == 1) ? TX : 8&amp;#039;bZ;&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 Verilog a modulului de test&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Pentru a putea testa un circuit care contine un Tri-State buffer (un semnal de tip inout), trebuie sa procedam astfel: In modulul de test, pentru fiecare intrare se defineste un reg si pentru fiecare iesire se defineste un wire. Pentru fiecare semnal de tip inout se definesc doua semnale: un wire (aici, &amp;#039;&amp;#039;data_t&amp;#039;&amp;#039;), ce va fi conectat la modulul testat, si un reg (aici, &amp;#039;&amp;#039;data_in_t&amp;#039;&amp;#039;), ce va fi conectat printr-un Tri-State buffer (enable inversat fata de cel din modulul testat) la semnalul de tip wire (aici, &amp;#039;&amp;#039;data_t&amp;#039;&amp;#039;). Vom folosi acest reg pentru a genera stimuli in timpul simularii unei receptii.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Tri-State buffer TB.png]]&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;
&lt;br /&gt;
module Bidirectional_TB();&lt;br /&gt;
&lt;br /&gt;
reg [7:0] TX_t;&lt;br /&gt;
reg direction_t;&lt;br /&gt;
wire [7:0] RX_t;&lt;br /&gt;
wire [7:0] data_t;&lt;br /&gt;
reg [7:0] data_in_t;&lt;br /&gt;
&lt;br /&gt;
assign data_t = (direction_t == 0) ? data_in_t : 8&amp;#039;dZ;&lt;br /&gt;
&lt;br /&gt;
initial begin&lt;br /&gt;
       data_in_t = 8&amp;#039;d0;&lt;br /&gt;
       TX_t = 8&amp;#039;d1;&lt;br /&gt;
       direction_t = 1; //transmitere&lt;br /&gt;
    #2 data_in_t = 8&amp;#039;d7;&lt;br /&gt;
       direction_t = 0; //receptie&lt;br /&gt;
    #2 TX_t = 8&amp;#039;d3;&lt;br /&gt;
       direction_t = 1; //transmitere&lt;br /&gt;
    #5 $stop();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Bidirectional DUT(&lt;br /&gt;
    .TX(TX_t),&lt;br /&gt;
    .direction(direction_t),&lt;br /&gt;
    .RX(RX_t),&lt;br /&gt;
    .data(data_t)&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;Observatii&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. &amp;#039;&amp;#039;&amp;#039;Semnalul &amp;#039;&amp;#039;data&amp;#039;&amp;#039; ia valoarea lui &amp;#039;&amp;#039;TX&amp;#039;&amp;#039; atunci cand &amp;#039;&amp;#039;direction&amp;#039;&amp;#039; este 1. De asemenea, &amp;#039;&amp;#039;RX&amp;#039;&amp;#039; ia valoarea lui TX deoarece este conectat la data printr-un buffer simplu. Valoarea lui &amp;#039;&amp;#039;RX&amp;#039;&amp;#039; va trebui sa fie ignorata de circuit atunci cand &amp;#039;&amp;#039;direction&amp;#039;&amp;#039; este 1 (transmisie). &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2.&amp;#039;&amp;#039;&amp;#039; Atunci cand &amp;#039;&amp;#039;direction&amp;#039;&amp;#039; este 0 avem o receptie, &amp;#039;&amp;#039;data&amp;#039;&amp;#039; si &amp;#039;&amp;#039;RX&amp;#039;&amp;#039; actualizandu-se cu valoarea lui &amp;#039;&amp;#039;data_in_t&amp;#039;&amp;#039;, care simuleaza un alt modul ce transmite catre circuitul testat. &amp;#039;&amp;#039;TX&amp;#039;&amp;#039; nu se modifica in acest caz deoarece este deconectat de catre Tri-State buffer de la magistrala &amp;#039;&amp;#039;data&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==2. Hazardul combinational== &lt;br /&gt;
&lt;br /&gt;
Hazardul apare atunci cand modificarea unei intrari a unui circuit combinational determina modificari nedorite ale iesirii. Aceste variatii apar datorita diferentelor de intarzieri ce apar pe diverse cai de la intrare catre iesire.&lt;br /&gt;
&lt;br /&gt;
De unde aceste intarzieri? Fiecare poarta este, asa cum am vazut la inceputul aplicatiilor, un circuit electronic format, de obicei, din tranzistoare MOS. Raspunsul acestor dispozitive nu este instantaneu, introducand astfel intarzieri. Timpul scurs de la modificarea unei intrari a unei porti pana la modificarea corespunzatoare a iesirii se numeste timp de propagare.&lt;br /&gt;
&lt;br /&gt;
In figura urmatoare avem evidentiat timpul de propagare printr-o poarta &amp;#039;&amp;#039;SAU&amp;#039;&amp;#039;. De la modificarea lui a pana la modificarea iesirii trece un interval de timp Tp. Acesta este timpul de propagare prin poarta.&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Comutare poarta SAU.png]]&lt;br /&gt;
&lt;br /&gt;
Avand un circuit cu mai multe porti in cascada, caile prin care anumite semnale ajung la intrarile unei anumite porti pot diferi. Datorita timpilor de propagare diferiti care afecteaza aceste semnale pana sa ajunga la poarta curenta si a timpului de propagare efectiv al porti curente, pot aparea la iesire tranzitii nedorite ale semnalelor. Daca la iesire se asteapta ca linia sa ramana constant in 1, dar apare o scurta tranzitie prin 0, hazardul se numeste &amp;#039;&amp;#039;1 static&amp;#039;&amp;#039;. Daca la iesire se asteapta ca linia sa ramana constant in 0, dar apare o scurta tranzitie prin 1, hazardul se numeste &amp;#039;&amp;#039;0 static&amp;#039;&amp;#039;. Daca se asteapta o tranzitie la iesire, dar apare un regim tranzitoriu cu numeroase tranzitii pana la stabilizare, hazardul se numeste dinamic.&lt;br /&gt;
&lt;br /&gt;
Pentru a intelege mai bine, sa consideram exemplul de mai jos:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Circuit comb hazard.png]]&lt;br /&gt;
&lt;br /&gt;
Observam ca intrarile portii &amp;#039;&amp;#039;P2&amp;#039;&amp;#039; urmeaza cai diferite: semnalul &amp;#039;&amp;#039;c&amp;#039;&amp;#039; este iesirea unei porti, avand o intarziere cauzata de timpul de propagare al portii &amp;#039;&amp;#039;P1&amp;#039;&amp;#039;, pe cand semnalul &amp;#039;&amp;#039;b&amp;#039;&amp;#039; vine direct de la intrare, propagarea prin fir fiind neglijabila. Sa consideram cazul in care intrarea &amp;#039;&amp;#039;a&amp;#039;&amp;#039; ramane permanent in 0, iar intrarea &amp;#039;&amp;#039;b&amp;#039;&amp;#039; comuta la un moment dat din 0 in 1. Initial, semnalul de iesire &amp;#039;&amp;#039;c&amp;#039;&amp;#039; este 1, iar &amp;#039;&amp;#039;d&amp;#039;&amp;#039; este 1. Dupa 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 ramane 1. Acesta este cazul ideal. In realitate, datorita timpilor de propagare ai portilor logice &amp;#039;&amp;#039;P1&amp;#039;&amp;#039; si &amp;#039;&amp;#039;P2&amp;#039;&amp;#039;, vom avea o scurta tranzitie prin 0:&lt;br /&gt;
&lt;br /&gt;
[[Fișier:Circuit comb hazard propagare.png]]&lt;br /&gt;
&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;
Putem simula timpul de propagare (neobservabil in mod normal in simulare) prin introducerea unor intarzieri (care nu au efect asupra sintezei circuitului) pentru fiecare poarta din circuit:&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 sa evidentieze 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;/div&gt;</summary>
		<author><name>Gvpopescu</name></author>
	</entry>
</feed>