Skip to main content

analyze

Function analyze 

Source
pub fn analyze<'d>(
    netlist: &mut Netlist<'d>,
    slang_analysis: &Analysis<'d>,
    eval: &EvalSession<'d>,
    opts: AnalysisOptions,
) -> Result<StaticAnalysisResult, AnalysisError>
Expand description

Task 8 (NL-007, NL-063, NL-076, NL-082): the real static-analysis pass — backfills SignalDecl.driver_set onto netlist (graph:: populate_driver_kinds, NL-063’s classification clause — the one mutation this whole pipeline performs on an already-elaborated Netlist, since sv_lang::Analysis does not exist until after elaborate() returns), builds the {net,process} driver graph (graph::build_driver_graph), partitions it (graph::partition), classifies every un-unioned cross-domain read edge as a CdcEdge (clock::classify_cdc_edges), and (Task 9, NL-103) fail-closed- classifies every DPI/VPI call site (dpi::collect_call_tags).

eval is accepted per the plan’s binding signature (and the call-order this whole pipeline documents: elaborate()’s EvalSession borrow outlives this call); Task 9 is its first reader — dpi::collect_call_tags’s own EvalSession::run_dataflow calls recurse into a DPI/VPI call’s callee body. opts.dpi_default is not itself consulted here: this task’s classifier computes the real answer directly rather than short-circuiting to the configured default, which stays reserved for a future consumer that wants to skip classification entirely.