Menu
Coddy logo textTech

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

חלק מהיחידה יסודות במסלול ה-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 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 אונליין