Celestial AI · Software Engineer
Updated · 2026-10-02

Celestial AI Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Celestial AI builds the Photonic Fabric, an optical interconnect technology for moving data between chips in AI systems. Candidates describe the problem it targets as the Memory Wall: memory bandwidth and latency that fail to keep pace with compute. Reported products and parts include optical chiplets and Optical Multi-chip Interconnect Bridges (OMIB). The Software Engineer title is reported to sit in verification with UVM and SystemVerilog, CAD and EDA automation with Python, Tcl and SKILL, or SoC integration. In those tracks the software checks chip designs before fabrication, automates the analog/mixed-signal and digital design flows, and runs the firmware and tooling around the hardware.

This guide is for engineers interviewing for a Software Engineer role at Celestial AI whose work is closer to chip design than to web services. It covers the three reported rounds, the reported UVM, scripting and domain questions, and how to rehearse each. Candidates describe requirements of Python or Tcl for automation, SystemVerilog and UVM for verification, Cadence or Synopsys tool experience for CAD, and 5-10+ years of relevant experience, with C++, CI/CD and SLURM as extras. Read the job posting first: the same title is reported to map to different tracks.

Candidates report three rounds over roughly 3-5 weeks: a Recruiter Screen, a Technical Phone Screen and an Onsite Interview. The reported onsite is a panel covering technical depth, problem-solving and behavioral fit.

Semiconductor Packaging DesignHeterogeneous IntegrationPhotonic Fabric

36 min read

Browse Software Engineer questions

See the practice prompts

19Practice promptsAcross five skill areas

Candidates describe this as a hardware-adjacent software loop. The title Software Engineer is reported to map to Verification (UVM), CAD or EDA automation, or SoC integration, so your first decision is which track the posting actually is. A verification candidate needs SystemVerilog and UVM fluency. A CAD candidate needs Python, Tcl or SKILL and some command of the Cadence and Synopsys flows. Preparing the wrong track wastes the days that matter most.

The reported questions fall into three groups. Verification and UVM covers phasing and reset synchronisation, a scoreboard for out-of-order transactions, the difference between new and create, functional coverage definition, and a SystemVerilog constraint for an aligned address inside a range. Scripting and automation covers triaging thousands of log files, extracting netlist information from a Virtuoso database with Python, checking that release files match a version control tag, and exception handling in a Tcl synthesis flow. Domain knowledge covers Network-on-Chip versus a bus, verification of 2.5D packaging, clock domain crossing and SerDes simulation parameters. Candidates also report that for UVM and CAD roles the technical stage leans on discussing tools and methodology rather than generic algorithm puzzles, and that whiteboard scripting can come up.

Beyond the question list, candidates report that the onsite includes deep dives into past projects, especially how you handled technical roadblocks in chip design or verification, and that how you built something matters more than the theory behind it. Expect to talk through the ASIC flow from RTL to GDSII, setup and hold timing, static timing analysis and the difference between functional and timing ECOs. Reported tips also name PCIe, CXL, UCIe and IEEE 1687 (IJTAG) as standards worth knowing, depending on the role.

Plan your time accordingly. Spend the early days on the concepts you must explain without hesitation (UVM phases, factory, coverage, CDC), then write real code for the scripting questions instead of only reading about them, and finish with a full rehearsal that mixes a project story, a whiteboard script and a domain question.

01

Recruiter Screen

reported

Candidates describe the Recruiter Screen as a first conversation about your background and your interest in semiconductors and AI hardware. Use it to confirm which track the posting is (verification, CAD or EDA automation, SoC integration), since the same Software Engineer title is reported to cover several. Reported tips also say most engineering roles are onsite in Santa Clara or Irvine, so be ready to talk about location.

What to demonstrate

  • How your experience lines up with the verification, CAD or SoC track of the posting
  • Your interest in semiconductor and AI hardware, and how you explain the problem the company works on

