Thứ Sáu, 6 tháng 7, 2018

[STA] Tổng quan về phân tích timing tĩnh

Timing (định thời) là những quy định về mặt thời gian mà các mạch số cần phải tuân thủ và đáp ứng khi được tổng hợp và layout. Timing là một trong các yếu tố quan trọng luôn phải được xem xét, đánh giá khi tổng hợp, layout mạch số. Các phần mềm tổng hợp như Design Compiler sẽ thực hiện việc phân tích timing tĩnh (Static timing) để lựa chọn các cổng logic phù hợp tạo ra các netlist. Các phần mềm layout như IC compiler sẽ căn cứ trên kết quả phân tích timing tĩnh để sắp đặt (place) các cell và đi dây (route) kết nối các cell tạo ra bản layout. Phần mềm chuyên phân tích timing như Prime Time sẽ kiểm tra timing toàn bộ thiết kế theo tốc độ clock mong muốn. Bài viết này sẽ mô tả tổng quan về một số khái niệm trong phân tích timing tĩnh (Static Timing Analysis).
1) Phân tích timing tĩnh là gì?
Phân tích timing tĩnh là một phương pháp xác định sự hợp lệ (MET) về mặt timing của thiết kế bằng cách kiểm tra tất cả các đường đi trong thiết kế có vi phạm timing hay không trong điều kiện xấu nhất. Phân tích timing chỉ quan tâm đến độ trễ xấu nhất có thể xảy ra trong mạch số chứ không quan tâm đến chức năng của mạch số.
So với việc mô phỏng (simulation) mạch số thì phần tích timing được thực hiện nhanh hơn và toàn diện hơn.
  • Nhanh hơn là bởi vì phân tích timing không cần sử dụng đến nhiều các test vector khác nhau như khi mô phỏng chức năng. Test vector là các giá trị đầu vào của thiết kế mà người mô phỏng sẽ xây dựng để kiểm tra chức năng thiết kế.
  • Toàn diện hơn là vì nó kiểm tra trường hợp timing xấu nhất cho tất cả các điều kiện logic có thể chứ không chỉ hạn chế bởi một tập các test vector cố định nào. Tuy nhiên phân tích timing tĩnh chỉ kiểm tra thuộc tính timing của thiết kế chứ không kiểm tra tính đúng đắn về chức năng thiết kế.
