• Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

Thứ Bảy, 14 tháng 7, 2018

[STA] Tính toán độ trễ (delay) trong STA

Bài viết này trình bày về việc tính toán độ trễ (delay) và khái niệm về độ trễ ngõ vào, độ trễ ngõ ra trong phân tích timing. Đồng thời minh họa một báo cáo timing (timing report) cơ bản.
Trước khi tham khảo bài này, các bạn nên đọc qua một số bài viết sau đây:

1) Độ trễ ngõ vào (Input delay)
Trong phân tich timing, việc tính toán giá trị slack dựa trên thông số của phần tử tuần tự, độ trễ giữa startpoint và endpoint, khoảng cách giữa cạnh launch và cạnh capture. Các ví dụ và nội dung trình bày trong bài này dành cho đường Max - setup time.
slack = required time - arrival time (dành cho setup time)
Hình 1: Cách xác định slack
Đối với một thiết kế, slack của đường dữ liệu từ một linh kiện tuần tự này, ví dụ như FF, đến một linh kiện tuần tự khác có thể xác định dễ dàng vì các thông số cần thiết có đầy đủ.
Hình 2: Các loại đường dữ liệu (data path)
Nhưng đối với loại đường dữ liệu từ ngõ vào (input) của thiết kế đến một linh kiện tuần tự hoặc đến ngõ ra thiết kế, thời gian đến (arrival time) của dữ liệu không thể xác định được từ netlist của thiết kế vì điểm launch nằm ngoài thiết kế. Khi điểm launch nằm ngoài thiết kế, độ trễ bên ngoài, từ một linh kiện tuần tự bên ngoài đến chân ngõ vào thiết kế không thể xác định được nên thời gian dữ liệu xuất hiện tại ngõ vào thiết kế cũng không xác định được. Để phân tích đường timing từ ngõ vào một thiết kế, chúng ta cần mô tả điều kiện timing của logic bên ngoài kết nối với ngõ vào. Điều kiện timing này gọi là độ trễ ngõ vào (input delay).
Hình 3: Độ trễ ngõ vào (input delay)
Trong minh họa hình 3, thiết kế cần phân tích timing có ngõ vào được lái từ FF0, dùng chung clock với FF1, qua mạch tổ hợp rồi đến FF1.D. Độ trễ ngõ vào được tính như sau:
Độ trễ ngõ vào = độ trễ clock-to-Q của FF0 + độ trễ mạch tổ hợp C0
2) Độ trễ ngõ ra (output delay)
Tương tự, đối với đường dữ liệu có endpoint là ngõ ra thì thời điểm capture nằm ngoài thiết kế nên độ trễ từ chân ngõ ra đến linh kiện tuần tự dùng để bắt dữ liệu ngõ ra này là không thể xác định. Vì vậy, để phân tích timing đường này, chúng ta cần đặc tả điều kiện timing của đường kết nối đến ngõ ra thiết kế. Thông số này gọi là độ trễ ngõ ra (output delay).
Hình 4: Độ trễ ngõ ra (output delay)
Trong ví dụ hình 4, độ trễ ngõ ra được tính như sau:
Độ trễ ngõ ra = Độ trễ mạch tổ hợp C0 + thời gian setup của FF0
3) Tính toán độ trễ trong STA
Trước khi tìm hiểu việc tính toán độ trễ trong phân tích timing tĩnh, chúng ta hãy phân tích và hiểu một báo cáo timing (timing report).
Hình 5: Báo cáo timing
Hình 5 là một báo cáo timing điển hình của các phần mềm phân tích timing (PrimeTime) và tổng hợp (Design Compiler). Báo cáo này thể hiện nhưng giá trị phân tích cho một đường timing từ điểm startpoint modem/qr_tmp với cạnh launch là cạnh lên clock Sysclk|altpll|clk[2] đến điểm endpoint modem/qr với cạnh capture là cạnh lên clock Sysclk|altpll|clk[2]. Loại phân tích timing là loại setup ứng với ký hiệu "max" (ký hiệu "min" là loại kiểm tra timing hold). Báo cáo timing có 3 cột là Point, Incr và Path.
Cột "Point" liệt kê tất cả các điểm mà đường timing đi qua từ startpoint đến endpoint và các độ trễ cộng thêm. Mỗi điểm là chân của một cell, trong ví dụ này, từ startpoint đến endpoint sẽ đi qua các điểm sau:
  • Chân clock của cell FF tên modem/qr_tmp
  • Chân Q của cell FF tên modem/qr_tmp
  • Ngõ ra cell buffer tên modem/qr_tmp_ASTfhInst7779
  • Ngõ ra cell buffer tên lcell_comb6052
  • Chân D của cell FF tên modem/qr