How to prepare

  • Write a short summary of your chip-adjacent work: the tools (UVM, SystemVerilog, Python, Tcl, SKILL, Cadence or Synopsys), the scale, and your own contribution.
  • Prepare a brief plain-language explanation of the Memory Wall and why data centers are moving from single SoCs toward systems of chips linked by optical interconnect.
  • Ask which track the role belongs to and what the next technical stage covers, and have your location constraints ready.
Celestial AI Software Engineer candidate reports ↗
02

Technical Phone Screen

reported

The Technical Phone Screen is reported as a conversation with a hiring manager or a senior engineer that focuses on the methodologies for the role: UVM concepts for verification roles, scripting for CAD roles. Candidates report that for UVM and CAD tracks this stage is more a discussion of tools and methods than a generic algorithm test. Prepare to explain concepts out loud and to write short snippets of SystemVerilog, Python or Tcl.

What to demonstrate

  • Working command of UVM and SystemVerilog fundamentals for verification roles
  • Scripting ability in Python or Tcl for CAD and automation roles
  • How clearly you explain a methodology you have actually used

How to prepare

  • For verification, rehearse UVM phasing and reset synchronisation, the factory (create versus new), a scoreboard for out-of-order transactions, functional coverage definition, and the aligned-address constraint.
  • For CAD, write the log-triage script, the release-versus-tag check and a Tcl wrapper with real error handling, then say out loud why each design choice was made.
  • Practise saying what you did in your own past flows, in first person, since the reported emphasis is on how you implemented something.
Celestial AI Software Engineer candidate reports ↗
03

Onsite Interview

reported

The Onsite Interview is reported as a panel covering technical domain knowledge, problem-solving and behavioral fit, held virtually or in person at the Santa Clara or Irvine offices. Candidates report deep dives into past projects, including how you handled technical roadblocks in chip design or verification, and say whiteboard-style scripting can come up. Treat it as a mix of domain explanation, a project walkthrough and a cross-team conversation.

What to demonstrate

  • Technical domain knowledge across UVM, EDA flows and the ASIC design flow
  • Problem-solving under physical and flow constraints such as timing, power, area and thermal limits
  • Behavioral fit, including working with analog designers, packaging engineers and physicists

How to prepare

  • Prepare two project walkthroughs with a concrete bug or roadblock, the debugging sequence you followed, and the result.
  • Rehearse domain explanations: Network-on-Chip versus a bus, 2.5D versus monolithic verification, clock domain crossing, SerDes simulation parameters, setup and hold, functional versus timing ECOs.
  • Practise writing a script on paper or a shared screen with attention to structure and error handling, not only syntax.
  • Prepare one story about explaining a software idea to a hardware or physics colleague.
Celestial AI Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Treating the role as pure software and describing the hardware context vaguely

Be able to explain the Memory Wall, the move from single SoCs to systems of chips, and why optical interconnect is relevant, in plain language, plus where your own work sits in the RTL-to-GDSII flow.

02

Defining UVM terms without tying them to a testbench you built

For phasing, the factory (create versus new), coverage and scoreboards, give the definition and then one concrete example: how you held a sequence until reset deasserted, or why factory overrides needed create.

03

Writing a log-triage script that only handles the happy path

For the thousands-of-logs question, handle unreadable or truncated files, a pass/fail rule, an unclassified error bucket, and a summary count by error type. Say how you would scale it across a directory of that size.

04

Catching Tcl or Python errors and carrying on

Name the failure classes, retry only transient ones, always log the stage and command, clean up in finally, and exit non-zero on fatal errors. Never leave an empty catch or a bare except.

05

Preparing for the wrong track because the title is just Software Engineer

Read the posting before day one and decide whether it is verification, CAD or EDA automation, or SoC integration. Weight the plan toward that track and keep the other two at overview level.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

16 technical prompts0 include a worked solution

"Write a SystemVerilog constraint to generate a random address that is 64-bit aligned and within a specific me

medium
Verification & UVM

