Menu
Coddy logo textTech

סיכום – אתגר האופרטורים

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

challenge icon

אתגר

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

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

  1. לוגי: בדקו אם גם value1 וגם value2 אינם אפס, ושמרו את התוצאה ב-logic_out
  2. צמצום: בדקו אם כל הביטים של vector הם 1, ושמרו את התוצאה ב-reduction_out
  3. הזזה: הזיזו את data שמאלה ב-2 ביטים, ושמרו את התוצאה ב-shift_out
  4. שרשור: שלבו את high ואת low לערך של 8 ביטים, ושמרו את התוצאה ב-concat_out
  5. תנאי: שמרו את הגדול מבין `a` ו-`b` ב-cond_out

נסו בעצמכם

module operator_challenge;
  reg [3:0] value1, value2;
  reg logic_out;
  
  reg [3:0] vector;
  reg reduction_out;
  
  reg [7:0] data;
  reg [7:0] shift_out;
  
  reg [3:0] high, low;
  reg [7:0] concat_out;
  
  reg [3:0] a, b;
  reg [3:0] cond_out;
  
  initial begin
    // לוגי
    value1 = 4'd6;
    value2 = 4'd0;
    logic_out = ______;   // בדקו אם גם value1 וגם value2 אינם אפס
    
    // צמצום
    vector = 4'b1111;
    reduction_out = ______;   // Check if all bits of vector are 1
    
    // Shift
    data = 8'b00001111;
    shift_out = ______;   // הזיזו את data שמאלה ב-2 ביטים
    
    // שרשור
    high = 4'b1010;
    low = 4'b1100;
    concat_out = ______;   // שלבו את high ואת low לערך של 8 ביטים
    
    // תנאי
    a = 4'd7;
    b = 4'd12;
    cond_out = ______;   // אחסנו את הגדול מבין `a` ו-`b`
    
    $display("6 && 0 = %d", logic_out);
    $display("&4'b1111 = %d", reduction_out);
    $display("00001111 << 2 = %b", shift_out);
    $display("{1010, 1100} = %b", concat_out);
    $display("max(7, 12) = %d", cond_out);
    $finish;
  end
endmodule

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

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