Menu
Coddy logo textTech

יצירת אותות גירוי

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

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

חשוב על זה כמו על בדיקת מכונה: לוחצים על כפתורים שונים (גירויים) וצופים במה שקורה (פלטים). יצירת גירויים טובים היא חלק חיוני מכתיבת ספסל בדיקה.

לדוגמה, התבוננו בגירוי בסביבת הבדיקה הבאה:

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

  initial begin
    // הגירוי מתחיל כאן
    
    // מקרה בדיקה 1: שני הקלטים הם 0
    a = 0; b = 0; #10;
    
    // מקרה בדיקה 2: a=0, b=1
    a = 0; b = 1; #10;
    
    // מקרה בדיקה 3: a=1, b=0
    a = 1; b = 0; #10;
    
    // מקרה בדיקה 4: שני הקלטים הם 1
    a = 1; b = 1; #10;

    // הגירוי מסתיים כאן
    
    $finish;
  end
endmodule

כל גירוי מוחל, ואז ממתינים 10 יחידות זמן (#10) לפני הגירוי הבא. כך נותנים ל-DUT זמן להפיק פלט.

שיטות ליצירת STIMULUS

שיטהמתאים ביותר לדוגמה
השמות עוקבותבדיקות פשוטותa = 0; b = 0; #10;
לולאת Forבדיקת כל הצירופיםfor (i = 0; i < 4; i++)
לולאת Repeatדפוסים חוזריםrepeat (10) #5 clk = ~clk;
לולאת Foreverאותות רציפיםforever #5 clk = ~clk;

שיטה 1: השמות עוקבות

הדרך הפשוטה ביותר ליצור גירוי. משייכים ערכים בזה אחר זה, עם השהיות.

initial begin
  a = 0; b = 0; #10;
  a = 0; b = 1; #10;
  a = 1; b = 0; #10;
  a = 1; b = 1; #10;
  $finish;
end

שיטה 2: לולאת for

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

integer i;

initial begin
  for (i = 0; i < 4; i = i + 1) begin
    {a, b} = i;
    #10;
  end
  $finish;
end

זה בודק: 00, 01, 10, 11.

שיטה 3: לולאת repeat

שימושית לחזרה על אותו גירוי פעמים רבות.

initial begin
  a = 0; b = 1;
  repeat (10) begin
    #10 a = ~a;
  end
  $finish;
end

שיטה 4: לולאה אינסופית

שימושית לאותות מתמשכים כמו שעונים.

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

כללים חשובים

כללהסבר
השתמשו בהשהיות בין השמות של גירויים#10 מאפשר ל-DUT זמן להגיב
השתמשו ב-reg עבור אותות גירויכי הם משתנים לאורך זמן
הוסיפו $finish בסוףכדי לעצור את הסימולציה
challenge icon

אתגר

ניתן לך מודול של שער OR. המשימה שלך היא להוסיף את ה־stimulus החסר ואת פקודות $display כדי להדפיס את התוצאות.

מה לעשות:

הוסף stimulus כדי לבדוק את כל ארבעת צירופי הקלט (00, 01, 10, 11):

  1. בכל שורה, הגדר את הערכים של x ושל y
  2. הוסף #10 עבור השהיה
  3. הוסף $display כדי להדפיס את התוצאה

ה־<strong>$display</strong> אמור להיראות כך:

$display("%d %d | %d", x, y, z);

נסו בעצמכם

module or_gate (
  input x,
  input y,
  output z
);
  assign z = x | y;
endmodule

module testbench;
  reg x, y;
  wire z;
  
  or_gate dut (
    .x(x),
    .y(y),
    .z(z)
  );

  initial begin
    $display("x y | z");
    $display("---------");
    
    // TODO: הוסף גירוי והצג את התוצאה עבור 0 0
    
    // TODO: הוסף גירוי והצג את התוצאה עבור 0 1
    
    // TODO: הוסף גירוי והצג את התוצאה עבור 1 0
    
    // TODO: הוסף גירוי והצג את התוצאה עבור 1 1
    
    $finish;
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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