Barrel shifter 8 bit: SLL, SRL, SRA, ROL
Module cần viết: barrel8 · 7 case (2 mẫu) · giới hạn 4 s/case · ~15 phút
Barrel shifter dịch một từ đi số bit tuỳ ý trong một chu kỳ. Đây là khối có sẵn trong mọi ALU. Bài này chủ yếu kiểm hai điều người mới hay nhầm: dịch số học khác dịch logic ra sao, và >>> trong SystemVerilog phụ thuộc vào kiểu signed/unsigned như thế nào.
module barrel8 (
input logic [7:0] a,
input logic [2:0] sh, // số bit dịch, 0…7
input logic [1:0] op,
output logic [7:0] y
);
| op | Phép | Ý nghĩa |
|---|---|---|
2'b00 |
SLL | dịch trái logic, chèn 0 ở bên phải |
2'b01 |
SRL | dịch phải logic, chèn 0 ở bên trái |
2'b10 |
SRA | dịch phải số học: chèn bit dấu a[7] ở bên trái |
2'b11 |
ROL | xoay trái: bit bị đẩy ra ở trái vòng về bên phải |
Ví dụ với a = 8'b1001_0110, sh = 2: SLL → 0101_1000, SRL → 0010_0101, SRA → 1110_0101, ROL → 0101_1010.
Mạch tổ hợp; testbench đọc ngõ ra 1 ns sau khi đổi đầu vào.
Các case
- SLL với a = 8'h81, mọi shmẫu
- ROL với a = 8'h81, mọi shmẫu
Cùng 5 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à 3 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.