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

[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.

    0 bình luận:

    Đăng nhận xét