Sơ lược về độ trể (Delay) trong thiết kế ASIC

Thảo luận trong 'ASIC CĂN BẢN' bắt đầu bởi Lu ROm, 11 Tháng chín 2017.

Chia sẻ trang này

Lượt xem: 667

  1. Lu ROm

    By:Lu ROmin: 11 Tháng chín 2017
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    471
    Đã được thích:
    102
    Về cơ bản nhất, delay có thể được chia thành 2 loại:
    - Net/interconnect/wire delay
    - Gate delay
    stage_delay.jpg
    Hình bên trên diễn tả một cách đơn giản rằng: gate-delay là độ trể qua logic, net-delay là độ trể trên đường dây.​
    1. Wire delay - Độ trễ đường dây:
    net_delay.jpg
    Là độ trễ phát sinh trên đường dây dẫn nối các cổng với nhau, gây ra bởi điện trở và tụ điện có trên mỗi dây dẫn.
    trước khi layout, thiết kế chưa có các đường dây thực sự, vì vậy người ta thường sử dụng các model để cố gắng dự đoán-giả thuyết độ dài của đường dây, từ đó tính toán các giá trị độ trễ. ví dụ đơn giản nhất là WireLoadModel, mô hình này giả thuyết giá trị chiều dài đường dây phụ thuộc vào Fanout của dây (Fanout là số cổng đầu vào mà wire nối đến - số tải mà wire nối đến), và từ đó có thể suy ra được giá trị điện trở và tụ ký sinh trên đường dây tương ứng. Cụ thể ví dụ wireloadmodel trong một file thư viện như sau:
    Mã:
    wire_load("example") {
    resistance : 0.0005
    capacitance : 0.0002
    area : 0.1
    slope : 1.5
    fanout_length(1, 0.002)
    fanout_length(2, 0.006)
    fanout_length(3, 0.009)
    fanout_length(4, 0.015)
    }
    - wireloadmode example có điện trở trên mỗi đơn vị chiều dài là 0.0005, tụ trên một đơn vị chiều dài là 0.0002, mỗi đơn vị chiều dài sẽ tốn diện tích là 0.1, và nếu giá trị fanout nằm ngoài vùng fanout_lenght thì sẽ được tuyến tính với 1.5.
    fanout_length(3, 0.009) --> nếu fanout của net là 3 thì chiều dài tương ứng của net sẽ là 0.009. lưu ý rằng đây chỉ là giả định/dự đoán, chưa có đường dây kết nối thật sự trong mạch.
    sau khi Layout hoàn tất thì thiết kế lúc này đã có đường dây kết nối thực sự, và mỗi dây dẫn có các giá trị tụ, điện trở,... lúc đó độ trễ trên đường dây được tính chính xác hơn và không cần đến model nữa.
    2. Gate delay : Độ trể cổng.
    stage_delay.jpg

    - Là độ trễ gây ra bởi mạch thiết kế nên cổng logic, lấy vị dụ cell NAND có 2 input I1, I2 và 1 output O.
    khoảng thời gian để O thay đổi khi thấy được sự thay đổi từ I1 gọi là độ trễ từ I1 đến O, tương tự cho I2. thời gian trễ này xuất hiện do sự tồn tại của các tụ trong mạch CMOS cấu tạo nên cell NAND.
    Để tính toán giá trị trễ của cell, người ta cũng dùng model để cố gắng mô hình hoá tốt nhất có thể. lấy một ví dụ dễ tiếp cận nhất (và cũng phổ biến nhất) chính là NLDM (Non-Linear Delay Models), mô hình này sử dụng một bảng tra ma trận 2 chiều để tra ra giá trị độ trể từ input slew (độ dốc tín hiện vào) và output load (tải của cổng ra)
    **ví dụ cho cổng NAND như bên trên, ta có :
    Mã:
    pin (O) {
    timing() {
    related_pin : "I1";
    timing_type : falling_edge;
    timing_sense : non_unate;
    cell_rise(delay_template_7x7) {
    index_1 ("0.01, 0.03, 0.07, 0.15, 0.31, 0.64, 1.3");
    index_2 ("0.0012, 0.0046, 0.0112, 0.0245, 0.0511, 0.1045, 0.2121");
    values ( \
    "0.22594, 0.24915, 0.28537, 0.35280, 0.48444, 0.74880, 1.27570", \
    "0.23195, 0.25445, 0.29098, 0.35881, 0.48946, 0.75385, 1.28980", \
    "0.24354, 0.26878, 0.30398, 0.37042, 0.50205, 0.76644, 1.29740", \
    "0.26740, 0.29389, 0.32908, 0.39452, 0.52515, 0.78961, 1.32050", \
    "0.30780, 0.33000, 0.36621, 0.43361, 0.56525, 0.82973, 1.36060", \
    "0.38052, 0.40375, 0.44026, 0.50769, 0.63936, 0.90384, 1.43400", \
    "0.49788, 0.52169, 0.55848, 0.62544, 0.75731, 1.02160, 1.55260");
    }
    - Đây là bảng tra cell_rise delay (nghĩa là độ trể của cổng đang xét khi nó chuyển từ 0 lên 1 ) của cổng ra O, đang xét sự phụ thuộc đầu vào I1 (nghĩa là trường hợp I1 thay đổi làm O thay đổi). index1 là bảng giá trị của input slew/transition, còn index2 là bảng giá trị của tụ capacitance, values là bảng tra với cột là index1 và hàng là index2.
    [tô cam] điều này nghĩa là nếu độ dốc tín hiệu vào (input slew) tại I1 = 0.03 và giá trị tải của O = 0.0046, thì giá trị delay từ I1 đến O (trong trường hợp làm O từ 0 lên 1) sẽ là 0.25445.
    [tô xanh] vậy giá trị delay sẽ là bao nhiêu nếu input slew tại I1=0.4 và output load của O=0.07 (khoảng giữa)? lúc này công cụ phần mềm sẽ tính toán giá trị delay dựa vào việc nội suy bảng values.
    - Vậy nếu giá trị của input slew hoặc/và output load nằm ngoài bảng tra? công cụ sẽ ngoại suy, và giá trị đạt được thường rất không chính xác. đây là lý do chúng ta có các giá trị giới hạn max_transition và max_capacitance, nhằm hạn chế tình trạng ngoại suy trong NLDM.