Menu
Coddy logo textTech

הוראת השבתה

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 62 מתוך 90.

הפקודה disable עוצרת את הביצוע של בלוק בעל שם (כמו לולאת forever, בלוק begin-end או משימה). היא שימושית ליציאה מלולאות שאחרת היו רצות לנצח.

תחביר:

disable block_name;

יש לסמן את הבלוק בשם.

השבתה באמצעות לולאה אינסופית

initial begin : counter // counter נותן לבלוק את השם counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter עוצר את כל הבלוק בעל השם הזה.
    end
  end
end

לולאת forever נמצאת בתוך בלוק בשם counter. הפקודה disable counter ממוקמת בתוך הלולאה. כאשר count מגיע ל־5, הפקודה disable counter מתבצעת ועוצרת את כל הבלוק counter, מה שעוצר מיד גם את לולאת forever.

השבתה בבלוק נפרד

initial begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter;   // עוצר את הבלוק counter מבחוץ
end

כאן, לולאת forever פועלת ברציפות בתוך הבלוק ששמו counter. המשפט disable counter ממוקם בבלוק initial נפרד. לאחר 50 יחידות זמן, disable counter מתבצע ועוצר את הבלוק counter, ובכך מסיים את לולאת forever מבחוץ.

כללים חשובים

כללהסבר
חובה לתת שם לבלוקbegin : block_name
השבתה מפסיקה את הביצוע מידהקוד נעצר באותו רגע
אפשר להשתמש בזה מכל מקוםמכל בלוק במודול
שימושי לעצירת לולאות foreverאחרת הן לעולם לא נעצרות
challenge icon

אתגר

ניתן לך מודול עם מונה שרץ לנצח. 

מה לעשות:

השלם את הבלוק הריק על ידי החלפת כל הערה בקוד המתאים:

  1. הוסף #50; כדי להמתין 50 יחידות זמן
  2. הוסף disable counter; כדי לעצור את בלוק המונה
  3. הוסף $display("Counter stopped"); כדי להדפיס את ההודעה
  4. הוסף $finish; כדי לסיים את הסימולציה

נסו בעצמכם

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
        // שלב 1: המתן 50 יחידות זמן
        
        // שלב 2: השבת את הבלוק counter
        
        // שלב 3: הדפס "Counter stopped"
        
        // שלב 4: סיים את הסימולציה
        
      end
    join
  end
endmodule
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Verilog אונליין