Thứ Sáu, 18 tháng 8, 2017

[Multi-clock Design] Bài 1 - Đồng bộ tín hiệu bất đồng bộ

Bài viết này giới thiệu những vấn đề và các kỹ thuật được áp dụng trong thiết kế sử dụng nhiều nguồn clock bất đồng bộ. Một thiết kế an toàn và đơn giản nhất là thiết kế sử dụng một nguồn clock. Tuy nhiên, nhiều vi mạch ngày nay sử dụng rất nhiều nguồn clock khác nhau trong cùng một thiết kế nhằm đạt hiệu quả xử lý cao nhất nhưng vần đảm bảo tiết kiệm năng lượng.

Về các loại thiết kế trong vi mạch số các bạn có thể tham khảo ở bài viết [Basic Knowledge] Phân loại thiết kế trong thiết kế vi mạch số.

1. Trạng thái bất ổn định (Metastability)

Trạng thái bất ổn định chính là vấn đề chính được sinh ra tại các giao tiếp bất đồng bộ. Các kỹ thuật thiết kế đa miền clock bất đồng bộ đều nhằm mục đích tránh, hạn chế trạng thái này hoặc tìm cách "sống chung" với trạng thái này.

Trạng thái bất ổn định sinh ra khi xuất hiện sự vi phạm định thời (timing) giữa các tín hiệu đến và tín hiệu xung clock. Tín hiệu đến ở đây có thể là tín hiệu dữ liệu hoặc tín hiệu set/reset. Vi phạm định thời sẽ làm ngõ ra của Flip-Flop (FF) rơi vào trạng thái bất ổn định và xả ra hiện tượng dao động.
Hình 1. Trạng thái bất ổn định xảy ra trên giao tiếp giữa 2 miền clock bất đồng bộ

Hình 1 minh họa việc trạng thái bất ổn định xảy ra như thế nào. clk_a và clk_b là 2 xung clock bất đông bộ, nghĩa là 2 nguồn xung clock độc lập với nhau. d_outa thay đổi theo cạnh lên xung clock clk_a và vi phạm định thời, vi phạm setup time hoặc hold time, của miền xung clock clk_b. Lúc này, ngõ ra DFFB là d_outb rơi vào trạng thái bất ổn định và bắt đầu dao động. Trong trạng thái dao động, mức logic của d_outb là không xác định. Sau một thời gian khoảng thời gian không xác định, d_outb sẽ trở về trạng thái ổn định là mức "0" hoặc mức "1". Việc d_outb ổn định về trạng thái nào là ngẫu nhiên và không biết trước được.
Trạng thái bất ổn định thường được minh họa như việc thả một quả cầu lên một đỉnh một quả đồi. Nó luôn có xu hướng lăn xuống một trong hai bên sườn đồi và nằm cố định khi xuống đến chân đồi.
Hình 2. Minh họa trạng thái bất ổn định như việc thả một quả bóng trên đỉnh đồi
2. Những nguy hiểm sinh ra do trạng thái bất ổn định

Truyền sai giá trị: đây là nguy hiểm có thể thấy rõ. Xét đoạn thời gian ngõ ra d_outb dao động, đây là đoạn thời gian giá trị d_outb không xác định nếu d_outb tiếp tục được lan truyền trong các mạch tiếp theo thì giá trị logic ở các mạch tiếp theo cũng không chính xác. Thêm nữa, cho dù sau đó d_outb sẽ ổn định nhưng giá trị d_outb chưa chắc là đúng vì giá trị ổn định là "0" hay "1" là ngẫu nhiên. Tất nhiên, việc sai giá trị logic sẽ dẫn đến việc hoạt động sai không kiểm soát được khi lan truyền trong mạch.
Hình 3. Trạng thái bất ổn định sẽ lan truyền các giá trị logic sai trong mạch
Tiêu hao năng lượng lớn: Việc tiêu hao năng lượng lớn trên các cổng logic sinh ra do chuyển mạch (chuyển mức logic). Xét một ví dụ đơn giản về cổng đảo (inverter), khi chuyển mạch, điện áp ngõ vào IN thay đổi, tại thời điểm Vi không xác định rõ mức logic "0" hay "1" dòng điện sẽ tăng đột biến vì hiện tượng ngắn mạch tức thời Vdd-Vss khi cả PMOS và NMOS đều dẫn. Ở hiện tượng bất ổn định, tín hiệu dao động và không xác định rõ mức logic được suy trì trong một khoảng thời gian sẽ làm cho quá trình "ngắn mạch" này kéo dài hơn bình thường. Nếu tín hiệu bất ổn định nối đến càng nhiều các cổng logic (mạch tổ hợp) sẽ làm tiêu hao năng lượng lớn khi nhiều cổng bị "ngắn mạch" cùng lúc.

