Skip to content

Netlist validation rejects disjoint drivers within structured aggregate nets #724

Description

@desmonddak

Describe the bug

NetlistValidation.validate incorrectly reports a multiple-driver error when different cells drive disjoint bits, fields, or elements of a structured aggregate net.

The validation logic gathers every driver associated with the aggregate net and requires the aggregate to have at most one distinct driver. This treats independent assignments to separate fields/elements as overlapping electrical drivers, even though no individual wire bit has more than one driver.

For example, synthesizing a structured array output with independent muxes for different lanes fails with an error like:

aggregate net "headWindow_orderedRobTags" is reached from multiple drivers:
cell mux_394.Y ($mux), cell mux_402.Y ($mux)

The generated SV drivers separate aggregate elements:

assign headWindow_orderedRobTags[0] = ...;
assign headWindow_orderedRobTags[1] = ...;

To Reproduce

To Reproduce

1. Create or synthesize a module whose output is a packed structured aggregate (for example, a `LogicArray` or `LogicStructure`).
2. Drive independent fields/elements of that aggregate from separate cells, such as distinct muxes or buffers.
3. Export the design through the JSON netlist synthesizer.
4. Observe that validation throws an aggregate multiple-driver error, despite the drivers targeting non-overlapping bits.

A minimal validator-level equivalent is:

- one `$buf` drives bits `[200, 201]`;
- another `$buf` drives bits `[400, 401]`;
- both bit ranges are fields of the same structured aggregate netname.

This should succeed because the two output bit ranges are disjoint.

### Expected behavior

Netlist validation should allow different drivers for disjoint bits within the same structured aggregate.

It should continue to reject a true conflict when two cell outputs drive the same wire bit.

### Actual behavior

Netlist validation rejects the aggregate merely because it has more than one distinct driver, even when every driven bit has exactly one driver.

### Additional: Dart SDK info

Dart SDK version: 3.13.2 (stable) on linux_x64

### Additional: pubspec.yaml

```yaml
name: rohd
version: 0.6.10

environment:
  sdk: '>=3.0.0 <4.0.0'

Additional: Context

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions