Skip to content

Go to Symbol

Use Go to Symbol when you know the name of a module, class, function or macro but not the file it lives in. Choose Navigate | Symbol… (⌥⌘O on macOS, Ctrl+Alt+Shift+N on Windows/Linux) and start typing: the list shows the matching declarations in your project, and Enter opens the one you select. A symbol here is a name of one of the kinds listed under What is listed: a module, interface, program, package, class, checker, primitive, function, task or macro.

The steps use the sample project; open it and wait for indexing first. Nothing is edited, so there is nothing to undo.

  1. Press ⌥⌘O (Windows/Linux: Ctrl+Alt+Shift+N) and type my_driver. The class my_driver from uvm/my_pkg.sv is listed; press Enter. The editor opens uvm/my_pkg.sv at the class, and the popup closes (Escape closes it without opening).
  2. Open the popup again and type is_done: the function in rtl/counter_pkg.sv is listed. Press Enter: the file opens at the function.
  3. Open the popup again and type LANES, then COUNTER: each macro defined in rtl/defines.svh is listed. Matching ignores case, so other names that contain the same letters (such as the module counter for COUNTER) may be listed too: choose the row that shows rtl/defines.svh. Press Enter to open its `define (the line that starts with `define LANES or `define COUNTER), or Escape to close the popup.
  4. Open the popup again and type state: no row is listed for the variable state in rtl/counter.sv, because variables, types (state_t) and enum values (IDLE, COUNT, DONE) are not in the list, even though functions of the same package are. Other names that contain “state” may appear; the point is that none of them is the variable in rtl/counter.sv.

If a name you expect is missing, see If it doesn’t work.

  • Listed: modules, interfaces, programs, packages, classes, checkers, user-defined primitives (UDPs), functions, tasks and macros (`define). That includes functions and tasks declared inside modules, packages and classes, and checkers declared inside modules and packages.
  • Not listed: signals, ports, parameters, variables, types (typedefs), enum values, class properties and other names inside a scope. For those use Find Usages or Go to Declaration.

The IDE keeps a background index of these names, so the list appears without opening files, in large projects too (once the first indexing has finished).

An out-of-block method body (function void my_class::f(), a method written outside its class) is listed by its method name. DPI imports (functions imported from C), constructors (new) and prototypes without a body (extern, pure virtual) are not listed.

You see Likely cause What to do
The popup is empty or a name is missing The project is still indexing Wait for the progress bar at the bottom right to finish
A name is missing The file is not inside the opened project folder Open the folder that contains it (Your first project)
A name is missing It is in code an `ifdef switches off See Conditional compilation
A variable or port is not found Only declarations of the kinds above are listed Use Find Usages or Go to Declaration
The shortcut does nothing Your keymap differs, or on a laptop you must hold Fn Use Navigate | Symbol…