"Write a SystemVerilog constraint to generate a random address that is 64-bit aligned and within a specific memory range."

Approach
  1. Confirm the meaning first: 64-bit aligned means 8-byte aligned, so the low three address bits are zero (a 64-byte cache-line alignment would be addr[5:0] == 0).
  2. Write it: class addr_item; rand bit [63:0] addr; bit [63:0] lo, hi; constraint c_align { addr[2:0] == 3'b000; } constraint c_range { addr inside {[lo:hi]}; } endclass
  3. Prefer the bit slice to addr % 8 == 0: both are correct, but the slice is easier for the solver.
  4. Handle edge cases: if lo > hi, or the range contains no aligned address, randomize() fails and returns 0, so I always check it with an if or assert. For a burst of N beats, constrain addr + N*8 - 1 <= hi, using a wider intermediate so the sum cannot wrap at 2^64.
  5. Bias toward corners with dist (lo, hi minus 8, region boundaries) and keep the range constraint hard while the bias is soft, so tests can override it.
Follow-up
  • How would you constrain the address to avoid a 4 KB boundary crossing within a burst?
  • How do you make the range configurable per test without editing the class?
  • What happens to this constraint when an inline randomize() with { } adds a conflicting rule?

"Explain the concept of 'Clock Domain Crossing' (CDC) and how you verify it."

medium
Domain & System Knowledge

"Explain the concept of 'Clock Domain Crossing' (CDC) and how you verify it."

Approach
  1. Define the risk: a flop sampling a signal from an asynchronous clock can violate setup or hold and go metastable; a synchronizer reduces the failure probability, and MTBF grows exponentially with the resolution time given to it.
  2. Match the structure to the signal: a two-flop (or deeper) synchronizer for single-bit level signals; a toggle synchronizer or pulse stretch for pulses going from fast to slow domains; Gray-coded pointers in an async FIFO, or a req/ack handshake, for multi-bit data, because bits synchronized independently can arrive in different cycles.
  3. Resets: assert asynchronously, deassert synchronously through a reset synchronizer in each domain.
  4. Verify in layers: a structural CDC tool for missing synchronizers, multi-bit and reconvergence issues; SVA in simulation such as $onehot0(gray ^ $past(gray)) to prove a Gray pointer changes at most one bit per cycle, and stability of data while a handshake is pending.
  5. Note that plain RTL simulation never models metastability, so I add metastability injection (random extra-cycle delay at synchronizer outputs) to expose logic that depends on exact crossing latency.
Follow-up
  • Why is a Gray-coded pointer safe to synchronize but a binary counter is not?
  • What is reconvergence, and why can two correctly synchronized signals still cause a bug?
  • How do you waive a CDC tool violation safely?

Collapse a redelivered event batch into per-aggregate high-water marks

easy
hashingat-least-onceaggregation

You drain a batch of up to 5,000,000 events, each (aggregate_id BIGINT, aggregate_version INT, event_type, payload). The log guarantees order within one aggregate only; the batch merges 64 partitions, and a relay failover has redelivered a range, so an older version for an aggregate can appear after a newer one. Given a map of last_applied_version per aggregate, produce the events worth applying, at most one per (aggregate_id, version), plus the count discarded. Target O(n) time. State the memory for 2,000,000 distinct aggregates and what you do when it does not fit.

Approach
  1. One pass, one hash map from aggregate_id to the highest version kept, and a discard counter. An event whose version is at or below last_applied_version for its aggregate is dropped without further work, which is the whole reason the event carries its version rather than a delta. O(n) expected time, O(d) space in distinct aggregates.
  2. Keep the maximum, never the last occurrence. The redelivered range means the final appearance of an aggregate in the batch can be an older version than one seen earlier in the same batch, so last-wins applies stale state over newer state and the projection regresses with no error anywhere.
  3. Cost the memory instead of calling it large: an 8-byte key plus a 4-byte version is 12 bytes of payload, and an open-addressed table held at a 0.7 load factor costs roughly 17 bytes per entry before per-slot metadata, so 2,000,000 aggregates is tens of megabytes in a native layout and several times that in a runtime that boxes both key and value.
  4. If the distinct set exceeds memory, partition on hash(aggregate_id) mod P and reduce each partition independently. Every event for one aggregate hashes to the same partition, so the per-partition result is exact and the merge is concatenation rather than a second reduction.
Follow-up
  • The payload is a patch rather than a snapshot, so applying only the highest version loses the intermediate changes. What changes in your reduction?
  • How do you detect that version 7 arrived while version 6 was never delivered, and what should the consumer do about the gap?

The plan starts by fixing your track, then works through the reported UVM, scripting and domain questions, and ends with a mixed rehearsal of the onsite.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Fix your track and the hardware context
  • Read the posting and decide whether it is verification, CAD or EDA automation, or SoC integration, then list the tools it names.
  • Sort the reported topics into UVM and SystemVerilog, scripting and automation, and domain knowledge, and mark your weakest group.
  • Write a short plain-language explanation of the Memory Wall and of why optical interconnect between chips matters.

Deliverable: A one-page track decision, a topic map with the weakest group marked, and a written Memory Wall explanation.

02UVM phasing and the factory
  • Write the UVM phase order from build through to report and say what each phase is for, then describe how a sequence waits for reset to finish before driving stimulus.
  • Write a short explanation of new versus create, with the factory override case that only works with create.
  • Say both answers out loud without notes.

Deliverable: A written phase list with a reset-synchronisation paragraph, and a spoken new-versus-create answer.

Practice prompt ↗Practice prompt ↗
03Scoreboards, coverage and constraints
  • Sketch a scoreboard for out-of-order transactions: an associative array keyed by transaction ID, matching on response, and how you flag leftover entries at the end of the test.
  • Write the SystemVerilog constraint for an address aligned to 64 bits inside a given range, then test the edge cases of the range ends.
  • Outline a coverage plan for a small block: what the coverpoints and crosses are, and how you would spot over- and under-coverage.

Deliverable: A scoreboard sketch, a working constraint with the edge cases listed, and a one-page coverage plan.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
04Log triage and release integrity scripts
  • Write a script that walks a directory of log files, decides which tests failed and groups failures by error signature, including an unclassified bucket.
  • Write the release check that compares every design file in a release against the version control tag and reports mismatches, missing files and untracked extras.
  • Test both on messy inputs: empty files, odd encodings, a huge log.

Deliverable: Two working scripts with a short list of the edge cases each one handles.

Practice prompt ↗Practice prompt ↗
05Tcl error handling and tool interaction
  • Build a small Tcl wrapper that runs three stages with catch or try, retries a transient failure, and stops with a clear summary and a non-zero exit on a fatal one.
  • Write down the ways to get netlist data out of a Virtuoso database with Python (exported netlist parsing versus the tool's own scripting interface) with the trade-off of each.
  • Practise a short spoken story about a flow that failed silently and what you changed.

Deliverable: A running Tcl wrapper, a two-option comparison for the netlist extraction, and a spoken failure story.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Domain and system knowledge
  • Write a comparison of a Network-on-Chip and a shared bus covering topology, concurrency, scaling and arbitration.
  • List the extra verification concerns for 2.5D packaging compared with a monolithic SoC, and explain clock domain crossing with the checks you would use to verify it.
  • List the parameters you would track when simulating a high-speed SerDes link, and review PCIe, CXL, UCIe and IJTAG at the level of what each is for.

Deliverable: Four short written answers (NoC versus bus, 2.5D verification, CDC, SerDes parameters) and a one-line purpose for each standard.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Mixed onsite rehearsal
  • Give a project walkthrough covering one real bug or roadblock, your debugging sequence and the result, then answer follow-ups from a friend.
  • Write a small script on paper or a shared screen with a spoken explanation of structure and error handling.
  • Rehearse one cross-team story, then one pass through the weakest domain answers from the earlier days.

Deliverable: A recorded or witnessed rehearsal with a list of the answers that still stumble.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Candidates report that the onsite includes behavioral fit and deep dives into past projects, especially technical roadblocks in chip design or verification. They also describe the work as cross-functional, with software engineers talking to analog designers, packaging engineers and physicists. Prepare stories that show what you decided, how you debugged, and how you explained software to hardware colleagues.

"How do you handle exception handling in Tcl when automating a critical synthesis flow?"

medium
Scripting & Automation (Python/Tcl)

"How do you handle exception handling in Tcl when automating a critical synthesis flow?"

Approach
  1. Start with the primitives. In Tcl, catch runs a script and returns 0 for success, 1 for error, and other codes for return, break or continue. Capture both the result and the options dictionary: catch {run_stage $name} msg opts. The options hold -errorinfo, -errorcode and -code, so you can log the full stack and decide what to do. On Tcl 8.6 you can also use try with on error and trap handlers and a finally clause.
  2. Use try / trap / finally for structured handling. Trap on specific error codes so a missing optional file, a license checkout failure and a tool error each get their own response, and put cleanup in finally so locks, temp directories and open channels are released whether the stage passed or failed. On older Tcl without try, use catch and rethrow with return -options $opts $msg so the original error is not lost.
  3. Separate recoverable from fatal failures. A transient problem such as a license checkout can be retried a bounded number of times with a pause. A real synthesis error should stop the flow, write the stage name, the failing command, -errorinfo and the log path, and exit with a non-zero status so the scheduler or CI marks the run as failed. Raise your own errors with error or throw and a structured error code so callers can trap on them.
  4. Never leave an empty catch. It hides typos and real tool failures, and the flow keeps going on bad data. Also check whether the tool commands you rely on raise Tcl errors or only print messages to a log, and add an explicit check of the log or return status after the stage if they only print.
  5. If asked for a real example, tell a short story with a named failure: what the flow did silently before, what you changed (per-stage catch, error codes, a failure summary at the end, a resumable stage list), and how you confirmed it, for instance by injecting a failure in a test run and checking the exit status and log. Stay in first person and say what you decided yourself.
Follow-up
  • What is the difference between a catch result of 1 and 2, and why does it matter inside a proc that calls return?
  • How would you make the flow resumable so a failure at one stage does not force rerunning the completed stages?
  • How do you stop a catch around a whole stage from hiding a misspelled command name?

Argue against a design, lose, and commit anyway

medium
disagreementservice boundariesdecision records

Describe a design you argued against and lost. State the failure you predicted as a named mechanism, not a feeling about complexity: two services that would need one transaction, a projection with no rebuild path, a write path with no idempotency key. Say what evidence you brought, what the decision maker weighed instead, and what you did after the decision was made: what you instrumented, what you wrote down, and whether the prediction came true. Five minutes.

Approach
  1. State the prediction in falsifiable form up front: the mechanism, the condition that triggers it, and the observable outcome. A prediction that cannot be checked also cannot be credited to you later.
  2. Show the evidence you had at the time and label each piece honestly as measured, analogous, or intuition. Keeping the intuition is fine; disguising it as data is the thing that erodes your standing in the next argument.
  3. Represent the opposing case at full strength, including the constraint you did not control: a fixed date, a team boundary, or the fact that the decision was cheap to reverse and yours was not.
  4. Make disagree-and-commit concrete. Name the artefact you left behind so the prediction could be settled without you: the alert and its threshold, the counter on the dashboard, the decision note that recorded the trade-off and the condition that would revisit it.
Follow-up
  • What threshold on that alert would have proved you right, and did anyone ever look at it?
  • If the same proposal arrived tomorrow with the same deadline, would you argue it the same way?

Tell callers you do not own that their integration breaks

medium
deprecationcompatibilitystakeholders

A field in a write endpoint's response must change shape. You own the endpoint; you do not own the four internal callers or the outbound webhook consumers who read it. Describe a deprecation you were responsible for: what you shipped first, how you established who was actually reading the field, the window you gave and what set its length, what you did about the consumer who never moved, and how you decided removal was safe. Name the signal you used, not the announcement you sent.

Approach
  1. Establish the reader set empirically rather than from a wiki of owners: per-field usage counters keyed by principal, or access logs attributed to a consumer. State the blind spot of whichever you pick, since a consumer that reads the field only on a monthly job will not appear in a week of logs.
  2. Ship additive first. Populate the new field alongside the old one so no reader is forced to move, which is also what keeps a rolling deploy safe, because old and new instances answer the same requests at the same time and a rollback must still find the old shape present.
  3. Set the window from the slowest legitimate consumer's release cadence, not from your calendar, and decide separately what to do for a consumer with no release process at all, such as an external webhook endpoint you can only email.
  4. Convert silence into evidence before you rely on it: a short, low-traffic removal window that makes a still-dependent consumer fail visibly and loudly while you are watching, rather than at three in the morning after you have moved on.
Follow-up
  • How would you detect a consumer that reads the field only during a monthly export?
  • One caller refuses to move and has a commercial relationship behind it. What changes in your plan and what does not?
  • 01

    "How do you handle exception handling in Tcl when automating a critical synthesis flow?"

  • 02

    Describe a difficult bug you found using constrained random stimulus and how you debugged it.

  • 03

    How do you handle reuse of verification components from block level to SoC level?

  • 04

    Tell me about a time you explained a software constraint or tool limit to an analog designer, packaging engineer or physicist.

  • 05

    Describe a bottleneck you found in a design or verification flow and the change you made, including how you measured the result.

  • 06

    Describe a project where the schedule or the ambiguity was high and you had to move without detailed guidance.

PracHub preparation framework ↗
Do I need a photonics background?

Candidates report that photonics familiarity helps but is not strictly required for most software and verification roles. You are expected to learn the system-level idea behind the Photonic Fabric well enough to understand what you are building or testing, so read about the Memory Wall and optical interconnect before the first call.

Celestial AI Software Engineer candidate reports ↗
Is the role remote?

Candidates report that most engineering roles are predominantly onsite, in Santa Clara or Irvine, because software engineers work closely with design and lab teams. Confirm the location of the specific posting with the recruiter.

Celestial AI Software Engineer candidate reports ↗
How long does the interview process take?

Candidates report three rounds (Recruiter Screen, Technical Phone Screen, Onsite Interview) spread over roughly 3-5 weeks, with one report of a quicker timeline for strong candidates. Ask the recruiter for the schedule of your own loop.

Celestial AI Software Engineer candidate reports ↗
What does Software Engineer mean at Celestial AI?

Candidates report that the title often maps to verification (UVM and SystemVerilog) or CAD and EDA automation (Python, Tcl, SKILL), with SoC integration also mentioned. Read the posting closely and prepare for that track first.

PracHub Software Engineer practice ↗
Will there be a generic algorithm coding test?

Candidates report that for UVM and CAD tracks the technical stage is more about methodology and tool discussion than generic algorithm puzzles, and that whiteboard-style scripting may come up. Prepare to write short SystemVerilog, Python or Tcl, with attention to structure and error handling.

PracHub Software Engineer practice ↗
Which standards and tools should I know?

Reported tips name PCIe, CXL, UCIe and IEEE 1687 (IJTAG), depending on the role. Candidates also list Cadence tools such as Virtuoso, Innovus and Xcelium, Synopsys tools, SLURM, license servers, and Git or IC Manage for design data. Know what each is for and which ones appear in the posting, then go deep on those you have used.

PracHub Software Engineer practice ↗
How is compensation structured?

Candidates and the posting describe base salary, a bonus and early-stage equity. This guide gives no figures; ask the recruiter about the range for your level and location.

Celestial AI Software Engineer candidate reports ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.