• Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

Thứ Bảy, 8 tháng 7, 2017

[Asynchronous Design][Thiết kế bất đồng bộ][Bài 4] Giao thức dual-rail 2 pha trong thiết kế bất đồng bộ




Giao thức dual-rail 4 pha cũng tồn tại các nhược điểm như giao thức bundled-data 4 pha là xuất hiện nhiều sự kiện chuyển trạng thái, từ logic 0 sang logic 1 hoặc từ logic 1 sang logic 0, trên các tín hiệu làm cho thời gian truyền dữ liệu lâu và gây tiêu hao năng lượng lớn khi mạch hoạt động.

Giao thức dula-rail 2 pha sẽ khắc phục nhược điểm này khi sử dụng các sự kiện tín hiệu để xác định giá trị của một bit. Nguyên tắc cơ bản:
  • Bit mang giá trị logic 1 hoặc TRUE nếu xuất hiện sự kiện tín hiệu chuyển trạng thái, từ 0 sang 1 hoặc từ 1 sang 0, trên dây d.t
  • Bit mang giá trị logic 0 hoặc TRUE nếu xuất hiện sự kiện tín hiệu chuyển trạng thái, từ 0 sang 1 hoặc từ 1 sang 0, trên dây d.f
  • Một từ mã được xác định đã nhận bởi Receiver thông qua sự kiện tín hiệu của ack
Trong một kênh N bit, một từ mã được xác định khi xuất hiện sự kiện tín hiệu trên d.t hoặc d.f ở tất cả các bit, nghĩa là phải có N sự kiện tín hiệu xuất hiện thì một từ mã mới được xác định và Receiver mới đáp ứng bằng 1 cạnh ack.

Ví dụ về hoạt động của một kênh giao thức dual-rail 2 pha có 2 bit dữ liệu như hình 1. Một từ mã được xác định khi xuất hiện sự kiện tín hiệu ở cả trên bit 0 và bit 1.
  1. Sender gửi các bit thông tin nhưng thông tin chỉ được chấp nhân ở Recceiver khi tất cả bit 0 và bit 1 xuất hiện cạnh chuyển
  2. Receiver chuyển trạng thái ack để báo đã nhận thông tin và Sender có thể gửi thông tin mới

Hình 1. Minh họa một kênh giao thức dual-rail có 2 bit dữ liệu
So với giao thức dual-rail 4 pha thì giao thức dual-rail 2 pha giảm tối thiểu một nửa thời gian truyền dữ liệu và một nửa số lượng chuyển trạng thái trên các tín hiệu khi xét trong cùng điều kiện hoạt động như cùng số bit dữ liệu cần truyền và cùng độ trễ trên các đường dây.

Nhận xét, bốn giao thức phổ biến nhất đã giới thiệu trong bài này và các bài viết:

Việc mã hóa 1 bit bằng 2 dây như trong giao thức dual-rail giống như mã hóa one-hot của 1 bit, còn được gọi là giao thức 1-of-2. Mở rộng hơn, giao thức có thể là 1-of-N với ý nghĩa N dây (tín hiệu) mã hóa số lượng bit là log2(N). Ví dụ, giao thức 1-of-4 dùng 4 dây để mã hóa 2 bit theo kiểu one-hot như bảng sau:

Hình 2. Giá trị tín hiệu và trạng thái của giao thức 1-of-4 theo one-hot

Tổ hợp các tùy chọn, chúng ta có thể có nhiều giải pháp khác nhau để lựa chọn giao thức phù hợp như sau:

(2 pha, 4 pha)x(bundled-data, dual-rail, 1-of-n, ...)x(push, pull)

Giao thức sử dụng mã hóa 1-of-n là một phần của mã hóa m-of-n có thể được sử dụng với m là số tín hiệu phải tích cực trong n tín hiệu (dây) khi truyền một thông tin. Ví dụ về mã hóa 2-of-7, tích cực 2 tín hiệu trong 7 tín hiệu cho một lần truyền giá trị dữ liệu 4 bit.

Hình 3. Mã hóa 2-of-7
Trong mã hóa 2-of-7, hai đường dây tích cực sẽ tương đương với 1 giá trị 4 bit.

Note: Tôi dịch chủ yếu từ tài liệu "Asynchronous Circuit Design A Tutorial" của tác giả Jens Sparsø nhưng có thể thêm các nhận xét hoặc minh họa theo cách hiểu của riêng mình. Mong các bạn chia sẻ và góp ý và thảo luận dưới bài viết.