Trong đó có một độ trễ cộng thêm là độ trễ trên đường clock "clock network delay".
Cột "Incr" là giá trị được thêm vào (dương) hoặc trừ đi (âm) trong việc tính tổng độ trễ trên đường timing.
Cột "Path" là giá trị cộng dồn tại mỗi điểm. Giá trị cộng dồn tại một điểm lấy từ giá trị ngay trên nó cộng với giá trị cột "Incr" ở vị trí tương ứng. Ví dụ, độ trễ cộng dồn tại điểm lcell_comb6052/OUT (BUF_D6) là:
0.589 = 0.423 (giá trị điểm trước) + 0.166 (giá trị tăng thêm)
Báo cáo timing này có hai phần, nữa phần đầu tính toán thời gian trễ trên đường timing và cho biết thời gian đến trên đường dữ liệu (data arrival time) là 0.614. Phần sau cho biết thời gian yêu cầu phải có dữ liệu được tính từ lúc cạnh lên capture xuất hiện tại điểm định nghĩa clock cộng độ trễ trên đường clock có trừ đi setup time của FF bắt dữ liệu. Thời gian yêu cầu (data riquired time) là 6.334.
Phân cuối báo cáo timing, giá trị slack được tính trên thời gian yêu cầu dữ liệu và thời gian đến:
slack = thời gian yêu cầu - thời gian đến = 6.334 - 0.614 = 5.720 
Hình 6: Minh họa đường timing trong ví dụ 5
Quá báo cáo timing trên, chúng ta có thể hình dung được các thông số cần thiết để tính toán các giá trị timing.
Giá trị slack được tính thông qua các thông số sau:
  • Thời gian đến của cạnh clock launch tính từ nguồn clock đến chân ngõ vào của lauch FF, tương ứng với điểm qr_tmp.CLK trong hình minh họa 6
  • Thời gian đến của cạnh clock capture tình từ nguồn clock đến chân ngõ vào của capture FF, tương ứng với điểm qr.CLK trong hình minh họa 6
  • Độ trễ từ startpoint đến endpoint trên đường timing. Trong minh họa hình 6 là độ trễ tổng cộng từ qr_tmp.CLK đến qr.D
  • Độ lệch (uncertainty) xấu nhất giữa hai tín hiệu clock
Độ trễ tích lũy (cumulative delay) dọc theo đường timing được tính dựa trên:
  • Độ trễ của các cell, thông số này lấy từ thư viện công nghệ dùng để tổng hợp. Trong ví dụ hình 5, các độ trễ của cell gồm độ trễ clock-to-Q của FF qr_tmp, độ trên của các buffer, setup time của FF qr.
  • Độ trễ của đường dây kết nối (interconnect delay). Độ trễ này được tính dựa trên các thông số sau:
    • Thông số cell lái đường dây
    • Thông số tải của cell bị lái bởi đường dây
    • Thông số về điện trở và tụ điện của đường dây. Thông số này phụ thuộc đặc tính vật lý, độ dài của đường dây nên chỉ được xác định chính xác sau khi thiết kế đã được layout hoàn chỉnh.
Xem hình 6, xét đoạn dây từ buffer qr_tmp_ASTfhInst7779 đến buffer lcell_comb6052 thì qr_tmp_ASTfhInst7779 là cell lái, lcell_comb6052 là cell bị lái.
Trước khi "place and route" (quá trình sắp đặt các khối thiết kế, các cell và đi dây để kết nối các thành phần) độ trễ đường dây chỉ là một giá trị ước lượng của phần mềm phân tích timing. Sau khi "place and route", các thông số RC của đường dây sẽ được lấy chính xác từ độ dài đường dây và vật liệu đường dây.

Tham khảo:
Altera CorporationAN 554: How to Read HardCopy PrimeTime Timing Reports, Mar.2010

Lịch sử cập nhật:
1/ Thêm chú thích đầu bài để chỉ rõ các phân tích và ví dụ trong bài này là dành cho setup time (xem comment 1) - Oct.24.2020

Thứ Hai, 9 tháng 7, 2018

[STA] Các loại đường ngoại lệ trong phân tích timing