Hình 4. Mô hình cổng đảo mức CMOS (trái) và mối quan hệ dòng-áp khi chuyển mạch (phải). Ở đây, dòng ID tăng đạt mức cực đại tại điện áp trung gian VM khi hiện tượng "ngắn mạch" xảy ra do cả PMOS và NMOS cùng dẫn
Chính vì những nguy hiểm mà trạng thái bất ổn định mang lại mà khi thiết kế đa miền clock bất đồng bộ, nhiệm vụ chính và quan trọng hàng đầu là:
  1. Hạn chế hiện tượng này lan truyền trong mạch
  2. Dù hiện tượng này có xảy ra thì chức năng mạch vẫn phải đảm bảo hoạt động đúng.
3. Mạch đồng bộ
Mạch đồng bộ là mạch được sử dụng để đồng bộ các tín hiệu bất đồng bộ. Tín hiệu bất đồng bộ có thể chuyển trạng thái bất cứ lúc nào và không tuân theo định thời của miền clock nhận nó. Tín hiệu bất đồng bộ có nhiều dạng như:
  1. Tín hiệu input từ ngoài chip
  2. Tín hiệu đến từ một miền clock độc lập với miền clock nhận
  3. Tín hiệu giữa các miền clock sử dụng các clock sinh ra từ PLL
  4. ....
Hình 5. Minh họa một số trường hợp của tín hiệu bất đồng bộ
Để sử dụng một tín hiệu bất đồng bộ thì trong thiết kế phải có mạch đồng bộ. Mạch đồng bộ có nhiệm vụ lấy mẫu tín hiệu ngõ vào bất đồng bộ và cung cấp một ngõ ra đồng bộ theo xung clock được sử dụng bên trong thiết kế.
Mạch đồng bộ "huyền thoại" là mạch đồng bộ sử dụng 2 FF. Câu hỏi là tại sao lại sử dụng 2 FF?
Hình 6. Mạch đồng bộ tín hiệu 1 bit dùng 2 FF

Mạch đồng bộ dùng 2 FF được sử dụng với mong muốn giải quyết 2 vấn đề sau đây:
  1. Ngăn chặn việc truyền trạng thái bất ổn định đến các mạch phía sau
  2. Lấy mẫu đúng giá trị logic mong muốn
Hình 7. Sơ đồ dạng sóng mong muốn khi sử dụng mạch đồng bộ 2 FF
Tuy nhiên, vì d_outa có thể vi phạm timing của clk_b bất cứ lúc nào nên d_outb có thể dao động bất cứ lúc nào. Để trạng thái bất ổn định không lan truyền tiếp đến các mạch phía sau thì dao động của d_outb phải xong trước khi vi phạm timing của clk_b, nghĩa là phải ổn định trước thời gian setup của clk_b. Để ngõ ra d_outc mang giá trị chính xác như ngõ vào d_outa thì sau khoảng thời gian dao động, d_outb phải ổn định về logic 1. Theo những gì đã trình bày về trạng thái bất ổn định trên đây thì mạch dùng 2 FF không có đảm bảo được cả 2 mong muốn đã đề ra vì:
  1. Trạng thái bất ổn định có thể kéo dài hơn 1 chu kỳ xung clock clk_b nên trạng thái bất ổn định có thể lan truyền tiếp đến FF thứ 2 ở ngõ ra d_outc
  2. d_outb có thể ổn định về "0" hoặc "1" chứ không luôn là "1" nên ngõ ra d_outc chưa chắc có được giá trị logic mong muốn
4. Thời gian trung bình giữa các lỗi MTBF

