Menu
CoddyTech

Ôn tập: thử thách về toán tử

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 29 trên 90.

challenge icon

Thử thách

Hoàn thành code bằng cách viết biểu thức đúng cho từng nhiệm vụ. Thử thách này bao gồm tất cả các toán tử trong chương này.

Cần làm:

  1. Logic: Kiểm tra xem cả value1 và value2 có khác 0 hay không, rồi lưu vào logic_out
  2. Phép reduction: Kiểm tra xem tất cả bit của vector có bằng 1 không, rồi lưu vào reduction_out
  3. Dịch bit: Dịch data sang trái 2 bit, rồi lưu vào shift_out
  4. Nối: Kết hợp high và low thành một giá trị 8 bit, rồi lưu vào concat_out
  5. Điều kiện: Lưu giá trị lớn hơn giữa `a` và `b` vào cond_out

Tự làm thử

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
    // Logic
    value1 = 4'd6;
    value2 = 4'd0;
    logic_out = ______;   // Kiểm tra xem cả value1 và value2 có khác 0 không
    
    // Phép rút gọn
    vector = 4'b1111;
    reduction_out = ______;   // Check if all bits of vector are 1
    
    // Shift
    data = 8'b00001111;
    shift_out = ______;   // Dịch data sang trái 2 bit
    
    // Phép nối
    high = 4'b1010;
    low = 4'b1100;
    concat_out = ______;   // Ghép high và low thành một giá trị 8 bit
    
    // Điều kiện
    a = 4'd7;
    b = 4'd12;
    cond_out = ______;   // Lưu giá trị lớn hơn giữa `a` và `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

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online