Các ràng buộc (constraint) về timing, diện tích và năng lượng tiêu thụ là ba yếu tố ảnh hưởng đến quá trình tổng hợp và thiết kế vật lý (quá trình layout) của mạch số. Các phần mềm tổng hợp và layout luôn hướng đến mục tiêu làm cho vi mạch được tạo ra có tốc độ hoạt động nhanh nhất, diện tích nhỏ nhất, công suất tiêu thụ ít nhất phù hợp với yêu cầu thiết kế. Các phần mềm này sẽ tìm cách cân bằng các yếu tố tốc độ, diện tích, năng lượng của thiết kế và thời gian chạy của phần mềm dựa trên các ràng buộc (các thiết lập) của người thiết kế. Tuy nhiên một chip phải thỏa mãn các ràng buộc về timing để có thể xử lý đúng ở một tốc độ clock mong muốn. Timing chính là ràng buộc quan trọng nhất của thiết kế. Diện tích lớn hay công suất cao thì chức năng của chip vẫn đảm bảo nhưng timing không đúng thì chip sẽ hoạt động sai chức năng.
Phân tích timing tĩnh là trả lời câu hỏi "Khi cạch tích cực (cạnh lên hoặc cạnh xuống) của clock xuất hiện, một dữ liệu đúng có luôn xuất hiện ở ngõ vào của một cell đồng bộ, ví dụ như Flip-Flop (FF), trong mọi điều kiện hoạt động hay không?". Trong câu hỏi này, chúng ta thấy việc phân tích timing gắn liền với một định nghĩa clock. Giá trị đầu vào của một cell đồng bộ có thể thay đổi trong quá trình hoạt động của chip, kiểm tra timing là để đảm bảo một cell đồng bộ luôn bắt được dữ liệu đúng của đầu vào.
Lấy một ví dụ đơn giản như sau để các bạn có thể hình dung về timing, một hãng xe khách có lịch trình xuất phát hằng ngày từ TP. HCM đến TP. Bảo Lộc là 1 tiếng có 1 chuyến, hành khách phải có mặt trước hoặc đúng các thời điểm 6 giờ, 7 giờ, 8 giờ, ... thì mới có xe chạy. Bên cạnh đó, nhà xe khuyến cáo hành khách đến trước chuyến đi 15 phút, đây giống như ràng buộc timing, nếu hành khách đến trước 15 phút thì luôn lên được chuyến xe mong muốn. Một hành khách muốn đi xe lúc 8 giờ, nếu hành khách này đến trước hoặc đúng 7 giờ 45 phút thì lên được đúng chuyến xe mong muốn, điều này tương ứng với việc timing được thỏa mãn, gọi là MET timing. Nếu hành khách này đến sau 7 giờ 45 phút, hành khách có thể bị trễ chuyến xe, điều này tương ứng với việc timing bị vi phạm, gọi là VIOLATED timing. Ở đây, lịch trình 1 tiếng có 1 chuyến giống như xung clock. Ví dụ này chỉ dùng mới mục đích giúp các bạn dễ hình dung về khái niệm timing chứ trên thực tế việc phân tích timing trong thiết kế vi mạch không đơn giản chỉ như vậy.
Hình 1: Minh họa khái niệm timing
2) Các loại kiểm tra timing 
Trong quá trình phần tích timing có nhiều loại kiểm tra timing cho nhiều loại đường timing khác nhau. Mục này trình bày một số loại kiểm tra timing gồm:
  • Kiểm tra setup
  • Kiểm tra hold
  • Kiểm tra data-to-data
  • Kiểm tra recovery
  • Kiểm tra removal
2.1) Kiểm tra setup
Xét ví dụ về sự truyền dữ liệu giữa 2 FF sau đây:
Hình 2: Ví dụ về đường timing (timing path)
Hình 1 minh họa một đường timing (khái niệm này sẽ được đề cập sau ở bài này) là đường đứt nét màu đỏ. Khi xuất hiện cạnh lên clock clk, giá trị FFA.D được cập nhật đến FFA.Q, lan truyền qua mạch tổ hợp đến FFB.D. Để FFB bắt được giá trị mới tại FFB.D được truyền từ FFA.Q thì giá trị này phải xuất hiện ổn định tại FFB.D trước khi cạnh lên clock clk xuất hiện tại FFB. Sau đây chúng ta sẽ phân tích đường timing này.
Hình 3: Minh họa timing của đường timing ở hình 1
Hình 2 minh họa timing của đường timing trong ví dụ ở hình 1. Ở đây, chúng ta xem cạnh lên clock clk xuất hiện tại FFA và FFB là cùng một thời điểm, nghĩa là độ trễ trên đường clock clk giữa FFB và FFA là không đáng kể. Khi FFA.D thay đổi trạng thái, FFA sẽ bắt giá trị của FFA.D và chuyển đến FFA.Q tại cạnh lên clock clk. Sự kiện bắt giá trị trên FFA.D gọi là sự kiện khởi tạo (launch event) của đường timing. Cạnh lên lock tại FFA gọi là cạnh khởi tạo (launch edge). Giá trị của FFA.D sẽ xuất hiện tại FFA.Q sau một khoảng thời gian trễ, gọi là độ trễ chân clock đến Q của FFA (clk-to-Q). Khi giá trị FFA.Q đi qua mạch tổ hợp thì sau một khoảng thời gian, gọi là độ trễ mạch tổ hợp (combinational logic delay), giá trị xuất hiện tại FFB.D. Thời điểm giá trị mới xuất hiện tại FFB.D gọi là thời điểm đến (arrival time) của đường timing. Thời điểm đến này phải xuất hiện trước cạnh lên clock clk tại FFB (cạnh lên clock tiếp theo) một khoảng thời gian tối thiểu bằng setup time của FFB. Setup time là khoảng thời gian trước khi xuất hiện cạnh tích cực (trong ví dụ này là cạnh lên) tại FF mà dữ liệu trên chân D của FF phải ổn định thì mới đảm bảo FF bắt đúng được giá trị của D.
Thời điểm chậm nhất của thời gian đến gọi là thời điểm yêu cầu (required time) cho đường timing. Việc bắt dự liệu tại cạnh lên clock clk tại FFB gọi là sự kiện bắt (capture) của đường timing. Cạnh lên clock này gọi là cạnh bắt (capture edge). Chú ý, cạnh khởi tạo xuất hiện tại sự kiện khởi tạo ở FFA còn cạnh bắt là cạnh clock tiếp theo xuất hiện tại sự kiện bắt ở FFB.
Khoảng thời gian mà trong đó ràng buộc timing phải được thỏa mãn gọi là slack.
slack = required time - arrival time

