silicode · 2026-09-13 · 11 min

Nemotron 3 Ultra and the Reality of Agentic RTL Synthesis

NVIDIA claims a 97.1% pass rate on CVDP with Nemotron 3 Ultra. We dissect its Mamba-Attention core, token economics, and how the RTL fares in Vivado and Yosys.

Technical diagram showing state space equations overlaid on a synthesized gate-level netlist schematic.

NVIDIA posted a 97.1% average pass rate across nine design categories on the Chip Verification and Design Benchmark (CVDP) using Nemotron 3 Ultra. The model, configured as a 550-billion parameter Mixture-of-Experts with 55 billion active parameters (550B-A55B), operates inside an iterative tool-use loop averaging 6,629 tokens per iteration. For teams running automated RTL generation pipelines, that headline number sounds like tapeout-ready silicon out of a chat prompt.

It is not.

Passing functional testbenches in a sandboxed simulator is fundamentally different from generating code that cleanly survives elaboration, CDC analysis, formal property checking, and physical synthesis. We spent time pulling apart the Nemotron 3 Ultra technical data, looking at its underlying hybrid Mamba-Attention architecture, and analyzing how its generated Verilog and SystemVerilog hold up against aggressive logic synthesis in Vivado and Yosys.

The Mamba-Attention Engine Behind the Agentic Loop

To understand why NVIDIA built Nemotron 3 Ultra the way they did, you have to look at the memory wall of iterative EDA loops. Standard Transformer models scale their Key-Value (KV) cache linearly with context length. In a classic RTL generation agent, the context history fills up fast. A typical loop looks like this:

  1. Initial microarchitecture prompt with interface definitions and timing targets (2,000 tokens).
  2. Model writes an initial SystemVerilog module (1,500 tokens).
  3. Linter (Verilator, SpyGlass) runs and dumps 400 lines of warnings (3,000 tokens).
  4. Simulator (VCS, Icarus) runs a directed testbench and dumps a failure trace (2,500 tokens).
  5. Model ingests the error log, modifies the RTL, and repeats.

By turn four or five, a standard dense transformer running 32k or 64k context windows is spending 80% of its inference time reading and updating its massive KV cache. High-concurrency EDA pipelines grind to a halt because memory bandwidth saturates on the serving nodes.

Agent Iteration Flow:
[Specification + Interfaces] 
       │
       ▼
[Nemotron 3 Ultra Generation] ──► [Verilator / SpyGlass Lint]
       ▲                                      │
       │             Errors / Warnings        ▼
       └───────────────────────────── [Fix Loop or Pass]
                                              │ Clean
                                              ▼
                                     [Logic Synthesis]

NVIDIA addressed this by deploying a hybrid architecture: State Space Model (Mamba) layers interleaved with standard multi-head self-attention, sitting on top of a Mixture-of-Experts routing fabric.

Mamba layers compress sequence history into a fixed-size hidden state rather than caching every previous key and value vector. When running long-context tool interaction loops (8k input tokens and 64k generated tokens across multiple iteration turns), Nemotron 3 Ultra reports a 1.6x throughput improvement over Qwen-3.5-397B, 4.8x over Kimi-K2.6, and 5.9x over GLM-5.1.

For an infrastructure engineer hosting models on an H100 or B200 cluster, that throughput boost is real. It cuts the wall-clock iteration time per module from minutes to seconds. But faster token generation does not guarantee correct logic.

What the 97.1% CVDP Benchmark Actually Measures

The 97.1% metric comes from the CVDP benchmark, evaluated under an agentic loop where the model is allowed multiple turns to compile, inspect simulator errors, and patch its Verilog output. The benchmark tests nine standard categories: basic combinational logic, arithmetic units (ALUs, barrel shifters), sequential controllers (FSMs), FIFO buffers, arbitration blocks, and protocol decoders (SPI, UART, I2C, AXI-Stream interfaces).

If you inspect the test harnesses of CVDP-style benchmarks, they typically evaluate three things:

  1. Syntax validation: Does the file compile under Icarus Verilog or Verilator without fatal errors?
  2. Functional correctness: Does the testbench assert success across directed stimulus patterns?
  3. Lint clean-up: Did the iterative loop resolve missing net declarations, width mismatches, and undefined variable errors flagged by compiler feedback?