Lý thuyết về thời gian trung bình giữa các lỗi MTBF (Mean Time Between Failures) sẽ giải thích vì sao 2 FF có thể hạn chế được trạng thái bất ổn định lan truyền trong thiết kế.
MTBF cung cấp cách ước lượng khoảng thời gian giữa các lần xảy ra trạng thái bất ổn định làm cho thiết kế bị lỗi. Lỗi này gọi là lỗi đồng bộ (synchronous failure).
Như đã trình bày ở trên, thời gian để thoát khởi trạng thái bất ổn định là không xác định. Gọi thời gian mong muốn để thoát khỏi trạng thái bất ổn định là tMET thì xác xuất để trạng thái bất ổn định không thể kết thúc trong khoảng thời gian này là:

Trong đó:
  • tMET (resolution time) là thời gian yêu cầu để tín hiệu đạt trạng thái ổn định sau khi rơi vào trạng trạng thái bất ổn định.
  • C2 (decay time constant) là hằng số thời gian suy hao được xác định bởi các thông số điện của FF. 
Hình 8. Minh họa về thời gian tMET
Bên cạnh đó, tốc độ trung bình (average rate) để FF rơi vào trạng thái bất ổn định được tính như sau:
Trong đó:
  • C1 (susceptible time window) là hằng số thời gian phụ thuộc vào thông số điện của FF. Đây là khoảng thời gian mà nếu có sự thay đổi của ngõ vào thì ngõ ra FF sẽ rơi vào trạng thái bất ổn định.
  • fCLK là tần số clock miền nhận tín hiệu bất đồng bộ. Như minh họa hình 6, fclk là tần số của clk_b
  • fDATA là tần số thay đổi mức logic của tín hiệu ngõ vào hay số lần tín hiệu ngõ vào thay đổi giá trị trong 1 giây. Ví dụ, theo hình 6, tín hiệu dữ liệu d_outa thay đổi theo xung clock clk_a nên fDATA = fclk_a.
Rmeta biểu thị số lần FF có thể sẽ rơi vào trạng thái bất ổn định trong 1 giây. Như vậy, số lỗi đồng bộ trung bình trong 1 giây là:

Thời gian trung bình giữa các lỗi MTBF ứng với một một giá trị tMET mong muốn là:

MTBF sẽ được dùng để đáng giá một mạch đồng bộ trong thiết kế có đáp ứng được yêu cầu hay không. Ví dụ, một FF có thông số C1 là 0,1 ns, thông số C2 là 0,5 ns, tần số clock hệ thống là fCLK = 50 Mhz và tốc độ dữ liệu là fDATA = 10 Mhz. Ở đây, tần số clock hệ thống là 50 Mhz, tương ứng chu kỳ là 20 ns. Chúng ta kỳ vọng tMET < (tCLK - setup time), tức là tín hiệu được mong muốn sẽ ổn định trước thời gian setup của xung clock fCLK nếu xảy ra trạng thái bất ổn định. Hình sau là bảng tính MTBF ứng với từng trường hợp kỳ vọng tMET từ 0ns đến 19ns.
Hình 9. Tính toán giá trị MTBF
Qua ví dụ trên, chúng ta có thể thấy thời gian dự trữ dành cho trạng thái bất ổn định càng lớn, tức tMET càng lớn, thì thời gian giữa 2 lần xuất hiện lỗi đồng bộ càng dài, tức MTBF càng lớn. Đồng nghĩa với việc xác suất xuất hiện lỗi đồng bộ càng thấp. Ví dụ, nếu kỳ vọng lỗi đồng bộ ngay lập tức có thể ổn định (tMET = 0), nghĩ là không có khoảng thời gian dự trữ cho trạng thái bất ổn định, thì cứ mỗi 0.02ms là có thể xuất hiện một lỗi đồng bộ. Nếu tMET tăng lên 19ns thì khoảng cách trung bình giữa 2 lỗi đồng bộ là khoảng 20202 năm. Tuy nhiên, MTBF là thời gian "trung bình" nên trên thực tế, không phải cứ sau 20202 năm mới xuất hiện một lỗi đồng bộ mà khoảng cách giữa 2 lần xuất hiện lỗi đồng bộ có thể ngắn hoặc dài hơn 20202 năm nhưng trong suốt quá trình hoạt động của thiết kế, khoảng cách trung bình là 20202 năm.

