Menu
Coddy logo textTech

Lista czułości

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

Lista czułości informuje blok always, kiedy ma się wykonać. Zapisuje się ją w nawiasach po symbolu @.

Lista czułości to zbiór sygnałów lub zdarzeń, które wyzwalają blok always. Gdy dowolny sygnał z listy ulegnie zmianie, blok zostanie wykonany.

Składnia:

always @(sensitivity_list) begin
  // Kod wykonuje się, gdy zmieniają się sygnały na liście
end

Typy listy czułości

TypSkładniaKiedy blok jest wykonywany
Wszystkie sygnały (kombinacyjnie)always @(*)Gdy zmieni się dowolny sygnał wewnątrz
Określone sygnałyalways @(a or b)Gdy zmieni się a lub b
Wyzwalanie zboczem (sekwencyjnie)always @(posedge clk)Na narastającym zboczu zegara
Wiele zboczyalways @(posedge clk or posedge reset)Na zboczu zegara lub zboczu sygnału reset

Opcja 1: Wszystkie sygnały (*)

Najbezpieczniejsza i najczęściej stosowana w logice kombinacyjnej.

always @(*) begin
  out = a & b;   // Wykonuje się, gdy zmienia się a lub b
end

* automatycznie uwzględnia wszystkie sygnały odczytane w bloku.

Opcja 2: Konkretne sygnały

always @(a or b) begin
  out = a & b;   // Wykonuje się, gdy zmienia się a lub b
end

Jeśli zapomnisz o sygnale, wyjście nie aktualizuje się w symulacji, gdy ten sygnał ulega zmianie, więc symulacja przestaje odpowiadać zsyntezowanemu sprzętowi.

Opcja 3: Wyzwalanie zboczem (posedge)

always @(posedge clk) begin
  q <= d;        // Wykonuje się przy narastającym zboczu zegara
end

Użyj posedge dla zbocza narastającego, a negedge dla zbocza opadającego.

Opcja 4: Wiele zboczy

always @(posedge clk or posedge reset) begin
  if (reset)
    q <= 0;
  else
    q <= d;
end

Wykonuje się przy zboczu zegara lub zboczu resetu.

Częste błędy

BłądDlaczego jest błędny
always @(a or b or c), ale używa dBrak d → wyjście staje się nieaktualne w symulacji (niezgodność symulacji i syntezy)
always @(posedge clk or reset)Brak posedge dla resetu
always @(clk)Dla przerzutników należy użyć posedge clk
challenge icon

Wyzwanie

Co należy zrobić:

  1. Dodaj prawidłową listę czułości, aby ten przerzutnik działał. Blok powinien wykonywać się przy narastającym zboczu sygnału clk.

Spróbuj swoich sił

module flipflop (
  input clk,
  input d,
  output reg q
);
  
  always @(______) begin
    q <= d;
  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