Friday, November 15, 2019

Phân tích timing violation thông qua một ví dụ cụ thể

Tác giả: TrongTran
Ngày: 15/11/2019
Tài liệu tham khảo: http://www.vlsi-expert.com/, wiki
và các nguồn tư liệu từ internet.



Nếu bạn đang làm về synthesis và các quá trình checker hậu synthesis. Hay nói đúng hơn là bạn đang làm việc với gate net list thì đây là bài tổng quan và rất chi tiết dành cho bạn.

Để phân tích timing có 4 loại path mà bạn cần quan tâm đó là:

  • Từ input đến chân D flip flop (IN2REG).
  • Từ chân CLK của 1 flip flip đến chân output (REG2OUT).
  • Từ chân input đến chân output (IN2OUT).
  • Từ chân CLK của flip flip thứ nhất đến chân D của flip flop thứ 2 (2 flip flop liền kề) (REG2REG).

4 loại path này đã được phân tích kĩ ở trang này nên mình sẽ không giải thích lại: 

http://nguyenquanicd.blogspot.com/2018/07/sta-tong-quan-ve-phan-tich-timing-tinh.html

Trong thực tế nếu bạn đang synthesis cho 1 module nhỏ thì bạn chỉ cần quan tâm đến path REG2REG. Những path khác sẽ được check bởi 1 nhóm khác (Nhóm dùng gate net list của bạn để connect đến module khác).


Trong hình trên, Giả sử bạn đang synthesis cho module A. Khi đó, nhiệm vụ ưu tiên của bạn là đảm bảo đường A3 (reg2reg, đường màu đỏ) không bị violate timing. Các đường A0, A1, A2 sự violation chỉ mang tính tương đối. Vì để kiểm tra timing violation cho các đường này bạn cần phải biết chúng connect đến các flip flop nào trong các module khác. Chỉ có team làm top module mới biết được điều này.

Nói như vậy không có nghĩa là bạn muốn để các path A0, A1, A2 violate bao nhiêu tuỳ thích. Bạn sẽ được cung cấp 1 giới hạn. Ví dụ thời gian delay tối đa là bao nhiêu. Điều này đảm bảo không gây khó khăn trong quá trình phân tích và chỉnh sửa timing ở chip top.

Trong kiểm tra timing chúng ta cần kiểm tra 2 loại violation chính đó là:

  • Hold violation
  • Setup violation



Trước tiên bạn cần hiểu hold violation và setup violation là gì?

Quan sát hình trên ta thấy: 
  • Nếu tín hiệu data chưa ổn định trong khoảng thời gian tsu thì ta gọi đó là setup violation. Ngược lại nếu tín hiệu data chưa ổn định trong khoảng thời gian thd thì được gọi là hold violation.
  • Nếu data thay đổi trong miền gạch chéo trước tsu thì data không bị delay 1 chu kì. Nếu data thay đổi trong miền gạch chéo sau thd thì data bị delay 1 cycle.

Chú ý tsu là setup time và thd là hold time của 1 flip flop. Với mỗi flip flop khác nhau chúng ta sẽ có tsu và thd khác nhau. Lí giải cho việc này các bạn có thể tham khảo hình bên dưới:

Cấu trúc D flip flop

                                   Cấu trúc jk flip flop. 
Với mỗi flip flop khác nhau, chúng ta sẽ có mạch combinational logic giữa chân clk và D, giữa chân D và Q khác nhau do đó hold time và setup time sẽ khác nhau. Cùng 1 loại D flip flop nhưng nếu được sản xuất bởi các linh kiện bên trong khác nhau sẽ có hold time và setup time khác nhau.


Tiếp theo mình sẽ hướng dẫn bạn cách tính timing violation chi tiết cho một mạch cụ thể.

Ta có một mạch như bên dưới:



Yêu cầu là bạn phải kiểm tra timing violation cho path REG2REG (Nghĩa là từ chân clock của FF1 sang chân D của FF2).

Trước tiên chúng ta xem xét hình bên dưới:



Hold violation

Để kiểm tra hold violation, chúng ta cần biết được timing delay của path:
  • Minimum delay của path: A0 -> A1 -> A2 -> A3 -> A4 (1)
  • Maximum delay của path: A0 -> A1 -> B1 -> A4 (2)