Như vậy để hạn chế lỗi đồng bộ thì MTBF phải đủ lớn để đáp ứng nhu cầu của ứng dụng thực tế và mạch đồng bộ là mạch có vai trò làm tăng MTBF để hạn chế tối đa sự xuất hiện lỗi đồng bộ.

Bên cạnh đó, MTBF rất nhạy với sự thay đổi của tMET vì phụ thuộc vào tMET theo hàm mũ, vì vậy chỉ cần sự thay đổi nhỏ của tMET cũng làm cho giá trị MTBF biến đổi lớn.

5. Tính toán MTBF cho mạch đồng bộ sử dụng chuỗi FF mắc nối tiếp

5.1 Trường hợp không sử dụng mạch đồng bộ

Trong hình minh họa sau không sử dụng mạch đồng bộ giữa hai miền clock bất đồng bộ. Gọi:
  • Tclk_b là chu kỳ clock clk_b
  • Tsu là thời gian setup (setup time) của FF miền clk_b
  • Tcom là thời gian trễ trên mạch tổ hợp ngõ vào
Hình 10. Giao tiếp giữa 2 miền clock không sử dụng mạch đồng bộ
Nếu tín hiệu bất đồng bộ được sử dụng trực tiếp thì không có thời gian dự trữ nào để để tín hiệu ổn định trước khi được sử dụng, tức là tMET=0. Theo bảng tính của ví dụ hình 9, khả năng xuất hiện lỗi đồng bộ là sau mỗi 0,02ms. Sau mỗi 0,02ms, một lỗi đồng bộ xuất hiện là không thể chấp nhận được đối với bất kỳ thiết kế nào.

5.1 Trường hợp sử dụng 1 FF để làm mạch đồng bộ

Nếu sử dụng một FF để đồng bộ tín hiệu thì khoảng thời gian dự trữ (khoảng thời gian mong muốn) để trạng thái bất ổn định trở về trạng thái ổn định nếu xảy ra vi phạm timing là:
tMET = Tclk_b - (Tcom + Tsu)

Trong đó Tsu là thông số của FF nên tMET phụ thuộc vào Tcom. Tcom càng lớn thì tMET càng nhỏ và MTBF càng nhỏ. Xét lại bảng tính hình 9, giả sử Tsu=1ns, nếu:
  1. Mạch tổ hợp đơn giản có độ trễ nhỏ, ví dụ Tcom=2ns thì tMET=20-3=17ns sẽ ứng với MTBF là 370 năm
  2. Mạch tổ hợp phức tạp có độ trễ lớn, ví dụ Tcom=13ns thì tMET=20-14=6ns sẽ ứng với MTBF là 3,255s
Hình 11. Sử dụng 1 FF để làm mạch đồng bộ
Việc sử dụng 1 FF làm cho Tcom ảnh hưởng trực tiếp đến tMET. Như đã trình bày trước đó, MTBF rất nhạy với sự thay đổi của tMET nên việc chỉ sử dụng một FF để đồng bộ là vô cùng rủi ro và phụ thuộc quá nhiều vào việc thiết kế phía sau mạch đồng bộ.

5.2 Trường hợp sử dụng 2 FF để làm mạch đồng bộ

Để thời gian dữ trữ cho việc giải phóng khỏi trạng thái bất ổn định tMET được lớn nhất thì Tcom phải nhỏ nhất. Chèn thêm 1 FF là cách đơn giản và không làm thay đổi mạch chức năng phía sau. Khi 2 FF được sử dụng, giữa 2 FF chỉ là dây dẫn và không có mạch tổ hợp nào. Để độ trễ dây dẫn là không đáng kể thì khi layout mạch 2 FF của mạch đồng bộ phải đặt gần nhau, Tcom xem như bằng 0.

tMET = Tclk_b - Tsu