Mặc định, phần mềm phân tích timing sẽ thực hiện phân tích tất cả các đường từ startpoint đến endpoint bằng cách giả sử sau khi một sự kiện lấy dữ liệu (launch) xuất hiện tại startpoint thì dữ liệu này sẽ được bắt (capture) ở endpoint trong cạnh clock kế tiếp. Nghĩa là timing được kiểm tra trong một chu kỳ xung clock. Bất kỳ trường hợp ngoại lệ nào nằm ngoài quy tắc này đều phải được khai báo như một đường timing ngoại lệ (timing exception). Bài này mô tả một số loại đường timing ngoại lệ.

1) False path
False path là một đường có tồn tại thực sự trong thiết kế nhưng trong quá trình hoạt động, đường này không bao giờ được sử dụng để truyền dữ liệu từ startpoint đến endpoint do được cấu hình, do chuỗi dữ liệu được mong muốn hoặc do chế độ hoạt động. False path là đường sẽ không cần phải thỏa mãn các điều kiện ràng buộc timing trong quá trình phân tích timing và là đường sẽ không cần phải tối ưu timing trong quá trình tổng hợp, thiết kế vật lý.
1.1) Đường có giá trị tại startpoint là cố định
Các thiết kế thường có một số bit thanh ghi được sử dụng để cấu hình hoạt động của thiết kế. Các bit này chỉ được cấu hình một lần trước khi hoạt động và giữ nguyên giá trị trong suốt quá trình hoạt động. Trong trường hợp này, việc phân tích timing hay tối ưu timing cho đường này có thể không cần thiết hoặc không qua trọng bằng các đường có trạng thái thay đổi liên tục. Đường đi từ bit này đến các thanh ghi khác có thể được xem như là false path.
Hình 1: flase path - ví dụ về đường có giá trị tại startpoint là không đổi trong khi thiết kế hoạt động
1.2) Đường không xảy ra sự lan truyền dữ liệu từ startpoint đến endpoint
Trong trường hợp này, dữ liệu của startpoint không ảnh hưởng đến giá trị tại endpoint trong bất cứ trường hợp nào. Trong ví dụ hình 2, FF0 không bao giờ lan truyền dữ liệu của nó đến FF1 do cấu trúc mạch được điều khiển bởi sel. Trong trường hợp này, đường từ FF0 đến FF1 có thể được xem xét như false path.
Hình 2: flase path - FF0 không bao giờ lan truyền dữ liệu đến FF1
Một ví dụ khác trong hình 3, giữa FF0 và FF3 có đường timing tuy nhiên giá trị của FF0 không bao giờ ảnh hưởng đến giá trị FF3. Giá trị FF3 chỉ phụ thuộc vào giá trị của FF1. Đường timing từ FF0 đến FF3 có thể được xem như là false path.
Hình 3: False path - giá trị của FF0 không ảnh hưởng đến FF3 trong mọi trường hợp
1.3) Đường reset bất đồng bộ
Trong quá trình khởi động (start-up), quá trình xảy ra sau khi bật nguồn và trước khi chip bắt đầu hoạt động, các FF cần được reset để xác lập giá trị ban đầu. Một số module sẽ không cần phải hoạt động và không được cấp clock thông qua các cell clock-gate trong suốt quá trình khởi động. Để reset được các FF không có clock, reset bất đồng bộ sẽ được sử dụng. Đối với các module không được cấp clock, timing của tín hiệu reset bất đồng bộ không ảnh hưởng đến các FF. Tín hiệu reset có thể tích cực và thôi tích cực bất cứ thời điểm nào trong quá trình khởi động mà không gây ra trạng thái bất ổn định (metastability) cho các FF không được cấp clock. Vì vậy, đường reset bất đồng bộ đẽn các FF này có thể xem như là false path.
Hình 4: False path - FF0 không được cấp clock trong suốt quá trình khởi động (start-up) với reset bất đồng bộ
Ví dụ hình 4 minh họa quá trình startup sử reset bất đồng bộ startup_rst để reset các FF. FF0 là FF không được cấp clock trong quá trình này nên đường reset bất đồng bộ đên nó có thể xem như là false path.
1.4) Đường giao tiếp giữa hai miền clock bất đồng bộ
Một tín hiệu được phát bởi một clock này và được nhận bởi một clock khác nhưng hai clock này bất đồng bộ với nhau thì đường này có thể xem như là false path vì chúng ta không thể tìm thấy mối ràng buộc timing nào giữa hai clock bất đồng bộ. Trong ví dụ hình 5, đường timing từ FF0 đến FF1 là false path.
Hình 5: False path - đường giao tiếp giữa hai miền clock bất đồng bộ
1.5) Ý nghĩa của việc xác định flase path
Việc xác định các đường flase path nếu được thực hiện ngay từ đầu bởi người thiết kế để mô tả rõ cho phần mềm kiểm tra timing và thiết kế vật lý sẽ giúp cho quá trình phân tích timing và tối ưu thiết kế nhanh hơn và hiệu quả hơn.
Nhanh hơn thể hiện ở hai điểm:
  • Quá trình phân tích timing và tối ưu thiết kế không phải lặp đi lặp lại quá nhiều lần. Trên thực tế, trong các thiết kế lớn, nhiều đường được phát hiện và thiết lập là flase path là nhờ các phần mềm phân tích timing. Nếu các đường flase path không được thiết lập ngay từ đầu, việc phân tích timing có thể phải thực hiện nhiều lần.
  • Xác định đúng và đủ các đường flase path sẽ giúp phần mềm phân tích timing giảm bởi thời gian kiểm tra các đường timing không cần thiết.
