Putting It All Together

6 min read · Beginner
You will learn
  • How to combine nesting and lists into a full real-world file
  • Reading a production synthesis-flow YAML end-to-end
  • A clean checklist of every YAML building block you now know

Congratulations! You now know all the building blocks of YAML:

  • Key-value pairs (Lesson 2) — name: "value"
  • Comments (Lesson 2) — # notes for humans
  • Data types (Lesson 2) — text, numbers, true/false
  • Nesting (Lesson 3) — indentation creates groups
  • Lists (Lesson 4) — dashes create bullet points
  • Multi-line text (Lesson 5) — | and > for long text

In this lesson, we combine everything into one real file — the kind you would actually use in semiconductor design.


The USB Controller Chip

The book’s complete example describes a USB controller chip. It uses every concept you have learned — nested groups, key-value pairs with different data types, comments, and a list. Count the dots to see the indentation:

# USB Controller Chip Description
usb_controller:
·· # Basic information
·· chip_info:
···· name: "Simple USB Controller"
···· version: "1.0"
···· designer: "Student Engineer"
···· date_designed: "2024-01-15"
···· # Long description using |
···· description: |
······ A simple USB 2.0 controller chip
······ designed for learning purposes.
······ Supports 4 ports at 480 Mbps.
···· # Short summary using >
···· summary: >
······ A beginner-friendly USB controller
······ for learning chip design basics.
·· # What the chip can do
·· capabilities:
···· usb_version: "2.0"
···· max_speed: "480"
···· number_of_ports: 4
···· power_saving: true
·· # Technical details
·· specifications:
···· voltage: 3.3
···· frequency: 48
···· package_type: "BGA"
···· pin_count: 64
·· # What tests we need to run
·· required_tests:
···· - "basic_connection_test"
···· - "data_transfer_test"
···· - "power_consumption_test"
···· - "temperature_test"
···· - "compatibility_test"
· = one space

Understanding the Structure

Let’s break down what we just created:

  1. Main container (usb_controller): This holds everything — 0 spaces
  2. Information groups (chip_info, capabilities, specifications, required_tests): 2 spaces inside the container
  3. Individual items (name, voltage, etc.): 4 spaces inside each group
  4. A list (required_tests): dashes at 4 spaces, listing test names
  5. Multi-line text (description: | and summary: >): text at 6 spaces inside chip_info

We used every concept from Part 1:

  • Text (strings): "Simple USB Controller", "BGA"
  • Numbers: 4, 3.3, 48, 64
  • Booleans: true
  • Lists: - "basic_connection_test"
  • Multi-line with |: description keeps line breaks
  • Multi-line with >: summary folds into one paragraph

Explore It Interactively

Click each section below to open it. Notice how the first three are nested groups (key-value pairs inside) and the last one is a simple list (dashes):

Interactive: USB Controller — The Complete File

Click each section to explore — this is the book's exact USB controller example

usb_controller
i chip_info nested group
+ capabilities nested group
# specifications nested group
T required_tests simple list
usb_controller:
  chip_info:
    name:"Simple USB Controller"
    version:"1.0"
    designer:"Student Engineer"
    date_designed:"2024-01-15"
    description:|
      A simple USB 2.0 controller
      designed for learning purposes.
    summary:>
      A beginner-friendly USB
      controller for learning.
  capabilities:
    usb_version:"2.0"
    max_speed:"480"
    number_of_ports:4
    power_saving:true
  specifications:
    voltage:3.3
    frequency:48
    package_type:"BGA"
    pin_count:64
  required_tests:
    - "basic_connection_test"
    - "data_transfer_test"
    - "power_consumption_test"
    - "temperature_test"
    - "compatibility_test"

Think of it like organizing your backpack:

  • Backpack = usb_controller (the main container)
  • Pockets = chip_info, capabilities, specifications, required_tests (the groups)
  • Items in pockets = name, voltage, "basic_connection_test", etc.

A real chip-flow YAML

The USB example above shows the structure. Here is what the same structure looks like for a real synthesis run — the kind of file you would actually hand to a tool like Synopsys DC or Cadence Genus:

# Synthesis run config — what a real chip-flow YAML looks like
design:
·· top_module: "alu_top"
·· rtl_files:
···· - "rtl/alu.v"
···· - "rtl/regfile.v"
···· - "rtl/control.v"
technology:
·· node: "7nm"
·· liberty_files:
···· - "libs/std_cells_tt_0p8v_25c.lib"
···· - "libs/std_cells_ss_0p7v_125c.lib"
constraints:
·· clock_period_ns: 0.8
·· clock_uncertainty_ps: 50
·· sdc_files:
···· - "sdc/timing.sdc"
···· - "sdc/io.sdc"
options:
·· effort: "high"
·· enable_clock_gating: true
·· max_threads: 8
· = one space

Notice — nothing new. It is the same building blocks:

  • Groups (design, technology, constraints, options)
  • Lists (rtl_files, liberty_files, sdc_files)
  • Numbers (clock_period_ns: 0.8), strings ("7nm"), booleans (true)
  • Comments to label what is going on

When you read a config from your CAD team, this is what you will see. The keys change (top_module, liberty_files, clock_period_ns) but the shape is exactly what you just learned.


What You Have Learned in Part 1

You can now read and write any YAML file. Everything in YAML is built from just these pieces:

ConceptSymbolExample
Key-value pair: (colon + space)name: "My Chip"
Comment## This is a note
Nested groupcolon with nothing afterchip_info: then indent
Simple list- (dash + space)- "test_one"
Multi-line (keep breaks)\|description: \|
Multi-line (fold)>summary: >

In Part 2, we will learn how to avoid mistakes and validate your YAML files.