Sensitivity List
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 48 / 90.
Duyarlılık listesi, always bloğuna ne zaman çalıştırılacağını bildirir. @ sembolünden sonra parantezlerin içinde yazılır.
Duyarlılık list, always bloğunu tetikleyen signals veya olaylar kümesidir. when list içindeki herhangi bir signals changes, blok executes.
Sözdizimi:
always @(sensitivity_list) begin
// Kod, listedeki sinyaller değiştiğinde çalışır
endSensitivity List Türleri
| Tür | Sözdizimi | when Block executes |
|---|---|---|
| Tüm signals (kombinasyonel) | always @(*) | İçerideki herhangi bir signals changes |
| Belirli signals | always @(a or b) | a veya b changes olduğunda |
| Edge tetikleyici (Sequential) | always @(posedge clk) | clock'un rising edge'inde |
| Birden çok edge | always @(posedge clk or posedge reset) | clock edge'i veya reset edge'inde |
Seçenek 1: Tüm Sinyaller (*)
Kombinasyonel mantık için en güvenli ve en yaygın olanıdır.
always @(*) begin
out = a & b; // a veya b değiştiğinde çalışır
end*, blokta okunan tüm signals öğelerini otomatik olarak içerir.
Seçenek 2: Belirli Sinyaller
always @(a or b) begin
out = a & b; // a veya b değiştiğinde çalışır
endBir sinyali unutursanız, o sinyal değiştiğinde simülasyonda output güncellenmez; bu nedenle simülasyon artık sentezlenmiş donanımla eşleşmez.
Seçenek 3: Kenar Tetiklemeli (posedge)
always @(posedge clk) begin
q <= d; // Saatin yükselen kenarında çalışır
endYükselen kenar için posedge, düşen kenar için negedge kullanın.
Seçenek 4: Birden Fazla Kenar
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endRuns, clock edge veya reset edge üzerinde çalışır.
Yaygın Hatalar
| Hata | Neden Yanlış |
|---|---|
always @(a or b or c) kullanılır, ancak d kullanılır | d eksik → simülasyonda output güncelliğini yitirir (sim/synth uyumsuzluğu) |
always @(posedge clk or reset) | reset için posedge eksik |
always @(clk) | flip-flop'lar için posedge clk kullanılmalı |
Görev
Yapılacaklar:
- Bu flip-flop'un çalışmasını sağlamak için doğru duyarlılık listesini ekle. Blok,
clksinyalinin rising kenarında çalışmalıdır.
Kendin dene
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi