- Lưu ý: Để đọc hiểu bài viết này các đọc giả cần phải biết kiến thức về D Flip-flop và bộ MUX.
I. Register (thanh ghi) là gì?
Register là một bộ nhớ lưu trữ nhỏ và tạm thời. Đóng vai trò quan trọng trong việc lưu dữ liệu mà CPU yêu cầu để xử lý ngay lập tức. Register được tạo thành bởi tập hợp các Flip-flop. Mỗi flip-flop có thể lưu trữ 1 bit dữ liệu. Vì vậy, cần tạo ra một Register n bit thì ta sẽ cần n Flip-flop.

Hình trên là một ví dụ về Register lưu trữ 4 bit dữ liệu là A3A2A1A0 với . Như vậy cứ sau 1ns thì 4 bit dữ liệu trên data bus sẽ được cập nhập vào Register.
II. Phân loại Register
1. Dựa vào cách dữ liệu vào và ra Register.
Có 2 cách để đưa dữ liệu vào và truy xuất dữ liệu ra khỏi Register đó là lần lượt từng bit (Serial) và cùng một lúc đó là (Parallel). Như vậy, ta sẽ có 4 loại Register:




2. Dựa vào ứng dụng của Register
- Shift Register: là loại Register có sự dịch chuyển dữ liệu giữa các flip-flop cạnh nhau. Ví dụ như SISO, SIPO, PISO.
- Storage Register: là loại Register không có sự dịch chuyển dữ liệu giữa các flip-flop cạnh nhau. Ví dụ như PIPO.
III. Shift Register (thanh ghi dịch)
Ở bài viết này, chúng ta sẽ tìm hiểu về hai loại Shift Register đó là SISO và PIPO và sẽ nêu ra sự hạn chế của nó khi không có tín hiệu điều khiển. Bài viết tiếp theo, ta sẽ đi khắc phục những hạn chế này và tìm hiểu về hai loại Shift Register còn lại đó là SIPO và PISO.
- SISO – Serial Input Serial Output.
Đối với loại Register SISO ta sẽ có 3 cách dịch:
- Dịch phải.
- Dịch trái.
- Dịch trái/phải.
- SISO dịch phải và SISO dịch trái.
Sau đây ta sẽ trình bày mạch logic và cách thức hoạt động của SISO dịch phải, đối với SISO dịch trái sẽ tương tự.


- Cứ mỗi xung cạnh lên của clock:
- Input sẽ đưa vào flip-flop 1.
- Dữ liệu flip-flop n dịch qua flip-flop n+1.
- Output lấy ra từ flip-flop 4.
Như vậy, cần 4 lần cạnh lên để nhập dữ liệu mong muốn vào Register và cần thêm 4 lần cạnh lên nữa để truy xuất dữ liệu.
Có một vấn đề xảy ra ở SISO Register cơ bản này, đó là ở cạnh lên thứ 5 của clock ta sẽ có được dữ liệu bên trong Register là 1_0_1_0. Nhưng dữ liệu mà ta mong muốn nhập vào Register là 0_1_0_1. Như vậy, ta phải thêm một tín hiệu EN để dừng việc lấy dữ liệu vào và dịch ở những thời điểm mà người dùng mong muốn. Cách thêm như nào sẽ được trình bày ở bài viết tiếp theo.
- SISO dịch trái/phải

- Khi R/L = 1, Mux2x1 cấu hình chọn Input Right là đầu vào và sẽ dịch dữ liệu theo các đường chỉ màu xanh dương => Register dịch phải.
- Khi R/L = 0, Mux2x1 cấu hình chọn Input Left làm đầu vào và dịch dữ liệu theo đường màu đỏ => Register dịch trái.
- PIPO – Parallel Input Parallel Output.

Như hình, Register này sẽ ghi A3_A2_A1_A0 trên databus vào sau mỗi 1ns. Nhưng đối với loại Register PIPO này cũng có một hạn chế đó là nếu chúng ta cần lưu trữ 4 bit dữ liệu nào đó trong khoảng thời gian 5ns ở thanh ghi này thì chúng ta cần phải đảm bảo việc 4 bit trên data bus không thay đổi trong khoảng thời gian 5ns. Điều này sẽ chiếm dụng data bus vì mỗi hệ thống có nhiều Register dùng chung một data bus. Để khắc phục vấn đề trên thì ta cần một tín hiệu điều khiển việc cho phép hay không cho phép ghi vào một thanh ghi bất kỳ (tín hiệu EN). Cách thêm như nào sẽ được trình bày ở bài viết tiếp theo.
III. Kết bài.
Cảm ơn mọi người đã quan tâm đến bài viết. Mình hy vọng những thông tin mà mình chia sẻ sẽ hữu ích cho các bạn. Nếu các bạn quan tâm thì bài tiếp theo chúng ta sẽ phân tích 2 loại Shift Register còn lại và cách thêm tín hiệu điều khiển vào SISO và PIPO. Nếu có bất kỳ góp ý nào, đừng ngần ngại để lại bình luận nhé!