[Asynchronous Design][Thiết kế bất đồng bộ][Bài 3] Giao thức dual-rail 4 pha trong thiết kế bất đồng bộ


1. Giao thức bundled-data phụ thuộc vào độ trễ giữa các tín hiệu

Các giao thức bundled-data, như trình bày trong bài 2, đều cần có sự ràng buộc phù hợp về độ trễ giữa các tín hiệu. Thứ tự xuất hiện của các sự kiện tín hiệu là điều kiện quan trọng đảm bảo cho giao thức hoạt động đúng. Ví dụ, xét trên một kênh đẩy (push channel), Sender cần đưa một dữ liệu hợp lệ và ổn định trước khi tích cực tín hiệu req. Thứ tự này phải được giữ khi gửi đến Receiver và phải được đảm bảo khi thực thi mạch ở mức vật lý (tổng hợp và layout). Một số giải pháp có thể thực hiện để đảm bảo điều này là:

  1. Điều chỉnh trong quá trình sắp xếp và định tuyến (placement and rounting) các dây dẫn của tín hiệu, ví dụ như thực hiện việc đi dây các tín hiệu trong 1 kênh như một bó tín hiệu.
  2. Đặt một giới hạn an toàn tại đầu cuối Sender
  3. Chèn hoặc/và thay đổi kích thước các buffer sau layout bằng các phần mềm tổng hợp và layout
Hình 1. Thứ tự các sự kiện tín hiệu phải được đảm bảo khi truyền từ Sender đến Receiver

Một giải pháp khác là có thể sử dụng các giao thức phức tạp, tinh vi hơn các giao thức bundled-data để tránh phụ thuộc vào độ trễ trên kênh giao tiếp.

2. Giao thức dual-rail 4 pha

Giao thức này mã hóa tín hiệu req bên trong các tín hiệu dữ liệu và sử dụng 2 dây cho một bit thông tin được truyền. Về bản chất, giao thức 4 pha này sử dụng 2 dây (tín hiệu) để biểu diễn 1 bit:
  • Dây d.t biểu diễn logic 1 hoặc giá trị TRUE
  • Dây d.f biểu diễn logic 0 hoặc giá trị FALSE
Các trạng thái hoạt động tương ứng với giá trị trên tín hiệu d.t và d.f là:
  • Trạng thái Empty, ký hiệu E khi d.t = 0 và d.f = 0
  • Trạng thái Valid0, ký hiệu 0 khi d.t = 0 và d.f = 1
  • Trạng thái Valid1, ký hiệu 1 khi d.t = 1 và d.f = 0
  • Trạng thái không sử dụng và bị cấm khi d.t = 1 và d.f = 1