Theo ví dụ trên nếu Tsu = 1ns thì tMET = 19ns và MTBF là 20202 năm.
Hình 12. Sử dụng 2 FF để làm mạch đồng bộ
Đến đây, chúng ta cần lưu ý hai điểm khi sử dụng chuỗi FF để đồng bộ:
  1. Mạch đồng bộ phải dùng ít nhất là 2 FF
  2. Giữa hai FF của mạch đồng bộ không được phép chèn thêm bất cứ logic mạch tổ hợp nào.
Tiếp theo nếu tăng tần số xung clock clk_b lên, chu kỳ Tclk_b sẽ giảm và thời gian tMET cũng sẽ giảm theo. Ví dụ, tăng tần số clk_b lên 100Mhz, chu kỳ là 10ns, tMET sẽ là:
tMET = Tclk_b - Tsu = 10 - 1 = 9ns

Tính lại MTBF, ta sẽ có:
MTBF ≈ 10,94 phút
Để giải quyết vấn đề này, nhiều thư viện công nghệ (thư viện để tổng hợp và chế tạo vi mạch) hỗ trợ loại D-FF đặc biệt gọi là metastablility-hardened D-FF, tạm dịch là "D-FF kháng bất ổn định", dùng riêng cho mạch đồng bộ. Loại FF này có các hệ số C1, C2 và Tsu nhỏ hơn các FF thông thường nên MTBF sẽ tăng đáng kể.

5.3 Sử dụng nhiều hơn 2 FF để thực hiện mạch đồng bộ

Nếu thư viện công nghệ không có FF đáp ứng được thông số MTBF cần thiết thì sao? Chúng ta có thể tăng MTBF bằng cách mắc nối tiếp nhiều hơn 2 FF. Xét ví dụ, mạch đồng bộ dùng 3 FF để xem tại sao mắc thêm nhiều FF hơn thì có thể đạt MTBF mong muốn.
Hình 13. Mạch đồng bộ sử dụng 3 FF
Tốc độ trung bình để FF đầu tiên rơi vào trạng thái bất ổn định:
Khi FF đầu tiên rơi vào trạng thái bất ổn định thì xác suất để điều kiện bất ổn định tồn tại vượt qua chu kỳ clock hiện tại là:

Nếu trạng thái bất ổn định của FF đầu tiên duy trì quá một chu kỳ xung clk_b thì FF thứ 2 sẽ rơi vào trạng thái bất ổn định và xác suất để điều kiện bất ổn định tồn tại vượt qua 1 chu kỳ clock là:


MTBF của mạch đồng bộ 3 FF sẽ là:

Nếu so với mạch đồng bộ dùng 2 FF, số mũ của tử số MTBF ở mạch dùng 3 FF lớn gấp 2 lần số mũ của tử số ở mạch dùng 2 FF. Sô mũ của tử số mạch dùng 3 FF:


Xét lại ví dụ trước, giá trị MTBF ứng với fclk_b = 100Mhz, fDATA = 10Mhz, C1 = 0,1ns, C2 = 0,5ns, Tsu = 1ns là 1367 năm. Như vậy, chỉ cần mắc thêm 1 FF mà MTBF tăng từ 10,94 phút ở mạch dùng 2 FF lên 1367 năm ở mạch dùng 3 FF.

6. Tóm tắt

Bài này giải thích rõ về:
  1. Trạng thái bất ổn định và những nguy hiểm của trạng thái này
  2. Tại sao mạch mắc nhiều FF nối tiếp lại hạn chế được trạng thái bất ổn định lan truyền trong thiết kế
Vấn đề kế tiếp đối với việc thiết kế mạch đồng bộ các tín hiệu bất đồng bộ là:
  1. Trường hợp nào sử dụng mạch đồng bộ mắc nối tiếp nhiều FF
  2. Làm sao để lấy mẫu đúng được dữ liệu mong muốn. Bạn đọc có thể quan sát lại hình 7, trong hình này, việc sử dụng 2 FF chỉ có thể hạn chế được sự lan truyền của trạng thái bất ổn định chứ không đảm bảo lấy được giá trị mong muốn ở ngõ vào.
Các vấn đề trên sẽ được trình bày trong những bài tiếp theo.

Lịch sử cập nhật:
2020.01.07 - Sửa link hình minh họa

0 bình luận:

Đăng nhận xét