Ready-to-run snippets

Code Examples

Ready-to-run Verilog, SystemVerilog, and UVM examples. Click any to open it live in the IDE.

← All examples

Class vs Struct: Assignment: Copy vs Share

SystemVerilog Classes & OOP

Runnable example from the SystemVerilog Class vs Struct tutorial (Assignment: Copy vs Share)

Open in IDE
testbench.sv
typedef struct {
  int addr;
} packet_t;

class Packet;
  int addr;
endclass

module tb;
  packet_t s1, s2;
  Packet   c1, c2;

  initial begin
    s1.addr = 10;
    s2 = s1;          // struct assignment COPIES every field
    s2.addr = 99;
    $display ("s1.addr=%0d, s2.addr=%0d", s1.addr, s2.addr);

    c1 = new (); c1.addr = 10;
    c2 = c1;          // class assignment copies only the HANDLE
    c2.addr = 99;
    $display ("c1.addr=%0d, c2.addr=%0d", c1.addr, c2.addr);
  end
endmodule
Admin mode — edit and delete controls are visible on each row. Use the IDE to add new snippets via File → Save as Snippet.