Menu
CoddyTech

השמה עם אופרטורים

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

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

תחביר בסיסי

assign wire_name = expression;

הביטוי יכול לכלול:

  • אופרטורים אריתמטיים (+, -, *, /)
  • אופרטורים ביטיים (&, |, ^, ~)
  • אופרטורים לוגיים (&&, ||, !)
  • אופרטורי השוואה (>, <, ==, !=)
  • אופרטורי הזזה (<<, >>)
  • האופרטור המותנה (? :)

דוגמאות עם אופרטורים שונים

AND ברמת הסיביות:

assign out = a & b;

חיבור:

assign sum = a + b;

השוואה:

assign is_greater = (a > b);

תנאי (מרבב):

assign out = sel ? a : b;

הזזה:

assign shifted = data << 2;

שרשור:

assign bus = {high_byte, low_byte};

דוגמת קוד

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output [3:0] mux_out
);
  
  assign and_out = a & b;           // AND ברמת הסיביות
  assign sum_out = a + b;           // חיבור
  assign is_equal = (a == b);       // השוואה
  assign mux_out = sel ? a : b;     // בחירה מותנית (מרבב)
  
endmodule

כמה אופרטורים בהשמה אחת

אפשר לשלב אופרטורים בביטוי יחיד:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // XOR מצמצם (מספר אי־זוגי של 1's)

קדימות אופרטורים

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

// לא ברור
assign out = a & b | c;

// ברור
assign out = (a & b) | c;
challenge icon

אתגר

הוסיפו את פקודות assign החסרות בהתאם למשימות.

מה לעשות:

  1. קבעו ש-and_result יהיה שווה ל-input_a AND input_b (ברמת הסיביות)
  2. קבעו ש-or_result יהיה שווה ל-input_a OR input_b (ברמת הסיביות)
  3. קבעו ש-xor_result יהיה שווה ל-input_a XOR input_b (ברמת הסיביות)
  4. קבעו ש-not_result יהיה שווה ל-NOT input_a (ברמת הסיביות)

נסו בעצמכם

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: הוסיפו פקודות assign עבור:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

endmodule
quiz iconבחנו את עצמכם

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

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

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