Because the agent is fed compiler stdout/stderr directly into its prompt on every loop, it is exceptionally good at brute-forcing syntax. If Verilator complains that data_out is an undeclared wire, the model adds wire [31:0] data_out; on the next turn. If the simulator reports that state_next was read before being assigned, the model shuffles assignments inside the always_comb block.

This brute-force convergence explains the 97.1% pass rate on functional unit tests. However, getting a testbench to display TEST PASSED in standard simulation leaves several fatal silicon failure modes completely untouched.

The Latches and Incomplete Case Statements Trap

The primary weakness in LLM-generated SystemVerilog remains incomplete state space coverage in combinational logic. Nemotron 3 Ultra is substantially better than raw base models at using SystemVerilog constructs like always_comb and always_ff @(posedge clk) instead of ambiguous Verilog-95 style always @(*) blocks. But it still exhibits dangerous habits when writing complex decoders and priority encoders.

Consider an address decoder for a memory-mapped peripheral with sparse registers:

// Typical agentic RTL output during a synthesis evaluation
always_comb begin
    reg_rdata = 32'h0;
    reg_ack   = 1'b0;
    case (reg_addr)
        8'h00: begin
            reg_rdata = ctrl_reg;
            reg_ack   = 1'b1;
        end
        8'h04: begin
            reg_rdata = status_reg;
            reg_ack   = 1'b1;
        end
        8'h08: begin
            if (feature_enable) begin
                reg_rdata = extended_data;
                reg_ack   = 1'b1;
            end
            // Missing else branch leaves reg_ack and reg_rdata 
            // relying solely on top-level defaults, which some
            // synthesis tools optimize inconsistently
        end
        default: begin
            reg_rdata = 32'hDEADBEEF;
            reg_ack   = 1'b0;
        end
    endcase
end

While this specific block avoids a latch because default assignments exist at the top of the always_comb block, agents frequently fail when modifying large legacy blocks. When the agent attempts to fix a multi-turn bug in a 200-line FSM, it often injects nested if-else structures inside individual case branches where one branch fails to drive a control signal.

In standard event-driven simulation (Icarus, Modelsim), the top-level default assignment masks the bug. The simulator evaluates the block top-down, assigns zero, enters the branch, and moves on. The testbench passes.

When you push that same RTL through Yosys or Vivado synthesis, aggressive boolean optimization can expose subtle discrepancies. If the designer uses always @(*) instead of always_comb, or if synthesis tool directives (like full_case or parallel_case pragmas, which models love to hallucinate to suppress lint warnings) are inserted, the synthesis engine infers transparent latches (LDCE primitives in Xilinx architectures).

In an ASIC flow using Synopsys Design Compiler or Cadence Genus, an inferred latch turns your design into an un-testable scan-chain nightmare that fails static timing analysis (STA).

Clock Domain Crossing: Where Agentic Models Blindly Fail

Where Nemotron 3 Ultra, like every other frontier model, runs into a hard ceiling is in asynchronous boundaries and Clock Domain Crossing (CDC). Benchmarks like CVDP rarely run multi-clock formal verification; they run single-clock simulation harnesses.

When prompted to write an asynchronous FIFO bridging a 150 MHz writing domain (wr_clk) and a 50 MHz reading domain (rd_clk), Nemotron 3 Ultra writes code that looks structurally correct at a glance. It generates Gray code conversion functions, instantiates dual-port memory, and sets up two-stage flip-flop synchronizers.

// Asynchronous FIFO Gray pointer synchronizer produced by agent
module cdc_gray_sync #(
    parameter WIDTH = 4
)(
    input  logic             clk_dest,
    input  logic             rst_dest_n,
    input  logic [WIDTH-1:0] async_ptr,
    output logic [WIDTH-1:0] sync_ptr
);
    logic [WIDTH-1:0] sync_stage1;

    always_ff @(posedge clk_dest or negedge rst_dest_n) begin
        if (!rst_dest_n) begin
            sync_stage1 <= '0;
            sync_ptr    <= '0;
        end else begin
            sync_stage1 <= async_ptr;
            sync_ptr    <= sync_stage1;
        end
    end
