The following features are covered
in the GTM-Wizard:
- Detection of designs with PAM4 signals, designs instantiating
GTM_DUAL and automatic generation bypass module (
xil_dut_bypass). - Simple sanity check for the design that should instantiate bypass module.
- A mechanism to view PAM4 signals in Waveform Viewer for XSim users.
- Provide a way to generate a bypass module for export simulation flow.
In this tutorial, you would generate a GTM-Wizard example design, which uses a PAM4 signal. To generate that, follow the steps below:
- Create a project in Vivado 2025.x without adding a source/constraint file. Click , and then click Next until the Default Part page is displayed.
- In
the Default Part page,
select Virtex UltraScale+ 58G and select
parts as shown in the following figure, and click Next.
- Check the summary report and click Finish.
- Under Project
Manager, click on IP
Catalog and search for
gtm_wizardand then double-click Virtex UltraScale+ FPGAs Transceivers Wizard. - Click OK on default
configuration and click Skip on
Generate Output
Product dialog box.
- On Sources window, right-click the generated XCI file,
click Open IP Example Design, and specify
the location.
At this stage, you have an example ready to run the simulation.
Before heading towards simulation, here are a few things from the PAM4 point of view:
-
xil_dut_bypassmodule definition is generated on runtime by the tool that contains a hierarchical reference to GTM_DUAL. - This
xil_dut_bypassmodule generation is controlled by the Configure Design for Hierarchical Access option, which is set by default.Note: For old behavior, uncheck Configure Design for Hierarchical Access.Once the design is created, you can run it either through
launch_simulationorexport_simulation.
- Launch_simulation
-
- Click Run Behavioral
Simulation. This will run the simulation with
Vivado Simulator.
- Once the snapshot is created and loaded, the
simulation will stop after 1000 ns. Let us look at xil_dut_bypass
definition. Double-click xil_dut_bypass in the Scope window to see the
source file. Note the hierarchical reference from the top module to
the leaf-level instance.
- Right-click xil_dut_bypass and add to waveform.
- Click Restart
and run all.
- Once the simulation is complete, section all signals
of xil_dut_bypass in the waveform, right click, and select
Waveform Style to
Analog.
- Go to analog setting under waveform style and change
the value like below for better waveform.
- Observe the analog value of signals.Note: For running the same design with third-party simulators, refer to Vivado Design Suite User Guide: Logic Simulation (UG900).
- Click Run Behavioral
Simulation. This will run the simulation with
Vivado Simulator.
- Export_simulation
- The following are the two flows for export simulation:
- Export simulation with xil_dut_bypass generated
-
- Invoke command
export_simulation -simulator xsim -generate_hier_accesson Vivado IDE.This generates scripts in <your_local_path>/export_sim/xsim.
- In the generated vlog.prj, observe
xil_dut_bypass.sv. This is because launch_simulation has generated and added this as part of the project.
- Invoke
gtm_wizard_ultrascale_0_example_top_sim.shit runs the simulation. If you want to run in GUI mode, add-guito xsim command of else part. - Follow step-3 to step-7 under launch_simulation and you will be able to see the same waveform/output as launch_simulation.
- Invoke command
- Export simulation without xil_dut_bypass
-
- Invoke
gtm_wizard_ultrascale_0_example_top_sim.sh -gen_bypass. - It runs the simulation for delta time unit and generate hierarchical path in the log file.
- In generated simulate.log, note down the
entry
xilinx_hier_bypass_ports:gtm_wizard_ultrascale_0_example_top_sim.u_e…. - Generate
xil_dut_bypass.svby invokinggenerate_hier_access -log ./simulate.logon Vivado Tcl Console. - Observe
xil_dut_bypass.svgenerate in current directory. - Add this
xil_dut_bypass.svin vlog.prj assv xil_defaultlib ./xil_dut_bypass.sv. - Invoke
gtm_wizard_ultrascale_0_example_top_sim.shit runs simulation. If you want to run in GUI mode, add-guito xsim command of else part.
- Follow step-3 to step-7 under launch_simulation and you can see same waveform/output as launch_simulation.
- Invoke
- Generating xil_dut_bypass for non-vivado project
-
- Create compile order of the design (<design>.prj).
- Execute XSim simulator tools to
generate the simulator log file:
-
xelab -prj <design>.prj -top <testbench-top>. -
xsim -R <testbench-top> --testplusarg GEN_BYPASS.
-
- Verify
<simulator>.logfile generated and that it contains thexilinx_hier_bypass_portsstring with the hierarchical path information. For example:xilinx_hier_bypass_ports:tb.dut_i.gtmWiz_00.gtm_i in:integer:in1:in_var1 in:integer:in2:in_var2 out:integer:out1:out_var1 out:integer:out2:out_var2 - Download
generate_hier_access.tclutility from GitHub:wget https://raw.githubusercontent.com/Xilinx/XilinxTclStore/2020.1-dev/tclapp/xilinx/projutils/generate_hier_access.tcl - Execute
generate_hier_access.tclto generate the sources for hierarchical access simulation:-
# /usr/bin/tclsh. -
source generate_hier_access.tcl. -
generate_hier_access -bypass dut_bypass -testbench <module> -directory <path> -log <simulator>.log. Instantiate thisdut_bypassin test bench with proper connection.
-
- Add
<path>/dut_bypass.svto <design>.prj. - Run simulator tools to simulate the design in <design>.prj.