Menu
CoddyTech

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

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

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

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

לדוגמה, הסתכלו על הגירוי בספסל הבדיקה הבא:

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 זמן להפיק פלט.

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

שיטההכי מתאים לדוגמה
השמות עוקבותבדיקות פשוטות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. המשימה שלך היא להוסיף את הגירוי החסר ואת פקודות $display כדי להדפיס את התוצאות.

מה צריך לעשות:

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

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

הפקודה $display צריכה להיראות כך:

$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 אונליין