Menu
Coddy logo textTech

שימוש במשימות מערכת

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

משימות מערכת הן פקודות מובנות ב-Verilog שמתחילות בסימן דולר ($). הן מבצעות פעולות שימושיות כמו הדפסת הודעות, סיום סימולציה ויצירת קובצי צורות גל.

כבר עסקנו ב-$display, ב-$monitor, ב-$dumpfile וב-$dumpvars בשיעורים קודמים. בשיעור הזה נבחן משימות מערכת נוספות שמועילות בספסלי בדיקה.

משימות מערכת נוספות

משימת מערכתמטרה
$timeהחזרת זמן הסימולציה הנוכחי
$finishסיום הסימולציה
$stopהשהיית הסימולציה
$randomיצירת מספר אקראי

$time

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

$display("Current time is %0t", $time);

$finish

מסיים את הסימולציה. השתמשו בו תמיד בסוף ספסל הבדיקה שלכם.

$finish;

$stop

משהה את הסימולציה. אפשר להמשיך אותה באמצעות פקודה של הסימולטור. שימושי לניפוי באגים.

$stop;

$random

יוצר מספר אקראי. שימושי ליצירת גירוי בדיקה אקראי.

reg [7:0] rand_value;
rand_value = $random;

דוגמה לשימוש בכמה משימות מערכת

module system_tasks_demo;
  reg [7:0] data;
  integer i;
  
  initial begin
    $display("Simulation started at time %0t", $time);
    
    for (i = 0; i < 5; i = i + 1) begin
      data = $random;
      $display("Random value %d: %b", i, data);
    end
    
    $stop;
    #10 $display("Resumed at time %0t", $time);
    
    $display("Simulation finished at time %0t", $time);
    $finish;
  end
endmodule
challenge icon

אתגר

הוסף את משימות המערכת החסרות לספסל הבדיקה הזה.

מה לעשות:

  1. הוסף $display כדי להדפיס את הזמן הנוכחי בתחילת התהליך
  2. הוסף $display כדי להדפיס את הזמן הנוכחי בסוף התהליך
  3. הוסף $finish כדי לסיים את הסימולציה

נסו בעצמכם

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // TODO: הוסף $display עם השעה הנוכחית בתחילת הסימולציה
    // פורמט: "Start time: %0t"
    
    
    $monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    // TODO: הוסף $display עם השעה הנוכחית בסוף הסימולציה
    // פורמט: "End time: %0t"
    
    
    // TODO: הוסף $finish
    
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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