Hiệu quả hơn thể hiện ở việc các phần mềm tổng hợp sẽ tập trung tối ưu cho các đường timing cần thiết và tránh những tối ưu không cần thiết cho các false path. Việc tối ưu cho các đường đáng lẽ là flase path không chỉ làm tăng thời gian chạy của phần mềm mà còn có thể làm tăng diện tích hoặc công suất tiêu thụ của linh kiện.
2) Multicycle path
Mặc định, phần mềm phân tích timing thực hiện các kiểm tra trong một chu kỳ xung clock khi dữ liệu lan truyền từ startpoint đến endpoint. Tuy nhiên trong thiết kế, một số đường có thể được thiết kế để dữ liệu lan truyền từ startpoint đến endpoint trong khoảng thời gian nhiều chu kỳ xung clock.
Hình 6: Multicycle path
Trong ví dụ hình 6 đường timing từ FF3 đến FF4 được thiết kế để FF4 bắt dữ liệu truyền từ FF3 trong 2 chu kỳ xung clock. Nghĩa là, sau khi FF3 lấy dữ liệu mới ở cạnh clock thứ nhất thì đến cạnh clock thứ 3 FF4 mới cập nhật dữ liệu mới từ FF3.
Khi thiết lập một đường là multicycle path, vị trí kiểm tra setup và hold cũng sẽ thay đổi theo tương ứng như trong minh họa hình 7.
Hình 7: Kiểm tra timing cho multicycle path
Riêng đối với kiểm tra hold, phần mềm kiểm tra timing như Prime Time cho phép thiết lập vị trí kiểm tra hold tại cạnh đầu tiên (như mặc định) hoặc cạnh thứ 2 (đi theo vị trí kiểm tra setup mới).
Hình 8. Vị trí kiểm tra hold có thể được lựa chọn trong cấu hình multicycle path
3) Minimum-delay và maximum-delay path
Đường này phải có độ trễ lớn hơn hoặc bằng giá trị tối thiểu (minimum) hoặc nhỏ hơn hoặc bằng giá trị tối đa (maximum) đã thiết lập. Mặc định, phần mềm phân tích timing sẽ dựa trên cạnh launch và cạnh capture của clock để xác định giá trị độ trễ tối thiểu và tối đa cho phép nhưng phần mềm phân tích timing cho phép ghi đè giá trị này thông qua việc thiết lập độ trễ tối thiểu và độ trễ tối đa cho đường timing. Đối với phần mềm Prime Time, giá trị tối thiểu và tối đa được tính như sau:
Độ trễ tối đa = giá trị thiết lập - thời gian setup tại cạnh capture
Độ trễ tối thiểu = giá trị thiết lập - thời gian hold
Đường được thiết lập giá trị độ trễ tối thiểu và độ trễ tối đa sẽ bị bỏ qua các ràng buộc liên quan đến clock. Timing của đường này sẽ được kiểm tra dựa trên kết quả so sánh với độ trễ tối thiểu hoặc tối đa đã thiết lập.


Tham khảo:
1) Nitin Singh, Neha Agarwal, Arjun Pal Chowdhury; Basics of multi-cycle & false paths; August 07, 2014; https://www.edn.com
2) http://vlsiuniverse.blogspot.com