package P; localparam X = 10; localparam Y = X + 1; function integer flip; input integer X; return ~X; endfunction endpackage package Q; import P::*; localparam Y = X + 1000; endpackage package R; import Q::*; export Q::Y; endpackage package S; typedef enum logic { A, B } enum_t; function enum_t flop; input enum_t X; if (X == A) return B; else return A; endfunction endpackage module top; import P::*; localparam X = 20; localparam Z = Y + 1; import S::flop; typedef enum logic [3:0] { T = 3, U } enum_t; initial begin $display("X %0d", X); $display("P::Y %0d", P::Y); $display("Z %0d", Z); $display("R::Y %0d", R::Y); $display("flip(0) %0d", flip(0)); $display("T %b", T); $display("U %b", U); $display("flop(0) %b", flop(0)); $display("flop(1) %b", flop(1)); end endmodule