Dễ

Toán tử streaming: đảo byte, đảo bit, gói và tách mảng

Class cần viết: bitops · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~15 phút

streamingbit-manipulationendiannesssystemverilog

Testbench liên tục phải đổi giữa "một số nhiều bit" và "một dãy byte": dựng gói Ethernet, đóng gói dữ liệu cho bus, so payload. Toán tử streaming ({<< …} / {>> …}) của SystemVerilog làm các việc này trong một biểu thức, không cần vòng lặp hay ghép bit thủ công.

Viết class bitops chỉ gồm hàm static:

typedef byte unsigned b4_t[4];   // khai báo trong class bitops

class bitops;
  static function bit [31:0] byte_swap32(bit [31:0] x);    // 0x11223344 → 0x44332211
  static function bit [7:0]  bit_rev8(bit [7:0] x);        // 1000_0110 → 0110_0001
  static function bit [15:0] nibble_rev16(bit [15:0] x);   // 0xABCD → 0xDCBA
  static function bit [31:0] pack_be(b4_t b);              // b[0] là byte CAO nhất: '{11,22,33,44} → 0x11223344
  static function bit [31:0] pack_le(b4_t b);              // b[0] là byte THẤP nhất: '{11,22,33,44} → 0x44332211
  static function b4_t       unpack_le(bit [31:0] w);      // ngược của pack_le: 0x44332211 → '{11,22,33,44}
endclass

Kiểu mảng phải khai báo bên trong class: typedef byte unsigned b4_t[4];. Testbench gọi bitops::b4_t. Có thể dùng toán tử streaming hoặc ghép bit tuỳ ý, miễn kết quả đúng.

Các case

  1. byte_swap32mẫu
  2. bit_rev8mẫu

Cùng 4 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.

Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 4 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Dễ. Điểm gốc 20.