Nếu arrival time sớm hơn required time thì slack là giá trị dương. Nếu arrival time trùng với required time thì slack bằng 0 và ràng buộc timing là vừa đủ thỏa mãn (barely MET). Nếu arrival time trễ hơn required time thì slack âm. Loại kiểm tra timing trong ví dụ này là một trong những loại kiểm tra cơ bản gọi là kiểm tra setup. Kiểm tra setup sẽ kiểm tra xem sự thay đổi dữ liệu có đến đủ sớm trước mỗi cạnh tích cực của clock ở một cell đồng bộ hay không.
Theo công thức tính slack. Nếu kiểm tra setup bị vi phạm, slack âm, thì người thiết kế có thể tác động đến hai yếu tố:
  • Required time là yếu tố phụ thuộc vào thông số thư viện công nghệ như thời gian setup của FF nên người thiết kế không thay đổi nhiều mà chỉ thiết lập ràng buộc timing đúng.
  • Arrival time là yếu tố phụ thuộc lớn vào thiết kế vì độ trễ chính của đường timing là độ trễ trên mạch tổ hợp. Người thiết kế có thể thay đổi để thỏa mãn yêu cầu timing.
Người thiết kế có thể áp dụng một số giải pháp sau đây để tránh vi phạm timing sau theo thứ tự ưu tiên:
  1. Tối ưu lại mạch tổ hợp giữa hai phần tử tuần tự để giảm độ trễ trên mạch tổ hợp. Thồng thường để tối ưu đáng kể thì người thiết kế phải chuyển hoàn toàn từ một phương pháp hay ý tưởng thiết kế này sang một giải pháp thiết kế khác.
  2. Sử dụng phần tử tuần tự để cắt đường timing dài thành nhiều đường timing ngắn hơn. Lúc này, đường timing đi trực tiếp từ FFA đến FFB sẽ không còn, thay vào đó là đường timing đi từ FFA đến FFM và đường timing đi từ FFM đến FFB với độ trễ mạch tổ hợp giữa FFA và FFM; FFM và FFBA nhỏ hơn nhiều so với từ FFA đến FFB trước đó.
  3. Đổi thư viện công nghệ bằng cách chuyển từ thư viện công nghệ có các cell độ trễ lớn, tốc độ thấp đến các cell có độ trễ nhỏ hơn , tốc độ cao. Tuy nhiên, trên thực tế, với một dự án cụ thể, thư viện công nghệ đã được chọn cố định từ đầu và các thiết kế trong một chip phải tìm mọi cách đáp ứng theo thư viện công nghệ này.
