Disable Statement
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 62 / 90.
disable ifadesi, named block (örneğin bir forever döngüsü, begin-end bloğu veya görev) yürütmesini durdurur. Aksi takdirde sonsuza kadar çalışacak döngülerden çıkmak için kullanışlıdır.
Sözdizimi:
disable block_name;Blok bir adla etiketlenmelidir.
Disable ile Forever Döngüsü
initial begin : counter // counter bloğa counter adını verir.
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter o adlı bloğun tamamını durdurur.
end
end
endforever döngüsü named bir block counter içindedir. disable counter ifadesi döngünün içine yerleştirilmiştir. count 5'e ulaştığında disable counter çalışır ve entire block counter durdurur; bu da forever döngüsünü hemen durdurur.
Ayrı Bir Blokta disable
initial begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // counter bloğunu dışarıdan durdurur
endBurada, forever döngüsü counter adlı blok içinde sürekli olarak çalışır. disable counter ifadesi ayrı bir initial bloğuna yerleştirilmiştir. 50 zaman biriminden sonra disable counter yürütülür ve counter bloğunu durdurarak forever döngüsünü dışarıdan sonlandırır.
Önemli Kurallar
| Kural | Açıklama |
|---|---|
| Blok adlandırılmalıdır | begin : block_name |
| Disable yürütmeyi hemen durdurur | Kod o anda durur |
| Her yerden kullanılabilir | modüldeki herhangi bir block içinden |
forever döngülerini durdurmak için kullanışlıdır | Aksi takdirde asla durmazlar |
Görev
forever çalışan bir counter içeren bir module veriliyor.
Yapılacaklar:
Her yorumu doğru kodla değiştirerek boş block'u tamamla:
- 50 time units beklemek için
#50;ekle - counter block'unu durdurmak için
disable counter;ekle - mesajı yazdırmak için
$display("Counter stopped");ekle - simulation'ı sonlandırmak için
$finish;ekle
Kendin dene
module disable_challenge;
integer count;
initial begin
count = 0;
fork
begin : counter
forever begin
#10 count = count + 1;
$display("count = %d", count);
end
end
begin
// Adım 1: 50 zaman birimi bekle
// Adım 2: counter bloğunu devre dışı bırak
// Adım 3: "Counter stopped" yazdır
// Adım 4: Simülasyonu sonlandır
end
join
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