What is Virtuoso Layout Automation?

In modern semiconductor design, the layout phase is highly repetitive, involving tasks like running physical checks, generating standard patterns, and performing cross-die linking. Virtuoso Layout Automation uses the platform's scripting capability, primarily through SKILL (Scriptable Interface Language), to script the entire workflow.

SKILL acts as the glue, allowing engineers to interact with Virtuoso's internal APIs. Instead of clicking through menus, an automation script can programmatically load libraries, place instances, modify shapes, and run analysis jobs — all from a single command line executed within the Virtuoso environment.

The Role of SKILL in ASIC/IC Design

SKILL is a Lisp-dialect language, meaning it is particularly well-suited for defining symbolic, hierarchical data structures — exactly what IC layout and schematic are. Its automation capabilities are critical for several key functions:

  • Automated Cell Placement: Scripts calculate optimal placement points based on die size, available resources, and physical constraints, replacing manual placement/routing decisions.
  • DRC/LVS Flow Management: Wrap-up scripts automatically run DRC/LVS checks across multiple library views and consolidate error reports into a single, actionable format before sign-off.
  • Parameterization and Variation: A single SKILL script can modify a core physical block (like clock buffers or I/O pads) by changing a variable and regenerate the layout — essential for process variation testing.
  • Test Pattern Generation: Automating the generation of test structures or wrapper cells (PCELLs) by iterating over boundary points and creating required connectivity metadata.

Advanced SKILL Automation: Power Grid Insertion

Consider the task of running a full-chip power grid insertion. This involves multiple steps: defining power rails, simulating voltage drop, adding mesh structures, and verifying continuity.

; SKILL pseudo-code example
(envisa-session)
(skill-run-job (run-drc-lvs))  ; Run checks
(set-param-pad-width value 0.5um) ; Modify parameter
(place-power-rails (range-corners) net 'VCC) ; Place wires
(write-report-sheet-status) ; Output report

A manual run requires dozens of commands and checks. SKILL wraps these into a function or macro, making the entire process idempotent and verifiable. This systematic approach transforms manual layout effort into an industrialized, reliable workflow.

Why SKILL over Python or Tcl/Tk?

While Python and Tcl/Tk are essential tools for overall CAD infrastructure (orchestration, job scheduling, data reporting), SKILL remains the native language of the core Virtuoso environment.

  • Intrinsic Integration: SKILL is compiled directly into Virtuoso, giving it immediate, low-level access to internal objects (cells, shapes, instances) that external languages struggle to access.
  • Data Model Affinity: The layout data model is represented in Lisp-list/symbolic structure, so SKILL naturally handles these operations with minimal overhead.
  • Workflow Continuity: Using SKILL inside the tool keeps context consistent and avoids constantly serializing/deserializing job results across language boundaries.

Best Practices for SKILL Development

  • Version Control: Treat SKILL scripts like source code. Use Git and peer-review processes.
  • Error Handling: Wrap critical sections with catch blocks to manage failures gracefully, preventing entire runs from aborting on a single error.
  • Abstraction: Break workflows into small, single-purpose functions (place_vias, check_metal_level, calculate_area) that can be tested and reused independently.
  • Documentation: Use comprehensive comments explaining why the script does something, not just how.

Related Articles