Nếu hiệu số (1) –(2) > 0 thì mạch không bị hold violation.

(1) = 1 + 9 + 1 + 6 + 1 = 18 ns

(2) = 3 + 9 + 3 + 2 = 17ns

Vì Hold slack = (1) – (2) = 18 – 17 = 1ns > 0. Mạch này không bị Hold violation.

Giả sử hold time = 4ns thay vì 2 ns như đề bài thì ta có

(3) = 3 + 9 + 3 + 4 = 19 ns

Lúc này Hold slack = 18 – 19 = -1 ns < 0

Lúc này mạch sẽ bị hold violation.

Setup violation

Để kiểm tra setup violation, chúng ta cần biết được timing delay của path:

Maximum delay của path: A0 -> A1 -> A2 -> A3 -> A4 (3)

Minimum delay của path: T (Chu kì clock) + A0 -> A1 -> B1 - tsu (setup time) (4)

Nếu hiệu số setup slack = (4) – (3) > 0, mạch của chúng ta không bị setup violation.

Xét mạch trên ta có: (3) = 2 + 11 + 2 + 9 + 2 = 26 ns

(4) = 15 + 2 + 5 + 2 - 4 = 20 ns

Ta thấy setup slack = 20 – 26 = -6 ns < 0 . Do đó mạch của chúng ta bị setup violation.

Trường hợp trên giả sử ta sử dụng clock chậm hơn, nghĩa là T = 22 ns khi đó

(4)= 22 + 2 + 5 + 2 – 4 = 27 ns

Setup slack = 27 – 26 = 1ns > 0 do đó setup violation sẽ không xảy ra.


Như vậy, Chúng ta có 1 số phương pháp để tránh setup violation và hold violation:

  • Thay đổi độ dài dây dẫn giữa hai flip flop: Như chúng ta tính toán trong ví dụ trên, Sự delay của dây dẫn cũng có thể gây ra setup violation hoặc hold violation. Nếu mạch của chúng ta bị hold violation chúng ta có thể di chuyển flip flop (Place and route) để delay trên đường data path lớn và delay trên đường clock path nhỏ lại. Thường thời gian delay của wire là không lớn nên phương pháp này được sử dụng để giải quyết các violation nhỏ và số lượng path bị violation không nhiều. Đây là một phương pháp phổ biến được sử dụng nhiều.
  • Thay đổi các phần tử trên đường bị violation. Các phần tử được sản xuất bởi các vật liệu khác nhau, cấu trúc khác nhau sẽ có cac thông số delay khác nhau.
  • Chèn buffer hoặc cặp inverter: Phương pháp này nhằm đạt được thời gian delay mong muốn. Buffer và cặp inverter sẽ không làm thay đổi giá trị logic của tín hiệu. Khi chúng ta muốn tăng thời gian delay của một số path như mong muốn ta có thể chèn các buffer hoặc cặp inverter vào.
  • Nếu timing violation rất lớn và chúng ta không thể giải quyết được bằng các phương pháp trên, thì bắt buộc ta phải thêm 1 flip flop vào giữa 2 flip flop trên. Việc này được thực hiện bởi designer và mang tính rủi ro cao. Lúc này ta phải tiến hành verification lại nhằm đảm bảo việc delay 1 cycle của tín hiệu data không gây fail function.
  • Cho module chạy với clock chậm (Tăng chu kì). Phương pháp này ít được sử dụng vì nó đòi hỏi phải thay đổi design rất nhiều. Việc cho module này chạy với clock chậm sau đó dùng mạch async để sync tín hiệu với clock nhanh. Phương pháp này được sử dụng khi mạch chúng ta đang bị setup violation (Xem công thức tính setup violation bên trên).
Nếu bài viết có gì sai sót mong nhận được ý kiến từ bạn đọc. Vui lòng gọi về số: 0339339692 hoặc e-mail trongk10@gmail.com để góp ý.

No comments:

Post a Comment

Cách tính BW và latency trong 1 hệ thống SoC sử dụng chuẩn giao tiếp AXI protocol

Tác giả:  TrongTran Ngày:  31/12/2019 Nếu bạn nào đang làm về verification cho system performance (ST) thì bài này sẽ bổ ích cho bạn. Ngày ...