Adding Waveforms to Your Simulation

If you need to see a waveform in the simulation window but it hasn't been added automatically, you can use the add_wave command. Vivado's simulation tools automatically add the inputs, outputs, and wires of the module being simulated but it does not add any inner ports or wires from sub-modules. This is solved by using add_save.

Use this command in a TCL file or in the TCL console.

Below are some examples of how to use the command, along with the Verilog for the modules they're accessing.

Here is the Verilog. myTopModule is the module that is being simulated, thus the inner wires of the sub module will not be shown automatically in the simulation.

// this is the sub module that is contained within the top module
module sub(anInputPort, anotherInputPort, anOutputPort);
  input aPort;
  output anotherPort;
  wire myInnerWireName, anotherInnerWireName;
  // arbitrary operations simply for example purposes
  assign myInnerWireName = ~aPort;
  assign anotherInnerWireName = anotherInputPort ^ myInnerWireName;
  assign anOutputPort = myInnerWireName & anotherInnerWireName;
 
endmodule
 
// this is the module that is being simulated
module myTopModule(A, B);
  input A, B;
  output C;
  // the sub module
  sub innerModuleName(A, B, C);
 
endmodule

Here are the TCL commands to add the waves inside of the sub module so that you can see them in the simluation.

  # you can add wires
  add_wave innerModuleName/myInnerWireName
  # and you can add ports
  add_wave innerModuleName/anInputPort
 
  # with options
  add_wave innerModuleName/myInnerWireName -radix bin
  add_wave innerModuleName/myInnerWireName -name waveNameForSimulation
  add_wave innerModuleName/myInnerWireName -radix bin -name aDifferentWaveformName
  • add_wave myModule/mySubModule/portName will add the port portName from inside mySubModule which is inside myModule. mySubModule and myModule must be the instance names of the modules.
  • -radix bin is used to change the radix of the waveform when its displayed on the simulation. In this case, the radix is being set to binary. See the table below for other options.
  • -name waveNameForSimulation is used to give the waveform a name in the simulation. This doesn't have to correspond to anything in your code and is totally arbitrary, though some of the labs ask that you give specific names to ports.
  • You can use -radix and -name at the same time, along with any other options.

Useful values for -radix are listed below.

Value Representation
bin Binary
dec Decimal
hex Hexadecimal