2.2) Kiểm tra hold
Ngoài kiểm tra setup, một loại kiểm tra cơ bản khác là kiểm tra hold. Loại này sẽ kiểm tra xem dữ liệu có được giữ trong một khoảng thời gian vừa đủ sau khi xuất hiện cạnh capture hay không. Một dữ liệu không chỉ phải xuất hiện trước cạnh capture một khoảng thời gian đủ để không vi phạm setup mà còn phải duy trì ổn định giá trị của nó sau khi cạnh capture xuất hiện một khoảng thời gian đủ để không vi phạm hold.
Kiểm tra hold bị vi phạm nếu độ trễ ngắn nhất của mạch tổ hợp từ cạnh launch đến cạnh capture quá ngắn còn độ trễ dài nhất từ cạnh launch đến cạnh capture lại quá dài. Xét ví dụ hình 4, trên dường timing có một cổng NOR với độ trễ rất nhỏ. Trong khi đó, đường clock có 7 buffer có độ trễ lớn làm cho clock tại FFB.CLK trễ đáng kể so với clock tại FFA.CLK.
Hình 4: Ví dụ về kiểm tra hold time
Trong trường hợp, độ trễ mạch tổ hợp quá nhỏ trong khi độ trễ đường clock lại lớn đáng kể, vi phạm hold time có thể xảy ra .
Hình 5: Kiểm tra hold
Trong ví dụ này, yêu cầu về thời gian setup có thể dễ dàng thỏa mãn nhưng thời gian hold không được thỏa mãn vì dữ liệu tại FFB.D không được giữ đủ lâu sau cạnh clock giả định. Dữ liệu thay đổi trước khi cạnh clock thực tế xuất hiện tại FFB.CLK làm cho FFB không bắt được dữ liệu mong muốn. Vi phạm hold có thể được giải quyết bằng một trong hai hoặc cả hai cách sau:
  • Tăng độ trễ trên đường timing
  • Giảm độ trễ của đường clock
Các loại kiểm tra timing khác nhau sẽ kiểm tra các điều kiện xấu nhất khác nhau. Ví dụ, kiểm tra setup sẽ quan tâm đến đường đi dài nhất (chậm nhất) đi qua mạch tổ hợp của đường timing và vị trí xuất hiện cạnh clock capture sớm nhất so với cạnh clock launch. Ngược lại, kiểm tra hold lại quan tâm đến đường đi ngắn nhất (nhanh nhất) qua mạch tổ hợp và vị trí xuất hiện cạnh clock capture trễ nhất so với cạnh clock launch.
Hình 6: Có nhiều đường đi khác nhau qua một mạch tổ hợp
2.3) Kiểm tra data-to-data
Khác với kiểm tra setup và kiểm tra hold là kiểm tra mối liên hệ giữa đường clock và đường data, kiểm tra data-to-data là kiểm tra timing giữa hai đường data. Ví dụ một cell có hai đường đường dữ liệu đầu vào là D1 và D2 như hình 7.
Hình 7: Ví dụ về kiểm tra data-to-data
Trong ví dụ này, đường canh lên đường D2 được sử dụng để bắt dữ liệu trên đường D1 nhưng đường D2 không được định nghĩa như một tín hiệu clock mà được xem như một tín hiệu data thông thường. Trong trường hợp này, tín hiệu tại chân D1 phải được ràng buộc để giữ ổn định trước cạnh lên D2 một khoảng thời gian gọi là setup time và phải giữ ổn định sau cạnh lên D2 một khoảng thời gian gọi là hold time.
2.4) Kiểm tra recovery
Recovery time là khoảng thời gian tối thiểu tính từ lúc một tín hiệu điều khiển bất đồng bộ thôi tích cực đến cạnh tích cực của clock. Nghĩa là một tín hiệu điều khiển bất đồng bộ, ví dụ như set/reset bất đồng bộ, khi chuyển từ trạng thái tích cực sang trạng thái không tích cực thì khoảng thời gian "không tích cực" phải thỏa mãn thời gian recovery.
Hình 8: Recovery time cho tín hiệu bất đồng bộ tích cực mức cao
Kiểm tra recovery là để đảm bảo khoảng thời gian recovery của các tín hiệu điều khiển bất đồng bộ phải đủ.
2.5) Kiểm tra removal
Removal time là khoảng thời gian tối hiểu mà một tín hiệu bất đồng bộ phải giữ mức tích cực của nó sau một cạch tích cực của clock. Nghĩa là, khi một tín hiệu bất đồng bộ đang tích cực, nếu muốn thôi tích cực thì thời gian từ vị trí nó thôi tích cực đến cạnh clock tích cực gần nhất trước nó phải thỏa mãn removal time.
Hình 9: Removal time của một tín hiệu điều khiển bất đồng bộ tích cực mức cao
Kiểm tra removal là để đảm bảo khoảng thời gian removal của các tín hiệu điều khiển bất đồng bộ phải đủ.
3) Các loại đường timing (timing path) trong mạch số
Phần mềm tổng hợp, tối ưu và phân tích timing có thể thực hiện kiểm tra timing cho các loại đường sau đây:
  • Đường clock là đường từ chân ngõ vào clock hoặc chân một cell đi qua một hoặc nhiều buffer hay cổng đảo đến chân clock của một phần tử tuần tự.
  • Đường clock-gating là đường từ một chân ngõ vào đến một phần tử clock_gating.
  • Đường bất đồng bộ là đường từ chân ngõ vào đến chân set/reset bất đồng bộ của phần tử tuần tự.
  • Đường data là đường từ chân ngõ vào hoặc chân clock đến chân ngõ ra hoặc chân ngõ vào của phần tử tuần tự. 
