Static Timing Analysis (STA)
Synopsys PrimeTime, SDC Constraints & Statistical POCV
Static Timing Analysis (STA) คือระเบียบวิธีทางคณิตศาสตร์ระดับอุตสาหกรรมที่ตรวจสอบว่าสัญญาณดิจิทัลทุกเส้นทาง (Timing Paths) สามารถสวิตช์และบันทึกข้อมูลได้ทันเวลาสัญญาณนาฬิกาโดยปราศจากการรัน Simulation เวกเตอร์ทดสอบ โดยทำงานร่วมกับข้อกำหนด Synopsys Design Constraints (SDC) เพื่อควบคุมความถี่, Skew, Jitter และความแปรปรวนในระดับอะตอม
เขียนไฟล์ SDC, กำหนด Clock uncertainty/latency, รัน Signoff STA ด้วย PrimeTime/Tempus, วิเคราะห์ Statistical POCV/LVF, แก้ไข Setup Slack ด้วย Driver Upsizing/Multi-Vth และ Hold Slack ด้วย Delay Buffer Insertion
Industry Tools: Synopsys PrimeTime, Cadence Tempus, Synopsys Design Compiler, Cadence Genus
Related: Logic Synthesis Flow · Clock Tree Synthesis (CTS) · Clock Domain Crossing (CDC) · HDL & Logic Sandbox Lab
Role: STA Engineer / Timing Signoff Specialist / Physical Design Engineer
01 ทำไม STA จึงมีประสิทธิภาพเหนือกว่า Dynamic Simulation?
ในการตรวจสอบการทำงานของวงจรขนาดหลายพันล้านทรานซิสเตอร์ การป้อนเวกเตอร์ทดสอบ (Test Vectors) เข้าไปใน Gate-Level Simulation จะต้องใช้เวลาคำนวณนานหลายสัปดาห์ และยังไม่สามารถการันตีได้ว่าจะครอบคลุมกรณีที่เลวร้ายที่สุด (Worst-case Pattern) ในทางกลับกัน Static Timing Analysis (STA) ใช้อัลกอริทึม Graph-based Timing Engine ที่แตกวงจรออกเป็น Directed Acyclic Graph (DAG) และวิเคราะห์ความล่าช้าผ่านทฤษฎี Topological Sort ในเวลาเพียงไม่กี่นาที
02 ฟิสิกส์และสมการ Setup / Hold Slack
ในวงจร Synchronous ทุกเส้นทางระหว่าง Launch Flip-Flop และ Capture Flip-Flop จะต้องผ่านการทดสอบ 2 กฎพื้นฐาน:
03 SDC Constraints Command Reference (คำสั่งมาตรฐาน SDC 2.1)
ไฟล์ SDC คือสัญญาข้อตกลง (Contract) ระหว่างสถาปัตยกรรมดิจิทัลกับเครื่องมือ EDA ด้านล่างนี้คือกลุ่มคำสั่งที่จำเป็นต้องมีในทุกโปรเจกต์:
# SYNOPSYS DESIGN CONSTRAINTS (SDC) INDUSTRIAL PRODUCTION TEMPLATE
# =========================================================================
create_clock -name SYS_CLK -period 1.000 [get_ports clk_in] # 1 GHz Clock
create_generated_clock -name DIV2_CLK -source [get_ports clk_in] -divide_by 2 [get_pins u_pll/clk_div2]
# 2. CLOCK UNCERTAINTY (JITTER + MARGIN) & LATENCY
set_clock_uncertainty -setup 0.050 [get_clocks SYS_CLK] # 50 ps Setup Jitter
set_clock_uncertainty -hold 0.020 [get_clocks SYS_CLK] # 20 ps Hold Skew margin
set_clock_latency -source 0.150 [get_clocks SYS_CLK]
# 3. INPUT / OUTPUT DELAY CONSTRAINTS (INTERFACE BUDGET)
set_input_delay -clock SYS_CLK -max 0.350 [get_ports data_in[*]]
set_input_delay -clock SYS_CLK -min 0.080 [get_ports data_in[*]]
set_output_delay -clock SYS_CLK -max 0.400 [get_ports data_out[*]]
set_output_delay -clock SYS_CLK -min -0.050 [get_ports data_out[*]]
# 4. TIMING EXCEPTIONS (FALSE PATHS & MULTICYCLE PATHS)
set_false_path -from [get_ports rst_n]
set_false_path -from [get_clocks SYS_CLK] -to [get_clocks DIV2_CLK]
set_multicycle_path 2 -setup -from [get_cells u_mult/reg_a*] -to [get_cells u_mult/reg_out*]
set_multicycle_path 1 -hold -from [get_cells u_mult/reg_a*] -to [get_cells u_mult/reg_out*]
# 5. DESIGN ENVIRONMENT (DRC TRANSITION & CAPACITANCE LIMITS)
set_max_transition 0.080 [current_design]
set_max_capacitance 0.050 [current_design]
04 วิวัฒนาการแบบจำลอง Variation: OCV $\to$ AOCV $\to$ POCV/LVF
เมื่อขนาดทรานซิสเตอร์หดเล็กลงสู่ระดับต่ำกว่า 7nm ความแปรปรวนของการผลิตแบบสุ่ม (Random Dopant Fluctuation & Line Edge Roughness) ทำให้ค่าหน่วงเวลาไม่สามารถคิดแบบคงที่ได้:
| ยุคสมัย | วิธีการคิดค่า Variation | ความแม่นยำและจุดอ่อน |
|---|---|---|
| Flat OCV (ยุคเก่า > 28nm) | คูณค่า Flat Derate Factor เช่น Early Path = 0.95, Late Path = 1.05 | Pessimistic เกินไป ส่งผลให้สิ้นเปลืองพื้นที่และพลังงานในการแก้ Over-design |
| AOCV (Advanced OCV 20nm–14nm) | คิด Derate Factor ตามความลึกของ Logic Depth และระยะห่างเชิงพิกัด (Distance) | ลดความ Pessimistic ลงได้บ้าง แต่ยังไม่สะท้อนการกระจายแบบ Gaussian จริง |
| POCV / LVF (Sub-7nm ถึง Sub-2nm) | โมเดลการกระจายตัวแบบสถิติ ($3\sigma$ Gaussian): $Delay = \mu \pm 3\sigma$ บันทึกในไฟล์ Liberty (.lib) | แม่นยำสูงสุดตามฟิสิกส์ควอนตัม รวมทั้งรองรับ Non-Gaussian Asymmetric Skewness |
05 Multi-Corner Multi-Mode (MCMM) Signoff Scenarios
ในการส่งมอบงานเทปเอาต์ ชิปจะต้องผ่านการตรวจ Timing ในหลายสิบสถานการณ์การทำงานพร้อมกัน:
- Operating Modes: Functional High-Speed Mode, Low-Power Standby Mode, Scan Shift Test Mode, Scan Capture At-Speed Test Mode, และ BIST Memory Mode
- Corner Conditions: SSG (Slow-Slow Global $0.675\text{V}, 125^\circ\text{C}$), FFG (Fast-Fast Global $0.825\text{V}, -40^\circ\text{C}$), และ TT (Typical-Typical $0.75\text{V}, 25^\circ\text{C}$)
06 การวิเคราะห์ Synopsys PrimeTime Timing Report
รายงาน Timing Report แสดงรายละเอียดของเส้นทางข้อมูล (Data Arrival Path) เทียบกับเส้นทางสัญญาณนาฬิกา (Data Required Path):
Endpoint: u_core/reg_b_reg[0] (rising edge-triggered flip-flop clocked by SYS_CLK)
Path Group: SYS_CLK
Path Type: max (Setup Check)
Point Incr Path
--------------------------------------------------------------------------------
clock SYS_CLK (rise edge) 0.000 0.000
clock network delay (ideal) 0.120 0.120
u_core/reg_a_reg[0]/CP (DFCNQD1BWP) 0.000 0.120 r
u_core/reg_a_reg[0]/Q (DFCNQD1BWP) 0.065 0.185 f
u_core/U124/ZN (NAND2D1BWP) 0.042 0.227 r
u_core/U189/ZN (AOI22D1BWP) 0.088 0.315 f
u_core/reg_b_reg[0]/D (DFCNQD1BWP) 0.015 0.330 f
data arrival time 0.330
clock SYS_CLK (rise edge) 1.000 1.000
clock network delay (ideal) 0.110 1.110
clock uncertainty -0.050 1.060
u_core/reg_b_reg[0]/CP (DFCNQD1BWP) 0.000 1.060 r
library setup time -0.035 1.025
data required time 1.025
--------------------------------------------------------------------------------
data required time 1.025
data arrival time -0.330
--------------------------------------------------------------------------------
slack (MET) 0.695
07 กลยุทธ์การแก้ไข Setup และ Hold Violations ในกระบวนการ ECO
ในขั้นตอน Engineering Change Order (ECO) วิศวกรจะใช้กลยุทธ์เฉพาะทางในการแก้ไข Slack:
กลยุทธ์แก้ Setup Violation (Data ช้าเกินไป)
- Cell Sizing / Upsizing: เปลี่ยนเกตตัวขับให้มีขนาดใหญ่ขึ้นเพื่อเพิ่มกระแสขับ ($I_{drive}$)
- Multi-Vth Swapping: เปลี่ยนเซลล์จาก HVT (High-Vth) เป็น SVT หรือ LVT (Low-Vth)
- Logic Restructuring / Cloning: แยกโหลดตัวขับขนานกันเพื่อลด Fanout
- Useful Skew: ปรับเลื่อน Clock Arrival ของ Capture Flip-Flop ให้มาช้าลง
กลยุทธ์แก้ Hold Violation (Data เร็วเกินไป)
- Delay Buffer Insertion: แทรกบัฟเฟอร์หน่วงเวลาใน Data Path ตรงจุดที่มี Setup Slack เหลือเฟือ
- Cell Downsizing: ลดขนาดตัวขับของเซลล์ก่อนหน้าเพื่อให้สัญญาณเปลี่ยนช้าลง
- HVT Swapping: เปลี่ยนเซลล์เป็น HVT เพื่อเพิ่มเวลาหน่วงและประหยัดกระแสไฟรั่ว
08 ปฏิบัติการจำลองบน HDL & Logic Sandbox Lab
คุณสามารถทดสอบการสังเคราะห์วงจรตรรกะดิจิทัล การสร้างเวฟฟอร์มสัญญาณ และสังเกตการหน่วงเวลาของ Logic Gates ได้ทันทีในห้องแล็บจำลองของเรา:
HDL & Digital Logic Sandbox
เขียนโค้ด Verilog HDL, ทดสอบวงจร Adder/Multiplexer, และดู Timing Waveforms พร้อมการจำลอง Gate Delays ในเบราว์เซอร์