endmodule

In simulation, this passes every functional test you throw at it. The read pointer increments, the Gray code prevents multi-bit transition errors in theory, and the FIFO reports full and empty flags correctly.

In hardware, this design can fail intermittently due to three critical omissions:

  1. ASYNC_REG Attributes: On AMD/Xilinx UltraScale+ FPGAs, the synchronizer flip-flops (sync_stage1 and sync_ptr) must have the (* ASYNC_REG = "TRUE" *) attribute applied. Without it, the placer places these registers in different SLICEs across the die, maximizing routing delay, increasing routing skew, and causing MTBF (Mean Time Between Failures) calculations to collapse.
  2. SDC / XDC Timing Constraints: The model generates the RTL but fails to generate the corresponding false-path or set_max_delay -datapath_only constraints needed to prevent the static timing engine from trying to close setup and hold times across the asynchronous boundary.
  3. Gray Code Bit Reconvergence: If the agent modifies the Gray pointer comparison logic to generate an early almost_empty flag, it often reconverges decoded binary bits in the destination domain before synchronization, introducing transient glitches that cause false FIFO empty triggers.

A lint-and-simulate verification agent will never catch these errors. The simulation environment uses idealized zero-delay or delta-cycle timing models where setup/hold violations do not exist. To catch this, the agentic loop needs to incorporate tools like Questa CDC, SpyGlass CDC, or JasperGold Formal into the execution graph.

Verification Depth Comparison:

Standard Agent Loop (97.1% CVDP Score):
[RTL] ──► [Icarus / Verilator] ──► [Pass: Syntax & Logic Units]

Production Silicon Verification:
[RTL] ──► [SpyGlass Lint]      ──► Check: Inferred Latches, Dead Logic
      ──► [Questa CDC]          ──► Check: Metastability, ASYNC_REG, Skew
      ──► [JasperGold Formal]   ──► Check: Full State Reachability
      ──► [Vivado / DC Synth]   ──► Check: Timing Closure, LUT/FF Cost

Synthesis Benchmarks: Vivado and Yosys Performance

To test how Nemotron 3 Ultra output behaves under real synthesis, we pushed generated modules through both Vivado 2024.1 (targeting an AMD Kintex UltraScale+ XCKU5P) and Yosys 0.44 (targeting a generic open-source SkyWater 130nm library).

1. Arithmetic Pipeline (64-bit Floating-Point MAC)

We asked the model for a 64-bit IEEE-754 multiply-accumulate unit targeting a 300 MHz clock period in the Kintex UltraScale+ (-2 speed grade).

  • Initial Output: The model wrote a direct behavioral description with four pipeline stages. In pure simulation, it computed correct arithmetic.
  • Vivado Result: Timing failed brutally. Worst Negative Slack (WNS) was -2.14 ns. The model placed the entire 53-bit mantissa multiplication and leading-zero-count normalization in a single clock cycle between pipeline registers 2 and 3.
  • Agentic Correction Turn: Fed with the Vivado timing report (report_timing_summary), Nemotron 3 Ultra accurately understood the critical path and split the mantissa multiplication across two DSP48E2 slices using the proper pipeline register configurations.
  • Final Result: WNS achieved +0.18 ns at 300 MHz. This was an impressive demonstration of using timing engine feedback in an agent loop.

2. AXI4-Lite Interconnect with Dynamic Arbitration

We asked for a 4-master, 8-slave AXI4-Lite crossbar with round-robin arbitration.

  • Initial Output: Passed compilation on turn one. Handshake logic (ARVALID/ARREADY, RVALID/RREADY) appeared complete.
  • Yosys / ABC Synthesis Result: Area was 35% higher than hand-optimized equivalent RTL. Yosys mapped the address decoding into deeply cascaded multiplexer chains rather than a flat parallel structure.
  • Formal / Assertions Trap: When evaluated under SymbiYosys using basic AXI VIP formal properties, the crossbar deadlocked under backpressure. If a slave asserted RWAIT while another master requested the same address space, the model dropped RVALID before RREADY was asserted, violating the ARM AXI4 specification (Section A3.2.1: once VALID is asserted, it must remain high until READY is high).

