Verilog Code cho Thanh Ghi Dịch Chuyển 4 Bit

Thanh ghi dịch chuyển là một thành phần quan trọng trong thiết kế kỹ thuật số, được sử dụng để lưu trữ và dịch chuyển dữ liệu. Bài viết này sẽ hướng dẫn bạn viết Verilog code cho thanh ghi dịch chuyển 4 bit, bao gồm thiết kế, sơ đồ phần cứng và testbench để kiểm tra chức năng.

Thiết Kế Thanh Ghi Dịch Chuyển 4 Bit trong Verilog

Code Verilog dưới đây mô tả một thanh ghi dịch chuyển có thể tùy chỉnh độ rộng bit bằng tham số MSB. Để tạo thanh ghi 4 bit, ta đặt MSB = 4. Thanh ghi này có các tính năng:

  • Kích hoạt/Vô hiệu hóa: Điều khiển bằng tín hiệu en.
  • Hướng dịch chuyển: Dịch trái hoặc phải tùy thuộc vào tín hiệu dir.
  • Reset: Khi rstn ở mức thấp, thanh ghi sẽ được reset về giá trị 0.
  • Dữ liệu đầu vào: Nhận dữ liệu từ chân d.
module shift_reg #(parameter MSB=4) (
  input d,          // Dữ liệu đầu vào
  input clk,         // Xung clock
  input en,          // Kích hoạt
  input dir,         // Hướng dịch chuyển (0: phải, 1: trái)
  input rstn,        // Reset
  output reg [MSB-1:0] out // Đầu ra
);

  always @ (posedge clk) begin
    if (!rstn) begin
      out <= 0;
    end else if (en) begin
      if (dir) begin
        out <= {out[MSB-2:0], d}; // Dịch trái
      end else begin
        out <= {d, out[MSB-1:1]}; // Dịch phải
      end
    end
  end
endmodule

Sơ Đồ Phần Cứng

Sơ đồ phần cứng của thanh ghi dịch chuyển 8 bit được minh họa dưới đây. Đối với thanh ghi 4 bit, chỉ cần sử dụng 4 flip-flop thay vì 8.

Testbench cho Thanh Ghi Dịch Chuyển 4 Bit

Testbench sau đây được sử dụng để kiểm tra chức năng của thanh ghi dịch chuyển. Nó khởi tạo thanh ghi, sau đó thử nghiệm các trường hợp khác nhau của tín hiệu en, dird.

module tb_sr;
  parameter MSB = 4;
  reg data;
  reg clk;
  reg en;
  reg dir;
  reg rstn;
  wire [MSB-1:0] out;

  shift_reg #(MSB) sr0 (
    .d(data),
    .clk(clk),
    .en(en),
    .dir(dir),
    .rstn(rstn),
    .out(out)
  );

  always #10 clk = ~clk;

  initial begin
    clk = 0;
    rstn = 0;
    data = 1;
    en = 0;
    dir = 0;
    #20 rstn = 1;
    #20 en = 1;
    #100 dir = 1; // Thay đổi hướng dịch chuyển
    #100 data = 0; // Thay đổi dữ liệu đầu vào
    #200 $finish;
  end
endmodule

Kết quả mô phỏng sẽ cho thấy đầu ra out thay đổi theo các giá trị của d, endir.

Kết Luận

Bài viết đã trình bày Verilog code cho thanh ghi dịch chuyển 4 bit, cùng với sơ đồ phần cứng và testbench. Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về cách thiết kế và kiểm tra thanh ghi dịch chuyển trong Verilog. Bạn có thể thay đổi tham số MSB để tạo thanh ghi với số bit khác nhau.

Comments

No comments yet. Why don’t you start the discussion?

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *