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.

0 bình luận:

Đăng nhận xét