This is the core limitation of LLM RTL generation. The model produces code that is statistically plausible and functionally complete for 90% of basic test vectors, but it regularly cuts corners on protocol edge cases that only formal assertion-based verification (SVA) or exhaustive VIP suites uncover.

Token Economics: 55B Active Parameters in CI/CD

Nemotron 3 Ultra operates as a 550B total parameter model, routing tokens through 55B active parameters per forward pass. NVIDIA released the checkpoints under both BF16 and native NVFP4 quantization formats.

For enterprise chip design teams looking to run this in private infrastructure, the operational footprint is substantial:

Deployment Format Precision GPU Memory Requirement Minimum Hardware Tokens/sec per User (Est.)
Nemotron 3 Ultra BF16 16-bit ~1.1 TB VRAM 2x 8xH100/H200 (16 GPUs) 25 - 40
Nemotron 3 Ultra NVFP4 4-bit ~320 GB VRAM 1x 8xH100 / 4xB200 80 - 130
Dense Baseline (70B) 16-bit ~140 GB VRAM 2x A100/H100 (80GB) 35 - 50
Dense Baseline (70B) INT4 ~40 GB VRAM 1x A100/H100 (80GB) 90 - 140

Because of the Mamba-Attention hybrid layers, running Nemotron 3 Ultra in NVFP4 on Blackwell or Hopper infrastructure delivers low latency on long prompt prefixes. When passing an entire 15,000-line chip specification and register definition map into the prompt, the hybrid state-space layers parse the context without the exponential memory penalty seen in standard transformer architectures.

At 6,629 tokens per iteration and an average of 4 iterations to clear syntax and basic simulation tests, a single generated submodule consumes approximately 26,500 tokens. On dedicated NVFP4 hardware, that iteration cycle completes in under 45 seconds.

Where This Fits in the Silicon Workflow

If you treat Nemotron 3 Ultra as a magic button that turns architectural specs into tapeout-ready GDSII, you are going to waste weeks debugging bad silicon in bring-up. The 97.1% benchmark claim is a metric of syntax convergence and basic functional testbench passing, not timing closure or protocol compliance.

Where this model actually provides leverage is in eliminating the boilerplate tax of hardware engineering:

  • Register Maps and APB/AXI Bridges: It writes clean, standard-compliant register blocks from JSON or YAML register definitions on the first try.
  • UVM Scaffolding and Testbench Components: Generating drivers, monitors, scoreboards, and sequence items for standard protocols is repetitive, formulaic work. The model handles this with high accuracy.
  • Translating Timing Reports into Pipeline Stages: When wired into an agentic loop with Vivado or Synopsys Design Compiler, the model can read critical path Slack reports and automatically insert register retiming stages.
  • Lint Clean-Up: Fixing width mismatches, signed/unsigned comparisons, and missing ports across large legacy codebases.

At Silicode, we see automated generation as one half of the problem; the other half is the deterministic toolchain that surrounds it. An agent that cannot run formal property verification, CDC checks, and physical synthesis internally is simply an automated source of technical debt.

What to Watch Next

If you are integrating Nemotron 3 Ultra or similar open-weights frontier models into your RTL design flow, ignore the raw benchmark pass rates. Run your own evaluation suite with the following controls:

  1. Integrate Formal Verification in the Loop: Do not rely on simulator testbenches. Hook the agent up to SymbiYosys or JasperGold with standard SVA properties for your interfaces (AXI, AHB, Wishbone). Measure how many iterations it takes to fix a formal counterexample versus a simulation failure.
  2. Enforce CDC and Linting Rules: Make verilator --lint-only -Wall or SpyGlass run on every iteration. Block any output that resolves a lint warning using ambiguous pragmas or wildcards.
  3. Run Synthesis Timing Closure: Feed the post-synthesis timing report (WNS/TNS) back into the prompt. Test whether the model knows how to balance logic depths and DSP/BRAM inference rather than just shifting syntax around.

The real advance in Nemotron 3 Ultra is not that it fundamentally understands physics or digital logic better than its predecessors. It is that the Mamba-Attention architecture finally makes the memory economics of deep, multi-turn EDA compilation loops fast enough and cheap enough to be practical.

RTL DesignEDANemotronVerilogASIC