SystemVerilog probes · 79Vivado: supported

the same attribute written without spaces: (*keep_hierarchy="yes"*) (yosys keeps the submodule)

Vivado: supported. The open-source chain: all four stages pass.

stagetoday
rtl, simulationpass
synth, synthesispass
netlist, the netlistpass
bit, the bitstreampass

What does Vivado do with it?

Supported. As 78: UG901 v2023.2 Ch.3 'KEEP_HIERARCHY Verilog Example' (p.60); written without the spaces it is the same attribute

What does the open-source chain do with it?

All four stages pass; expect.tsv records no message for this probe.

What is the probe's code?

From test/sv/79_keep_hierarchy_nospace.

design.sv

(*keep_hierarchy="yes"*) module inv(input logic a, output logic y);   // the same attribute, written without spaces
  assign y = ~a;
endmodule
module top(input logic [15:0] sw, output logic [15:0] led);
  inv u0 (.a(sw[0]), .y(led[0]));
  assign led[15:1] = sw[15:1];
endmodule

tb.sv

module tb;
  reg [15:0] sw = 16'h0000;
  wire [15:0] led;
  integer i;
  top dut(.sw(sw), .led(led));
  initial begin
    for (i = 0; i < 16; i = i + 1) begin
      sw = {i[3:0], 11'h2a5, i[0]}; #1
      if (!(led === {sw[15:1], ~sw[0]})) begin $display("FAIL: inv kept as its own module (sw=%h led=%h)", sw, led); $finish; end
    end
    $display("PASS"); $finish;
  end
endmodule

previous: (* keep_hierarchy = "yes" *) on a module, spaced as in UG901
next: an always_ff with an async reset and a statement after its if/else (d <= q; runs on the reset edge too)