Hình 10. Các loại đường timing
4) Các loại đường dữ liệu (data path)
Các phần mềm phân tích timing sẽ tìm và phân tích tất cả các loại đường timing trong thiết kế. Đường dữ liệu là một loại đường cơ bản mặc địch sẽ được kiểm tra. Mỗi đường sẽ có một điểm bắt đầu (startpoint) và một điểm kết thúc (endpoint). Điểm bắt đầu là vị trí mà tại đó dữ liệu sẽ được bắt bởi cạnh tích cực của clock. Dữ liệu được bắt này sẽ lan truyền qua mạch tổ hợp và đường dây đến điểm kết thúc mà tại đây nó sẽ được bắt bởi một cạnh clock khác.
Điểm bắt đầu có hai loại:
  • Chân clock của một phần tử tuần tự
  • Chân ngõ vào của thiết kế
Điểm kết thúc có hai loại:
  • Chân dữ liệu của một phần tử tuần tự
  • Chân ngõ ra của thiết kế
Hai điểm bắt đầu và 2 điểm kết thúc sẽ tạo ra 4 loại đường dữ liệu:
  • Từ ngõ vào thiết kế đến chân dữ liệu của phần tử tuần tự
  • Từ chân clock của phần tử tuần tự đến chân dữ liệu của phần tử tuần tự
  • Từ ngõ vào thiết kế đến ngõ ra thiết kế
  • Từ chân clock của phần tử tuần tự đến ngõ ra thiết kế
Hình 11: Các loại đường dữ liệu
Mỗi loại đường timing trong thiết kế sẽ có slack khác nhau. Như đã trình bày ở phần trên slack là một giá trị thời gian có thể dương, âm hoặc bằng 0. Đường có giá trị slack xấu nhất gọi là critical path. Đây là đường có giá trị slack âm lớn nhất trong trường hợp có vi phạm timing. Trong trường hợp không vi phạm timing thì critical path là đường có giá trị slack nhỏ nhất trong thiết kế. Trong một thiết kế có thể có nhiều đường critical path nếu các đường này có giá trị slack xấu nhất bằng nhau.

1 bình luận:

  1. Chào Ban biên tập, cho mình góp ý về "Hình 5: Kiểm tra hold".
    - Hold time của FFB phải ở cạnh bắt dữ liệu của FFB.CLK
    - Lúc đó, slack_hold = arrival time - required time < 0 , tức Hold Time Violation

    Trả lờiXóa