Menu
CoddyTech

Thanh ghi dịch

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 86 trên 90.

challenge icon

Thử thách

Một thanh ghi dịch dịch dữ liệu từ trái sang phải ở mỗi cạnh xung nhịp. Mỗi bit chuyển đến vị trí kế tiếp.

Cách thanh ghi dịch 4 bit hoạt động

Initial: q0=0, q1=0, q2=0, q3=0
Each clock: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Shifting in d = 1, 0, 1, 0:
Clock 1 (d=1): q0=1, q1=0, q2=0, q3=0
Clock 2 (d=0): q0=0, q1=1, q2=0, q3=0
Clock 3 (d=1): q0=1, q1=0, q2=1, q3=0
Clock 4 (d=0): q0=0, q1=1, q2=0, q3=1

Sau 4 chu kỳ xung nhịp, bit đầu vào đầu tiên đến q3.

Giao diện module

CổngHướngĐộ rộngMô tả
clkđầu vào1 bitTín hiệu xung nhịp
resetđầu vào1 bitĐặt tất cả đầu ra về 0
dđầu vào1 bitĐầu vào dữ liệu
q0đầu ra1 bitĐầu ra flip-flop thứ nhất
q1đầu ra1 bitĐầu ra flip-flop thứ hai
q2đầu ra1 bitĐầu ra flip-flop thứ ba
q3đầu ra1 bitĐầu ra flip-flop thứ tư

Nhiệm vụ của bạn là hoàn thành module bên dưới.

Cần làm:

  1. Khi reset, đặt tất cả đầu ra về 0
  2. Ở mỗi cạnh lên của xung nhịp, dịch dữ liệu từ trái sang phải:
    1. q0 nhận d
    2. q1 nhận giá trị cũ của q0
    3. q2 nhận giá trị cũ của q1
    4. q3 nhận giá trị cũ của q2

Tự làm thử

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q0,
  output reg q1,
  output reg q2,
  output reg q3
);
  
  // TODO: Thêm always @(posedge clk or posedge reset)
  // Khi reset: q0<=0, q1<=0, q2<=0, q3<=0
  // Ngược lại, dịch dữ liệu: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

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