Menu
CoddyTech

Opóźnienia bramek

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 68 z 90.

Na poprzedniej lekcji omówiliśmy ogólne opóźnienia używane w taki sposób: #10 a = b;. Wstrzymują one wykonanie instrukcji.

W tej lekcji omawiamy opóźnienia bramek, które dotyczą podstawowych wbudowanych bramek, takich jak and, or i not. Opóźnienie bramki modeluje czas, jaki bramka sprzętowa potrzebuje na wygenerowanie wyjścia po zmianie jej wejść.

W rzeczywistym sprzęcie bramki nie reagują natychmiast. Występuje niewielkie opóźnienie. Gdy używasz wbudowanych prymitywów bramek, możesz dodać opóźnienie, aby symulować czas propagacji sygnału przez bramkę. Wyjście zmienia się dopiero po upływie określonego opóźnienia.

Różnica między opóźnieniem ogólnym a opóźnieniem bramki

 Opóźnienie ogólneOpóźnienie bramki
Składnia#10 a = b;and #5 (out, a, b);
Pozycja# przed instrukcją# wewnątrz prymitywu bramki
CelOdczekanie przed wykonaniemModelowanie czasu propagacji bramki

Składnia:

gate_type #(delay) (output, input1, input2, ...);

#(delay) określa, ile jednostek czasu bramka potrzebuje na reakcję.

Prosty przykład

and #5 (out, a, b);

Ta bramka AND potrzebuje 5 jednostek czasu, aby zmienić stan wyjścia po zmianie a lub b.

Opóźnienie bramki z wieloma wejściami

nand #8 (out, a, b, c, d);   // 4-wejściowa bramka NAND z opóźnieniem wynoszącym 8 jednostek czasu

Ważne zasady

ZasadaWyjaśnienie
Opóźnienie występuje po nazwie bramkiand #5 (out, a, b)
Wartość opóźnienia w jednostkach czasuOkreślana przez dyrektywę timescale
Wszystkie wejścia wpływają na wyjścieZmiana dowolnego wejścia może zmienić wyjście, ale dopiero po upływie opóźnienia
Nie można syntezowaćOpóźnienia bramek służą wyłącznie do symulacji
challenge icon

Wyzwanie

Dodaj brakujące opóźnienia bramek do tego modułu. Użyj różnych opóźnień dla każdej bramki.

Co zrobić:

  1. Bramka AND: opóźnienie 5 jednostek czasu
  2. Bramka OR: opóźnienie 3 jednostek czasu
  3. Bramka NOT: opóźnienie 2 jednostek czasu

Spróbuj swoich sił

module gate_delay_challenge;
  reg a, b;
  wire and_out, or_out, not_out;
  
  // TODO: Dodaj bramkę AND z opóźnieniem 5 jednostek czasu (wejścia a, b)
  
  // TODO: Dodaj bramkę OR z opóźnieniem 3 jednostek czasu (wejścia a, b)
  
  // TODO: Dodaj bramkę NOT z opóźnieniem 2 jednostek czasu (wejście a)
  

  initial begin
    $monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b", 
              $time, a, b, and_out, or_out, not_out);
    
    a = 1; b = 1;
    #10 $finish;
  end
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online