Nếu bus DATA/req có N bit dữ liệu cần phát song song thì số lượng tín hiệu kết nối giữa Sender và Receiver là 2N.

    Hình 2. Giao thức dual-rail 4 pha loại kênh kéo (push channel)

    Xét hoạt động truyền dữ liệu của 1 bit như hình 3 để hiểu rõ một bit được biểu diễn bởi 2 tín hiệu như thế nào? làm thế nào tín hiệu req được tích hợp với tín hiệu dữ liệu? Các bước hoạt động của giao thức như sau:

    1. Đang ở trạng thái E, Sender tích cực tín hiệu d.t nếu muốn gửi bit 1 hoặc d.f nếu muốn gửi bit 0, để yêu cầu Receiver nhận dữ liệu
    2. Receiver tích cực ack để báo cho Sender biết đã nhận dữ liệu
    3. Sender đưa tín hiệu d.t hoặc d.f về lại logic 0 và bit trở lại trạng thái E
    4. Receiver thôi tích cực tín hiệu ack và Sender có thể bắt đầu gửi giá trị bit tiếp theo

    Hình 3. Truyền 1 bit dữ liệu với giao thức dual-rail 4 pha
    Như vậy:
    1. Logic 0 và logic 1 được truyền trên 2 dây (tín hiêu) độc lập nên gọi là dual-rail, nó khác với giao thức bundled-data đã trình bày ở bài 2, giao thức này còn được biết đến với tên single-rail
    2. Khi d.t hoặc d.f tích cực thì nó vừa mang thông tin giá trị của bit, giá trị 1 hoặc giá trị 0, vừa có ý nghĩa yêu cầu Receiver nhận dữ liệu. Đây chính là cách tích hợp tín hiệu req vào tín hiệu dữ liệu
    3. Giao thức cũng hoạt động theo 4 bước nên gọi là 4 pha
    Chú ý đến trạng thái hoạt động của bit, trạng thái E luôn xen giữa hai lần gửi giá trị, điều này đảm bảo chỉ một tín hiệu d.t hoặc d.f tích cực trong 1 thời điểm, nên hoạt động của giao thức không phụ thuộc vào độ trễ trên đường dây kết nối giữa Sender và Receiver như giao thức bundled-data.

    Xét trên 1 bus có N bit thông tin song song, tương đương với 2N tín hiệu kết nối, giữa Sender và Receiver thì:
    • Giá trị trên bus chỉ hợp lệ (valid) khi tất cả các bit đều valid (valid0 hoặc valid1). Receiver chỉ đáp ứng ack khi phát hiện tất cả các bit đã hợp lệ
    • Bus chỉ Empty khi tất cả các bit đều empty. Receiver chỉ kéo ack xuống mức thấp khi phát hiện tất cả các bit đều trong trạng thái E.
    Nhìn theo một cách khác, một cặp {x.f, x.t} gọi là một từ mã (codeword). Mỗi từ mà sẽ có một ý nghĩa khác nhau như đã trình bày phía trên:
    • {x.f, x.t} = {0, 0} gọi là rỗng (empty) hoặc khoảng đệm (spacer) hoặc không dữ liệu (no data) hoặc không giá trị (NULL)
    • {x.f, x.t} = {1, 0} gọi là dữ liệu hợp lệ (valid data) logic 0
    • {x.f, x.t} = {0, 1} gọi là dữ liệu hợp lệ (valid data) logic 1
    • {x.f, x.t} = {1, 1} không được sử dụng. Như vậy, việc chuyển từ một từ một từ mã valid này sang một từ mã valid khác là không được chấp nhận
    Hình 4. Hoạt động gửi từ mã trên kênh của giao thức dual-rail 4 pha

    Từ mã dual-rail là một loại từ mã đơn giản trong các loại từ mã không nhạy trễ (delay-insensitive), nghĩa là không bị ảnh hưởng bởi độ trễ trên đường dây. Nó có một số thuộc tính ưu điểm như sau:
    • Bất kỳ tổ hợp nào của các từ mã dual-rail là một từ mã dual-rail. Mỗi bit được biểu diễn bằng 1 từ mã dual-rail, nhiều bit sẽ tạo ra tổ hợp từ mã dual-rail và nó cũng là một từ mã dual-rail
    • Với N bit cho trước, tập tất cả các giá trị của từ mã được chia thành 3 nhóm riêng biệt:
      • Từ mã rỗng (empty codeword) khi tất cả N từ mã trong tập đều bằng {0,0}
      • Từ mã trung gian (intermediate codeword) khi một số từ mã trong tập ở trạng thái rỗng {0,0} còn một số khác thì ở trạng thái hợp lệ, {1,0} hoặc {0,1}
      • Từ mã hợp lệ (valid codeword) khi tất cả các từ mã trong tập đều hợp lệ. Từ mã hợp lệ có 2^N giá trị khác nhau
    Hình 5 minh họa hoạt động trên kênh có N bit thông tin. Chú ý, một Receiver có gặp một chuỗi nhiều từ mã trung gian khi một tổ hợp các từ mã chuyển từ trạng thái rỗng sang trạng thái valid hoặc ngược lại nhưng nó đều không đáp ứng cho các từ mã trung gian này. Nghĩa là tín hiệu ack không thay đổi trạng thái trong khi các từ mã trung gian xuất hiện.

    Hình 5. Minh họa hoạt động trên kênh có N bit
    Note: Tôi dịch chủ yếu từ tài liệu "Asynchronous Circuit Design A Tutorial" của tác giả Jens Sparsø nhưng có thể thêm các nhận xét hoặc minh họa theo cách hiểu của riêng mình. Mong các bạn chia sẻ và góp ý và thảo luận dưới bài viết.

    Thứ Năm, 6 tháng 7, 2017

    [Asynchronous Design][Thiết kế bất đồng bộ][Bài 2] Giao thức bắt tay bundled-data trong thiết kế mạch bất đồng bộ


    1. Mô hình luồng dữ liệu (data flow) trong mạch bất đồng bộ

    Như đã đề cập ở bài 1 về việc sử dụng giao thức bắt tay trong thiết kế bất đồng bộ để thay thế cho thiết kế đồng bộ sử dụng xung clock khi sự tổng hợp để cân bằng các kết nối xung clock không đạt kết quả như mong muốn.

    Trước khi đi sâu vào các giao thức bắt tay ở những bài tiếp theo, chúng ta quy định việc nhìn mô hình thiết kế bắt tay bất đồng bộ như hình 1.

    Hình 1. Mô hình handshake channel

    1. Xem các tín hiệu bắt tay và dữ liệu kết nối giữa hai thanh ghi là một kênh bắt tay (handshake channel) hoặc một liên kết bắt tay (handshake link), được gọi tắt là channel hoặc link. Như vậy, một kênh bắt tay bao gồm cả đường dữ liệu và đường điều khiển bắt tay.
    2. Các dữ liệu lưu trữ trong các thanh ghi là các token được gắn các giá trị dữ liệu, gọi là token dữ liệu hoặc gọi tắt là token. Dữ liệu này có thể được thay đổi khi các token đi qua các mạch tổ hợp.
    3. Xem các mạch tổ hợp, như CL3 hay CL4 trong hình minh họa, không tác động gì đến việc bắt tay giữa các thanh ghi. Một mạch tổ hợp thu vào một token trên mỗi link ngõ vào, thực thi tính toán và phát một token trên mỗi link ngõ ra.
    Khi xem xét theo mô hình này, một mạch bất đồng bộ chỉ đơn giản là một cấu trúc dữ liệu tĩnh. Để mô hình này xử lý chính xác thì các token lan truyền trong mạch không bị mất, nó không vượt qua một token khác (nghĩa là phải theo thứ tự xử lý) và các token mới tương tự không được phép xuất hiện ở bất cứ nơi nào khác. Một luật đơn giản để đảm bảo cho các yêu cầu nàylà:

    Một thanh ghi có thể lấy và lưu trữ một token mới từ thanh ghi trước nó nếu thanh ghi phía sau nó đã lấy và lưu dữ liệu mà nó đang giữ. Hoạt động của các thanh ghi trước và thanh ghi sau được liên kết với thanh ghi hiện tại bằng các tín hiệu yêu cầu (request - req) và xác nhận (acknowledge - ack).

    Việc chuyển dữ liệu giữa các thanh ghi trong mạch sẽ tuân theo quy luật này. Các thanh ghi có thể có giá trị giống nhau nhưng một thanh ghi đã bị lấy đi dữ liệu của mình thì dữ liệu của nó trở thành dữ liệu cũ và có thể bị ghi đè bởi dữ liệu mới. Việc bắt tay liên kết giữa các thanh ghi đảm bảo một token luôn được chuyển giao một cách chính xác. Tóm lại, mục này chỉ nói về mô hình mạch sẽ trình bày ở những bài tiếp theo của nội dung thiết kế bất đồng bộ. Có 2 điểm bạn cần nắm là:

    1. Hiểu về kênh bắt tay (handshake channel) và mô hình token
    2. Các mạch tổ hợp không biến đổi các điều khiển bắt tay (handshaking) mà chỉ chuyển tiếp chúng

    2. Các giao thức dữ liệu đóng gói (bundled-data)

    Thuật ngữ dữ liệu đóng gói (bundled-data) được hiểu là có các tín hiệu req và ack riêng biệt đi kèm với các tín hiệu dữ liệu như hình 2. Các tín hiệu này sử dụng mức logic thông thường để biểu diễn thông tin.
    Hình 2. Kênh dữ liệu đóng gói gồm một tín hiệu req, một tín hiệu ack và một bus dữ liệu

    Hình 3 minh họa giao thức dữ liệu đóng gói 4 pha (4-phase bundled-data). Nó được gọi là 4 pha vì nó có 4 hoạt động khác nhau để truyền dữ liệu:

    1. Sender phát dữ liệu và tích cực tín hiệu req mức cao
    2. Receiver lấy dữ liệu và tích cực tín hiệu ack mức cao để báo đã lấy được dữ liệu của Sender
    3. Sender đáp ứng lại bằng cách kéo req xuống mức thấp và từ lúc này dữ liệu trên bus DATA không còn được đảm bảo tính hợp lệ, nghĩa là đây có thể là dữ liệu ngẫu nhiên và Receiver không được phép lấy
    4. Receiver phát hiện req mức thấp thì cũng kéo ack xuống mức thấp và Sender có thể bắt đầu một quá trình truyền dữ liệu mới
    Hình 3. Giao thức dữ liệu đóng gói 4 pha


    Giao thức này còn được biết với tên giao thức bắt tay 4 pha hoặc giao thức bắt tay 4 bước. Giao thức này khá quen thuộc và phổ biến nhưng có điểm bất lợi là các tín hiệu chuyển trạng thái quá nhiều làm mất thời gian và tốn năng lượng. Để hoàn thành một lần bắt tay truyền dữ liệu tín hiệu req chuyển trạng thái 2 lần và tín hiệu ack chuyển trạng thái 2 lần. Một giao thức khác hạn chế được điều này là giao thức 2 pha.

    Hình 4 minh họa giao thức dữ liệu đóng gói 2 pha (2-phase bundled-data). Ở đây thông tin trên tín hiệu req và ack được mã hóa bằng sự chuyển đổi tín hiệu trên đường dây và không có sự khác biệt giữa việc chuyển từ 0 sang 1 hay 1 sang 0, cả hai sự chuyển đổi này đều gọi là sự kiện tín hiệu (signal event). Hoạt động của giao thức 2 pha gồm:

    1. Sender phát dữ liệu và gửi một sự kiện tín hiệu, là sự chuyển mức logic từ 0 sang 1 hoặc 1 sang 0, xuất hiện trên req.
    2. Receiver nhận dữ liệu và đáp ứng lại bằng 1 sự kiện chuyển tín hiệu, sự chuyển mức từ 0 sang 1 hoặc 1 sang 0, trên tín hiệu ack. Lúc này, Sender có thể tiếp tục phát dữ liệu mới.

    Hình 4. Giao thức dữ liệu đóng gói 2 pha
    Có thể nhận thấy, giao thức 2 pha cho tốc độ chuyển dữ liệu giữa Sender và Receiver nhanh hơn, tận dụng được triệt để mỗi lần chuyển trạng thái (mức logic) của hai tín hiệu điều khiển req và ack. Xét về số lần chuyển trạng thái trên req và ack, giao thức 2 pha có số lần chuyển trạng thái ít hơn một nửa so với giao thức 4 pha khi truyền cùng một số lượng dữ liệu như nhau. Tuy nhiên, việc thực hiện mạch giao thức 2 pha trên thực tế phức tạp hơn giao thức 4 pha.

    Thuật ngữ bundled-data đôi khi còn được gọi bằng cái tên khác là single-rail. Giao thức bắt tay 4 pha (4-phase handshaking) hay báo hiệu 4 pha (4-phase signaling) còn được gọi là Return-to-Zero Signaling (RTZ signaling) hoặc báo hiệu mức (level signaling). Giao thức bắt tay 2 pha còn được gọi là Non-return-to-zero signaling hoặc báo hiệu chuyển tiếp (transition signaling).

    Trong các giao thức đã trình bày Sender là bộ khởi động việc truyền dữ liệu trên một kênh và được gọi là kênh đẩy (push channel). Receiver là thành phần có thể yêu cầu dữ liệu mới từ Sender, mà không phải thụ động chờ Sender nữa, gọi là bộ kéo (pull channel).  Trong trường hợp này, Receiver sẽ tích cực tín hiệu req để yêu cầu nhận dữ liệu khi cần, Sender sẽ tích cực tín hiệu ack để báo cho Receiver khi có dữ liệu hợp lệ.

    Hình 5. Kênh đẩy và kênh kéo
    Ngoài ra, có một số biến thể khác của dạng giao thức đã trình bày như sau:

    1. Kênh không có dữ liệu: Loại này chỉ sử dụng các tín hiệu bắt tay nên có thể dùng cho việc đồng bộ
    2. Kênh có truyền thông tin dữ liệu theo cả hai chiều: loại này thường dùng cho giao tiếp bộ nhớ chỉ đọc (read-only memory). Với bộ nhớ này, địa chỉ được đóng gói (bundled) với req để gửi đến bộ nhớ, còn dữ liệu được đóng gói với ack được phát ra từ bộ nhớ.


    Note: Tôi dịch chủ yếu từ tài liệu "Asynchronous Circuit Design A Tutorial" của tác giả Jens Sparsø nhưng có thể thêm các nhận xét hoặc minh họa theo cách hiểu của riêng mình. Mong các bạn chia sẻ và góp ý và thảo luận dưới bài viết.

    Chủ Nhật, 2 tháng 7, 2017

    [Asynchronous Design][Thiết kế bất đồng bộ][Bài 1] Đồng bộ clock và giao thức bắt tay

    1. Đồng bộ theo xung clock

    Hình 1 biểu diễn một mạch đồng bộ (synchronous circuit). Đây là một mạch có cấu trúc pipeline đơn giản sử dụng một xung clock chung là CLK. Người thiết kế sẽ tập trung chủ yếu đến việc xử lý dữ liệu và sự lan truyền dữ liệu giữa các thanh ghi.

    Hình 1. Một thiết kế đồng bộ cơ bản

    Ví dụ, người thiết kế sẽ biểu diễn giá trị được lưu vào thanh ghi R3, khi xuất hiện xung nhịp clock, bằng một mạch tổ hợp CL3 (Combination Logic) có ngõ vào là giá trị của thanh ghi R2, giá trị này đã được lưu trong R2 ở xung nhịp clock trước đó. Sau khi cụ thể các mạch logic CL3 và CL4, người thiết kế có thể dùng ngôn ngữ mô tả phần cứng như Verilog hay VHDL để mô tả (viết code hoặc coding) cho cấu trúc hình 1 và dùng các phần mềm tổng hợp (synthessis tool) để tổng hợp cấu trúc này trên thư viện công nghệ cụ thể. Đây là cách nhìn mức cao của một thiết kế với xung nhịp clock. Như vậy, người thiết kế mức này tập trung chủ yếu vào việc dữ liệu mong muốn sẽ được chốt vào các thanh ghi khi cạch tích cực của xung clock xuất hiện. Cạnh tích cực có thể là cạch lên hoặc cạnh xuống được sử dụng bởi thanh ghi.

    Một thiết kế ASIC ngày nay chứa một số lượng rất lớn các kết nối của tín hiệu clock và các tín hiệu clock này có thể có thêm cổng tắt/mở gọi là gated clock. Ở mức thiết kế vật lý (physical design), để điều khiển và tối thiểu hóa hiện tượng lệch (skew) giữa các tín hiệu clock (hình 2) cung cấp đến các thanh ghi thì các bộ đệm clock sẽ được chèn thêm. Hình 3 minh họa việc chèn thêm các bộ đệm để cân bằng các kết nối của tín hiệu clock đến các thanh ghi.

    Hình 2. Hiện tượng lệch (skew) clock giữa các kết nối tín hiệu xung clock
    Hình 3. Minh họa việc điều khiển và cần bằng giữa các kết nối xung clock

    Việc đảm bảo những ràng buộc (constraint) về định thời của setup time và hold time quanh cạnh tích cực của clock là nhiệm vụ không dễ dàng. Quá trình chèn bộ đệm và tái tổng hợp được thực hiện trong các phần mềm thương mại hiện tại có thể không đạt kết quả như mong muốn hoặc nếu đạt kết quả thì nó dựa trên các mô hình trễ (delay model) mà các mô hình này có thể không chính xác như mong muốn.

    2. Bắt tay (handshacking) trong thiết kế bất đồng bộ

    Thiết kế bất đồng bộ (asynchronous design) có thể được thay thế để giải quyết vấn đề trên. Trong một thiết kế bất đồng bộ, tín hiệu clock được thay thế bằng một số dạng bắt tay giữa các thanh ghi kế cận. Hình 4 minh họa một dạng bắt tay cơ bản sử dụng một tín hiệu yêu cầu (request - req) và một tín hiệu xác nhận (acknowledge - ack).

    Hình 4. Minh họa việc thay thế tín hiệu clock chung bằng dạng bắt tay trong thiết kế bất đồng bộ
    Mô hình này khác với mô hình mạch đồng bộ ở chỗ không sử dụng chung một xung clock mà mỗi thanh ghi có một xung clock riêng chỉ cấp cho thanh ghi hoạt động khi cần thiết dựa trên sự điều khiển của các mạch bắt tay. Ví dụ, R1 tích cực req yêu cầu R2 lấy dữ liệu đang chứa trong nó, R2 được cấp clock để lấy dữ liệu từ R1. Sau đó, mạch bắt tay của R2 tích cực ack báo lại cho mạch bắt tay ở R1 và tắt clock của R2.

    Note: Tôi dịch chủ yếu từ tài liệu "Asynchronous Circuit Design A Tutorial" của tác giả Jens Sparsø nhưng có thể thêm các nhận xét hoặc minh họa theo cách hiểu của riêng mình. Mong các bạn chia sẻ và góp ý và thảo luận dưới bài viết.