Intel Quartus Prime Pro Edition User Guide: Debug Tools
System Debugging Tools Overview
System Debugging Tools Portfolio
System debugging tools provide visibility by routing (or “tapping”) signals in your design to debugging logic. The Compiler includes the debugging logic in your design and generates programming files that you download into the FPGA or CPLD for analysis.
Each tool in the system debugging portfolio uses a combination of available memory, logic, and routing resources to assist in the debugging process. Because different designs have different constraints and requirements, you can choose the tool that matches the specific requirements for your design, such as the number of spare pins available or the amount of logic or memory resources remaining in the physical device.
System Debugging Tools Comparison
| Tool | Description | Typical Usage |
|---|---|---|
| System Console |
|
You need to perform system-level debugging. For example, if you have an Avalon® -MM slave or Avalon® -ST interfaces, you can debug the design at a transaction level. |
| Transceiver Toolkit |
|
You need to debug or optimize signal integrity of a board layout even before finishing the design. |
| Signal Tap Logic Analyzer |
|
You have spare on-chip memory and you want functional verification of a design running in hardware. |
| Signal Probe | Incrementally routes internal signals to I/O pins while preserving results from the last place-and-routed design. | You have spare I/O pins and you want to check the operation of a small set of control pins using either an external logic analyzer or an oscilloscope. |
| Logic Analyzer Interface (LAI) |
|
You have limited on-chip memory and a large set of internal data buses to verify using an external logic analyzer. Logic analyzer vendors, such as Tektronics* and Agilent*, provide integration with the tool to improve usability. |
| In-System Sources and Probes | Provides an easy way to drive and sample logic values to and from internal nodes using the JTAG interface. | You want to prototype the FPGA design using a front panel with virtual buttons. |
| In-System Memory Content Editor | Displays and allows you to edit on-chip memory. |
You want to view and edit the contents of on-chip memory that is not connected to a Nios® II processor. You can also use the tool when you do not want to have a Nios® II debug core in your system. |
| Virtual JTAG Interface | Allows you to communicate with the JTAG interface so that you can develop custom applications. | You want to communicate with custom signals in your design. |
Suggested Tools for Common Debugging Requirements
| Requirement | Signal Probe | Logic Analyzer Interface (LAI) | Signal Tap Logic Analyzer | Description |
|---|---|---|---|---|
| More Data Storage | N/A | X | — |
An external logic analyzer with the LAI tool allows you to store more captured data than the Signal Tap Logic Analyzer, because the external logic analyzer can provide access to a bigger buffer. The Signal Probe tool does not capture or store data. |
| Faster Debugging | X | X | — | You can use the LAI or the Signal Probe tool with external equipment, such as oscilloscopes and mixed signal oscilloscopes (MSOs). This ability provides access to timing mode, which allows you to debug combined streams of data. |
| Minimal Effect on Logic Design | X | X (2) | X (2) | The Signal Probe tool incrementally
routes nodes to pins, with no effect on the design logic. The LAI adds minimal logic to a design, requiring fewer device resources. The Signal Tap Logic Analyzer has little effect on the design, because the Compiler considers the debug logic as a separate design partition. |
| Short Compile and Recompile Time | X | X (2) | X (2) |
Signal Probe uses incremental routing to attach signals to previously reserved pins. This feature allows you to quickly recompile when you change the selection of source signals. The Signal Tap Logic Analyzer and the LAI can refit their own design partitions to decrease recompilation time. |
| Sophisticated Triggering Capability | N/A | N/A | X | The triggering capabilities of the Signal Tap Logic Analyzer are comparable to commercial logic analyzers. |
| Low I/O Usage | — | — | X |
The Signal Tap Logic Analyzer does not require additional output pins. Both the LAI and Signal Probe require I/O pin assignments. |
| Fast Data Acquisition | N/A | — | X | The Signal Tap Logic Analyzer can
acquire data at speeds of over 200 MHz. Signal integrity issues limit acquisition speed for external logic analyzers that use the LAI. |
| No JTAG Connection Required | X | — | X |
Signal Probe and Signal Tap do not require a host for debugging purposes. A FPGA design with the LAI requires an active JTAG connection to a host running the Intel® Quartus® Prime software. |
| No External Equipment Required | — | — | X |
The Signal Tap Logic Analyzer only requires a JTAG connection from a host running the Intel® Quartus® Prime software or the stand-alone Signal Tap Logic Analyzer. Signal Probe and the LAI require the use of external debugging equipment, such as multimeters, oscilloscopes, or logic analyzers. |
|
Notes to Table:
|
||||
Debugging Ecosystem
A very important distinction in the system debugging tools is how they interact with the design. All debugging tools in the Intel® Quartus® Prime software allow you to read the information from the design node, but only a subset allow you to input data at runtime:
| Debugging Tool | Read Data from Design | Input Values into the Design | Comments |
|---|---|---|---|
| Signal Tap Logic Analyzer, | Yes | No | General purpose troubleshooting tools optimized for probing signals in a register transfer level (RTL) netlist |
| Logic Analyzer Interface | |||
| Signal Probe | |||
| In-System Sources and Probes | Yes | Yes | These tools allow to:
|
| Virtual JTAG Interface | |||
| System Console | |||
| Transceiver Toolkit | |||
| In-System Memory Content Editor |
Taken together, the set of on-chip debugging tools form a debugging ecosystem. The set of tools can generate a stimulus to and solicit a response from the logic under test, providing a complete solution.
Tools for Monitoring RTL Nodes
The Signal Tap Logic Analyzer, Signal Probe, and LAI tools are useful for probing and debugging RTL signals at system speed. These general-purpose analysis tools enable you to tap and analyze any routable node from the FPGA.
- In cases when the design has spare logic and memory resources, the Signal Tap Logic Analyzer can providing fast functional verification of the design running on actual hardware.
- Conversely, if logic and memory resources are tight and you require the large sample depths associated with external logic analyzers, both the LAI and the Signal Probe tools simplify monitoring internal design signals using external equipment.
Resource Usage
Evaluate debugging options early on in the design planning process to ensure that you support the appropriate options in the board, Intel® Quartus® Prime project, and design. Planning early can reduce debugging time, and eliminates last minute changes to accommodate debug methodologies.
Overhead Logic
For Signal Tap Logic Analyzer
A baseline configuration consisting of the SLD arbitration logic and a single node with basic triggering logic contains approximately 300 to 400 Logic Elements (LEs). Each additional node you add to the baseline configuration adds about 11 LEs. Compared with logic resources, memory resources are a more important factor to consider for your design. Memory usage can be significant and depends on how you configure your Signal Tap Logic Analyzer instance to capture data and the sample depth that your design requires for debugging. For the Signal Tap Logic Analyzer, there is the added benefit of requiring no external equipment, as all of the triggering logic and storage is on the chip.
For Signal Probe
For Logic Analyzer Interface
Resource Estimation
Pin Usage
For Signal Tap Logic Analyzer
For Signal Probe
For Logic Analyzer Interface
Usability Enhancements
Incremental Routing
Automation Via Scripting
Remote Debugging
- For information about setting up a Nios® II system with the System Console to perform remote debugging, refer to Application Note 624
- For information about setting up an Intel FPGA SoC to perform remote debugging with the Intel® Quartus® Prime SLD tools, refer to Application Note 693.
Stimulus-Capable Tools
- The In-System Sources and Probes is ideal for toggling control signals.
- The In-System Memory Content Editor is useful for inputting large sets of test data.
- Finally, the Virtual JTAG interface is well suited for advanced users who want to develop custom JTAG solutions.
System Console provides system-level debugging at a transaction level, such as with Avalon® -MM slave or Avalon® -ST interfaces. You can communicate to a chip through JTAG and TCP/IP protocols. System Console uses a Tcl interpreter to communicate with hardware modules that you instantiate into your design.
In-System Sources and Probes
In-System Sources and Probes allow you to read and write to a design by accessing JTAG resources.
You instantiate an Intel® FPGA IP into your HDL code. This Intel® FPGA IP core contains source ports and probe ports that you connect to signals in your design, and abstracts the JTAG interface's transaction details.
In addition, In-System Sources and Probes provide a GUI that displays source and probe ports by instance, and allows you to read from probe ports and drive to source ports. These features make this tool ideal for toggling a set of control signals during the debugging process.
Push Button Functionality
In-System Memory Content Editor
Generate Test Vectors
System Console
Test Signal Integrity
Board Bring-Up and Verification
Test Link Signal Integrity with Transceiver Toolkit
Virtual JTAG Interface Intel FPGA IP
System-Level Debug Fabric
Most Intel FPGA on-chip debugging tools use the JTAG port to control and read-back data from debugging logic and signals under test. The JTAG Hub manages the sharing of JTAG resources.
The JTAG Hub appears in the project's design hierarchy as a partition named auto_fab_<number> .
SLD JTAG Bridge
The SLD JTAG Bridge extends the debug fabric across partitions, allowing a higher-level partition (static region or root partition) to access debug signals in a lower-level partition (partial reconfiguration region or core partition).
This bridge consists of two IP components:
-
SLD JTAG Bridge Agent
Intel® FPGA IP
—Resides in the higher-level partition.
Extends the JTAG debug fabric from a higher-level partition to a lower-lever partition containing the SLD JTAG Bridge Host IP. You instantiate the SLD JTAG Bridge Agent IP in the higher-level partition.
-
SLD JTAG Bridge Host
Intel® FPGA IP
—resides in the lower-level partition. Connects to the PR JTAG hub on one end, and to the SLD JTAG Bridge Agent on the higher-level partition.
Connects the JTAG debug fabric in a lower-level to a higher-level partition containing the SLD JTAG Bridge Agent IP. You instantiate the SLD JTAG Bridge Host IP in the lower-level partition.
For each PR region or reserved core partition you debug, you must instantiate one SLD JTAG Bridge Agent in the higher-level partition and one SLD JTAG Bridge Host in the lower-level partition.
SLD JTAG Bridge Index
The Intel® Quartus® Prime software supports multiple instances of the SLD JTAG Bridge in designs. The Compiler assigns an index number to distinguish each instance. The bridge index for the root partition is always None.
When configuring the Signal Tap logic analyzer for the root partition, set the Bridge Index value to None in the JTAG Chain Configuration window.
Bridge Index Information in the Compilation Report
Following design synthesis, the Compilation Report lists the index numbers for the SLD JTAG Bridge Agents in the design. Open the Synthesis > In-System Debugging > JTAG Bridge Instance Agent Information report for details about how the bridge indexes are enumerated. The reports shows the hierarchy path and the associated index.
In the synthesis report (<base revision>.syn.rpt), this information appears in the table JTAG Bridge Agent Instance Information.
Instantiating the SLD JTAG Bridge Agent
-
On the IP Catalog (Tools > IP Catalog), type SLD JTAG Bridge
Agent.
Figure 8. Find in IP Catalog
- Double click SLD JTAG Bridge Agent Intel® FPGA IP .
-
In the Create IP
Variant dialog box, type a file name, and then click Create.
Figure 9. Create IP Variant Dialog Box
The IP Parameter Editor Pro window shows the IP parameters. In most cases, you do not need to change the default values.Figure 10. SLD JTAG Bridge Agent Intel® FPGA IP Parameters
- Click Generate HDL.
- When the generation completes successfully, click Close.
- If you want an instantiation template, click Generate > Show Instantiation Template in the IP Parameter Editor Pro.
Instantiating the SLD JTAG Bridge Host
-
On the IP Catalog (Tools > IP Catalog), type SLD JTAG Bridge
Host.
Figure 11. Find in IP Catalog
- Double click SLD JTAG Bridge Host Intel® FPGA IP .
-
In the Create IP
Variant dialog box, type a file name, and then click Create.
Figure 12. Create IP Variant Dialog Box
The IP Parameter Editor Pro window shows the IP parameters. In most cases, you do not need to change the default values.Figure 13. SLD JTAG Bridge Host Intel® FPGA IP Parameters
- Click Generate HDL.
- When the generation completes successfully, click Close.
- If you want an instantiation template, click Generate > Show Instantiation Template in the IP Parameter Editor Pro.
Partial Reconfiguration Design Debugging
The Signal Tap logic analyzer allows you to debug static or PR regions of a design. If you only want to debug the static region, you can use the In-System Sources and Probes Editor, In-System Memory Content Editor, or JTAG Avalon Master Bridge.
Debug Fabric for Partial Reconfiguration Designs
On designs with Partial Reconfiguration, the Compiler generates centralized debug managers—or hubs—for each region (static and PR) that contains system level debug agents. Each hub handles the debug agents in its partition. In the design hierarchy, the hub corresponding to the static region is auto_fab_0.
To connect the hubs on parent and child partitions, you must instantiate one SLD JTAG Bridge for each PR region that you want to debug.
Generation of PR Debug Infrastructure
During compilation, the synthesis engine performs the following functions:
- Generates a main JTAG hub in the static region.
- If the static region contains Signal Tap instances, connects those instances to the main JTAG hub.
- Detects bridge agent and bridge host instances.
- Connects the SLD JTAG bridge agent instances to the main JTAG hub.
- For each bridge host instance in a PR region that contains a
Signal Tap instance:
- Generates a PR JTAG hub in the PR region.
- Connects all Signal Tap instances in the PR region to the PR JTAG hub.
- Detects instance of the SLD JTAG bridge host.
- Connects the PR JTAG hub to the JTAG bridge host.
System Debugging Tools Overview Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.09.24 | 18.1.0 |
|
| 2018.05.07 | 18.0.0 |
|
| 2017.05.08 | 17.0.0 |
|
| 2016.10.31 | 16.1.0 |
|
| 2015.11.02 | 15.1.0 | Changed instances of Quartus II to Intel® Quartus® Prime . |
| June 2014 | 14.0.0 | Added information that System Console supports the Tk toolkit. |
| November 2013 | 13.1.0 | Dita conversion. Added link to Remote Debugging over TCP/IP for Altera SoC Application Note. |
| June 2012 | 12.0.0 | Maintenance release. |
| November 2011 | 10.0.2 | Maintenance release. Changed to new document template. |
| December 2010 | 10.0.1 | Maintenance release. Changed to new document template. |
| July 2010 | 10.0.0 | Initial release |
Design Debugging with the Signal Tap Logic Analyzer
The Signal Tap Logic Analyzer
To facilitate the debugging process, you can save the captured data in device memory for later analysis. You can also filter data that is not relevant for debug by defining custom trigger-condition logic. The Signal Tap Logic Analyzer supports the highest number of channels, largest sample depth, and fastest clock speeds of any logic analyzer in the programmable logic market.
The Signal Tap Logic Analyzer is available as a stand-alone package or with a software subscription.
Hardware and Software Requirements
-
Signal Tap Logic Analyzer
The following software includes the Signal Tap Logic Analyzer:
- Intel® Quartus® Prime Design Software
- Intel® Quartus® Prime Lite Edition
Alternatively, use the Signal Tap Logic Analyzer standalone software and standalone Programmer software.
- Download/upload cable
- Intel® development kit or your design board with JTAG connection to device under test
During data acquisition, the memory blocks in the device store the captured data, and then transfer the data to the logic analyzer over a JTAG communication cable, such as or Intel® FPGA Download Cable.
Opening the Standalone Signal Tap Logic Analyzer GUI
quartus_stpw <stp_file.stp>
Signal Tap Logic Analyzer Features and Benefits
| Feature | Benefit |
|---|---|
| Quick access toolbar | Provides single-click operation of commonly-used menu items. You can hover over the icons to see tool tips. |
| Multiple logic analyzers in a single device | Allows you to capture data from multiple clock domains in a design at the same time. |
| Multiple logic analyzers in multiple devices in a single JTAG chain | Allows you to capture data simultaneously from multiple devices in a JTAG chain. |
| Nios® II plug-in support | Allows you to specify nodes, triggers, and signal mnemonics for IP, such as the Nios® II processor. |
| Up to 10 basic, comparison, or advanced trigger conditions for each analyzer instance | Allows you to send complex data capture commands to the logic analyzer, providing greater accuracy and problem isolation. |
| Power-up trigger | Captures signal data for triggers that occur after device programming, but before manually starting the logic analyzer. |
| Custom trigger HDL object | You can code your own trigger in Verilog HDL or VHDL and tap specific instances of modules located anywhere in the hierarchy of your design, without needing to manually route all the necessary connections. This simplifies the process of tapping nodes spread out across your design. |
| State-based triggering flow | Enables you to organize your triggering conditions to precisely define what your logic analyzer captures. |
| Incremental route with rapid recompile | Allows you to manually allocate trigger input, data input, storage qualifier input, and node count, and perform a full compilation to include the Signal Tap Logic Analyzer in your design. Then, you can selectively connect, disconnect, and swap to different nodes in your design. Use Rapid Recompile to perform incremental routing and gain a 2-4x speedup over the initial full compilation. |
| Flexible buffer acquisition modes | The buffer acquisition control allows you to precisely control the data that is written into the acquisition buffer. Both segmented buffers and non-segmented buffers with storage qualification allow you to discard data samples that are not relevant to the debugging of your design. |
| MATLAB* integration with included MEX function | Collects the data the Signal Tap Logic Analyzer captures into a MATLAB* integer matrix. |
| Up to 2,048 channels per logic analyzer instance | Samples many signals and wide bus structures. |
| Up to 128K samples per instance | Captures a large sample set for each channel. |
| Fast clock frequencies | Synchronous sampling of data nodes using the same clock tree driving the logic under test. |
| Resource usage estimator | Provides an estimate of logic and memory device resources that the Signal Tap Logic Analyzer configurations use. |
| No additional cost | Intel® Quartus® Prime subscription and the Intel® Quartus® Prime Lite Edition include the Signal Tap Logic Analyzer. |
| Compatibility with other on-chip debugging utilities | You can use the Signal Tap Logic Analyzer in tandem with any JTAG-based on-chip debugging tool, such as an In-System Memory Content editor, allowing you to change signal values in real-time while you are running an analysis with the Signal Tap Logic Analyzer. |
| Floating-Point Display Format | To enable,
click Edit > Bus Display Format > Floating-point
Supports:
|
Backward Compatibility with Previous Versions of Intel Quartus Prime Software
If you have a Intel® Quartus® Prime project file from a previous version of the software, you may have to update the .stp configuration file to recompile the project. You can update the configuration file by opening the Signal Tap Logic Analyzer. If you need to update your configuration, a prompt appears asking if you want to update the .stp to match the current version of the Intel® Quartus® Prime software.
Signal Tap Logic Analyzer Task Flow Overview
To use the Signal Tap Logic Analyzer to debug your design, you perform a number of tasks to add, configure, and run the logic analyzer.
Add the Signal Tap Logic Analyzer to Your Design
Configure the Signal Tap Logic Analyzer
After you add the Signal Tap Logic Analyzer to your design, configure the logic analyzer to monitor the signals you want.
You can add signals manually or use a plug-in, such as the Nios® II processor plug-in, to add entire sets of associated signals for a particular IP.
Specify settings for the data capture buffer, such as its size, the method in which the Signal Tap Logic Analyzer captures and stores the data. If your device supports memory type selection, you can specify the memory type to use for the buffer.
Define Trigger Conditions
The Signal Tap Logic Analyzer allows you to define trigger conditions that range from very simple, such as the rising edge of a single signal, to very complex, involving groups of signals, extra logic, and multiple conditions. Power-Up Triggers allow you to capture data from trigger events occurring immediately after the device enters user-mode after configuration.
Compile the Design
Program the Target Device or Devices
Run the Signal Tap Logic Analyzer
View, Analyze, and Use Captured Data
- To simplify reading and interpreting the signal data you capture, set up mnemonic tables, either manually or with a plug-in.
- To speed up debugging, use the Locate feature in the Signal Tap node list to find the locations of problem nodes in other tools in the Intel® Quartus® Prime software.
Configuring the Signal Tap Logic Analyzer
Assigning an Acquisition Clock
You can use any signal in your design as the acquisition clock. However, for best results in data acquisition, use a global, non-gated clock that is synchronous to the signals under test. Using a gated clock as your acquisition clock can result in unexpected data that does not accurately reflect the behavior of your design. The Intel® Quartus® Prime static timing analysis tools show the maximum acquisition clock frequency at which you can run your design. To find the maximum frequency of the logic analyzer clock, refer to the Timing Analysis section of the Compilation Report.
If you do not assign an acquisition clock in the Signal Tap Logic Analyzer Editor, Intel® Quartus® Prime software automatically creates a clock pin called auto_stp_external_clk. You must make a pin assignment to this pin, and make sure that a clock signal in your design drives the acquisition clock.
Adding Signals to the Signal Tap File
- Pre-synthesis—These signals exist after design elaboration, but before any synthesis optimizations are done. This set of signals must reflect your Register Transfer Level (RTL) signals.
- Post-fitting—These signals exist after physical synthesis optimizations and place-and-route.
Intel® Quartus® Prime software does not limit the number of signals available for monitoring in the Signal Tap window waveform display. However, the number of channels available is directly proportional to the number of logic elements (LEs) or adaptive logic modules (ALMs) in the device. Therefore, there is a physical restriction on the number of channels that are available for monitoring. Signals shown in blue text are post-fit node names. Signals shown in black text are pre-synthesis node names.
The Intel® Quartus® Prime Pro Edition software uses only the instance name, and not the entity name, in the form of:
a|b|c
not a_entity:a|b_entity:b|c_entity:c
After successful Analysis and Elaboration, invalid signals appear in red. Unless you are certain that these signals are valid, remove them from the .stp file for correct operation. The Signal Tap Status Indicator also indicates if an invalid node name exists in the .stp file.
You can tap signals if a routing resource (row or column interconnects) exists to route the connection to the Signal Tap instance. For example, you cannot tap signals that exist in the I/O element (IOE), because there are no direct routing resources from the signal in an IOE to a core logic element. For input pins, you can tap the signal that is driving a logic array block (LAB) from an IOE, or, for output pins, you can tap the signal from the LAB that is driving an IOE.
Pre-Synthesis Signals
When you add pre-synthesis signals, make all connections to the Signal Tap Logic Analyzer before synthesis. The Compiler allocates logic and routing resources to make the connection as if you changed your design files. For signals driving to and from IOEs, pre-synthesis signal names coincide with the pin's signal names.
Post-Fit Signals
When you tap post-fit signals, you are connecting to actual atoms in the post-fit netlist. You can only tap signals that exist in the post-fit netlist, and existing routing resources must be available.
In the case of post-fit output signals, tap the COMBOUT or REGOUT signal that drives the IOE block. For post-fit input signals, signals driving into the core logic coincide with the pin's signal name.
Assigning Data Signals with the Technology Map Viewer
- After compilation, launch the Technology Map Viewer from the Intel® Quartus® Prime software, by clicking Tools > Netlist Viewers > Technology Map Viewer (Post-Fitting).
- Find the node that you want to tap.
- Copy the node to either the active .stp for the design or a new .stp.
Signal Preservation
The Intel® Quartus® Prime software optimizes the RTL signals during synthesis and place-and-route. RTL signal names may not appear in the post-fit netlist after optimizations.
The optimization attributes are:
- keep—Prevents removal of combinational signals during optimization.
- preserve—Prevents removal of registers during optimization.
However, preserving attributes can increase device resource utilization or decrease timing performance.
Preserving nodes is often necessary when you add groups of signals for an IP with a plug-in. If you are debugging an encrypted IP core, such as the Nios® II CPU, you might need to preserve nodes from the core to keep available for debugging with the Signal Tap Logic Analyzer.
Node List Signal Use Options
To prevent a signal from triggering the analysis, disable the signal's Trigger Enable option in the .stp file. This option is useful when you only want to see the signal's captured data.
You can turn off the ability to view data for a signal by disabling the Data Enable column in the .stp file. This option is useful when you want to trigger on a signal, but have no interest in viewing that signal's data.
Disabling and Enabling a Signal Tap Instance
Signals Unavailable for Signal Tap Debugging
You cannot tap any of the following signal types:
- Post-fit output pins—You cannot tap a post-fit output pin directly. To make an output signal visible, tap the register or buffer that drives the output pin. This includes pins defined as bidirectional.
- Signals that are part of a carry chain—You cannot tap the carry out (cout0 or cout1) signal of a logic element. Due to architectural restrictions, the carry out signal can only feed the carry in of another LE.
- JTAG Signals—You cannot tap the JTAG control (TCK, TDI, TDO, and TMS) signals.
- ALTGXB IP core—You cannot directly tap any ports of an ALTGXB instantiation.
- LVDS—You cannot tap the data output from a serializer/deserializer (SERDES) block.
- DQ, DQS Signals—You cannot directly tap the DQ or DQS signals in a DDR/DDRII design.
Adding Signals with a Plug-In
The Nios® II plug-in, for example, creates one mnemonic table in the Setup tab and two tables in the Data tab:
- Nios® II Instruction (Setup tab)—Capture all the required signals for triggering on a selected instruction address.
- Nios® II Instance Address (Data tab)—Display address of executed instructions in hexadecimal format or as a programming symbol name if defined in an optional Executable and Linking Format (.elf) file.
- Nios® II Disassembly (Data tab)—Display disassembled code from the corresponding address.
To add signals to the .stp file using a plug-in, perform the following steps after running Analysis and Elaboration on your design:
-
To
ensure
that all the required signals are available, in the
Intel®
Quartus® Prime
software,
click
Assignments > Settings > Compiler Settings > Advanced Settings (Synthesis). Turn on Create debugging nodes for IP cores.
All the signals included in the plug-in are added to the node list.
-
Right-click
the node list. On the
Add
Nodes with Plug-In submenu,
select
the plug-in you want to use, such as the included plug-in named
Nios® II
.
The Select Hierarchy Level dialog box appears showing the IP hierarchy of your design. If the IP for the selected plug-in does not exist in your design, a message informs you that you cannot use the selected plug-in.
-
Select
the IP that contains the signals you want to monitor with the
plug-in,
and click OK.
- If all the signals in the plug-in are available, a dialog box might appear, depending on the plug-in, where you can specify options for the plug-in.
- With the Nios® II plug-in, you can optionally select an .elf containing program symbols from your Nios® II Integrated Development Environment (IDE) software design. Specify options for the selected plug-in, and click OK.
Specifying Sample Depth
To specify the sample depth:
In cases with limited device memory resources, the design may not be able to compile due to the selected sample buffer size. Try reducing the sample depth to reduce resource usage.
Capture Data to a Specific RAM Type
RAM selection allows you to preserve a specific memory block for your design, and allocate another portion of memory for Signal Tap Logic Analyzer data acquisition.
For example, if your design has an application that requires a large block of memory resources, such as a large instruction or data cache, you can use MLAB blocks for data acquisition and leave M20k blocks for the rest of your design.
To specify the RAM type to use for the Signal Tap Logic Analyzer buffer, go to the Signal Configuration pane in the Signal Tap window, and select one Ram type from the drop-down menu.
Use this feature only when the acquired data is smaller than the available memory of the RAM type that you selected. The amount of data appears in the Signal Tap resource estimator.
Select the Buffer Acquisition Mode
There are two types of acquisition buffer within the Signal Tap Logic Analyzer—a non-segmented (or circular) buffer and a segmented buffer.
- With a non-segmented buffer, the Signal Tap Logic Analyzer treats entire memory space as a single FIFO, continuously filling the buffer until the logic analyzer reaches a defined set of trigger conditions.
- With a segmented buffer, the memory space is split into separate buffers. Each buffer acts as a separate FIFO with its own set of trigger conditions, and behaves as a non-segmented buffer. Only a single buffer is active during an acquisition. The Signal Tap Logic Analyzer advances to the next segment after the trigger condition or conditions for the active segment has been reached.
When using a non-segmented buffer, you can use the storage qualification feature to determine which samples are written into the acquisition buffer. Both the segmented buffers and the non-segmented buffer with the storage qualification feature help you maximize the use of the available memory space.
Both non-segmented and segmented buffers can use a preset trigger position (Pre-Trigger, Center Trigger, Post-Trigger). Alternatively, you can define a custom trigger position using the State-Based Triggering tab. Refer to Specify Trigger Position for more details.
Non-Segmented Buffer
The non-segmented buffer is the default buffer type in the Signal Tap Logic Analyzer.
At runtime, the logic analyzer stores data in the buffer until the buffer fills up. From that point on, new data overwrites the oldest data, until a specific trigger event occurs. The amount of data the buffer captures after the trigger event depends on the Trigger position setting:
- To capture most data before the trigger occurs, select Post trigger position from the list
- To capture most data after the trigger, select Pre trigger position.
- To center the trigger position in the data, select Center trigger position.
Alternatively, use the custom State-based triggering flow to define a custom trigger position within the capture buffer.
Segmented Buffer
If you want to have separate trigger conditions for each of the segmented buffers, you must use the state-based trigger flow. The figure shows an example of a segmented buffer system.
With the buffer acquisition feature. you can monitor multiple read transactions from the SRAM device without running the Signal Tap Logic Analyzer again, because you split the memory to capture the same event multiple times, without wasting allocated memory. The buffer captures as many cycles as the number of segments you define under the Data settings in the Signal Configuration pane.
To enable and configure buffer acquisition, select Segmented in the Signal Tap Logic Analyzer Editor and determine the number of segments to use. In the example in the figure, selecting sixty-four 64-sample segments allows you to capture 64 read cycles.
Specifying Pipeline Settings
To specify the pipeline factor from the Signal Tap GUI:
- In the Signal Configuration pane, specify a pipeline factor ranging from 0 to 5. The default value is 0.
Specifying Pipeline Settings from Platform Designer
To specify the pipeline factor when you instantiate the Signal Tap Logic Analyzer component from the Platform Designer system:
- Double-click Signal Tap Logic Analyzer component in the IP Catalog.
-
Specify the Pipeline Factor, along with
other parameter values
Figure 19. Specifying the Pipeline Factor from Platform Designer
Filtering Relevant Samples
The Signal Tap Logic Analyzer offers a snapshot in time of the data stored in the acquisition buffers. By default, the Signal Tap Logic Analyzer writes into acquisition memory with data samples on every clock cycle. With a non-segmented buffer, there is one data window that represents a comprehensive snapshot of the data stream. Conversely, segmented buffers use several smaller sampling windows spread out over more time, with each sampling window representing a contiguous data set.
With analysis using acquisition buffers you can capture most functional errors in a chosen signal set, provided adequate trigger conditions and a generous sample depth for the acquisition. However, each data window can have a considerable amount of unnecessary data; for example, long periods of idle signals between data bursts. The default behavior in the Signal Tap Logic Analyzer doesn't discard the redundant sample bits.
The Storage Qualifier feature allows you to establish a condition that acts as a write enable to the buffer during each clock cycle of data acquisition, thus allowing a more efficient use of acquisition memory over a longer period of analysis.
Because you can create a discontinuity between any two samples in the buffer, the Storage Qualifier feature is equivalent to creating a custom segmented buffer in which the number and size of segment boundaries are adjustable.
Notes to figure:
- Non-segmented buffers capture a fixed sample window of contiguous data.
- Segmented buffers divide the buffer into fixed sized segments, with each segment having an equal sample depth.
- Storage Qualifier allows you to define a custom sampling window for each segment you create with a qualifying condition, thus potentially allowing a larger time scale of coverage.
There are six storage qualifier types available under the Storage Qualifier feature:
- Continuous (default) Turns the Storage Qualifier off.
- Input port
- Transitional
- Conditional
- Start/Stop
- State-based
Upon the start of an acquisition, the Signal Tap Logic Analyzer examines each clock cycle and writes the data into the buffer based upon the storage qualifier type and condition. Acquisition stops when a defined set of trigger conditions occur.
The Signal Tap Logic Analyzer evaluates trigger conditions independently of storage qualifier conditions.
Input Port Mode
If you are creating a Signal Tap Logic Analyzer instance through an .stp file, specify the storage qualifier signal using the input port field located on the Setup tab. You must specify this port for your project to compile.
If you use the parameter editor, the storage qualification input port, if specified, appears in the generated instantiation template. You can then connect this port to a signal in your RTL.
- Continuous Mode:
- Input Port Storage Qualifier:
Transitional Mode
- Continuous:
- Transitional mode:
Conditional Mode
You can select either Basic AND, Basic OR, Comparison, or Advanced storage qualifier conditions. A Basic AND or Basic OR condition matches each signal to one of the following:
- Don’t Care
- Low
- High
- Falling Edge
- Rising Edge
- Either Edge
If you specify a Basic AND storage qualifier condition for more than one signal, the Signal Tap Logic Analyzer evaluates the logical AND of the conditions.
You can specify any other combinational or relational operators with the enabled signal set for storage qualification through advanced storage conditions.
You can define storage qualification conditions similar to the manner in which you define trigger conditions.
The data pattern is the same in both cases.
- Continuous sampling capture mode:
- Conditional sampling capture mode:
Start/Stop Mode
- Continuous Mode:
- Start/Stop Storage Qualifier:
State-Based
When you enable the storage qualifier feature for the State-based flow, two additional commands become available: start_store and stop_store. These commands are similar to the Start/Stop capture conditions. Upon the start of acquisition, the Signal Tap Logic Analyzer doesn't write data into the buffer until a start_store action is performed. The stop_store command pauses the acquisition. If both start_store and stop_store actions occur within the same clock cycle, the Logic Analyzer stores a single sample into the acquisition buffer.
Showing Data Discontinuities
Disable Storage Qualifier
Manage Multiple Signal Tap Files and Configurations
You can debug different blocks in your design by grouping related monitoring signals. Likewise, you can use a group of signals to define multiple trigger conditions. Each combination of signals, capture settings, and trigger conditions determines a debug configuration, and one configuration can have zero or more associated data logs.
Signal Tap Logic Analyzer allows you to save debug configurations in more than one .stp file. Alternatively, you can embed multiple configurations within the same .stp file, and use the Data Log as a managing tool.
Data Log Pane
- To save the current configuration or capture in the Data Log—and
.stp file, click Edit > Save to Data Log. Alternatively, click the Save to Data
Log icon
at the top of the Data Log pane. - To generate a log entry after every data capture, click Edit > Enable Data Log. Alternatively, check the box at the top of the Data Log pane.
The Data Log displays its contents in a tree hierarchy. The active items display a different icon.
| Item | Icon | Contains one or more | Comments | |
|---|---|---|---|---|
| Unselected | Selected | |||
| Instance |
|
|
Signal Set | |
| Signal Set |
|
|
Trigger | The Signal Set changes whenever you add a new signal to Signal Tap. After a change in the Signal Set, you need to recompile. |
| Trigger |
|
|
Capture Log | A trigger changes when you change any trigger condition. These changes do not require recompilation. |
| Capture Log |
|
|
||
The name on each entry displays the wall-clock time when Signal Tap Logic Analyzer triggered, and the time elapsed from start acquisition to trigger activation. You can rename entries so they make sense to you.
To switch between configurations, double-click an entry in the Data Log. As a result, the Setup tab updates to display the active signal list and trigger conditions.
Simple Data Log
On this example, the Data Log displays one instance with three signal set configurations.
SOF Manager
The SOF Manager is in the JTAG Chain Configuration pane.
With the SOF Manager you can embed
multiple SOFs into one .stp file. This action lets you move the .stp file to a different location, either
on the same computer or across a network, without including the associated .sof separately. To embed a
new SOF in the .stp
file, click the Attach SOF
File icon
.
As you switch between configurations in the Data Log, you can extract the SOF that is compatible with that configuration.
To download the new SOF to the FPGA, click the
Program Device icon
in the SOF Manager, after ensuring that the configuration of your
.stp matches the
design programmed into the target device.
Defining Triggers
Basic Trigger Conditions
- Don’t Care
- Low
- High
- Falling Edge
- Rising Edge
- Either Edge
For buses, type a pattern in binary, or right-click and select Insert Value to enter the pattern in other number formats. Note that you can enter X to specify a set of “don’t care” values in either your hexadecimal or your binary string. For signals in the .stp file that have an associated mnemonic table, you can right-click and select an entry from the table to specify pre-defined conditions for the trigger.
When you add signals through plug-ins, you can create basic triggers using predefined mnemonic table entries. For example, with the Nios® II plug-in, if you specify an .elf file from your Nios® II IDE design, you can type the name of a function from your Nios® II code. The logic analyzer triggers when the Nios® II instruction address matches the address of the code function name that you specify.
Data capture stops and the Logic Analyzer stores the data in the buffer when the logical AND of all the signals for a given trigger condition evaluates to TRUE.
Using the Basic OR Trigger Condition with Nested Groups
- Select Basic OR under Trigger Conditions.
- In the Setup tab, select several nodes. Include groups in your selection.
- Right-click the Setup tab and select Group.
-
Select the nested group and
right-click to set a group trigger condition that applies the reduction
AND,
OR,
NAND,
NOR,
XOR,
XNOR, or
logical TRUE or
FALSE.
Note: You can only select OR and AND group trigger conditions for bottom-level groups (groups with no groups as children).Figure 30. Applying Trigger Condition to Nested Group
Comparison Trigger Conditions
- Single-value comparison—compares a bus node’s value to a numeric value that you specify. Use one of these operands for comparison: >, >=, ==, <=, <. Returns 1 when the bus node matches the specified numeric value.
- Interval check—verifies whether a bus node’s value confines to an interval that you define. Returns 1 when the bus node's value lies within the specified bounded interval.
- Apply the Comparison trigger only to bus nodes consisting of leaf nodes.
- Do not form sub-groups within a bus node.
- Do not enable or disable individual trigger nodes within a bus node.
- Do not specify comparison values (in case of single-value comparison) or boundary values (in case of interval check) exceeding the selected node’s bus-width.
Specifying the Comparison Trigger Conditions
Follow these steps to specify the Comparison trigger conditions:
- From the Setup tab, select Comparison under Trigger Conditions.
-
Right-click the node in the trigger editor, and select
Compare.
Figure 31. Selecting the Comparison Trigger Condition
-
Select the Comparison
type from the Compare window.
- If you choose Single-value comparison as your comparison type, specify the operand and value.
- If you choose Interval check as your comparison type, provide the lower and upper bound values for the interval.
You can also specify if you want to include or exclude the boundary values.
Figure 32. Specifying the Comparison Values -
Click OK. The trigger
editor displays the resulting comparison expression in the group node condition
text box.
Note: You can modify the comparison condition in the text box with a valid expression.Figure 33. Resulting Comparison Condition in Text Box
Advanced Trigger Conditions
Open the Advanced Trigger tab by selecting Advanced in the Trigger Conditions drop-down menu.
To build a complex trigger condition in an expression tree, drag-and-drop operators from the Object Library pane and the Node List pane into the Advanced Trigger Configuration Editor window.
To configure the operators’ settings, double-click or right-click the operators that you placed and click Properties.
| Category | Name |
|---|---|
| Signal Detection |
Edge and Level Detector |
| Input Objects |
Bit Bit Value Bus Bus Value |
| Comparison |
Less Than Less Than or Equal To Equality Inequality Greater Than or Equal To Greater Than |
| Bitwise |
Bitwise Complement Bitwise AND Bitwise OR Bitwise XOR |
| Logical |
Logical NOT Logical AND Logical OR Logical XOR |
| Reduction |
Reduction AND Reduction OR Reduction XOR |
| Shift |
Left Shift Right Shift |
| Custom Trigger HDL |
Adding many objects to the Advanced Trigger Condition Editor can make the work space cluttered and difficult to read. To keep objects organized while you build your advanced trigger condition, use the shortcut menu and select Arrange All Objects. Alternatively, use the Zoom-Out command to fit more objects into the Advanced Trigger Condition Editor window.
Examples of Advanced Triggering Expressions
Custom Trigger HDL Object
The Custom Trigger HDL object appears in the Object Library pane of the Advanced Trigger editor.
Using the Custom Trigger HDL Object
- Select the trigger you want to edit.
- Open the Advanced Trigger tab by selecting Advanced in the Trigger Conditions drop-down menu.
-
Add to your project the HDL source file that contains the trigger module
using the Project
Navigator.
- Alternatively, append the HDL for your trigger module to a source file already included in the project.
Figure 40. HDL Trigger in the Project Navigator - Implement the inputs and outputs that your Custom Trigger HDL module requires.
-
Drag in your Custom Trigger HDL object and connect the object’s
data input bus and result output bit to the final trigger result.
Figure 41. Custom Trigger HDL Object
-
Right-click your Custom Trigger HDL object and configure the
object’s properties.
Figure 42. Configure Object Properties
- Compile your design.
- Acquire data with Signal Tap using your custom Trigger HDL object.
Verilog HDL Triggers
The following trigger uses configuration bitstream:
module test_trigger ( input acq_clk, reset, input[3:0] data_in, input[1:0] pattern_in, output reg trigger_out ); always @(pattern_in) begin case (pattern_in) 2'b00: trigger_out = &data_in; 2'b01: trigger_out = |data_in; 2'b10: trigger_out = 1'b0; 2'b11: trigger_out = 1'b1; endcase end endmodule
This trigger does not have configuration bitstream:
module test_trigger_no_bs ( input acq_clk, reset, input[3:0] data_in, output reg trigger_out ); assign trigger_out = &data_in; endmodule
Required Inputs and Outputs of Custom Trigger HDL Module
| Name | Description | Input/Output | Required/ Optional |
|---|---|---|---|
| acq_clk | Acquisition clock that Signal Tap uses | Input | Required |
| reset | Reset that Signal Tap uses when restarting a capture. | Input | Required |
| data_in |
|
Input | Required |
| pattern_in |
|
Input | Optional |
| trigger_out | Output signal of your module that asserts when trigger conditions met. | Output | Required |
Custom Trigger HDL Module Properties
| Property | Description |
|---|---|
| Custom HDL Module Name | Module name of the triggering logic. |
| Configuration Bitstream |
|
| Pipeline |
Specifies the number of pipeline stages in the triggering logic. For example, if after receiving a triggering input the LA needs three clock cycles to assert the trigger output, you can denote a pipeline value of three. |
Trigger Condition Flow Control
- Sequential Triggering—default triggering flow. Sequential triggering allows you to define up to 10 triggering levels that must be satisfied before the acquisition buffer finishes capturing.
- State-Based Triggering—gives the greatest control over your acquisition buffer. Custom-based triggering allows you to organize trigger conditions into states based on a conditional flow that you define.
You can use sequential or state based triggering with either a segmented or a non-segmented buffer.
Sequential Triggering
When the last triggering condition evaluates to TRUE, the Signal Tap Logic Analyzer starts the data acquisition. For segmented buffers, every acquisition segment after the first starts on the last condition that you specified. The Simple Sequential Triggering feature allows you to specify basic triggers, comparison triggers, advanced triggers, or a mix of all three.
Notes to figure:
- The acquisition buffer starts capture when all n triggering levels are satisfied, where n <10.
The Signal Tap Logic Analyzer considers external triggers as level 0, evaluating external triggers before any other trigger condition.
Configuring the Sequential Triggering Flow
- On Trigger Flow Control, select Sequential
-
On Trigger Conditions, select the number
of trigger conditions from the drop-down list.
The Node List pane now displays the same number of trigger condition columns.
-
Configure each trigger condition in the Node List
pane.
You can enable/disable any trigger condition from the column header.
Trigger that Skips Clock Cycles after Hitting Condition
Trigger flow description that skips three clock cycles of samples after hitting condition 1
Code:
State 1: ST1 start_store if ( condition1 ) begin stop_store; goto ST2; end State 2: ST2 if (c1 < 3) increment c1; //skip three clock cycles; c1 initialized to 0 else if (c1 == 3) begin start_store;//start_store necessary to enable writing to finish //acquisition trigger; end
The figures show the data transaction on a continuous capture and the data capture when you apply the Trigger flow description.
Storage Qualification with Post-Fill Count Value Less than m
Real data acquisition of the previous scenario
The combination of using counters, Boolean and relational operators in conjunction with the start_store and stop_store commands can give a clock-cycle level of resolution to controlling the samples that are written into the acquisition buffer.
State-Based Triggering
Custom state-based triggering grants control over triggering condition arrangement. Because the Logic Analyzer only captures samples of interest, custom state-based triggering allows for more efficient use of the space available in the acquisition buffer.
To help you describe the relationship between triggering conditions, the state-based triggering flow provides tooltips within the flow GUI. Additionally, you can use the Signal Tap Trigger Flow Description Language, which is based upon conditional expressions.
Notes to figure:
- You can define up to 20 different states.
- The logic analyzer evaluates external trigger inputs that you define before any conditions in the custom state-based triggering flow.
Each state allows you to define a set of conditional expressions. Conditional expressions are Boolean expressions that depend on a combination of triggering conditions, counters, and status flags. You configure the triggering conditions within the Setup tab. The Signal Tap Logic Analyzer custom-based triggering flow provides counters and status flags.
Within each conditional expression you define a set of actions. Actions include triggering the acquisition buffer to stop capture, a modification to either a counter or status flag, or a state transition.
Trigger actions can apply to either a single segment of a segmented acquisition buffer or to the entire non-segmented acquisition buffer. Each trigger action provides an optional count that specifies the number of samples the buffer captures before the logic analyzer stops acquisition of the current segment. The count argument allows you to control the amount of data the buffer captures before and after a triggering event occurs.
Resource manipulation actions allow you to increment and decrement counters or set and clear status flags. The logic analyzer uses counter and status flag resources as optional inputs in conditional expressions. Counters and status flags are useful for counting the number of occurrences of certain events and for aiding in triggering flow control.
The state-based triggering flow allows you to capture a sequence of events that may not necessarily be contiguous in time. For example, a communication transaction between two devices that includes a hand shaking protocol containing a sequence of acknowledgements.
State-Based Triggering Flow Tab
The State-Based Trigger Flow tab is the control interface for the custom state-based triggering flow.
This tab is only available when you select State-Based on the Trigger Flow Control list. If you specify Trigger Flow Control as Sequential, the State-Based Trigger Flow tab is not visible.
The State-Based Trigger Flow tab contains three panes:
State Diagram Pane
The State Diagram pane provides a graphical overview of your triggering flow. this pane displays the number of available states and the state transitions. To adjust the number of available states, use the menu above the graphical overview.
State Machine Pane
The State Machine pane contains the text entry boxes where you define the triggering flow and actions associated with each state.
- You can define the triggering flow using the Signal Tap Trigger Flow Description Language, a simple language based on “if-else” conditional statements.
- Tooltips appear when you move the mouse over the cursor, to guide command entry into the state boxes.
- The GUI provides a syntax check on your flow description in real-time and highlights any errors in the text flow.
The State Machine description text boxes default to show one text box per state. You can also have the entire flow description shown in a single text field. This option can be useful when copying and pasting a flow description from a template or an external text editor. To toggle between one window per state, or all states in one window, select the appropriate option under State Display mode.
Resources Pane
The Resources pane allows you to declare status flags and counters for your Custom Triggering Flow's conditional expressions.
- You can increment/decrement counters or set/clear status flags within your triggering flow.
- You can specify up to 20 counters and 20 status flags.
- To initialize counter and status flags, right-click the row in the table and select Set Initial Value.
- To specify a counter width, right-click the counter in the table and select Set Width.
- To assist in debugging your trigger flow specification, the logic analyzer dynamically updates counters and flag values after acquisition starts.
The Configurable at runtime settings allow you to control which options can change at runtime without requiring a recompilation.
| Setting | Description |
|---|---|
| Destination of goto action | Allows you to modify the destination of the state transition at runtime. |
| Comparison values | Allows you to modify comparison values in Boolean expressions at runtime. In addition, you can modify the segment_trigger and trigger action post-fill count argument at runtime. |
| Comparison operators | Allows you to modify the operators in Boolean expressions at runtime. |
| Logical operators | Allows you to modify the logical operators in Boolean expressions at runtime. |
Trigger Lock Mode
Trigger lock mode restricts changes to only the configuration settings that you specify as Configurable at runtime. The runtime configurable settings for the Custom Trigger Flow tab are on by default.
You can restrict changes to your Signal Tap configuration to include only the options that do not require a recompilation. Trigger lock-mode allows you to make changes that reflect immediately in the device.
- On the Setup tab, point to Lock Mode and select Allow trigger condition changes only. Figure 52. Allow Trigger Conditions Change Only
- Modify the Trigger Flow conditions.
Signal Tap Trigger Flow Description Language
The Trigger Flow Description Language is based on a list of conditional expressions per state to define a set of actions.
To describe the actions the Logic Analyzer evaluates when a state is reached, you follow this syntax:
Syntax of Trigger Flow Description Language
state <state_label>: <action_list> if (<boolean_expression>) <action_list> [else if (<boolean_expression>) <action_list>] [else <action_list>]
- Non-terminals are delimited by "<>".
- Optional arguments are delimited by "[]"
- The priority for evaluation of conditional statements is from top to bottom.
- The Trigger Flow Description Language allows multiple else if conditions.
<state_label>
The state description header syntax is:
state <state_label>The description of a state ends with the beginning of another state or the end of the whole trigger flow description.
<boolean_expression>
Collection of operators and operands that evaluate into a Boolean result. The operators can be logical or relational. Depending on the operator, the operand can reference a trigger condition, a counter and a register, or a numeric value. To group a set of operands within an expression, you use parentheses.
| Operator | Description | Syntax |
|---|---|---|
| ! | NOT operator | ! expr1 |
| && | AND operator | expr1 && expr2 |
| || | OR operator | expr1 || expr2 |
| Operator | Description | Syntax |
|---|---|---|
| > | Greater than |
<identifier> > <numerical_value> |
| >= | Greater than or Equal to |
<identifier> >= <numerical_value> |
| == | Equals |
<identifier> == <numerical_value> |
| != | Does not equal |
<identifier> != <numerical_value> |
| <= | Less than or equal to |
<identifier> <= <numerical_value> |
| < | Less than |
<identifier> < <numerical_value> |
Notes to table:
|
||
- The <boolean_expression> in an if statement can contain a single event or multiple event conditions.
- When the boolean expression evaluates TRUE, the logic analyzer evaluates all the commands in the <action_list> concurrently.
<action_list>
List of actions that the Logic Analyzer performs within a state once a condition is satisfied.
- Each action must end with a semicolon (;).
- If you specify more than one action within an if or an else if clause, you must delimit the action_list with begin and end tokens.
Possible actions include:
Resource Manipulation Action
The resources the trigger flow description uses can be either counters or status flags.
| Action | Description | Syntax |
|---|---|---|
| increment | Increments a counter resource by 1 |
increment <counter_identifier>; |
| decrement | Decrements a counter resource by 1 |
decrement <counter_identifier>; |
| reset | Resets counter resource to initial value |
reset <counter_identifier>; |
| set | Sets a status flag to 1 |
set <register_flag_identifier>; |
| clear | Sets a status flag to 0 |
clear <register_flag_identifier>; |
Buffer Control Actions
Actions that control the acquisition buffer.
| Action | Description | Syntax |
|---|---|---|
| trigger | Stops the acquisition for the current buffer and ends analysis. This command is required in every flow definition. |
trigger <post-fill_count>; |
| segment_trigger |
Available only in segmented acquisition mode. Ends acquisition of the current segment. After evaluating this command, the Signal Tap Logic Analyzer starts acquiring from the next segment. If all segments are written, the Logic Analyzer overwrites the oldest segment with the latest sample. When a trigger action is evaluated the acquisition stops. |
segment_trigger <post-fill_count>; |
| start_store | Active only in state-based storage qualifier mode. Asserts the write_enable to the Signal Tap acquisition buffer. |
start_store |
| stop_store |
Active only in state-based storage qualifier mode. De-asserts the write_enable signal to the Signal Tap acquisition buffer. |
stop_store |
Both trigger and segment_trigger actions accept an optional post-fill_count argument.
State Transition Action
Specifies the next state in the custom state control flow. The syntax is:
goto <state_label>;State-Based Storage Qualifier Feature
Selecting a state-based storage qualifier type enables the start_store and stop_store actions. When you use these actions in conjunction with the expressions of the State-based trigger flow, you get maximum flexibility to control data written into the acquisition buffer.
The start_store and stop_store commands are similar to the start and stop conditions of the start/stop storage qualifier mode. If you enable storage qualification, Signal Tap Logic Analyzer doesn't write data into the acquisition buffer until the start_store command occurs. However, in the state-based storage qualifier type you must include a trigger command as part of the trigger flow description. This trigger command is necessary to complete the acquisition and display the results on the waveform display.
Storage Qualification Feature for the State-Based Trigger Flow.
This trigger flow description contains three trigger conditions that happen at different times after you click Start Analysis:
State 1: ST1: if ( condition1 ) start_store; else if ( condition2 ) trigger value; else if ( condition3 ) stop_store;
When you apply the trigger flow to the scenario in the figure:
- The Signal Tap Logic Analyzer does not write into the acquisition buffer until Condition 1 occurs (sample a).
- When Condition 2 occurs (sample b), the logic analyzer evaluates the trigger value command, and continues to write into the buffer to finish the acquisition.
- The trigger flow specifies a stop_store command at sample c, which occurs m samples after the trigger point.
- If the data acquisition finishes the post-fill acquisition samples before Condition 3 occurs, the logic analyzer finishes the acquisition and displays the contents of the waveform. In this case, the capture ends if the post-fill count value is < m.
- If the post-fill count value in the Trigger Flow description 1 is > m samples, the buffer pauses acquisition indefinitely, provided there is no recurrence of Condition 1 to trigger the logic analyzer to start capturing data again.
The Signal Tap Logic Analyzer continues to evaluate the stop_store and start_store commands even after evaluating the trigger. If the acquisition paused, click Stop Analysis to manually stop and force the acquisition to trigger. You can use counter values, flags, and the State diagram to help you perform the trigger flow. The counter values, flags, and the current state update in real-time during a data acquisition.
Specify Trigger Position
Signal Tap Logic Analyzer offers three pre-defined ratios of pre-trigger data to post-trigger data:
- Pre—Saves signal activity that occurred after the trigger (12% pre-trigger, 88% post-trigger).
- Center—Saves 50% pre-trigger and 50% post-trigger data.
- Post—Saves signal activity that occurred before the trigger (88% pre-trigger, 12% post-trigger).
These pre-defined ratios apply to both non-segmented buffers and segmented buffers.
Post-fill Count
In a custom state-based triggering flow with the segment_trigger and trigger buffer control actions, you can use the post-fill_count argument to specify a custom trigger position.
- If you do not use the post-fill_count argument, the trigger position for the affected buffer defaults to the trigger position you specified in the Setup tab.
- In the trigger buffer control action (for non-segmented buffers), post-fill_count specifies the number of samples to capture before stopping data acquisition.
- In the segment_trigger buffer control action
(for segmented buffer),
post-fill_count specifies a data segment.
Note: In the case of segment_trigger, acquisition of the current buffer stops immediately if a subsequent triggering action is issued in the next state, regardless of the current buffer's post-fill count. The Logic Analyzer discards the remaining unfilled post-count acquisitions in the current buffer, and displays them as grayed-out samples in the data window.
When the Signal Tap data window displays the captured data, the trigger position appears as the number of post-count samples from the end of the acquisition segment or buffer.
Sample Number of Trigger Position = (N – Post-Fill Count)
In this case, N is the sample depth of either the acquisition segment or non-segmented buffer.
Power-Up Triggers
The typical use of Signal Tap Logic Analyzer is triggering events that occur during normal device operation. You start an analysis manually once the target device is fully powered on and the JTAG connection for the device is available. With Signal Tap Power-Up Trigger feature, the Signal Tap Logic Analyzer captures data immediately after device initialization.
You can add a different Power-Up Trigger to each logic analyzer instance in the Signal Tap Instance Manager pane.
Enabling a Power-Up Trigger
To enable the Power-Up Trigger for a logic analyzer instance:
Power-Up Trigger appears as a child instance below the name of the selected instance. The node list displays the default trigger conditions.
To disable a Power-Up Trigger, right-click the instance and click Disable Power-Up Trigger.
Configuring Power-Up Trigger Conditions
- Any change that you make to a Power-Up Trigger conditions requires that you recompile the Signal Tap Logic Analyzer instance, even if a similar change to the Runtime Trigger conditions does not require a recompilation.
- You can also force trigger conditions with the In-System Sources and Probes in conjunction with the Signal Tap Logic Analyzer. The In-System Sources and Probes feature allows you to drive and sample values on to selected nets over the JTAG chain.
Managing Signal Tap Instances with Run-Time and Power-Up Trigger Conditions
On instances that have two both types of trigger conditions, Power-Up Trigger conditions are color coded light blue, while Run-Time Trigger conditions remain white.
- To switch between the trigger conditions of the Power-Up Trigger and the Run-Time Trigger, double-click the instance name or the Power-Up Trigger name in the Instance Manager.
- To copy trigger conditions from a Run-Time Trigger to a Power-Up Trigger or vice versa, right-click the trigger name in the Instance Manager and click Duplicate Trigger. Alternatively, select the trigger name and click Edit > Duplicate Trigger.
External Triggers
The external trigger input behaves like trigger condition 0, in that the condition must evaluate to TRUE before the logic analyzer evaluates any other trigger conditions.
The Signal Tap Logic Analyzer supplies a signal to trigger external devices or other logic analyzer instances. These features allow you to synchronize external logic analysis equipment with the internal logic analyzer. Power-Up Triggers can use the external triggers feature, but they must use the same source or target signal as their associated Run-Time Trigger.
- The processor debugger allows you to configure the HPS to obey or disregard cross-trigger request from the FPGA, and to issue or not issue cross-trigger requests to the FPGA.
- The processor debugger in combination with the Signal Tap external trigger feature allow you to develop a dynamic combination of cross-trigger behaviors.
- You can implement a system-level debugging solution for an Intel FPGA SoC by using the cross-triggering feature with the ARM Development Studio 5 (DS-5) software.
Compiling the Design
Prevent Changes Requiring Recompilation
Verify Whether You Need to Recompile Your Project
Before starting a debugging session, do not make any changes to the .stp settings that require recompiling the project.
To verify whether a change you made requires recompiling the project, check the Signal Tap status display at the top of the Instance Manager pane. This feature allows you to undo the change, so that you do not need to recompile your project.
Incremental Route with Rapid Recompile
Intel® Quartus® Prime Pro Edition software supports Incremental Route with Rapid Recompile for Intel® Arria® 10, Intel® Cyclone® 10 GX, and Intel® Stratix® 10 device families.
Using the Incremental Route Flow
- Open your design and run Analysis & Elaboration (or a full compilation) to give node visibility in Signal Tap.
- Add Signal Tap to your design.
-
In the Signal Tap
Signal
Configuration pane, specify Manual in the Nodes Allocated field for
Trigger and Data nodes (and Storage Qualifier, if used).
Figure 56. Manually Allocate Nodes
Manual node allocation allows you to control the number of nodes compiled into the design, which is critical for the Incremental Route flow.
When you select Auto allocation, the number of nodes compiled into the design matches the number of nodes in the Setup tab. If you add a node later, you create a mismatch between the amount of nodes the device requires and the amount of compiled nodes, and you must perform a full compilation.
- Specify the number of nodes that you estimate necessary for the debugging process. You can increase the number of nodes later, but this requires more compilation time.
- Add the nodes that you want to tap.
- If you have not fully compiled your project, run a full compilation. Otherwise, start incremental compile using Rapid Recompile.
- Debug and determine additional signals of interest.
-
(Optional) Select Allow incremental route changes only
lock-mode.
Figure 57. Incremental Route Lock-Mode
-
Add additional nodes in the Signal Tap
Setup
tab.
- Do not exceed the number of manually allocated nodes you specified.
- Avoid making changes to non-runtime configurable settings.
-
Click the
Rapid Recompile icon
from the toolbar. Alternatively, click Processing > Start Rapid
Recompile.
Note: The previous steps set up your design for Incremental Route, but the actual Incremental Route process begins when you perform a Rapid Recompile.
Tips to Achieve Maximum Speedup
- Basic AND (which applies to Storage Qualifier as well as trigger input) is the fastest for the Incremental Route flow.
- Basic OR is slower for the Incremental
Route flow, but if you avoid changing the parent-child relationship of nodes within
groups, you can minimize the impact on compile time. You can change the sibling
relationships of nodes.
- Basic OR and advanced triggers require re-synthesis when you change the number/names of tapped nodes.
- Use the Incremental Route lock-mode to avoid inadvertent changes requiring a full compilation.
Timing Preservation with the Signal Tap Logic Analyzer
The Intel® Quartus® Prime Pro Edition software supports timing preservation for post-fit taps in Intel® Arria® 10 designs with the Rapid Recompile feature. Rapid Recompile automatically reuses verified portions of the design during recompilations, rather than reprocessing those portions.
The following techniques can help you maintain timing:
- Avoid adding critical path signals to the .stp file.
- Minimize the number of combinational signals you add to the .stp file, and add registers whenever possible.
- Specify an fMAX constraint for each clock in the design.
Performance and Resource Considerations
When you perform logic analysis of your design, you can see the necessary trade-off between runtime flexibility, timing performance, and resource usage.
The Signal Tap Logic Analyzer allows you to select runtime configurable parameters to balance the need for runtime flexibility, speed, and area.
The default values of the runtime configurable parameters provide maximum flexibility, so you can complete debugging as quickly as possible; however, you can adjust these settings to determine whether there is a more appropriate configuration for your design. Because performance results are design-dependent, try these options in different combinations until you achieve the desired balance between functionality, performance, and utilization.
Signal Tap Logic in Critical Path
If Signal Tap logic is part of your critical path, follow these tips to speed up the performance of the Signal Tap Logic Analyzer:
-
Disable runtime configurable options—Certain resources
are allocated to accommodate for runtime flexibility. If you use either advanced
triggers or State-based triggering flow, disable runtime configurable parameters
for a boost in fMAX of the
Signal Tap logic.
- If you are using State-based triggering flow, try disabling the Goto state destination option and performing a recompilation before disabling the other runtime configurable options. The Goto state destination option has the greatest impact on fMAX, as compared to the other runtime configurable options.
- Minimize the number of signals that have Trigger Enable selected—By default, Signal Tap Logic Analyzer enable the Trigger Enable option for all signals that you add to the .stp file. For signals that you do not plan to use as triggers, turn this option off.
- Turn on Physical Synthesis for register retiming—If many (more than the number of inputs that fit in a LAB) enabled triggering signals fan-in logic to a gate-based triggering condition (basic trigger condition or a logical reduction operator in the advanced trigger tab), turn on Perform register retiming. This can help balance combinational logic across LABs.
Signal Tap Logic Using Critical Resources
- Disable runtime configurable options—Disabling runtime configurability for advanced trigger conditions or runtime configurable options in the State-based triggering flow results in fewer LEs.
- Minimize the number of segments in the acquisition buffer—You can reduce the logic resources that the Signal Tap Logic Analyzer uses if you limit the segments in your sampling buffer
- Disable the Data Enable for signals that you use only for triggering—By default, Signal Tap Logic Analyzer enables data enable options for all signals. Turning off the data enable option for signals you use only as trigger inputs saves on memory resources.
Program the Target Device or Devices
After you add the Signal Tap Logic Analyzer to your project and re-compile, you can configure the FPGA target device.
If you want to debug multiple designs simultaneously, configure the device from the .stp instead of the Intel® Quartus® Prime Programmer. This allows you to open more than one .stp file and program multiple devices.
Ensure Setting Compatibility Between .stp and .sof Files
A .stp file is compatible with a .sof file when the settings for the logic analyzer, such as the size of the capture buffer and the monitoring and triggering signals match the programming settings of the target device. If the files are not compatible you can still program the device, but you cannot run or control the logic analyzer from the Signal Tap Logic Analyzer Editor.
- To ensure programming compatibility, program the device with the .sof file generated in the most recent compilation.
- To check whether a particular .sof is compatible with the current Signal Tap configuration, attach the .sof to the SOF manager.
As a best practice, use the .stp file with a Intel® Quartus® Prime project. The project database contains information about the integrity of the current Signal Tap Logic Analyzer session. Without the project database, there is no way to verify that the current .stp file matches the .sof file in the device. If you have an .stp file that does not match the .sof file, the Signal Tap Logic Analyzer can capture incorrect data.
Running the Signal Tap Logic Analyzer
You can also perform the equivalent of a force trigger instruction that lets you view the captured data currently in the buffer without a trigger event occurring.
The flowchart shows how you operate the Signal Tap Logic Analyzer. indicates where Power-Up and Runtime Trigger events occur and when captured data from these events is available for analysis.
You can also use In-System Sources and Probes in conjunction with the Signal Tap Logic Analyzer to force trigger conditions. The In-System Sources and Probes feature allows you to drive and sample values on to selected signals over the JTAG chain.
Runtime Reconfigurable Options
When you use Runtime Trigger mode, you can change certain settings in the .stp without recompiling your design.
| Runtime Reconfigurable Setting | Description |
|---|---|
| Basic Trigger Conditions and Basic Storage Qualifier Conditions | You can change without recompiling all signals that have the Trigger condition turned on to any basic trigger condition value |
| Comparison Trigger Conditions and Comparison Storage Qualifier Conditions |
All the comparison operands, the comparison numeric values, and the interval bound values are runtime-configurable. You can also switch from Comparison to Basic OR trigger at runtime without recompiling. |
| Advanced Trigger Conditions and Advanced Storage Qualifier Conditions | Many operators include runtime configurable settings. For example, all comparison operators are runtime-configurable. Configurable settings appear with a white background in the block representation. This runtime reconfigurable option is turned on in the Object Properties dialog box. |
| Switching between a storage-qualified and a continuous acquisition | Within any storage-qualified mode, you can switch to continuous capture mode without recompiling the design. To enable this feature, turn on disable storage qualifier. |
| State-based trigger flow parameters | Refer to Runtime Reconfigurable Settings, State-Based Triggering Flow |
Runtime Reconfigurable options can save time during the debugging cycle by allowing you to cover a wider possible scenario of events without the need to recompile the design. You may experience a slight impact to the performance and logic utilization. You can turn off runtime re-configurability for advanced trigger conditions and the state-based trigger flow parameters, boosting performance and decreasing area utilization.
To configure the .stp file to prevent changes that normally require recompilation in the Setup tab, select Allow Trigger Condition changes only above the node list.
In Incremental Route lock mode, Allow incremental route changes only, limits to changes that only require an Incremental Route compilation, and not a full compile.
This example illustrates a potential use case for Runtime Reconfigurable features, by providing a storage qualified enabled State-based trigger flow description, and showing how to modify the size of a capture window at runtime without a recompile. This example gives you equivalent functionality to a segmented buffer with a single trigger condition where the segment sizes are runtime reconfigurable.
state ST1: if ( condition1 && (c1 <= m) )// each "segment" triggers on condition // 1 begin // m = number of total "segments" start_store; increment c1; goto ST2: End else (c1 > m ) // This else condition handles the last // segment. begin start_store Trigger (n-1) end state ST2: if ( c2 >= n) //n = number of samples to capture in each //segment. begin reset c2; stop_store; goto ST1; end else (c2 < n) begin increment c2; goto ST2; end
The next figure shows the segmented buffer that the trigger flow example describes.
During runtime, you can modify the values m and n. Changing the m and n values in the trigger flow description adjust the segment boundaries without recompiling.
You can add states into the trigger flow description and selectively mask out specific states and enable other ones at runtime with status flags.
This example is like the previous example with an additional state inserted. You use this extra state to specify a different trigger condition that does not use the storage qualifier feature. You insert status flags into the conditional statements to control the execution of the trigger flow.
state ST1 : if (condition2 && f1) // additional state added for a non-segmented // acquisition set f1 to enable state begin start_store; trigger end else if (! f1) goto ST2; state ST2: if ( (condition1 && (c1 <= m) && f2) // f2 status flag used to mask state. Set f2 // to enable begin start_store; increment c1; goto ST3: end else (c1 > m ) start_store Trigger (n-1) end state ST3: if ( c2 >= n) begin reset c2; stop_store; goto ST1; end else (c2 < n) begin increment c2; goto ST2; end
Signal Tap Status Messages
The following table describes the text messages that might appear in the Signal Tap Status Indicator in the Instance Manager pane before, during, or after data acquisition. These messages allow you to monitor the state of the logic analyzer and identify the operation that the Logic Analyzer is performing.
| Message | Message Description |
|---|---|
| Not running | The Signal Tap
Logic Analyzer is not running. This message appears when there is no connection to a device, or the device is not configured. |
| (Power-Up Trigger) Waiting for clock (1) | The Signal Tap Logic Analyzer is performing a Runtime or Power-Up Trigger acquisition and is waiting for the clock signal to transition. |
| Acquiring (Power-Up) pre-trigger data (1) | The trigger condition has not been
evaluated yet. If the acquisition mode is non-segmented buffer and the storage qualifier type is continuous, the Signal Tap Logic Analyzer collects a full buffer of data. |
| Trigger In conditions met | Trigger In condition has occurred. The Signal Tap Logic Analyzer is waiting
for the first trigger condition to occur. This message only appears when a Trigger In condition exists. |
| Waiting for (Power-up) trigger (1) | The Signal Tap Logic Analyzer is waiting for the trigger event to occur. |
| Trigger level <x> met | Trigger condition x occurred. The Signal Tap Logic Analyzer is waiting for condition x + 1 to occur. |
| Acquiring (power-up) post-trigger data (1) | The entire trigger event occurred. The Signal Tap Logic Analyzer is acquiring
the post-trigger data. You define the amount of post-trigger data to collect (between 12%, 50%, and 88%) when you select the non-segmented buffer acquisition mode. |
| Offload acquired (Power-Up) data (1) | The JTAG chain is transmitting data to the Intel® Quartus® Prime software. |
| Ready to acquire | The Signal Tap Logic Analyzer is waiting for you to initialize the analyzer. |
|
|
View, Analyze, and Use Captured Data
Capturing Data Using Segmented Buffers
Each acquisition segment acts as a non-segmented buffer, continuously capturing data after activation. When you run analyses with segmented buffers, the Signal Tap Logic Analyzer captures back-to-back data for each acquisition segment within the data buffer. You define the trigger flow, or the type and order in which the trigger conditions evaluate for each buffer, either in the Sequential trigger flow control or in the Custom State-based trigger flow control.
The following figure shows a segmented acquisition buffer with four segments represented as four separate non-segmented buffers.
When the Signal Tap Logic Analyzer finishes an acquisition with a segment and advances to the next segment to start a new acquisition. The data capture that appears in the waveform viewer depends on when a trigger condition occurs. The figure illustrates the data capture method. The Trigger markers—Trigger 1, Trigger 2, Trigger 3 and Trigger 4—refer to the evaluation of the segment_trigger and trigger commands in the Custom State-based trigger flow. In sequential flows, the Trigger markers refer to trigger conditions that you specify within the Setup tab.
If the Segment 1 Buffer is the active segment and Trigger 1 occurs, the Signal Tap Logic Analyzer starts evaluating Trigger 2 immediately. Data Acquisition for Segment 2 buffer starts when either Segment Buffer 1 finishes its post-fill count, or when Trigger 2 evaluates as TRUE, whichever condition occurs first. Thus, trigger conditions associated with the next buffer in the data capture sequence can preempt the post-fill count of the current active buffer. This allows the Signal Tap Logic Analyzer to accurately capture all the trigger conditions that occurred. Unused samples appear as a blank space in the waveform viewer.
Each segment before the last captures only one sample, because the next trigger condition immediately preempts capture of the current buffer. The trigger position for all segments is specified as pre-trigger (10% of the data is before the trigger condition and 90% of the data is after the trigger position). Because the last segment starts immediately with the trigger condition, the segment contains only post-trigger data. The three empty samples in the last segment are left over from the pre-trigger samples that the Signal Tap Logic Analyzer allocated to the buffer.
For the sequential trigger flow, the Trigger Position option applies to every segment in the buffer. A custom state-based trigger flow provides maximum flexibility defining the trigger position. By adjusting the trigger position specific to the debugging requirements, you can help maximize the use of the allocated buffer space.
Differences in Pre-Fill Write Behavior Between Different Acquisition Modes
Different acquisition modes capture different amounts of data immediately after running the Signal Tap Logic Analyzer and before any trigger conditions occur.
Non-Segmented Buffers in Continuous Mode
In configurations with non-segmented buffers running in continuous mode, the buffer must be full with sampled data before evaluating any trigger condition. Only after the buffer is full, the Signal Tap logic analyzer starts retrieving data through the JTAG connection and evaluates the trigger condition.
If you perform a Stop Analysis, Signal Tap prevents the buffer from being dumped during the first acquisition prior to a trigger condition.
Buffers with Storage Qualification
For buffers using a storage qualification mode, the Signal Tap Logic Analyzer immediately evaluates all trigger conditions while writing samples into the acquisition memory. This evaluation is especially important when using any storage qualification on the data set. The logic analyzer may miss a trigger condition if it waits to capture a full buffer's worth of data before evaluating any trigger conditions.
If a trigger activates before the specified amount of pre-trigger data has occurred, the Signal Tap Logic Analyzer begins filling memory with post-trigger data, regardless of the amount of pre-trigger data you specify. For example, if you set the trigger position to 50% and set the logic analyzer to trigger on a processor reset, start the logic analyzer, and then power on the target system, the trigger activates. However, the logic analyzer memory contains only post-trigger data, and not any pre-trigger data, because the trigger event has higher precedence than the capture of pre-trigger data.
Example
The figures for continuous data capture and conditional data capture show the difference between a non-segmented buffer in continuous mode and a non-segmented buffer using a storage qualifier. The configuration of the logic analyzer waveforms is a base trigger condition, sample depth of 64 bits, and Post trigger position.
In the continuous data capture, Trig1 occurs several times in the data buffer before the Signal Tap Logic Analyzer trigger activates. The buffer needs to be full before the logic analyzer evaluates any trigger condition. After the trigger condition occurs, the logic analyzer continues acquisition for eight additional samples (12% of the buffer, as defined by the "post-trigger" position).
Note to figure:
- Conditional capture, storage always enabled, post-fill count.
- Signal Tap Logic Analyzer capture of a recurring pattern using a non-segmented buffer in conditional mode. The configuration of the logic analyzer is a basic trigger condition "Trig1" and sample depth of 64 bits. The Trigger in condition is Don't care, so the buffer captures all samples.
In conditional capture the logic analyzer triggers immediately. As in continuous capture, the logic analyzer completes the acquisition with eight samples, or 12% of 64, the sample capacity of the acquisition buffer.
Creating Mnemonics for Bit Patterns
- Right-click the Setup or Data tab of a Signal Tap instance, and click Mnemonic Table Setup.
- Create a mnemonic table by entering sets of bit patterns and specifying a label to represent each pattern.
- Assign the table to a group of signals by right-clicking the group, clicking Bus Display Format, and selecting the mnemonic table.
- On the Setup tab, you can create basic triggers with meaningful names by right-clicking an entry in the Trigger Conditions column and selecting a label from the table you assigned to the signal group.
Automatic Mnemonics with a Plug-In
As an example, the Nios® II plug-in helps you to monitor signal activity for your design as the code is executed. If you set up the logic analyzer to trigger on a function name in your Nios® II code based on data from an .elf, you can see the function name in the Instance Address signal group at the trigger sample, along with the corresponding disassembled code in the Disassembly signal group, as shown in Figure 13–52. Captured data samples around the trigger are referenced as offset addresses from the trigger function name.
Locating a Node in the Design
You can locate a signal from the node list with the following tools:
- Assignment Editor
- Pin Planner
- Timing Closure Floorplan
- Chip Planner
- Resource Property Editor
- Technology Map Viewer
- RTL Viewer
- Design File
Saving Captured Data
When analysis is set to Auto-run mode, the Logic Analyzer creates a separate entry in the Data Log to store the data captured each time the trigger occurred. This allows you to review the captured data for each trigger event.
The default name for a log is based time stamp when the Logic Analyzer acquired the data. As a best practice, rename the data log with a more meaningful name.
The organization of logs is hierarchical; the Logic Analyzer groups similar logs of captured data in trigger sets.
Exporting Captured Data to Other File Formats
- Comma Separated Values File (.csv)
- Table File (.tbl)
- Value Change Dump File (.vcd)
- Vector Waveform File (.vwf)
- Graphics format files (.jpg, .bmp)
To export the captured data from Signal Tap Logic Analyzer, on the File menu, click Export and specify the File Name, Export Format, and Clock Period.
Creating a Signal Tap List File
Each row of the list file corresponds to one captured sample in the buffer. Columns correspond to the value of each of the captured signals or signal groups for that sample. If you defined a mnemonic table for the captured data, a matching entry from the table replaces the numerical values in the list.
The .stp list file is especially useful when combined with a plug-in that includes instruction code disassembly. You can view the order of instruction code execution during the same time period of the trigger event.
To create a .stp list file in the Intel® Quartus® Prime software, click File > Create/Update > Create Signal Tap List File.
Debugging Partial Reconfiguration Designs with the Signal Tap Logic Analyzer
For examples on debugging PR designs targeting specific devices, refer to AN 841: Signal Tap Tutorial for Intel® Stratix® 10 Partial Reconfiguration Design or AN 845: Signal Tap Tutorial for Intel® Arria® 10 Partial Reconfiguration Design .
Recommendations when Debugging PR Designs
- Include one .stp file per revision.
- Tap pre-synthesis nodes only. In the Node Finder, filter by Signal Tap: pre-synthesis.
- Do not tap nodes in the default personas (the personas you use in the base revision compile). Create a new PR implementation revision that instantiates the default persona, and tap nodes in the new revision.
- Store all the tapped nodes from a PR persona in one .stp file, to enable debugging the entire persona using only one Signal Tap window.
- Do not tap across PR regions, or from a static region to a PR region in the same .stp file.
- Each Signal Tap window opens only one .stp file. Therefore, to debug more than one partition simultaneously, you must open stand-alone Signal Tap windows from the command-line.
Setting Up a Partial Reconfiguration Design for Debug
After configuring all the PR personas in the design, you can continue the PR design flow.
Prepare Static Region for Debug
To debug the static region in your PR design:
- Tap nodes in the static region exclusively.
- Save the .stp file. Use a name that identifies the file with the static region.
- Enable Signal Tap in your project, and include the .stp file in the base revision.
Prepare Base Revision for Debug
In the base revision, for each PR region that you want to debug in the design:
- Instantiate the SLD JTAG Bridge Agent IP in the static region.
- Instantiate the SLD JTAG Bridge Host IP in the PR region of the default persona.
You can use the IP Catalog or Platform Designer to instantiate SLD JTAG Bridge components.
Prepare PR Personas for Debug
For each PR persona that you want to debug:
- Instantiate the SLD JTAG bridge host in the PR persona.
- Tap pre-synthesis nodes in the PR persona only.
- Save in a new .stp file. Select a name that identifies the persona.
- Use the new .stp file in the implementation revision.
Performing Data Acquisition in a PR design
To perform data acquisition:
- Program the base image into your device.
- Partially reconfigure the device into the implementation you want to debug.
-
Open the Signal Tap Logic
Analyzer by clicking Tools >
Signal Tap
Logic Analyzer in the
Intel®
Quartus® Prime
software.
The Logic Analyzer opens and loads the .stp file set in the current active revision.
-
To debug other regions in your design, open new Signal Tap windows by opening the other region's
.stp file from the
Intel®
Quartus® Prime main window.
Alternatively, use the command-line:
quartus_stpw <stp_file_other_region.stp>
- Debug your design with Signal Tap.
Debugging Block-Based Designs with the Signal Tap Logic Analyzer
Verifying a block-based design requires planning to ensure visibility of logic inside partitions and communication with the Signal Tap logic analyzer. The preparation steps depend on whether you are reusing a core partition or a root partition.
For information about designing with reusable blocks, refer to the Intel® Quartus® Prime Pro Edition User Guide: Block-Based Design . For step-by-step block-based design debugging instructions, refer to AN 847: Signal Tap Tutorial with Design Block Reuse for Intel® Arria® 10 FPGA Development Board.
Signal Tap with Core Partition Reuse
To perform verification in a reusable core partition, in the Developer project you must identify the signals of interest, and then make those signals visible to a Signal Tap logic analyzer instance. The Intel® Quartus® Prime software supports two methods of making core partition signals visible for verification:
Partition Boundary Ports
In the Developer project you must identify and create boundary ports for all potential Signal Tap points of the core partition. You create partition boundary ports through QSF assignments or with the Create Partition Boundary Ports assignment in the Assignment Editor. When you assign a bus, the assignment applies to the root name of the debug port, with each bit enumerated.
In the Developer project you must include the partition boundary ports in the black box file. This action allows tapping these ports as pre-synthesis or post-fit nodes in he Consumer project.
In the Consumer project, after synthesizing the reused partition, all valid ports with the Create Partition Boundary Ports become visible. Then, you tap boundary ports to connect to a Signal Tap instance in the top-level partition. You can also tap logic from the top-level partition to this Signal Tap instance. Therefore, the Consumer project requires only one Signal Tap instance to debug both the top-level and the reused core partition.
After compilation you can verify the partition boundary ports in the Create Partition Boundary Ports report. This report appears in the In-System Debugging folder under Synthesis reports.
Developer Flow for Core Partition Reuse with Partition Boundary Ports
-
Create a core partition.
In a synthesized project, define a design partition for the core logic.
- Create partition boundary ports.
-
Compile the design.
If the QSF for the design contains the EXPORT_PARTITION_SNAPSHOT_SYNTHESIZED or the EXPORT_PARTITION_SNAPSHOT_FINAL assignments, the Compiler automatically generates a.qdb in the output_files directory.
- Optionally, check the compilation report to find a list of partition boundary ports.
-
If the compilation does not generate the .qdb file
automatically, click Project > Export Design Partition.
By default, the .qdb file includes any Signal Tap HDL instances associated to the partition, unless you remove them, recompile the core, and re-export.
-
Create the black box file.
The black box file contains only port and module or entity definitions, without any logic.
-
Copy files to the Consumer project.
Include the .qdb file, black box file, and any other data you require.
Optionally, you can verify signals in the root and core partitions in the Developer project with the Signal Tap Logic Analyzer.
For detailed instructions on each step, refer to Core Partition Reuse Debug—Developer in AN 847: Signal Tap Tutorial with Design Block Reuse for Intel® Arria® 10 FPGA Development Board .
Consumer Flow for Core Partition Reuse with Partition Boundary Ports
- Add the black-box file generated in the Developer project and run synthesis.
- Create a Signal Tap file by instantiating a Signal Tap HDL instance in the top level partition or with the Signal Tap GUI.
- From the reused core partition, connect the partition boundary ports to the HDL instance or add post-synthesis or post-fit Signal Tap nodes to the GUI.
- Create a partition and assign .qdb file.
- Compile the design.
- Program device.
- Perform data acquisition.
For detailed instructions on each step, refer to Core Partition Reuse Debug—Consumer in AN 847: Signal Tap Tutorial with Design Block Reuse for Intel® Arria® 10 FPGA Development Board .
Signal Tap HDL Instance
In the Developer project, you create a Signal Tap HDL instance in the reusable core partition and connect the signals of interest to that instance. The Compiler ensures top level visibility of Signal Tap instances inside partitions. Since the root partition and the core partition have separated HDL instances, the Signal Tap files are also separate.
The Consumer must generate one Signal Tap file for each HDL instance present in the design.
Developer Flow for Core Partition Reuse with Signal Tap HDL Instances
-
Create a core partition.
In a synthesized project, define a design partition for the core logic.
- Add a Signal Tap HDL instance to the core partition.
-
Add nodes of interest in the core partition to the Signal Tap HDL instance, and save in a .stp file.
Note: Do not tap signals from the root level partition in the instance located in the core.
-
Compile the design.
If the QSF for the design contains the EXPORT_PARTITION_SNAPSHOT_SYNTHESIZED or the EXPORT_PARTITION_SNAPSHOT_FINAL assignments, the Compiler automatically generates a.qdb in the output_files directory.
-
If the compilation does not generate the .qdb file
automatically, click Project > Export Design Partition.
By default, the .qdb file includes any Signal Tap HDL instances associated to the partition, unless you remove them, recompile the core, and re-export.
-
Create the black box file.
The black box file contains only port and module or entity definitions, without any logic.
-
Copy files to the Consumer project.
Include the .qdb file, black box file, and any other data you require.
Consumer Flow for Core Partition Reuse with Signal Tap HDL Instances
- Add the black-box file generated in the Developer project and run synthesis.
- Create a partition and assign .qdb file.
- Create a Signal Tap file for the top-level partition by either instantiating a Signal Tap HDL instance in the top-level partition or with the Signal Tap GUI.
- Compile the design.
-
Generate a Signal Tap file for the Reused Core Partition
using the quartus_stp command.
- Program device.
- Perform hardware verification of top-level partition with the Signal Tap instance defined in Step 3.
-
Perform hardware verification of the Reused Core Partition with the Signal Tap instance defined in Step 5.
Signal Tap with Root Partition Reuse
The debug bridge requires instantiation of the SLD JTAG Bridge Agent Intel® FPGA IP and SLD JTAG Bridge Host Intel® FPGA IP pair for each reserved core boundary in the design. You instantiate the SLD JTAG Bridge Agent IP in the root partition, and the SLD JTAG Bridge Host IP in the core partition.
For details about the debug bridge, refer to the SLD JTAG Bridge in the System Debugging Tools Overview chapter.
Developer Flow for Root Partition Reuse
- Create a reserved core partition and define a Logic Lock region.
-
Generate and instantiate SLD JTAG Bridge Agent in the root partition.
The combination of agent and host allows debugging the reserved core partition in Consumer projects.
-
Generate and instantiate the SLD JTAG Bridge Host in the reserved core
partition.
-
Add Signal Tap to the root partition and tap signals of
interest.
This action allows debugging the root partition in the Developer and Consumer projects.
-
Compile, export the root partition at synthesized or final snapshot, and copy files to the Consumer project.
The files that you must copy to the Consumer project depend on the design's target device:
- In designs targeting the Intel® Arria® 10 device family, copy .qdb and .sdc files.
- In designs targeting the Intel® Stratix® 10 device family copy the .qdb file.
In designs with multiple child partitions, you must provide the hierarchy path and the associated index of the JTAG Bridge Instance Agents in the design to the Consumer.
Optionally, you can verify the design in the Developer project.
For detailed instructions on each step, refer to Root Partition Reuse Debug—Developer in AN 847: Signal Tap Tutorial with Design Block Reuse for Intel® Arria® 10 FPGA Development Board .
Consumer Flow for Root Partition Reuse
To perform Signal Tap verification in a design with a reused root partition:
- Add files to Customer project.
- Generate and instantiate the SLD JTAG Bridge Host in the core partition.
- Synthesize.
-
Create a Signal Tap instance in the core partition with HDL or the Signal Tap GUI, and add pre-synthesis signals.
Note: You can only tap signals in the core partition.
- Compile the design.
-
Generate a Signal Tap file for the Reused Root Partition with the quartus_stp command.
- Program device.
- Perform hardware verification of Reserved Core Partition with Signal Tap instance defined in Step 3.
- Perform hardware verification of Reused Root Partition withSignal Tap instance defined in Step 4.
For detailed instructions on each step, refer to Root Partition Reuse Debug—Consumer in AN 847: Signal Tap Tutorial with Design Block Reuse for Intel® Arria® 10 FPGA Development Board .
Debugging Imported Snapshots
Adding new signals to a Signal Tap instance in a reused partition requires allowing the Fitter to connect and route these signals. This is only possible when:
- The reused partition contains the Synthesis snapshot—Reused partitions that contain the placed or final snapshot do not allow adding more signals to the Signal Tap instance, because you cannot create additional boundary ports.
- The signal that you want to tap is post-fit—Adding pre-synthesis Signal Tap signals is not possible, because that requires resynthesis of the partition.
Debugging the Synthesis Snapshot with Post-Fit Nodes
To tap the post-fit nodes in the Consumer project:
- Compile the partition through the Fitter stage in the Consumer project.
-
Add Signal Tap to the Consumer design and add the post-fit Signal Tap nodes.
-
Recompile the design from the Place stage by clicking Processing > Start > Start Fitter (Place).
The Fitter attaches the Signal Tap nodes to the existing synthesized nodes.
Other Features
Creating Signal Tap File from Design Instances
Creating a .stp File from a Design Instance
- Open or create an Intel® Quartus® Prime project that includes one or more HDL instances of the Signal Tap logic analyzer.
- Click Processing > Start > Start Analysis & Synthesis.
- Click File > Create/Update > Create Signal Tap File from Design Instance(s).
-
Specify a location for the .stp file that generates, and click
Save.
Figure 68. Create Signal Tap File from Design Instances Dialog Box
Note: If your project contains partial reconfiguration partitions, the Create Signal Tap File from Design Instance(s) dialog box displays a tree view of the PR partitions in the project. Select a partition from the view, and click Create Signal Tap file. The resultant .stp file that generates contains all HDL instances in the corresponding PR partition. The resultant .stp file does not include the instances in any nested partial reconfiguration partition.Figure 69. Selecting Partition for .stp File Generation
After successful .stp file creation, the Signal Tap Logic Analyzer appears. All the fields are read-only, except runtime-configurable trigger conditions.
Using the Signal Tap MATLAB MEX Function to Capture Data
To set up the Intel® Quartus® Prime software and the MATLAB* environment to perform Signal Tap acquisitions:
- In the Intel® Quartus® Prime software, create an .stp file.
-
In the node list in the Data tab of the Signal Tap
Logic Analyzer Editor, organize the signals and groups of signals into the order
in which you want them to appear in the MATLAB* matrix.
Each column of the imported matrix represents a single Signal Tap acquisition sample, while each row represents a signal or group of signals in the order you defined in the Data tab.
Note: Signal groups that the Signal Tap Logic Analyzer acquires and transfers into the MATLAB* MEX function have a width limit of 32 signals. To use the MATLAB* MEX function with a bus or signal group that contains more than 32 signals, split the group into smaller groups that do not exceed the limit. - Save the .stp file and compile your design. Program your device and run the Signal Tap Logic Analyzer to ensure your trigger conditions and signal acquisition work correctly.
-
In the MATLAB* environment, add the
Intel®
Quartus® Prime binary directory to your path with the following command:
addpath <Quartus install directory>\win
You can view the help file for the MEX function by entering the following command in MATLAB* without any operators:
alt_signaltap_run
-
Use the MATLAB* MEX function to open the JTAG connection to the device and run
the Signal Tap Logic Analyzer to acquire
data. When you finish acquiring data, close the JTAG connection.
To open the JTAG connection and begin acquiring captured data directly into a MATLAB* matrix called stp, use the following command:
stp = alt_signaltap_run \ ('<stp filename>'[,('signed'|'unsigned')[,'<instance names>'[, \ '<signalset name>'[,'<trigger name>']]]]);When capturing data, you must assign a filename, for example, <stp filename> as a requirement of the MATLAB* MEX function. Other MATLAB* MEX function options are described in the table:
Table 15. Signal Tap MATLAB* MEX Function Options Option Usage Description signed unsigned
'signed' 'unsigned'
The signed option turns signal group data into 32-bit two’s-complement signed integers. The MSB of the group as defined in the Signal Tap Data tab is the sign bit. The unsigned option keeps the data as an unsigned integer. The default is signed. <instance name> 'auto_signaltap_0' Specify a Signal Tap instance if more than one instance is defined. The default is the first instance in the .stp, auto_signaltap_0. <signal set name> <trigger name>
'my_signalset' 'my_trigger'
Specify the signal set and trigger from the Signal Tap data log if multiple configurations are present in the .stp. The default is the active signal set and trigger in the file. During data acquisition, you can enable or disable verbose mode to see the status of the logic analyzer. To enable or disable verbose mode, use the following commands:
alt_signaltap_run('VERBOSE_ON');-alt_signaltap_run('VERBOSE_OFF');When you finish acquiring data, close the JTAG connection with the following command:
alt_signaltap_run('END_CONNECTION');For more information about the use of MATLAB* MEX functions in MATLAB*, refer to the MATLAB* Help.
Using Signal Tap in a Lab Environment
You can install a stand-alone version of the Signal Tap Logic Analyzer. This version is particularly useful in a lab environment in which you do not have a workstation that meets the requirements for a complete Intel® Quartus® Prime installation, or if you do not have a license for a full installation of the Intel® Quartus® Prime software. The standalone version of the Signal Tap Logic Analyzer is included with and requires the Intel® Quartus® Prime stand-alone Programmer which is available from the Downloads page of the Altera website.
Remote Debugging Using the Signal Tap Logic Analyzer
Debugging Using a Local PC and an SoC
Debugging Using a Local PC and a Remote PC
To perform a remote debugging session, you must have the following setup:
- The Intel® Quartus® Prime software installed on the local PC
- Stand-alone Signal Tap Logic Analyzer or the full version of the Intel® Quartus® Prime software installed on the remote PC
- Programming hardware connected to the device on the PCB at the remote location
- TCP/IP protocol connection
Equipment Setup
- On the PC in the remote location, install the standalone version of the Signal Tap Logic Analyzer, included in the Intel® Quartus® Prime stand-alone Programmer, or the full version of the Intel® Quartus® Prime software.
- Connect the remote computer to Intel programming hardware, such as the or Intel® FPGA Download Cable.
- On the local PC, install the full version of the Intel® Quartus® Prime software.
- Connect the local PC to the remote PC across a LAN with the TCP/IP protocol.
Using the Signal Tap Logic Analyzer in Devices with Configuration Bitstream Security
Intel FPGA recommends that you use an unencrypted bitstream during the prototype and debugging phases of the design. Using an unencrypted bitstream allows you to generate new programming files and reconfigure the device over the JTAG connection during the debugging cycle.
If you must use the Signal Tap Logic Analyzer with an encrypted bitstream, first configure the device with an encrypted configuration file using Passive Serial (PS), Fast Passive Parallel (FPP), or Active Serial (AS) configuration modes. The design must contain at least one instance of the Signal Tap Logic Analyzer. After the FPGA is configured with a Signal Tap Logic Analyzer instance in the design, when you open the Signal Tap Logic Analyzer in the Intel® Quartus® Prime software, you then scan the chain and are ready to acquire data with the JTAG connection.
Monitor FPGA Resources Used by the Signal Tap Logic Analyzer
You can see resource usage (by instance and total) in the columns of the Instance Manager pane of the Signal Tap Logic Analyzer Editor. Use this feature when you know that your design is running low on resources.
The logic element value that the resource usage estimator reports may vary by as much as 10% from the actual resource usage.
Design Example: Using Signal Tap Logic Analyzers
Custom Triggering Flow Application Examples
Design Example 1: Specifying a Custom Trigger Position
Actions to the acquisition buffer can accept an optional post-count argument. This post-count argument enables you to define a custom triggering position for each segment in the acquisition buffer.
The example shows how to apply a trigger position to all segments in the acquisition buffer. The example describes a triggering flow for an acquisition buffer split into four segments. If each acquisition segment is 64 samples in depth, the trigger position for each buffer is at sample #34. The acquisition stops after all segments are filled once.
if (c1 == 3 && condition1) trigger 30; else if ( condition1 ) begin segment_trigger 30; increment c1; end
Each segment acts as a non-segmented buffer that continuously updates the memory contents with the signal values.
The Data tab displays the last acquisition before stopping the buffer as the last sample number in the affected segment. The trigger position in the affected segment is then defined by N – post count fill, where N is the number of samples per segment.
Design Example 2: Trigger When triggercond1 Occurs Ten Times between triggercond2 and triggercond3
The custom trigger flow description is often useful to count a sequence of events before triggering the acquisition buffer. The example shows such a sample flow. This example uses three basic triggering conditions configured in the Signal Tap Setup tab.
This example triggers the acquisition buffer when condition1 occurs after condition3 and occurs ten times prior to condition3. If condition3 occurs prior to ten repetitions of condition1, the state machine transitions to a permanent wait state.
state ST1: if ( condition2 ) begin reset c1; goto ST2; end State ST2 : if ( condition1 ) increment c1; else if (condition3 && c1 < 10) goto ST3; else if ( condition3 && c1 >= 10) trigger; ST3: goto ST3;
Signal Tap Scripting Support
Signal Tap Command-Line Options
You can use the following options with the quartus_stp executable:
| Option | Usage | Description |
|---|---|---|
| --stp_file <stp_filename> | Required | Specifies the name of the .stp file. |
| --enable | Optional |
Sets the ENABLE_SIGNALTAP option to ON in the project's .qsf file, so the Signal Tap Logic Analyzer runs in the next compilation. If you omit this option, the Intel® Quartus® Prime software uses the current value of ENABLE_SIGNALTAP in the .qsf file. Writes subsequent Signal Tap assignments to the .stp that appears in the .qsf file. If the .qsf file does not specify a .stp file, you must use the --stp_file option. |
| --disable | Optional |
Sets the ENABLE_SIGNALTAP option to OFF in the project's .qsf file, so the Signal Tap Logic Analyzer does not in the next compilation. If you omit the --disable option, the Intel® Quartus® Prime software uses the current value of ENABLE_SIGNALTAP in the .qsf file. |
Data Capture from the Command Line
To execute a Tcl script containing Signal Tap Logic Analyzer Tcl commands, use:
quartus_stp -t <Tcl file>
Continuously Capturing Data
This excerpt shows commands you can use to continuously capture data. Once the capture meets trigger condition e, the Signal Tap Logic Analyzer starts the capture and stores the data in the data log.
# Open Signal Tap session open_session -name stp1.stp ### Start acquisition of instances auto_signaltap_0 and ### auto_signaltap_1 at the same time # Calling run_multiple_end starts all instances run_multiple_start run -instance auto_signaltap_0 -signal_set signal_set_1 -trigger \ trigger_1 -data_log log_1 -timeout 5 run -instance auto_signaltap_1 -signal_set signal_set_1 -trigger \ trigger_1 -data_log log_1 -timeout 5 run_multiple_end # Close Signal Tap session close_session
Design Debugging with the Signal Tap Logic Analyzer Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.09.24 | 18.1.0 |
|
| 2018.08.07 | 18.0.0 | Reverted document title to Debug Tools User Guide: Intel Quartus Prime Pro Edition. |
| 2018.07.30 | 18.0.0 | Updated Partial Reconfiguration sections to reflect changes in the PR flow. |
| 2018.05.07 | 18.0.0 |
|
| 2017.11.06 | 17.1.0 |
|
| 2017.05.08 | 17.0.0 |
|
| 2016.10.31 | 16.1.0 |
|
| 2016.05.03 | 16.0.0 |
|
| 2015.11.02 | 15.1.0 |
|
| 2015.05.04 | 15.0.0 | Added content for Floating Point Display Format in table: SignalTap II Logic Analyzer Features and Benefits. |
| 2014.12.15 | 14.1.0 | Updated location of Fitter Settings, Analysis & Synthesis Settings, and Physical Synthesis Optimizations to Compiler Settings. |
| December 2014 | 14.1.0 |
|
| June 2014 | 14.0.0 |
|
| November 2013 | 13.1.0 | Removed HardCopy material. Added section on using cross-triggering with DS-5 tool and added link to white paper 01198. Added section on remote debugging an Altera SoC and added link to application note 693. Updated support for MEX function. |
| May 2013 | 13.0.0 |
|
| June 2012 | 12.0.0 | Updated Figure 13–5 on page 13–16 and “Adding Signals to the SignalTap II File” on page 13–10. |
| November 2011 | 11.0.1 | Template update. Minor editorial updates. |
| May 2011 | 11.0.0 | Updated the requirement for the standalone SignalTap II software. |
| December 2010 | 10.0.1 | Changed to new document template. |
| July 2010 | 10.0.0 |
|
| November 2009 | 9.1.0 | No change to content. |
| March 2009 | 9.0.0 |
|
| November 2008 | 8.1.0 | Updated for the Quartus II software version 8.1 release:
|
| May 2008 | 8.0.0 | Updated for the Quartus II software version 8.0:
|
Quick Design Verification with Signal Probe
The Signal Probe feature in the Intel® Quartus® Prime Pro Edition software allows you to route an internal node to a top-level I/O. When you start with a fully routed design, you can select and route debugging signals to I/O pins that you previously reserve or are currently unused.
During Rapid Recompile, the Compiler reuses previous synthesis and fitting results whenever possible, and does not reprocess unchanged design blocks. When you make small design changes, using Rapid Recompile reduces timing variations and the total recompilation time.
The Intel® Quartus® Prime Pro Edition Signal Probe feature supports the Intel® Arria® 10 and Intel® Stratix® 10 device families.
Debug Flow with Signal Probe and Rapid Recompile
To add verification capabilities to a design using Signal Probe routing feature:
Reserve Signal Probe Pins
You create and reserve a pin for Signal Probe with a Tcl command:
set_global_assignment –name CREATE_SIGNALPROBE_PIN <pin_name>
- pin_name
- Specifies the name of the Signal Probe pin.
Optionally, you can assign locations for the Signal Probe pins. If you do not assign a location, the Fitter places the pins automatically.
Tcl Command to Reserve Signal Probe Pins
set_global_assignment -name CREATE_SIGNALPROBE_PIN wizard set_global_assignment -name CREATE_SIGNALPROBE_PIN probey
Compile the Design
Perform a full compilation of the design. You can use Intel® Quartus® Prime software, a command line executable, or a Tcl command.
Tcl Command to Compile the Design
execute_flow -compile
At this point in the design flow you determine the nodes you want to debug.
Assign Nodes to Signal Probe Pins
You can assign any node in the post-compilation netlist to a Signal Probe pin. In Intel® Quartus® Prime software, click View > Node Finder, and filter by Signal Tap: post-fitting to view the nodes you can route.
You specify the node that connects to a Signal Probe pin with a Tcl command:
set_instance_assignment –name CONNECT_SIGNALPROBE_PIN <pin_name> –to <node_name>
- pin_name
- Specifies the name of the Signal Probe pin that connects to the node.
- node_name
- Specifies the full hierarchy path of the node you want to route.
Tcl Commands to Connect Pins to Internal Nodes
# Make assignments to connect nodes of interest to pins set_instance_assignment -name CONNECT_SIGNALPROBE_PIN wizard -to sprobe_me1 set_instance_assignment -name CONNECT_SIGNALPROBE_PIN probey -to sprobe_me2
Recompile the Design
After assigning nodes to the Signal Probe pins, run Rapid Recompile. Rapid Recompile preserves timing and reduces compilation time by reusing previous results whenever possible.
You can run Rapid Recompile from the Intel® Quartus® Prime software, a command line executable, or a Tcl script.
Tcl Command to Recompile the Design
# Run the fitter with --recompile to preserve timing
# and quickly connect the Signal Probe pins
execute_module -tool fit -args {--recompile}
After recompilation, you are ready to program the device and debug the design.
Check Connection Table in Fitter Report
When you compile a design with Signal Probe pins, Intel® Quartus® Prime software generates a connection report table. To see this report, click Processing > Compilation Report, open the Fitter > In-System Debugging folder, and click Connections to Signal Probe pins.
The Status column informs whether or not the routing attempt from the nodes to the Signal Probe pins succeeded.
| Status | Description |
|---|---|
| Connected | Routing succeeded. |
| Unconnected | Routing did not succeed. Possible reasons are:
|
Connections to Signal Probe Pins in the Compilation Report
Connections to Signal Probe Pins in top.fit.rpt
+--------------------------------------------------------------------------------+ ; Connections to Signal Probe pins ; +--------------------------------------------------------------------------------+ Signal Probe Pin Name : probey Status : Connected Attempted Connection : sprobe_me2 Actual Connection : sprobe_me2 Details : Signal Probe Pin Name : wizard Status : Connected Attempted Connection : sprobe_me1 Actual Connection : sprobe_me1 Details : +--------------------------------------------------------------------------------+
Quick Design Verification with Signal Probe Revision History
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.05.07 | 18.0.0 | Initial release for Intel® Quartus® Prime Pro Edition software. |
In-System Debugging Using External Logic Analyzers
About the Intel Quartus Prime Logic Analyzer Interface
The LAI connects a large set of internal device signals to a small number of output pins. You can connect these output pins to an external logic analyzer for debugging purposes. In the Intel® Quartus® Prime LAI, the internal signals are grouped together, distributed to a user-configurable multiplexer, and then output to available I/O pins on your Intel-supported device. Instead of having a one-to-one relationship between internal signals and output pins, the Intel® Quartus® Prime LAI enables you to map many internal signals to a smaller number of output pins. The exact number of internal signals that you can map to an output pin varies based on the multiplexer settings in the Intel® Quartus® Prime LAI.
The LAI does not support Hard Processor System (HPS) I/Os.
Choosing a Logic Analyzer
- The Signal Tap Logic Analyzer
- An external logic analyzer, which connects to internal signals in your Intel-supported device by using the Intel® Quartus® Prime LAI
| Feature | Description | Recommended Logic Analyzer |
|---|---|---|
| Sample Depth | You have access to a wider sample depth with an external logic analyzer. In the Signal Tap Logic Analyzer, the maximum sample depth is set to 128 Kb, which is a device constraint. However, with an external logic analyzer, there are no device constraints, providing you a wider sample depth. | LAI |
| Debugging Timing Issues | Using an external logic analyzer provides you with access to a “timing” mode, which enables you to debug combined streams of data. | LAI |
| Performance | You frequently have limited routing resources available to place and route when you use the Signal Tap Logic Analyzer with your design. An external logic analyzer adds minimal logic, which removes resource limits on place-and-route. | LAI |
| Triggering Capability | The Signal Tap Logic Analyzer offers triggering capabilities that are comparable to external logic analyzers. | LAI or Signal Tap |
| Use of Output Pins | Using the Signal Tap Logic Analyzer, no additional output pins are required. Using an external logic analyzer requires the use of additional output pins. | Signal Tap |
| Acquisition Speed | With the Signal Tap Logic Analyzer, you can acquire data at speeds of over 200 MHz. You can achieve the same acquisition speeds with an external logic analyzer; however, you must consider signal integrity issues. | Signal Tap |
Required Components
- Intel® Quartus® Prime software version 15.1 or later
- The device under test
- An external logic analyzer
- An Intel FPGA communications cable
- A cable to connect the Intel-supported device to the external logic analyzer
Notes to figure:
- Configuration and control of the LAI using a computer loaded with the Intel® Quartus® Prime software via the JTAG port.
- Configuration and control of the LAI using a third-party vendor logic analyzer via the JTAG port. Support varies by vendor.
Flow for Using the LAI
Notes to figure:
- Configuration and control of the LAI using a computer loaded with the Intel® Quartus® Prime software via the JTAG port.
- Configuration and control of the LAI using a third-party vendor logic analyzer via the JTAG port. Support varies by vendor.
Defining Parameters for the Logic Analyzer Interface
-
Click Tools > Logic Analyzer Interface Editor.
Figure 74. Logic Analyzer Interface Editor
- In the Setup View list, select Core Parameters.
- Specify the parameters of the LAI instance.
Mapping the LAI File Pins to Available I/O Pins
To assign pin locations for the LAI:
-
Select Pins in the Setup View list
Figure 75. Mapping LAI file Pins
- Double-click the Location column next to the reserved pins in the Name column, and select a pin from the list.
- Right-click the selected pin and locate in the Pin Planner.
Mapping Internal Signals to the LAI Banks
- Click the Setup View arrow and select Bank n or All Banks.
- To view all the bank connections, click Setup View and then select All Banks.
- Before making bank assignments, right click the Node list and select Add Nodes to open the Node Finder.
- Find the signals that you want to acquire.
-
Drag the signals from the Node
Finder dialog box into the bank Setup
View.
When adding signals, use Signal Tap: pre-synthesis for non-incrementally routed instances and Signal Tap: post-fitting for incrementally routed instancesAs you continue to make assignments in the bank Setup View, the schematic of the LAI in the Logical View pane begins to reflect the changes.
- Continue making assignments for each bank in the Setup View until you add all the internal signals that you want to acquire.
Compiling Your Intel Quartus Prime Project
To verify the Logic Analyzer Interface is properly compiled with your project, open the Compilation Report tab and select Resource Utilization by Entity, nested under Partition "auto_fab_0". The LAI IP instance appears in the Compilation Hierarchy Node column, nested under the internal module of auto_fab_0
Programming Your Intel-Supported Device Using the LAI
You can use the LAI with multiple devices in your JTAG chain. Your JTAG chain can also consist of devices that do not support the LAI or non-Intel, JTAG-compliant devices. To use the LAI in more than one Intel-supported device, create an .lai file and configure an .lai file for each Intel-supported device that you want to analyze.
Controlling the Active Bank During Runtime
When you have programmed your Intel-supported device, you can control which bank you map to the reserved .lai file output pins. To control which bank you map, in the schematic in the Logical View, right-click the bank and click Connect Bank.
Acquiring Data on Your Logic Analyzer
LAI Core Parameters
The table lists the LAI file core parameters:
| Parameter | Range Value | Description |
|---|---|---|
| Pin Count | 1 - 255 | Number of pins dedicated to the LAI. You must connect the
pins to a debug header on the board. Within the device, The Compiler maps each pin to a user-configurable number of internal signals. |
| Bank Count | 1 - 255 | Number of internal signals that you want to map to each
pin. For example, a Bank Count of 8 implies that you connect eight internal signals to each pin. |
| Output/Capture Mode | Specifies the acquisition mode. The
two options are:
|
|
| Clock | Specifies the sample clock. You can use any signal in the
design as a sample clock. However, for best results, use a clock
with an operating frequency fast enough to sample the data that you
want to acquire. Note: The Clock parameter is available only when
Output/Capture Mode
is set to Registered
State.
|
|
| Power-Up State | Specifies the power-up state of the pins designated for use with the LAI. You can select tri-stated for all pins, or selecting a particular bank that you enable. |
In-System Debugging Using External Logic Analyzers Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.05.07 | 18.0.0 |
|
| 2017.05.08 | 17.0.0 |
|
| 2016.10.31 | 16.1.0 |
|
| 2015.11.02 | 15.1.0 | Changed instances of Quartus II to Intel® Quartus® Prime . |
| June 2014 | 14.0.0 |
|
| June 2012 | 12.0.0 | Removed survey link |
| November 2011 | 10.1.1 | Changed to new document template |
| December 2010 | 10.1.0 |
|
| August 2010 | 10.0.1 | Corrected links |
| July 2010 | 10.0.0 |
|
| November 2009 | 9.1.0 |
|
| March 2009 | 9.0.0 |
|
| November 2008 | 8.1.0 | Changed to 8-1/2 x 11 page size. No change to content |
| May 2008 | 8.0.0 |
|
In-System Modification of Memory and Constants
The ability to read data from memories and constants can help you identify the source of problems, and the write capability allows you to bypass functional issues by writing expected data.
When you use the In-System Memory Content Editor in conjunction with the Signal Tap Logic Analyzer, you can view and debug your design in the hardware lab.
IP Cores Supporting ISMCE
In Intel® Arria® 10 and Intel® Stratix® 10 device families, you can use the ISMCE in RAM: 1 PORT and the ROM: 1 PORT IP Cores.
Debug Flow with the In-System Memory Content Editor
- Identify the memories and constants that you want to access at runtime.
- Specify in the design the memory or constant that must be run-time modifiable.
- Perform a full compilation.
- Program the device.
-
Launch the
In-System Memory Content Editor.
The In-System Memory Content Editor retrieves all instances of run-time configurable memories and constants by scanning the JTAG chain and sending a query to the device selected in the JTAG Chain Configuration pane.
-
Modify the
values of the memories or constants, and check the results.
For example, if a parity bit in a memory is incorrect, you can use the In-System Memory Content Editor to write the correct parity bit values into the RAM, allowing the system to continue functioning. To check the error handling functionality of a design, you can intentionally write incorrect parity bit values into the RAM.
Enabling Runtime Modification of Instances in the Design
To make an instance of a memory or constant runtime-modifiable:
- Open the instance with the Parameter Editor.
-
In the Parameter Editor, turn on Allow In-System Memory Content Editor to capture and update content
independently of the system clock.
- Recompile the design.
- Converting single-port RAMs to dual-port RAMs
- Adding logic to avoid memory write collision and maintain read write coherency in device families that do not support true dual-port RAMs, such as Intel® Stratix® 10.
Programming the Device with the In-System Memory Content Editor
Loading Memory Instances to the ISMCE
- On the Intel® Quartus® Prime software, click Tools > In-System Memory Content Editor.
-
In the JTAG Chain Configuration pane, click
Scan Chain.
The In-System Memory Content Editor sends a query to the device in the JTAG Chain Configuration pane and retrieves all instances of run-time configurable memories and constants.The Instance Manager pane lists all the instances of constants and memories that are runtime-modifiable. The Hex Editor pane displays the contents of each memory or constant instance. The memory contents in the Hex Editor pane appear as red question marks until you read the device.Figure 78. Hex Editor After Scanning JTAG Chain
-
Click an instance from the Instance
manager, and then click
to load the contents of that
instance.
The Hex Editor now displays the contents of the instance.
Monitoring Locations in Memory
-
Click
to synchronize the Hex Editor to the current instance's
content.
The Hex Editor displays in red content that changed with respect to the last device synchronization.Figure 79. Hex Editor after Manually Editing Content
-
If you want a live output of the memory contents instead of manually
synchronizing, click
.
Continuous read is analogous to using Signal Tap in continuous acquisition, with the memory values appearing as words in the Hex Editor instead of toggling waveforms.
Editing Memory Contents with the Hex Editor Pane
Black content on the Hex Editor pane means that the value read is the same as last synchronization.
-
Type content on the pane.
The Hex Editor displays in blue changed content that has not been synchronized to the device.Figure 80. Hex Editor after Manually Editing Content
-
Click
to
synchronize
the content to the device.
Importing and Exporting Memory Files
You can import or export files in hex or mif formats.
-
To import a file, click Edit > Import Data from File..., and then select the file to import.
If the file is not compatible, unexpected data appears in the Hex Editor.
- To export memory contents to a file, click Edit > Export Data to File..., and then specify the name.
Access Two or More Devices
If you have more than one device with in-system configurable memories or constants in a JTAG chain, you can launch multiple In-System Memory Content Editors within the Intel® Quartus® Prime software to access the memories and constants in each of the devices. Each window of the In-System Memory Content Editor can access the memories and constants of a single device.
Scripting Support
You can enable memory and constant instances to be runtime modifiable from the HDL code. Additionally, the In-System Memory Content Editor supports reading and writing of memory contents via Tcl commands from the insystem_memory_edit package.
The insystem_memory_edit Tcl Package
The ::quartus::insystem_memory_edit Tcl package contains the set of Tcl functions for reading and editing the contents of memory in an Intel® FPGA device using the In-System Memory Content Editor. The quartus_stp and quartus_stp_tcl command line executables load this package by default.
For the most up-to-date information about the ::quartus::insystem_memory_edit, refer to the Intel® Quartus® Prime Help.
Getting Information about the insystem_memory_edit Package
-
For general information about the package, type:
quartus_stp --tcl_eval help -pkg insystem_memory_edit
-
For information about a command in the package, type:
quartus_stp --tcl_eval help -cmd <command_name>
In-System Modification of Memory and Constants Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.05.07 | 18.0.0 |
|
| 2016.10.31 | 16.1.0 |
|
| 2015.11.02 | 15.1.0 | Changed instances of Quartus II to Intel® Quartus® Prime . |
| June 2014 | 14.0.0 |
|
| June 2012 | 12.0.0 | Removed survey link. |
| November 2011 | 10.0.3 | Template update. |
| December 2010 | 10.0.2 | Changed to new document template. No change to content. |
| August 2010 | 10.0.1 | Corrected links |
| July 2010 | 10.0.0 |
|
| November 2009 | 9.1.0 |
|
| March 2009 | 9.0.0 | No change to content |
| November 2008 | 8.1.0 | Changed to 8-1/2 x 11 page size. No change to content. |
| May 2008 | 8.0.0 |
|
Design Debugging Using In-System Sources and Probes
Traditional debugging techniques often involve using an external pattern generator to exercise the logic and a logic analyzer to study the output waveforms during run time.
You can make the debugging cycle more efficient when you can drive any internal signal manually within your design, which allows you to perform the following actions:
- Force the occurrence of trigger conditions set up in the Signal Tap Logic Analyzer
- Create simple test vectors to exercise your design without using external test equipment
- Dynamically control run time control signals with the JTAG chain
The In-System Sources and Probes Editor in the Intel® Quartus® Prime software extends the portfolio of verification tools, and allows you to easily control any internal signal and provides you with a completely dynamic debugging environment. Coupled with either the Signal Tap Logic Analyzer or Signal Probe, the In-System Sources and Probes Editor gives you a powerful debugging environment in which to generate stimuli and solicit responses from your logic design.
The Virtual JTAG IP core and the In-System Memory Content Editor also give you the capability to drive virtual inputs into your design. The Intel® Quartus® Prime software offers a variety of on-chip debugging tools.
The ALTSOURCE_PROBE IP core hides the detailed transactions between the JTAG controller and the registers instrumented in your design to give you a basic building block for stimulating and probing your design. Additionally, the In-System Sources and Probes Editor provides single-cycle samples and single-cycle writes to selected logic nodes. You can use this feature to input simple virtual stimuli and to capture the current value on instrumented nodes. Because the In-System Sources and Probes Editor gives you access to logic nodes in your design, you can toggle the inputs of low-level components during the debugging process. If used in conjunction with the Signal Tap Logic Analyzer, you can force trigger conditions to help isolate your problem and shorten your debugging process.
The In-System Sources and Probes Editor allows you to easily implement control signals in your design as virtual stimuli. This feature can be especially helpful for prototyping your design, such as in the following operations:
- Creating virtual push buttons
- Creating a virtual front panel to interface with your design
- Emulating external sensor data
- Monitoring and changing run time constants on the fly
The In-System Sources and Probes Editor supports Tcl commands that interface with all your ALTSOURCE_PROBE IP core instances to increase the level of automation.
Hardware and Software Requirements
- Intel® Quartus® Prime software
or
- Intel® Quartus® Prime Lite Edition
- Download Cable (USB-BlasterTM download cable or ByteBlasterTM cable)
- Intel FPGA development kit or user design board with a JTAG connection to device under test
The In-System Sources and Probes Editor supports the following device families:
- Arria® series
- Stratix® ® series
- Cyclone® ® series
- MAX® series
Design Flow Using the In-System Sources and Probes Editor
Instantiating the In-System Sources and Probes IP Core
- In the IP Catalog (Tools > IP Catalog), type In-System Sources and Probes.
- Double-click In-System Sources and Probes to open the parameter editor.
- Specify a name for the IP variation.
-
Specify the parameters for the IP
variation.
The IP core supports up to 512 bits for each source, and design can include up to 128 instances of this IP core.
- Click Generate or Finish to generate IP core synthesis and simulation files matching your specifications.
- Using the generated template, instantiate the In-System Sources and Probes IP core in your design.
In-System Sources and Probes IP Core Parameters
| Port Name | Required? | Direction | Comments |
|---|---|---|---|
| probe[] | No | Input | The outputs from your design. |
| source_clk | No | Input | Source Data is written synchronously to this clock. This input is required if you turn on Source Clock in the Advanced Options box in the parameter editor. |
| source_ena | No | Input | Clock enable signal for source_clk. This input is required if specified in the Advanced Options box in the parameter editor. |
| source[] | No | Output | Used to drive inputs to user design. |
You can include up to 128 instances of the in-system sources and probes IP core in your design, if your device has available resources. Each instance of the IP core uses a pair of registers per signal for the width of the widest port in the IP core. Additionally, there is some fixed overhead logic to accommodate communication between the IP core instances and the JTAG controller. You can also specify an additional pair of registers per source port for synchronization.
Compiling the Design
You can modify the number of connections to your design by editing the In-System Sources and Probes IP core. To open the design instance you want to modify in the parameter editor, double-click the instance in the Project Navigator. You can then modify the connections in the HDL source file. You must recompile your design after you make changes.
Running the In-System Sources and Probes Editor
To run the In-System Sources and Probes Editor:
- On the Tools menu, click In-System Sources and Probes Editor.
In-System Sources and Probes Editor GUI
- JTAG Chain Configuration—Allows you to specify programming hardware, device, and file settings that the In-System Sources and Probes Editor uses to program and acquire data from a device.
- Instance Manager—Displays information about the instances generated when you compile a design, and allows you to control data that the In-System Sources and Probes Editor acquires.
- In-System Sources and Probes Editor—Logs all data read from the selected instance and allows you to modify source data that is written to your device.
When you use the In-System Sources and Probes Editor, you do not need to open a Intel® Quartus® Prime software project. The In-System Sources and Probes Editor retrieves all instances of the ALTSOURCE_PROBE IP core by scanning the JTAG chain and sending a query to the device selected in the JTAG Chain Configuration pane. You can also use a previously saved configuration to run the In-System Sources and Probes Editor.
Each In-System Sources and Probes Editor pane can access the ALTSOURCE_PROBE IP core instances in a single device. If you have more than one device containing IP core instances in a JTAG chain, you can launch multiple In-System Sources and Probes Editor panes to access the IP core instances in each device.
Programming Your Device With JTAG Chain Configuration
To configure a device to use with the In-System Sources and Probes Editor, perform the following steps:
- Open the In-System Sources and Probes Editor.
- In the JTAG Chain Configuration pane, point to Hardware, and then select the hardware communications device. You may be prompted to configure your hardware; in this case, click Setup.
- From the Device list, select the FPGA device to which you want to download the design (the device may be automatically detected). You may need to click Scan Chain to detect your target device.
- In the JTAG Chain Configuration pane, click to browse for the SRAM Object File (.sof) that includes the In-System Sources and Probes instance or instances. (The .sof may be automatically detected).
- Click Program Device to program the target device.
Instance Manager
The Instance Manager pane contains the following buttons and sub-panes:
- Read Probe Data—Samples the probe data in the selected instance and displays the probe data in the In-System Sources and Probes Editor pane.
- Continuously Read Probe Data—Continuously samples the probe data of the selected instance and displays the probe data in the In-System Sources and Probes Editor pane; you can modify the sample rate via the Probe read interval setting.
- Stop Continuously Reading Probe Data—Cancels continuous sampling of the probe of the selected instance.
- Read Source Data—Reads the data of the sources in the selected instances.
- Probe Read Interval—Displays the sample interval of all the In-System Sources and Probe instances in your design; you can modify the sample interval by clicking Manual.
- Event Log—Controls the event log that appears in the In-System Sources and Probes Editor pane.
- Write Source Data—Allows you to manually or continuously write data to the system.
Beside each entry, the Instance Manager pane displays the instance status. The possible instance statuses are Not running Offloading data, Updating data, and Unexpected JTAG communication error.
In-System Sources and Probes Editor Pane
The data is organized according to the index number of the instance. The editor provides an easy way to manage your signals, and allows you to rename signals or group them into buses. All data collected from in-system source and probe nodes is recorded in the event log and you can view the data as a timing diagram.
Reading Probe Data
This action produces a single sample of the probe data and updates the data column of the selected index in the In-System Sources and Probes Editor pane. You can save the data to an event log by turning on the Save data to event log option in the Instance Manager pane.
If you want to sample data from your probe instance continuously, in the Instance Manager pane, click the instance you want to read, and then click Continuously read probe data. While reading, the status of the active instance shows Unloading. You can read continuously from multiple instances.
You can access read data with the shortcut menus in the Instance Manager pane.
To adjust the probe read interval, in the Instance Manager pane, turn on the Manual option in the Probe read interval sub-pane, and specify the sample rate in the text field next to the Manual option. The maximum sample rate depends on your computer setup. The actual sample rate is shown in the Current interval box. You can adjust the event log window buffer size in the Maximum Size box.
Writing Data
Modified values that are not written out to the ALTSOURCE_PROBE instances appear in red. To update the ALTSOURCE_PROBE instance, highlight the instance in the Instance Manager pane and click Write source data. The Write source data function is also available via the shortcut menus in the Instance Manager pane.
The In-System Sources and Probes Editor provides the option to continuously update each ALTSOURCE_PROBE instance. Continuous updating allows any modifications you make to the source data buffer to also write immediately to the ALTSOURCE_PROBE instances. To continuously update the ALTSOURCE_PROBE instances, change the Write source data field from Manually to Continuously.
Organizing Data
To create a group of signals, select the node names you want to group, right-click and select Group. You can modify the display format in the Bus Display Format and the Bus Bit order shortcut menus.
The In-System Sources and Probes Editor pane allows you to rename any signal. To rename a signal, double-click the name of the signal and type the new name.
The event log contains a record of the most recent samples. The buffer size is adjustable up to 128k samples. The time stamp for each sample is logged and is displayed above the event log of the active instance as you move your pointer over the data samples.
You can save the changes that you make and the recorded data to a Sources and Probes File ( .spf ). To save changes, on the File menu, click Save. The file contains all the modifications you made to the signal groups, as well as the current data event log.
Tcl interface for the In-System Sources and Probes Editor
The Tcl interface for the In-System Sources and Probes Editor provides a powerful platform to help you debug your design. The Tcl interface is especially helpful for debugging designs that require toggling multiple sets of control inputs. You can combine multiple commands with a Tcl script to define a custom command set.
| Command | Argument | Description |
|---|---|---|
| start_insystem_source_probe | -device_name <device name> -hardware_name <hardware name> | Opens a handle to a
device with the specified hardware.
Call this command before starting any transactions. |
| get_insystem_source_ probe_instance_info | -device_name <device name> -hardware_name <hardware name> | Returns a list of all
ALTSOURCE_PROBE
instances in your design. Each record returned is in the following format:
{<instance Index>, <source width>, <probe width>, <instance name>} |
| read_probe_data | -instance_index <instance_index> -value_in_hex (optional) | Retrieves the current
value of the probe.
A string is returned that specifies the status of each probe, with the MSB as the left-most bit. |
| read_source_data | -instance_index <instance_index> -value_in_hex (optional) | Retrieves the current
value of the sources.
A string is returned that specifies the status of each source, with the MSB as the left-most bit. |
| write_source_data | -instance_index <instance_index> -value <value> -value_in_hex (optional) | Sets the value of the
sources.
A binary string is sent to the source ports, with the MSB as the left-most bit. |
| end_insystem_source_probe | None | Releases the JTAG
chain.
Issue this command when all transactions are finished. |
The example shows an excerpt from a Tcl script with procedures that control the ALTSOURCE_PROBE instances of the design as shown in the figure below. The example design contains a DCFIFO with ALTSOURCE_PROBE instances to read from and write to the DCFIFO. A set of control muxes are added to the design to control the flow of data to the DCFIFO between the input pins and the ALTSOURCE_PROBE instances. A pulse generator is added to the read request and write request control lines to guarantee a single sample read or write. The ALTSOURCE_PROBE instances, when used with the script in the example below, provide visibility into the contents of the FIFO by performing single sample write and read operations and reporting the state of the full and empty status flags.
## Setup USB hardware - assumes only USB Blaster is installed and
## an FPGA is the only device in the JTAG chain
set usb [lindex [get_hardware_names] 0]
set device_name [lindex [get_device_names -hardware_name $usb] 0]
## write procedure : argument value is integer
proc write {value} {
global device_name usb
variable full
start_insystem_source_probe -device_name $device_name -hardware_name $usb
#read full flag
set full [read_probe_data -instance_index 0]
if {$full == 1} {end_insystem_source_probe
return "Write Buffer Full"
}
##toggle select line, drive value onto port, toggle enable
##bits 7:0 of instance 0 is S_data[7:0]; bit 8 = S_write_req;
##bit 9 = Source_write_sel
##int2bits is custom procedure that returns a bitstring from an integer ## argument
write_source_data -instance_index 0 -value /[int2bits [expr 0x200 | $value]]
write_source_data -instance_index 0 -value [int2bits [expr 0x300 | $value]]
##clear transaction
write_source_data -instance_index 0 -value 0
end_insystem_source_probe
}
proc read {} {
global device_name usb
variable empty
start_insystem_source_probe -device_name $device_name -hardware_name $usb
##read empty flag : probe port[7:0] reads FIFO output; bit 8 reads empty_flag
set empty [read_probe_data -instance_index 1]
if {[regexp {1........} $empty]} { end_insystem_source_probe
return "FIFO empty" }
## toggle select line for read transaction
## Source_read_sel = bit 0; s_read_reg = bit 1
## pulse read enable on DC FIFO
write_source_data -instance_index 1 -value 0x1 -value_in_hex
write_source_data -instance_index 1 -value 0x3 -value_in_hex
set x [read_probe_data -instance_index 1 ]
end_insystem_source_probe
return $x
}
Design Example: Dynamic PLL Reconfiguration
Stratix® PLLs allow you to dynamically update PLL coefficients during run time. Each enhanced PLL within the Stratix® device contains a register chain that allows you to modify the pre-scale counters (m and n values), output divide counters, and delay counters. In addition, the ALTPLL_RECONFIG IP core provides an easy interface to access the register chain counters. The ALTPLL_RECONFIG IP core provides a cache that contains all modifiable PLL parameters. After you update all the PLL parameters in the cache, the ALTPLL_RECONFIG IP core drives the PLL register chain to update the PLL with the updated parameters. The figure shows a Stratix® -enhanced PLL with reconfigurable coefficients.
This design example was created using a Nios® II Development Kit, Stratix® Edition. The file sourceprobe_DE_dynamic_pll.zip contains all the necessary files for running this design example, including the following:
- Readme.txt—A text file that describes the files contained in the design example and provides instructions about running the Tk GUI shown in the figure below.
-
Interactive_Reconfig.qar—The archived
Intel®
Quartus® Prime project for this design example. Figure 86. Interactive PLL Reconfiguration GUI Created with Tk and In-System Sources and Probes Tcl Package

Document Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.05.07 | 18.0.0 | Added details on finding the In-System Sources and Probes in the IP Catalog. |
| 2016.10.31 | 16.1.0 | Implemented Intel rebranding. |
| 2015.11.02 | 15.1.0 | Changed instances of Quartus II to Intel® Quartus® Prime . |
| June 2014 | 14.0.0 | Updated formatting. |
| June 2012 | 12.0.0 | Removed survey link. |
| November 2011 | 10.1.1 | Template update. |
| December 2010 | 10.1.0 | Minor corrections. Changed to new document template. |
| July 2010 | 10.0.0 | Minor corrections. |
| November 2009 | 9.1.0 |
|
| March 2009 | 9.0.0 | No change to content. |
| November 2008 | 8.1.0 | Changed to 8-1/2 x 11 page size. No change to content. |
| May 2008 | 8.0.0 |
|
Analyzing and Debugging Designs with System Console
Introduction to System Console
- Bring up boards with both finalized and partially complete designs.
- Perform remote debug with internet access.
- Automate run-time verification through scripting across multiple devices in your system.
- Test serial links with point-and-click configuration tuning in the Transceiver Toolkit.
- Debug memory interfaces with the External Memory Interface Toolkit.
- Integrate your debug IP into the debug platform.
- Perform system verification with MATLAB*/Simulink.
System Console Debugging Flow
To debug a design with the System Console, you must perform a series of steps:
- Add an IP Core to the Platform Designer system.
- Generate the Platform Designer system.
- Compile the design.
- Connect a board and program the FPGA.
- Start the System Console.
- Locate and open a System Console service.
- Perform debug operations with the service.
- Close the service.
IP Cores that Interact with System Console
You instantiate debug IP cores using the Platform Designer IP Catalog. Some IP cores are enabled for debug by default, while you can enable debug for other IP cores through options in the parameter editor. Some debug agents have multiple purposes.
When you use IP cores with embedded debug in your design, you can make large portions of the design accessible. Debug agents allow you to read and write to memory and alter peripheral registers from the host computer.
Services associated with debug agents in the running design can open and close as needed. System Console determines the communication protocol with the debug agent. The communication protocol determines the best board connection to use for command and data transmission.
The Programmable SRAM Object File (.sof) provides the System Console with channel communication information. When System Console opens in the Intel® Quartus® Prime software or Platform Designer while your design is open, any existing .sof is automatically found and linked to the detected running device. In a complex system, you may need to link the design and device manually.
Services Provided through Debug Agents
|
Service |
Function |
Debug Agent Providing Service |
|---|---|---|
| master | Access memory-mapped ( Avalon® -MM or AXI) slaves connected to the master interface. |
|
| slave | Allows the host to access a single slave without needing to know the location of the slave in the host's memory map. Any slave that is accessible to a System Console master can provide this service. |
If an SRAM Object File (.sof) is loaded, then slaves controlled by a debug master provide the slave service. |
| processor |
|
Nios® II with debug |
| JTAG UART | The JTAG UART is an Avalon® -MM slave device that you can use in conjunction with System Console to send and receive byte streams. | JTAG UART |
- JTAG Debug Link
- JTAG Hub Controller System
- USB Debug Link
Starting System Console
Starting System Console from Nios II Command Shell
- On the Windows Start menu, click All Programs > Intel > Nios® II EDS <version> > Nios® II<version> > Command Shell..
- Type system-console.
- Type -- help for System Console help.
- Type system-console --project_dir=<project directory> to point to a directory that contains .qsf or .sof files.
Starting Stand-Alone System Console
- Navigate to the Download Center page and click the Additional Software tab.
- On the Windows Start menu, click All Programs > Intel FPGA <version> > Programmer and Tools > System Console.
Starting System Console from Platform Designer
Starting System Console from Intel Quartus Prime
Customizing Startup
- Add commands to the system_console_rc configuration file located at:
- <$HOME>/system_console/system_console_rc.tcl
- Specify your own design startup configuration file with the command-line argument --rc_script=<path_to_script> , when you launch System Console from the Nios® II command shell.
- Use the system_console_rc.tcl file in combination with your custom rc_script.tcl file. In this case, the system_console_rc.tcl file performs System Console actions, and the rc_script.tcl file performs your debugging actions.
On startup, System Console automatically runs the Tcl commands in these files. The commands in the system_console_rc.tcl file run first, followed by the commands in the rc_script.tcl file.
System Console GUI
- System Explorer—Displays the hierarchy of the System Console virtual file system in your design, including board connections, devices, designs, and scripts.
- Workspace—Displays available toolkits including the ADC Toolkit, Transceiver Toolkit, Toolkits, GDB Server Control Panel, and Bus Analyzer. Click the Tools menu to launch applications.
- Tcl Console—A window that allows you to interact with your design using Tcl scripts, for example, sourcing scripts, writing procedures, and using System Console API.
- Messages—Displays status, warning, and error messages related to connections and debug actions.
System Explorer Pane
- Devices folder—Displays information about all devices connected to the System Console.
- Scripts folder—Stores scripts for easy execution.
- Connections folder—Displays information about the board connections visible to the System Console, such as Intel® FPGA Download Cable. Multiple connections are possible.
- Designs folder—Displays information about Intel® Quartus® Prime designs connected to the System Console. Each design represents a loaded .sof file.
The Devices folder contains a sub-folder for each device connected to the System Console. Each device sub-folder contains a (link) folder, and may contain a (files) folder. The (link) folder shows debug agents (and other hardware) that System Console can access. The (files) folder contains information about the design files loaded from the Intel® Quartus® Prime project for the device.
- Folders with a context menu display a context menu icon. Right-click these folders to view the context menu. For example, the Connections folder above shows a context menu icon.
- Folders that have messages display a message icon. Mouse-over these folders to view the messages. For example, the Scripts folder in the example has a message icon.
- Debug agents that sense the clock and reset state of the target show an information or error message with a clock status icon. The icon indicates whether the clock is running (information, green), stopped (error, red), or running but in reset (error, red). For example, the trace_system_jtag_link.h2t folder in the figure has a running clock.
System Console Commands
The console commands enable testing. Use console commands to identify a service by its path, and to open and close the connection. The path that identifies a service is the first argument to most System Console commands.
- Identify a service by specifying its path with the get_service_paths command.
- Open a connection to the service with the claim_service command.
- Use Tcl and System Console commands to test the connected device.
- Close a connection to the service with the close_service command
|
Command |
Arguments |
Function |
|---|---|---|
| get_service_types | N/A | Returns a list of service types that System Console manages. Examples of service types include master, bytestream, processor, sld, jtag_debug, device, and design. |
| get_service_paths |
|
Allows you to filter the services which are returned. |
| claim_service |
|
Provides finer control of the portion of a service you want to use. claim_service returns a new path which represents a use of that service. Each use is independent. Calling claim_service multiple times returns different values each time, but each allows access to the service until closed. |
| close_service |
|
Closes the specified service type at the specified path. |
| is_service_open |
|
Returns 1 if the service type provided by the path is open, 0 if the service type is closed. |
| get_services_to_add | N/A |
Returns a list of all services that are instantiable with the add_service command. |
| add_service |
|
Adds a service of the specified service type with the given instance name. Run get_services_to_add to retrieve a list of instantiable services. This command returns the path where the service was added. Run help add_service <service-type> to get specific help about that service type, including any parameters that might be required for that service. |
| add_service gdbserver |
|
Instantiates a gdbserver. |
| add_service tcp |
|
Allows you to connect to a TCP/IP port that provides a debug link over ethernet. See AN693 (Remote Hardware Debugging over TCP/IP for Intel FPGA SoC) for more information. |
| add_service transceiver_channel_rx |
|
Instantiates a Transceiver Toolkit receiver channel. |
| add_service transceiver_channel_tx |
|
Instantiates a Transceiver Toolkit transmitter channel. |
| add_service transceiver_debug_link |
|
Instantiates a Transceiver Toolkit debug link. |
| get_version |
N/A |
Returns the current System Console version and build number. |
| get_claimed_services |
|
For the given claim group, returns a list of services claimed. The returned list consists of pairs of paths and service types. Each pair is one claimed service. |
| refresh_connections |
N/A |
Scans for available hardware and updates the available service paths if there have been any changes. |
| send_message |
|
Sends a message of the given level to the message window. Available levels are info, warning, error, and debug. |
Running System Console in Command-Line Mode
- --cli—Runs System Console in command-line mode.
- --project_dir=<project dir> —Directs System Console to the location of your hardware project. Also works in GUI mode.
- --script=<your script>.tcl—Directs System Console to run your Tcl script.
- --help— Lists all available commands. Typing --help <command name> provides the syntax and arguments of the command.
System Console provides command completion if you type the beginning letters of a command and then press the Tab key.
System Console Services
Locating Available Services
Locating a Service Path
#We are interested in master services. set service_type "master" #Get all the paths as a list. set master_service_paths [get_service_paths $service_type] #We are interested in the first service in the list. set master_index 0 #The path of the first master. set master_path [lindex $master_service_paths $master_index] #Or condense the above statements into one statement: set master_path [lindex [get_service_paths master] 0]
System Console commands require service paths to identify the service instance you want to access. The paths for different components can change between runs of System Console and between versions. Use the get_service_paths command to obtain service paths.
The string values of service paths change with different releases of the tool. Use the marker_node_info command to get information from the path.
System Console automatically discovers most services at startup. System Console automatically scans for all JTAG and USB-based service instances and retrieves their service paths. System Console does not automatically discover some services, such as TCP/IP. Use add_service to inform System Console about those services.
Marker_node_info
Use the marker_node_info command to get information about the discovered services.
set slave_path [get_service_paths -type altera_avalon_uart.slave slave] array set uart_info [marker_node_info $slave_path] echo $uart_info(full_hpath)
Opening and Closing Services
The claim_service command directs System Console to start using a particular service instance, and with no additional arguments, claims a service instance for exclusive use.
Opening a Service
set service_type "master" set claim_path [claim_service $service_type $master_path mylib];#Claims service.
You can pass additional arguments to the claim_service command to direct System Console to start accessing a particular portion of a service instance. For example, if you use the master service to access memory, then use claim_service to only access the address space between 0x0 and 0x1000. System Console then allows other users to access other memory ranges, and denies access to the claimed memory range. The claim_service command returns a newly created service path that you can use to access your claimed resources.
You can access a service after you open it. When you finish accessing a service instance, use the close_service command to direct System Console to make this resource available to other users.
Closing a Service
close_service master $claim_path; #Closes the service.
SLD Service
SLD Service
set timeout_in_ms 1000 set lock_failed [sld_lock $sld_service_path $timeout_in_ms]
This code attempts to lock the selected SLD node. If it is already locked, sld_lock waits for the specified timeout. Confirm the procedure returns non-zero before proceeding. Set the instruction register and capture the previous one:
if {$lock_failed} {
return
}
set instr 7
set delay_us 1000
set capture [sld_access_ir $sld_service_path $instr $delay_us]
The 1000 microsecond delay guarantees that the following SLD command executes least 1000 microseconds later. Data register access works the same way.
set data_bit_length 32 set delay_us 1000 set data_bytes [list 0xEF 0xBE 0xAD 0xDE] set capture [sld_access_dr $sld_service_path $data_bit_length $delay_us \ $data_bytes]
Shift count is specified in bits, but the data content is specified as a list of bytes. The capture return value is also a list of bytes. Always unlock the SLD node once finished with the SLD service.
sld_unlock $sld_service_path
SLD Commands
|
Command |
Arguments |
Function |
|---|---|---|
| sld_access_ir |
<claim-path> <ir-value> <delay> (in µs) |
Shifts the instruction value into the instruction register of the specified node. Returns the previous value of the instruction. If the <delay> parameter is non-zero, then the JTAG clock is paused for this length of time after the access. |
| sld_access_dr |
<service-path> <size_in_bits> <delay-in-µs>, <list_of_byte_values> |
Shifts the byte values into the data register of the SLD node up to the size in bits specified. If the <delay> parameter is non-zero, then the JTAG clock is paused for at least this length of time after the access. Returns the previous contents of the data register. |
| sld_lock |
<service-path> <timeout-in-milliseconds> |
Locks the SLD chain to guarantee exclusive access. Returns 0 if successful. If the SLD chain is already locked by another user, tries for <timeout>ms before throwing a Tcl error. You can use the catch command if you want to handle the error. |
| sld_unlock |
<service-path> |
Unlocks the SLD chain. |
In-System Sources and Probes Service
ISSP Service
Before you use the ISSP service, ensure your design works in the In-System Sources and Probes Editor. In System Console, open the service for an ISSP instance.
set issp_index 0 set issp [lindex [get_service_paths issp] 0] set claimed_issp [claim_service issp $issp mylib]
View information about this particular ISSP instance.
array set instance_info [issp_get_instance_info $claimed_issp] set source_width $instance_info(source_width) set probe_width $instance_info(probe_width)
The Intel® Quartus® Prime software reads probe data as a single bitstring of length equal to the probe width.
set all_probe_data [issp_read_probe_data $claimed_issp]
As an example, you can define the following procedure to extract an individual probe line's data.
proc get_probe_line_data {all_probe_data index} {
set line_data [expr { ($all_probe_data >> $index) & 1 }]
return $line_data
}
set initial_all_probe_data [issp_read_probe_data $claim_issp]
set initial_line_0 [get_probe_line_data $initial_all_probe_data 0]
set initial_line_5 [get_probe_line_data $initial_all_probe_data 5]
# ...
set final_all_probe_data [issp_read_probe_data $claimed_issp]
set final_line_0 [get_probe_line_data $final_all_probe_data 0]
Similarly, the Intel® Quartus® Prime software writes source data as a single bitstring of length equal to the source width.
set source_data 0xDEADBEEF issp_write_source_data $claimed_issp $source_data
The currently set source data can also be retrieved.
set current_source_data [issp_read_source_data $claimed_issp]
As an example, you can invert the data for a 32-bit wide source by doing the following:
set current_source_data [issp_read_source_data $claimed_issp]
set inverted_source_data [expr { $current_source_data ^ 0xFFFFFFFF }]
issp_write_source_data $claimed_issp $inverted_source_data
In-System Sources and Probes Commands
|
Command |
Arguments |
Function |
|---|---|---|
| issp_get_instance_info |
<service-path> |
Returns a list of the configurations of the In-System Sources and Probes instance, including: instance_index instance_name source_width probe_width |
| issp_read_probe_data |
<service-path> |
Retrieves the current value of the probe input. A hex string is returned representing the probe port value. |
| issp_read_source_data |
<service-path> |
Retrieves the current value of the source output port. A hex string is returned representing the source port value. |
| issp_write_source_data |
<service-path> <source-value> |
Sets values for the source output port. The value can be either a hex string or a decimal value supported by the System Console Tcl interpreter. |
Monitor Service
Monitor Service
- Determine the master and the memory address range that you want to
poll:
set master_index 0 set master [lindex [get_service_paths master] $master_index] set address 0x2000 set bytes_to_read 100 set read_interval_ms 100
With the first master, read 100 bytes starting at address 0x2000 every 100 milliseconds.
- Open the monitor
service:
set monitor [lindex [get_service_paths monitor] 0] set claimed_monitor [claim_service monitor $monitor mylib]
The monitor service opens the master service automatically.
- With the monitor service, register the address range and time
interval:
monitor_add_range $claimed_monitor $master $address $bytes_to_read monitor_set_interval $claimed_monitor $read_interval_ms
- Add more ranges, defining the result at each
interval:
global monitor_data_buffer set monitor_data_buffer [list]
- Gather the data and append it with a global variable.
proc store_data {monitor master address bytes_to_read} { global monitor_data_buffer # monitor_read_data returns the range of data polled from the running design as a list #(in this example, a 100-element list). set data [monitor_read_data $claimed_monitor $master $address $bytes_to_read] # Append the list as a single element in the monitor_data_buffer global list. lappend monitor_data_buffer $data }Note: If this procedure takes longer than the interval period, the monitor service may have to skip the next one or more calls to the procedure. In this case, monitor_read_data returns the latest polled data. - Register this callback with the opened monitor
service:
set callback [list store_data $claimed_monitor $master $address $bytes_to_read] monitor_set_callback $claimed_monitor $callback
- Use the callback variable to call when the monitor finishes an interval. Start
monitoring:
monitor_set_enabled $claimed_monitor 1
Immediately, the monitor reads the specified ranges from the device and invokes the callback at the specified interval. Check the contents of monitor_data_buffer to verify this. To turn off the monitor, use 0 instead of 1 in the above command.
Monitor Commands
Under normal load, the monitor service reads the data after each interval and then calls the callback. If the value you read is timing sensitive, you can use the monitor_get_read_interval command to read the exact time between the intervals at which the data was read.
Under heavy load, or with a callback that takes a long time to execute, the monitor service skips some callbacks. If the registers you read do not have side effects (for example, they read the total number of events since reset), skipping callbacks has no effect on your code. The monitor_read_data command and monitor_get_read_interval command are adequate for this scenario.
If the registers you read have side effects (for example, they return the number of events since the last read), you must have access to the data that was read, but for which the callback was skipped. The monitor_read_all_data and monitor_get_all_read_intervals commands provide access to this data.
| Command | Arguments | Function |
|---|---|---|
| monitor_add_range |
<service-path> <target-path> <address> <size> |
Adds a contiguous memory address into the monitored memory list. <service path> is the value returned when you opened the service. <target-path> argument is the name of a master service to read. The address is within the address space of this service. <target-path> is returned from [lindex [get_service_paths master] n] where n is the number of the master service. <address> and <size> are relative to the master service. |
| monitor_get_all_read_intervals |
<service-path> <target-path> <address> <size> |
Returns a list of intervals in milliseconds between two reads within the data returned by monitor_read_all_data. |
| monitor_get_interval | <service-path> | Returns the current interval set which specifies the frequency of the polling action. |
| monitor_get_missing_event_count | <service-path> | Returns the number of callback events missed during the evaluation of last Tcl callback expression. |
| monitor_get_read_interval |
<service-path> <target-path> <address> <size> |
Returns the milliseconds elapsed between last two data reads returned by monitor_read_data. |
| monitor_read_all_data |
<service-path> <target-path> <address> <size> |
Returns a list of 8-bit values read from all recent values read from device since last Tcl callback. You must specify a memory range within the range in monitor_add_range. |
| monitor_read_data |
<service-path> <target-path> <address> <size> |
Returns a list of 8-bit values read from the most recent values read from device. You must specify a memory range within the range in monitor_add_range. |
| monitor_set_callback |
<service-path> <Tcl-expression> |
Specifies a Tcl expression that the System Console must evaluate after reading all the memories that this service monitors. Typically, you specify this expression as a single string Tcl procedure call with necessary argument passed in. |
| monitor_set_enabled |
<service-path>
<enable(1)/disable(0)> |
Enables and disables monitoring. Memory read starts after this command, and Tcl callback evaluates after data is read. |
| monitor_set_interval |
<service-path> <interval> |
Defines the target frequency of the polling action by specifying the interval between two memory reads. The actual polling frequency varies depending on the system activity. |
Device Service
Programming
You can use the device service with Tcl scripting to perform device programming.
set device_index 0 ; #Device index for target set device [lindex [get_service_paths device] $device_index] set sof_path [file join project_path output_files project_name.sof] device_download_sof $device $sof_path
To program, all you need are the device service path and the file system path to a .sof. Ensure that no other service (e.g. master service) is open on the target device or else the command fails. Afterwards, you may do the following to check that the design linked to the device is the same one programmed:
device_get_design $device
Device Commands
|
Command |
Arguments |
Function |
|---|---|---|
| device_download_sof |
<service_path> <sof-file-path> |
Loads the specified .sof to the device specified by the path. |
| device_get_connections |
<service_path> |
Returns all connections which go to the device at the specified path. |
| device_get_design |
<device_path> |
Returns the design this device is currently linked to. |
Design Service
Load
When you open System Console from the Intel® Quartus® Prime software or Platform Designer, the current project's debug information is sourced automatically if the .sof has been built. In other situations, you can load manually.
set sof_path [file join project_dir output_files project_name.sof] set design [design_load $sof_path]
System Console is now aware that this particular .sof has been loaded.
Linking
Once a .sof is loaded, System Console automatically links design information to the connected device. The resultant link persists and you can choose to unlink or reuse the link on an equivalent device with the same .sof.
You can perform manual linking.
set device_index 0; # Device index for our target set device [lindex [get_service_paths device] $device_index] design_link $design $device
Manually linking fails if the target device does not match the design service.
Linking fails even if the .sof programmed to the target is not the same as the design .sof.
Design Service Commands
|
Command |
Arguments |
Function |
|---|---|---|
| design_load |
<quartus-project-path>, <sof-file-path>, or <qpf-file-path> |
Loads a model of a Intel® Quartus® Prime design into System Console. Returns the design path. For example, if your Intel® Quartus® Prime Project File (.qpf) is in c:/projects/loopback, type the following command: design_load {c:\projects\loopback\} |
| design_link |
<design-path> <device-service-path> |
Links a Intel® Quartus® Prime logical design with a physical device. For example, you can link a Intel® Quartus® Prime design called 2c35_quartus_design to a 2c35 device. After you create this link, System Console creates the appropriate correspondences between the logical and physical submodules of the Intel® Quartus® Prime project. |
| design_extract_debug_files |
<design-path> <zip-file-name> |
Extracts debug files from a .sof to a zip file which can be emailed to Intel FPGA Support for analysis. You can specify a design path of {} to unlink a device and to disable auto linking for that device. |
| design_get_warnings |
<design-path> |
Gets the list of warnings for this design. If the design loads correctly, then an empty list returns. |
Bytestream Service
Bytestream Service
The following code finds the bytestream service for your interface and opens it.
set bytestream_index 0 set bytestream [lindex [get_service_paths bytestream] $bytestream_index] set claimed_bytestream [claim_service bytestream $bytestream mylib]
To specify the outgoing data as a list of bytes and send it through the opened service:
set payload [list 1 2 3 4 5 6 7 8] bytestream_send $claimed_bytestream $payload
Incoming data also comes as a list of bytes.
set incoming_data [list]
while {[llength $incoming_data] ==0} {
set incoming_data [bytestream_receive $claimed_bytestream 8]
}
Close the service when done.
close_service bytestream $claimed_bytestream
Bytestream Commands
|
Command |
Arguments |
Function |
|---|---|---|
| bytestream_send |
<service-path> <values> |
Sends the list of bytes to the specified bytestream service. Values argument is the list of bytes to send. |
| bytestream_receive |
<service-path> <length> |
Returns a list of bytes currently available in the specified services receive queue, up to the specified limit. Length argument is the maximum number of bytes to receive. |
JTAG Debug Service
The following is a JTAG Debug design flow example.
- To identify available JTAG Debug
paths:
get_service_paths jtag_debug
- To select a JTAG Debug
path:
set jtag_debug_path [lindex [get_service_paths jtag_debug] 0]
- To claim a JTAG Debug service
path:
set claim_jtag_path [claim_service jtag_debug$jtag_debug_path mylib]
- Running the JTAG Debug
service:
jtag_debug_reset_system $claim_jtag_path jtag_debug_loop $claim_jtag_path [list 1 2 3 4 5]
JTAG Debug Commands
JTAG Debug commands help debug the JTAG Chain connected to a device.
| Command | Argument | Function |
|---|---|---|
| jtag_debug_loop | <service-path> <list_of_byte_values> | Loops the specified list of bytes through a loopback of tdi and tdo of a system-level debug (SLD) node. Returns the list of byte values in the order that they were received. This command blocks until all bytes are received. Byte values have the 0x (hexadecimal) prefix and are delineated by spaces. |
| jtag_debug_sample_clock | <service-path> | Returns the clock signal of the system clock that drives the module's system interface. The clock value is sampled asynchronously; consequently, you must sample the clock several times to guarantee that it is switching. |
| jtag_debug_sample_reset | <service-path> | Returns the value of the reset_n signal of the Avalon® -ST JTAG Interface core. If reset_n is low (asserted), the value is 0 and if reset_n is high (deasserted), the value is 1. |
| jtag_debug_sense_clock | <service-path> | Returns a sticky bit that monitors system clock activity. If the clock switched at least once since the last execution of this command, returns 1. Otherwise, returns 0.. The sticky bit is reset to 0 on read. |
| jtag_debug_reset_system | <service-path> | Issues a reset request to the specified service. Connectivity within your device determines which part of the system is reset. |
Working with Toolkits
Toolkits you create with the Toolkit API require the following files:
- XML file that describes the toolkit (.toolkit file).
- Tcl file that implements the toolkit GUI.
Convert your Dashboard Scripts to Toolkit API
- Create a .toolkit file.
-
Modify
your dashboard script:
- Remove the add_service dashboard <name of service> command.
- Change dashboard_<command> to toolkit_<command>.
- Change open_service to claim_service
For example:open_service slave $path master_read_memory $path address count
becomesset c [claim_service slave $path lib {}] master_read_memory $c address count
Creating a Toolkit Description File
|
Attribute name |
Purpose |
|---|---|
| name |
Internal toolkit file name. |
| displayName |
Toolkit display name to appear in the GUI. |
| addMenuItem |
Whether the System Console Tools > Toolkits menu displays the toolkit. |
|
Attribute name |
Purpose |
|---|---|
| description |
Description of the purpose of the toolkit. |
| file |
Path to .tcl file containing the toolkit implementation. |
| icon |
Path to icon to display as the toolkit launcher button in System
Console
Note: The .png 64x64 format is preferred. If the
icon does not take up the whole space, ensure that the background is
transparent.
|
| requirement |
If the toolkit works with a particular type of hardware, this attribute specifies the debug type name of the hardware. This attribute enables automatic discovery of the toolkit. The syntax of a toolkit's debug type name is:
|
.toolkit Description File
<?xml version="1.0" encoding="UTF-8"?> <toolkit name="toolkit_example" displayName="Toolkit Example" addMenuItem="true"> <file> toolkit_example.tcl </file> </toolkit>
Registering a Toolkit
toolkit_register <toolkit_file>
Launching a Toolkit
- Click Tools > Toolkits.
- Use the Toolkits tab. Each toolkit has a description, a detected hardware list, and a launch button.
-
Use following command:
toolkit_open <.toolkit_file_name>
toolkit_open <toolkit_name> <context>the toolkit Tcl can retrieve the context by typing
set context [toolkit_get_context]
Matching Toolkits with IP Cores
-
When searching for IP, the toolkit looks for debug markers and matches IP cores to the toolkit requirements. In the toolkit file, use the requirement attribute to specify a debug type, as follows:
<requirement><type>debug.type-name</type></requirement
- Create debug assignments in the hw.tcl for an IP core. hw.tcl files are available when you load the design in System Console.
- System Console discovers debug markers from identifiers in the hardware and associates with IP, without direct knowledge of the design.
Toolkit API
Properties
Widget properties can push and pull information to the user interface. Widgets have properties specific to their type. For example, when you click a button, the button property onClick performs an action. A label widget does not have the same property, because the widget does not perform an action on click operation. However, both the button and label widgets have the text property to display text strings.
Layout
The Toolkit API service creates a widget hierarchy where the toolkit is at the top-level. The service implements group-type widgets that contain child widgets. Layout properties dictate layout actions that a parent performs on its children. For example, the expandableX property when set as True, expands the widget horizontally to encompass all of the available space. The visible property when set as True allows a widget to display in the GUI.
User Input
Some widgets allow user interaction. For example, the textField widget is a text box that allows user entries. Access the contents of the box with the text property. A Tcl script can either get or set the contents of the textField widget with the text property.
Callbacks
Some widgets perform user-specified actions, referred to as callbacks. The textField widget has the onChange property, which is called when text contents change. The button widget has the onClick property, which is called when you click a button. Callbacks update widgets or interact with services based on the contents of a text field, or the state of any other widget.
Customizing Toolkit API Widgets
Toolkit API Script Examples
Making the Toolkit Visible in System Console
Use the toolkit_set_property command to modify the visible property of the root toolkit. Use the word self if a property is applied to the entire toolkit. In other cases, refer to the root toolkit using all.
toolkit_set_property self visible true
Adding Widgets
Use the toolkit_add command to add widgets.
toolkit_add my_button button all
The following commands add a label widget my_label to the root toolkit. In the GUI, the label appears as Widget Label.
set name "my_label" set content "Widget Label" toolkit_add $name label all toolkit_set_property $name text $content
In the GUI, the displayed text changes to the new value. Add one more label:
toolkit_add my_label_2 label all toolkit_set_property my_label_2 text "Another label"
The new label appears to the right of the first label.
To place the new label under the first, use the following command:
toolkit_set_property self itemsPerRow 1
Gathering Input
To incorporate user input into your Toolkit API,
-
Create a
text field
using
the following commands:
set name "my_text_field" set widget_type "textField" set parent "all" toolkit_add $name $widget_type $parent
- The widget size is very small. To make the widget fill the horizontal space, use
the following
command:
toolkit_set_property my_text_field expandableX true
- Now, the text field is fully visible. You can type text into the field, on
clicking. To retrieve the contents of the field, use the following
command:
set content [toolkit_get_property my_text_field text] puts $content
This command prints the contents into the console.
Updating Widgets Upon User Events
When you use callbacks, the Toolkit API can also perform actions without interactive typing:
- Start by defining a procedure that updates the first label with
the text field
contents:
proc update_my_label_with_my_text_field{ set content [toolkit_get_property my_text_field text] toolkit_set_property my_label text $content } - Run the update_my_label_with_my_text_field command in the Tcl Console. The first label now matches the text field contents.
- Use the update_my_label_with_my_text_field command whenever the text field
changes:
toolkit_set_property my_text_field onChange update_my_label_with_my_text_field
The Toolkit executes the onChange property each time the text field changes. The execution of this property changes the first field to match what you type.
Buttons
Use buttons to trigger actions.
- To create a button that changes the second label:
proc append_to_my_label_2 {suffix} { set old_text [toolkit_get_property my_label_2 text] set new_text "${old_text}${suffix}" toolkit_set_property my_label_2 text $new_text } set text_to_append ", and more" toolkit_add my_button button all toolkit_set_property my_button onClick [append_to_my_label_2 $text_to_append] - Click the button to append some text to the second label.
Groups
The property itemsPerRow dictates the laying out of widgets in a group. For more complicated layouts where the number of widgets per row is different, use nested groups. To add a new group with more widgets per row:
toolkit_add my_inner_group group all toolkit_set_property my_inner_group itemsPerRow 2 toolkit_add inner_button_1 button my_inner_group toolkit_add inner_button_2 button my_inner_group
These commands create a row with a group of two buttons. To make the nested group more seamless, remove the border with the group name using the following commands:
toolkit_set_property my_inner_group title ""
You can set the title property to any other string to ensure the display of the border and title text.
Tabs
Use tabs to manage widget visibility:
toolkit_add my_tabs tabbedGroup all toolkit_set_property my_tabs expandableX true toolkit_add my_tab_1 group my_tabs toolkit_add my_tab_2 group my_tabs toolkit_add tabbed_label_1 label my_tab_1 toolkit_add tabbed_label_2 label my_tab_2 toolkit_set_property tabbed_label_1 text "in the first tab" toolkit_set_property tabbed_label_2 text "in the second tab"
These commands add a set of two tabs, each with a group containing a label. Clicking on the tabs changes the displayed group/label.
Toolkit API GUI Example
- Write a toolkit description file. For a working example, refer to Creating a Toolkit Description File.
- Generate a .tcl file using the text on Toolkit API GUI Example .tcl File.
- Open the System Console.
-
Register your toolkit in the Tcl
Console pane. Include the relative path to your file's
location.
Figure 90. Registering Your Toolkit
The Toolkit appears in the Toolkits tab
Figure 91. Toolkits Tab After Toolkit Example Registration -
Click the Launch link.
A new tab appears, containing the widgets you specified in the TCL file.
Figure 92. Toolkit Example GUIWhen you insert text in the Send Data field and click Launch, the text appears in the Receive Data field.
Toolkit API GUI Example .tcl File
namespace eval Test {
variable ledValue 0
variable dashboardActive 0
variable Switch_off 1
proc toggle { position } {
set ::Test::ledValue ${position}
::Test::updateDashboard
}
proc sendText {} {
set sendText [toolkit_get_property sendTextText text]
toolkit_set_property receiveTextText text $sendText
}
proc dashBoard {} {
if { ${::Test::dashboardActive} == 1 } {
return -code ok "dashboard already active"
}
set ::Test::dashboardActive 1
#
# top group widget
#
toolkit_add topGroup group self
toolkit_set_property topGroup expandableX false
toolkit_set_property topGroup expandableY false
toolkit_set_property topGroup itemsPerRow 1
toolkit_set_property topGroup title ""
#
# leds group widget
#
toolkit_add ledsGroup group topGroup
toolkit_set_property ledsGroup expandableX false
toolkit_set_property ledsGroup expandableY false
toolkit_set_property ledsGroup itemsPerRow 2
toolkit_set_property ledsGroup title "LED State"
#
# leds widgets
#
toolkit_add led0Button button ledsGroup
toolkit_set_property led0Button enabled true
toolkit_set_property led0Button expandableX false
toolkit_set_property led0Button expandableY false
toolkit_set_property led0Button text "Toggle"
toolkit_set_property led0Button onClick {::Test::toggle 1}
toolkit_add led0LED led ledsGroup
toolkit_set_property led0LED expandableX false
toolkit_set_property led0LED expandableY false
toolkit_set_property led0LED text "LED 0"
toolkit_set_property led0LED color "green_off"
toolkit_add led1Button button ledsGroup
toolkit_set_property led1Button enabled true
toolkit_set_property led1Button expandableX false
toolkit_set_property led1Button expandableY false
toolkit_set_property led1Button text "Turn ON"
toolkit_set_property led1Button onClick {::Test::toggle 2}
toolkit_add led1LED led ledsGroup
toolkit_set_property led1LED expandableX false
toolkit_set_property led1LED expandableY false
toolkit_set_property led1LED text "LED 1"
toolkit_set_property led1LED color "green_off"
#
# sendText widgets
#
toolkit_add sendTextGroup group topGroup
toolkit_set_property sendTextGroup expandableX false
toolkit_set_property sendTextGroup expandableY false
toolkit_set_property sendTextGroup itemsPerRow 1
toolkit_set_property sendTextGroup title "Send Data"
toolkit_add sendTextText text sendTextGroup
toolkit_set_property sendTextText expandableX false
toolkit_set_property sendTextText expandableY false
toolkit_set_property sendTextText preferredWidth 200
toolkit_set_property sendTextText preferredHeight 100
toolkit_set_property sendTextText editable true
toolkit_set_property sendTextText htmlCapable false
toolkit_set_property sendTextText text ""
toolkit_add sendTextButton button sendTextGroup
toolkit_set_property sendTextButton enabled true
toolkit_set_property sendTextButton expandableX false
toolkit_set_property sendTextButton expandableY false
toolkit_set_property sendTextButton text "Send Now"
toolkit_set_property sendTextButton onClick {::Test::sendText}
#
# receiveText widgets
#
toolkit_add receiveTextGroup group topGroup
toolkit_set_property receiveTextGroup expandableX false
toolkit_set_property receiveTextGroup expandableY false
toolkit_set_property receiveTextGroup itemsPerRow 1
toolkit_set_property receiveTextGroup title "Receive Data"
toolkit_add receiveTextText text receiveTextGroup
toolkit_set_property receiveTextText expandableX false
toolkit_set_property receiveTextText expandableY false
toolkit_set_property receiveTextText preferredWidth 200
toolkit_set_property receiveTextText preferredHeight 100
toolkit_set_property receiveTextText editable false
toolkit_set_property receiveTextText htmlCapable false
toolkit_set_property receiveTextText text ""
return -code ok
}
proc updateDashboard {} {
if { ${::Test::dashboardActive} > 0 } {
toolkit_set_property ledsGroup title "LED State"
if { [ expr ${::Test::ledValue} & 0x01 & \
${::Test::Switch_off} ] } {
toolkit_set_property led0LED color "green"
set ::Test::Switch_off 0
} else {
toolkit_set_property led0LED color "green_off"
set ::Test::Switch_off 1
}
if { [ expr ${::Test::ledValue} & 0x02 ] } {
toolkit_set_property led1LED color "green"
} else {
toolkit_set_property led1LED color "green_off"
}
}
}
}
::Test::dashBoard
Toolkit API Commands
toolkit_register
Description
Point to the XML file that describes the plugin (.toolkit file) .Usage
toolkit_register <toolkit_file>Returns
No return value.Arguments
- <toolkit_file>
- Path to the toolkit definition file.
Example
toolkit_register /path/to/toolkit_example.toolkit
toolkit_open
Description
Opens an instance of a toolkit in System Console.Usage
toolkit_open <toolkit_id> [<context>]Returns
No return value.Arguments
- <toolkit_id>
- Name of the toolkit type to open.
- <context>
- An optional context, such as a service path for a hardware resource that is associated with the toolkit that opens.
Example
toolkit_open my_toolkit_id
get_quartus_ini
Description
Returns the value of an ini setting from the Intel® Quartus® Prime software .ini file.Usage
get_quartus_ini <ini> <type>Returns
Value of ini setting.Arguments
- <ini>
- Name of the Intel® Quartus® Prime software .ini setting.
- <type>
- (Optional) Type of .ini setting. The known types are string and enabled. If the type is enabled, the value of the .ini setting returns 1, or 0 if not enabled.
Example
set my_ini_enabled [get_quartus_ini my_ini enabled]
set my_ini_raw_value [get_quartus_ini my_ini]
toolkit_get_context
Description
Returns the context that was specified when the toolkit was opened. If no context was specified, returns an empty string.Usage
toolkit_get_contextReturns
Context.Arguments
No arguments.Example
set context [toolkit_get_context]
toolkit_get_types
Description
Returns a list of widget types.Usage
toolkit_get_typesReturns
List of widget types.Arguments
No arguments.Example
set widget_names [toolkit_get_types]
toolkit_get_properties
Description
Returns a list of toolkit properties for a type of widget.Usage
toolkit_get_properties <widgetType>Returns
List of toolkit properties.Arguments
- <widgetType>
- Type of widget.
Example
set widget_properties [toolkit_get_properties xyChart]
toolkit_add
Description
Adds a widget to the current toolkit.Usage
toolkit_add <id> <type><groupid>Returns
No return value.Arguments
- <id>
- A unique ID for the widget being added.
- <type>
- The type of widget that is being added.
- <groupid>
- The ID for the parent group that contains the new widget. Use self for the toolkit base group.
Example
toolkit_add my_button button parentGroup
toolkit_get_property
Description
Returns the property value for a specific widget.Usage
toolkit_get_property <id> <propertyName>Returns
The property value.Arguments
- <id>
- A unique ID for the widget being queried.
- <propertyName>
- The name of the widget property.
Example
set enabled [toolkit_get_property my_button enabled]
toolkit_set_property
Description
Sets the property value for a specific widget.Usage
toolkit_set_property <id><propertyName> <value>Returns
No return value.Arguments
- <id>
- A unique ID for the widget being modified.
- <propertyName>
- The name of the widget property being set.
- <value>
- The new value for the widget property.
Example
toolkit_set_property my_button enabled 0
toolkit_remove
Description
Removes a widget from the specified toolkit.Usage
toolkit_remove <id>Returns
No return value.Arguments
- <id>
- A unique ID for the widget being removed.
Example
toolkit_remove my_button
toolkit_get_widget_dimensions
Description
Returns the width and height of the specified widget.Usage
toolkit_get_widget_dimensions <id>Returns
Width and height of specified widget.Arguments
- <id>
- A unique ID for the widget being added.
Example
set dimensions [toolkit_get_widget_dimensions my_button]
Toolkit API Properties
- Widget Types and Properties
- barChart Properties
- button Properties
- checkBox Properties
- comboBox Properties
- dial Properties
- fileChooserButton Properties
- group Properties
- label Properties
- led Properties
- lineChart Properties
- list Properties
- pieChart Properties
- table Properties
- text Properties
- textField Properties
- timeChart Properties
- xyChart Properties
Widget Types and Properties
| Name | Description |
|---|---|
| enabled | Enables or disables the widget. |
| expandable | Controls whether the widget is expandable. |
| expandableX | Allows the widget to resize horizontally if there is space available in the cell where it resides. |
| expandableY | Allows the widget to resize vertically if there is space available in the cell where it resides. |
| foregroundColor | Sets the foreground color. |
| maxHeight | If the widget's expandableY is set, this is the maximum height in pixels that the widget can take. |
| minHeight | If the widget's expandableY is set, this is the minimum height in pixels that the widget can take. |
| maxWidth | If the widget's expandableX is set, this is the maximum width in pixels that the widget can take. |
| minWidth | If the widget's expandableX is set, this is the minimum width in pixels that the widget can take. |
| preferredHeight | The height of the widget if expandableY is not set. |
| preferredWidth | The width of the widget if expandableX is not set. |
| toolTip | Implements a mouse-over tooltip. |
| visible | Displays the widget. |
barChart Properties
| Name | Description |
|---|---|
| title | Chart title. |
| labelX | X-axis label text. |
| label | X-axis label text. |
| range | Y-axis value range. By default, it is auto range.
Specifiy the
range
using
a Tcl list, for example: [list lower_numerical_value upper_numerical_value]. |
| itemValue | Specify
the value
using
a Tcl list, for example: [list bar_category_str numerical_value]. |
button Properties
| Name | Description |
|---|---|
| onClick | Specifies the Tcl command to run every time you click the button. Usually the command is a proc. |
| text | The text on the button. |
checkBox Properties
| Name | Description |
|---|---|
| checked | Specifies the state of the checkbox. |
| onClick | Specifies the Tcl command to run every time you click the checkbox. The command is usually a proc. |
| text | The text on the checkbox. |
comboBox Properties
| Name | Description |
|---|---|
| onChange | A Tcl callback to run when the value of the combo box changes. |
| options | A list of items to display in the combo box. |
| selectedItem | The selected item in the combo box. |
dial Properties
| Name | Description |
|---|---|
| max | The maximum value that the dial can show. |
| min | The minimum value that the dial can show. |
| ticksize | The space between the different tick marks of the dial. |
| title | The title of the dial. |
| value | The value that the dial's needle marks. It must be between min and max. |
fileChooserButton Properties
| Name | Description |
|---|---|
| text | The text on the button. |
| onChoose | A Tcl command that runs every time you click the button. The command is usually a proc. |
| title | The title of the dialog box. |
| chooserButtonText | The text of the dialog box approval button. Default value is Open. |
| filter | The file
filter,
based on extension.
The
filter supports
only
one
extension.
By default,
the
filter allows all file
names.
Specify
the filter using the syntax
[list filter_description
file_extension], for example: [list "Text Document (.txt)" "txt"]. |
| mode | Specifies what kind of files or directories you can select. The default is files_only. Possible options are files_only and directories_only. |
| multiSelectionEnabled | Controls whether you can select multiple files. Default value is false. |
| paths | This property is read-only. Returns a list of file paths selected in the file chooser dialog box. The property is most useful when you use it within the onClick script, or inside a procedure that updates the result after the dialog box closes. |
group Properties
| Name | Description |
|---|---|
| itemsPerRow | The number of widgets the group can position in one row, from left to right, before moving to the next row. |
| title | The title of the group. Groups with a title can have a border around them, and setting an empty title removes the border. |
label Properties
| Name | Description |
|---|---|
| text | The text to show in the label. |
led Properties
| Name | Description |
|---|---|
| color | The color of the LED. The options are: red_off, red, yellow_off, yellow, green_off, green, blue_off, blue, and black. |
| text | The text to show next to the LED. |
lineChart Properties
| Name | Description |
|---|---|
| title | Chart title. |
| labelX | X-axis label text. |
| labelY | Y-axis label text. |
| range | Y-axis value range. By default, it is auto range.
Specify
the range
using
a Tcl list, for example: [list lower_numerical_value upper_numerical_value]. |
| itemValue | Item
value. Specifiy the value using a Tcl list, for
example: [list bar_category_str numerical_value]. |
list Properties
| Name | Description |
|---|---|
| selected | Index of the selected item in the combo box. |
| options | List of options to display. |
| onChange | A Tcl callback to run when the selected item in the list changes. |
pieChart Properties
| Name | Description |
|---|---|
| title | Chart title. |
| itemValue | Item value.
Specified
using
a Tcl list, for example: [list bar_category_str numerical_value]. |
table Properties
| Name | Description |
|---|---|
| columnCount | The number of columns (Mandatory) (0, by default). |
| rowCount | The number of rows (Mandatory) (0, by default). |
| headerReorderingAllowed | Controls whether you can drag the columns (false, by default). |
| headerResizingAllowed | Controls whether you can resize all column widths. (false, by default). Note: You can
resize each column individually with the columnWidthResizable
property.
|
| rowSorterEnabled | Controls whether you can sort the cell values in a column (false, by default). |
| showGrid | Controls whether to draw both horizontal and vertical lines (true, by default). |
| showHorizontalLines | Controls whether to draw horizontal line (true, by default). |
| rowIndex | Current row index. Zero-based. This value affects some properties below (0, by default). |
| columnIndex | Current column index. Zero-based. This value affects all column specific properties below (0, by default). |
| cellText | Specifies the text inside the cell given by the current rowIndex and columnIndex (Empty, by default). |
| selectedRows | Control or retrieve row selection. |
| columnHeader | The text in the column header. |
| columnHeaders | A list of names to define the columns for the table. |
| columnHorizontalAlignment | The cell text alignment in the specified column. Supported types are leading (default), left, center, right, trailing. |
| columnRowSorterType | The type of sorting method. This is applicable only if rowSorterEnabled is true. Each column has its own sorting type. Possible types are string (default), int, and float. |
| columnWidth | The number of pixels in the column width. |
| columnWidthResizable | Controls whether the column width is resizable by you (false, by default). |
| contents | The contents of the table as a list. For a table with columns A, B, and C, the format of the list is {A1 B1 C1 A2 B2 C2 etc}. |
text Properties
| Name | Description |
|---|---|
| editable | Controls whether the text box is editable. |
| htmlCapable | Controls whether the text box can format HTML. |
| text | The text to show in the text box. |
textField Properties
| Name | Description |
|---|---|
| editable | Controls whether the text box is editable. |
| onChange | A Tcl callback to run when you change the content of the text box. |
| text | The text in the text box. |
timeChart Properties
| Name | Description |
|---|---|
| labelX | The label for the X-axis. |
| labelY | The label for the Y-axis. |
| latest | The latest value in the series. |
| maximumItemCount | The number of sample points to display in the historic record. |
| title | The title of the chart. |
| range | Sets the range for the chart. The range has the form {low, high}. The low/high values are doubles. |
| showLegend | Specifies whether a legend for the series is shown in the graph. |
xyChart Properties
| Name | Properties |
|---|---|
| title | Chart title. |
| labelX | X-Axis label text. |
| labelY | Y-Axis label text. |
| range | Sets the range for the chart. The range is of the form {low, high}. The low/high values are doubles. |
| maximumItemCount | Specifies the maximum number of data values to keep in a data series. This setting only affects new data in the chart. If you add more data values than the maximumItemCount, only the last maximumItemCount number of entries are kept. |
| series | Adds a series of data to the chart. The first value in the spec is the identifier for the series. If the same identifier is set twice, the Toolkit API selects the most recent series. If the identifier does not contain series data, that series is removed from the chart. Specify the series in a Tcl list: {identifier, x-1 y-1, x-2 y-2}. |
| showLegend | Sets whether a legend for the series appears in the graph. |
System Console Examples and Tutorials
Nios II Processor Example
To run this example, perform the following steps:
- Download the Nios® II Ethernet Standard Design Example for your board from the Altera website.
- Create a folder to extract the design. For this example, use C:\Count_binary.
- Unzip the Nios® II Ethernet Standard Design Example into C:\Count_binary.
- In a Nios® II command shell, change to the directory of your new project.
- Program your board. In
a
Nios® II command shell, type the following:
nios2-configure-sof niosii_ethernet_standard_<board_version>.sof
- Using Nios® II Software Build Tools for Eclipse, create a new Nios® II Application and BSP from Template using the Count Binary template and targeting the Nios® II Ethernet Standard Design Example.
- To build the executable and linkable format (ELF) file (.elf) for this application, right-click the Count Binary project and select Build Project.
- Download the .elf file to your board by right-clicking
Count Binary project and selecting
Run As,
Nios® II Hardware.
- The LEDs on your board provide a new light show.
- Type the following:
system-console; #Start System Console. #Set the processor service path to the Nios II processor. set niosii_proc [lindex [get_service_paths processor] 0] set claimed_proc [claim_service processor $niosii_proc mylib]; #Open the service. processor_stop $claimed_proc; #Stop the processor. #The LEDs on your board freeze. processor_run $claimed_proc; #Start the processor. #The LEDs on your board resume their previous activity. processor_stop $claimed_proc; #Stop the processor. close_service processor $claimed_proc; #Close the service.
- The processor_step, processor_set_register, and processor_get_register commands provide additional control over the Nios® II processor.
Processor Commands
| Command 1 | Arguments | Function |
|---|---|---|
| processor_download_elf |
<service-path> <elf-file-path> |
Downloads the given Executable and Linking Format File (.elf) to memory using the master service associated with the processor. Sets the processor's program counter to the .elf entry point. |
| processor_in_debug_mode |
<service-path> |
Returns a non-zero value if the processor is in debug mode. |
| processor_reset |
<service-path> |
Resets the processor and places it in debug mode. |
| processor_run |
<service-path> |
Puts the processor into run mode. |
| processor_stop |
<service-path> |
Puts the processor into debug mode. |
| processor_step |
<service-path> |
Executes one assembly instruction. |
| processor_get_register_names |
<service-path> |
Returns a list with the names of all of the processor's accessible registers. |
| processor_get_register |
<service-path> <register_name> |
Returns the value of the specified register. |
| processor_set_register |
<service-path> <register_name> <value> |
Sets the value of the specified register. |
On-Board Intel FPGA Download Cable II Support
MATLAB and Simulink in a System Verification Flow
Advantages of HIL Approach
- Avoid long computational delays for algorithms with high processing rates
- API helps to control, debug, visualize, and verify FPGA designs all within the MATLAB* environment
- FPGA results are read back by the MATLAB* software for further analysis and display
Required Tools and Components
- MATLAB* software
- DSP Builder for Intel® FPGAs software
- Intel® Quartus® Prime software
- Intel FPGA
Supported MATLAB API Commands
You can perform the work from the MATLAB* environment, and read and write to masters and slaves through the System Console. The supported MATLAB* API commands spare you from launching the System Console software. The supported commands are:
- SystemConsole.refreshMasters;
- M = SystemConsole.openMaster(1);
- M.write (type, byte address, data);
- M.read (type, byte address, number of words);
- M.close
MATLAB* API Script Example
SystemConsole.refreshMasters; %Investigate available targets
M = SystemConsole.openMaster(1); %Creates connection with FPGA target
%%%%%%%% User Application %%%%%%%%%%%%
....
M.write('uint32',write_address,data); %Send data to FPGA target
....
data = M.read('uint32',read_address,size); %Read data from FPGA target
....
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M.close; %Terminates connection to FPGA target
High Level Flow
- Install the DSP Builder for Intel® FPGAs software, so you have the necessary libraries to enable this flow
-
Build the design using Simulink and the DSP Builder for
Intel®
FPGAs libraries.
DSP Builder for Intel® FPGAs helps to convert the Simulink design to HDL
- Include Avalon® -MM components in the design (DSP Builder for Intel® FPGAs can port non- Avalon® -MM components)
- Include Signals and Control blocks in the design
- Separate synthesizable and non-synthesizable logic with boundary blocks.
- Integrate the DSP system in Platform Designer
- Program the Intel FPGA
- Interact with the Intel FPGA through the supported MATLAB* API commands.
Deprecated Commands
|
Command |
Arguments |
Function |
|---|---|---|
| open_service |
<service_type> <service_path> |
Opens the specified service type at the specified path. Calls to open_service may be replaced with calls to claim_service providing that the return value from claim_service is stored and used to access and close the service. |
Analyzing and Debugging Designs with the System Console Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.05.07 | 18.0.0 | Removed obsolete section: Board Bring-Up with System Console Tutorial. |
| 2017.05.08 | 17.0.0 |
|
| 2016.10.31 | 16.1.0 |
|
| 2015.11.02 | 15.1.0 |
|
| October 2015 | 15.1.0 |
|
| May 2015 | 15.0.0 | Added information about how to download and start System Console stand-alone. |
| December 2014 | 14.1.0 |
|
| June 2014 | 14.0.0 | Updated design examples for the following: board bring-up, dashboard service, Nios II processor, design service, device service, monitor service, bytestream service, SLD service, and ISSP service. |
| November 2013 | 13.1.0 | Re-organization of sections. Added high-level information with block diagram, workflow, SLD overview, use cases, and example Tcl scripts. |
| June 2013 | 13.0.0 | Updated Tcl command tables. Added board bring-up design example. Removed SOPC Builder content. |
| November 2012 | 12.1.0 | Re-organization of content. |
| August 2012 | 12.0.1 | Moved Transceiver Toolkit commands to Transceiver Toolkit chapter. |
| June 2012 | 12.0.0 | Maintenance release. This chapter adds new System Console features. |
| November 2011 | 11.1.0 | Maintenance release. This chapter adds new System Console features. |
| May 2011 | 11.0.0 | Maintenance release. This chapter adds new System Console features. |
| December 2010 | 10.1.0 | Maintenance release. This chapter adds new commands and references for Qsys. |
| July 2010 | 10.0.0 | Initial release. Previously released as the System Console User Guide, which is being obsoleted. This new chapter adds new commands. |
Debugging Transceiver Links
The Transceiver Toolkit allows you to:
- Control the transmitter or receiver channels to optimize transceiver settings and hardware features.
- Test bit-error rate (BER) while running multiple links at the target data rate.
- Control internal pattern generators and checkers, as well as enabling loopback modes.
- Run auto sweep tests to identify the best physical media attachment (PMA) settings for each link.
- For Intel® Stratix® 10 devices, view the receiver horizontal and vertical eye margin during testing.
- Test multiple devices across multiple boards simultaneously.
system-console --script=<name of script>
For an online demonstration using the Transceiver Toolkit to run a high-speed link test with one of the design examples, refer to the Transceiver Toolkit Online Demo on the Altera website.
Device Support
The Intel® Quartus® Prime Pro Edition Transceiver Toolkit supports the following device families:
- Intel® Arria® 10
- Intel® Cyclone® 10 GX
- Intel® Stratix® 10 L-, H-, and E-Tile
Unless noted, the features described in this chapter apply to all supported devices.
Channel Manager
The Channel Manager consists of three tabs that display components in a spreadsheet format:
- Transmitter Channels
- Receiver Channels
- Transceiver Links
The columns on each tab depend on the parameters of each device.
Channel Manager Functions
The Channel Manager simplifies actions such as:
- Copying and pasting settings—Copy, paste, import, and export PMA settings to and from channels.
- Importing and exporting settings— To export PMA settings to a text file, select a row in the Channel Manager. To apply the PMA settings from a text file, select one or more rows in the Channel Manager. The PMA settings in the text file apply to a single channel. When you import the PMA settings from a text file, you are duplicating one set of PMA settings for all the channels you select.
- Starting and stopping tests—The Channel Manager allows you to start and stop tests by right-clicking the channels. You can select two or more rows in the Channel Manager to start or stop test for multiple channels.
Channel Display Modes
The three channel display modes are:
- Current (default)—shows the current values from the device. Blue text indicates that the settings are live.
- Min/Max—shows the minimum and maximum values to be used in the auto sweep.
- Best—shows the best tested values from the last completed auto sweep run.
Transceiver Debugging Flow Walkthrough
Modifying the Design to Enable Transceiver Debug
Debug Parameters for Transceiver IP Cores
For all devices that the Intel® Quartus® Prime Pro Edition supports, you must enable the following parameters in the Transceiver PHY Intel® FPGA IP:
| Parameter | Description |
|---|---|
| Enable Dynamic Reconfiguration | Allows you to change the behavior of the transceiver channels and PLLs without powering down the device |
| Enable Altera Debug Master Endpoint (AMDE) | Allows you to access the transceiver and PLL registers through System Console. When you recompile your design, Intel® Quartus® Prime software inserts the ADME debug fabric and embedded logic. |
| Enable control and status registers | Enables soft registers to read status signals and write control signals on the PHY interface through the embedded debug. |
| Enable PRBS Soft Accumulators | Enables soft logic for performing PRBS bit and error accumulation when you use the hard PRBS generator and checker. |
| Intel® FPGA IP | Parameters to Enable |
|---|---|
| Transceiver ATX PLL |
|
| CMU PLL | |
| fPLL |
Debug Parameters for Intel Arria 10 and Intel Cyclone 10 GX Transceiver IPs in the Parameter Editor
For more information about dynamic reconfiguration parameters in Intel® Arria® 10 devices, refer to the Intel® Arria® 10 Transceiver PHY User Guide .
For more information about dynamic reconfiguration parameters in Intel® Cyclone® 10 GX devices, refer to the Intel® Cyclone® 10 GX Transceiver PHY User Guide .
Debug Parameters for Intel Stratix 10 L- and H-Tile Transceiver IPs in the Parameter Editor
For more information about dynamic reconfiguration parameters in Intel® Stratix® 10 L- and H-Tile devices, refer to the Intel® Stratix® 10 L- and H-Tile Transceiver PHY User Guide .
Debug Parameters for Intel Stratix 10 E-Tile Transceiver IPs in the Parameter Editor
For more information about dynamic reconfiguration parameters in Intel® Stratix® 10 E-Tile devices, refer to the Intel® Stratix® 10 E-Tile Transceiver PHY User Guide .
Instantiating and Parameterizing Debug IP cores
For each transceiver IP core:
- In the IP Components tab of the Project Navigator, right-click the IP instance, and click Edit in Parameter Editor.
-
Turn on debug settings.
Refer to the figures in Debug Parameters for Transceiver IPs in the Parameter Editor.
-
If applicable, connect the reference signals that the debugging logic
requires.
The ADME requires connections for clock and reset signals. For details about frequency requirements, refer to Ports and Parameters in the corresponding Transceiver PHY user guide.
- Click Generate HDL.
Programming the Design into an Intel FPGA
Loading the Design in the Transceiver Toolkit
If the FPGA is already programmed with the project when loading, the Transceiver Toolkit automatically links the design to the target hardware in the toolkit. The toolkit automatically discovers links between transmitter and receiver of the same channel.
Before loading the device, ensure that you connect the hardware. The device and JTAG connections appear in the Device and Connections folders of the System Explorer pane.
To load the design into the Transceiver Toolkit:
- In the System Console, click File > Load Design.
- Select the .sof programming file for the transceiver design.
Linking Hardware Resources
If you are using more than one Intel FPGA board, you can set up a test with multiple devices linked to the same design. This setup is useful if you want to perform a link test between a transmitter and receiver on two separate devices. You can also load multiple Intel® Quartus® Prime projects and link between different systems. You can perform tests on separate and unrelated systems in a single Intel® Quartus® Prime instance.
Linking One Design to One Device
- Load the design for your Intel® Quartus® Prime project.
- If the design is not auto-linked, link each device to an appropriate design.
- Create the link between channels on the device to test.
Linking Two Designs to Two Devices
- Load the design for all the Intel® Quartus® Prime project files you need.
- If the design does not auto-link, link each device to an appropriate design
- Open the project for the second device.
- Link the second device on the JTAG chain to the second design (unless the design auto-links).
- Create a link between the channels on the devices you want to test.
Linking One Design on Two Devices
- In the Transceiver Toolkit, open the .sof you are using on both devices.
- Link the first device to this design instance.
- Link the second device to the design.
- Create a link between the channels on the devices you want to test.
Linking Designs and Devices on Separate Boards
- Load the design for all the Intel® Quartus® Prime project files you need.
- If the design does not auto-link, link each device to an appropriate design.
- Create the link between channels on the device to test.
- Link the device connected to the second Intel® FPGA Download Cable to the second design.
- Create a link between the channels on the devices you want to test.
Verifying Hardware Connections
-
In the Receiver tab,
verify that RX CDR locked to Data is set
to Locked.
Figure 104. RX CDR Locked to Data
- Start the generator on the Transmitter Channel.
- Start the checker on the Receiver Channel.
- Verify you have Lock to Data, and the Bit Error Rate between the two is very low or zero.
After you verify communication between transmitter and receiver, you can create a link between the two transceivers and perform Auto Sweep and Eye Viewer 2 tests with the pair.
Identifying Transceiver Channels
The Transceiver Toolkit identifies and displays transmitter and receiver channels on the Transmitter Channels and Receiver Channels tabs of the Channel Manager. You can also manually identify the transmitter and receiver in a transceiver channel, and then create a link between the two for testing.
Controlling Transceiver Channels
- In the Transmitter Channels tab, click Control Transmitter Channel
- In the Receiver Channels tab, click Control Receiver Channel.
- In the Transceiver Links tab, click Control Receiver Channel.
For example, you can transmit a data pattern across the transceiver link, and then report the signal quality of the data you receive.
Creating Transceiver Links
- In the Channel Manager, click Setup.
- Select the generator and checker you want to control.
- Select the transmitter and receiver pair you want to control.
- Click Create Transceiver Link.
- Click Close.
Running Link Tests
When you run link tests, channel color highlights indicate the test status:
| Color | Transmitter Channel | Receiver Channel |
|---|---|---|
| Red | Channel is closed or generator clock is not running. | Channel is closed or checker clock is not running. |
| Green | Generator is sending a pattern. | Checker is checking and data pattern is locked. |
| Neutral (same color as background) | Channel is open, generator clock is running, and generator is not sending a pattern. | Channel is open, checker clock is running, and checker is not checking. |
| Yellow | N/A | Checker is checking and data pattern is not locked. |
Running BER Tests
You run BER tests from the Transceiver Link Basic tab.
To run a BER test in a transceiver link:
-
In the Channel Manager, select the transceiver link you want to test, and then
click Control Transceiver Link.
Figure 106. Control Transceiver LinkThe Basic tab opens.
- In Test pattern, specify a PRBS test pattern.
- Specify Reconfiguration settings for the Transmitter and Receiver Channel.
-
Click Start to run the test.
The Bit Error Rate that appears in Receiver Channel column, in the Checker section.
- To reset the error counter, click Reset.
- To stop the test, click Stop.
- If you want to test the error rate with different reconfiguration parameters, change the parameters and then click Start.
For a list of reconfigurable transceiver parameters, refer to User Interface Settings Reference.
Link Optimization Tests
Running Eye Viewer Tests
The Eye Viewer tool allows you to set up and run eye tests, monitoring bit error and phase offset data.
-
In the receiver channel or the transceiver link channel, click
a row, and then click Receiver/Link Eye Viewer
.
Figure 107. Click to open Eye ViewerThe Advanced tab opens, with test mode set to Eye Viewer .
-
Set the test conditions to your preference.
You can use an auto sweep test to determine acceptable settings.
- Under Eye Viewer settings, specify the horizontal and vertical step intervals.
-
Click Start.
During the test, the Eye Viewer tool gathers the channel's current settings, and uses those settings to start a phase sweep.
- Check the Eye Viewer status to see if the test finished.
- To change PMA settings and run another test, click Stop, then Reset, and restart the Eye Viewer test.
Controlling PMA Analog Settings
- In the Channel Manager, click Setup.
- In the Transmitter Channels tab, define a transmitter without a generator, and click Create Transmitter Channel.
- In the Receiver Channels tab, define a receiver without a generator, and click Create Receiver Channel.
- In the Transceiver Links tab, select the transmitter and receivers you want to control, and click Create Transceiver Link.
- Click Close.
- Click Control Receiver Channel, Control Transmitter Channel, or Control Transceiver Link to directly control the PMA settings while running.
Intel Arria 10 and Intel Cyclone 10 GX PMA Settings



Intel Stratix 10 L- and H-Tile PMA Settings



Intel Stratix 10 E-Tile PMA Settings
User Interface Settings Reference
The Transceiver Toolkit user interface contains the following settings:
| Setting | Description | Device Families | Control Pane | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Alias | Name you choose for the channel. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Auto Sweep status | Reports the current and best tested bits, errors, bit error rate, and case count for the current Auto Sweep test. | All supported device families | Receiver pane | ||||||||
| Bit error rate (BER) | Reports the number of errors divided by bits tested since the last reset of the checker. | All supported device families | Receiver pane | ||||||||
| Channel address | Logical address number of the transceiver channel. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| CTLE AC Gain | Specifies the receiver's Continuous Time Linear Equalization (CTLE) AC Gain. The full range of AC gain goes from approximately -2 dB at the peak frequency (setting 0) to +10 dB at the peak frequency (setting 15). | Intel® Stratix® 10 L- and H-Tile | Receiver pane | ||||||||
| CTLE EQ Gain | Specifies the CTLE EQ Gain for the receiver. The full range of EQ gain goes from approximately 0 dB from the peak frequency (setting 0) to -16 dB from the peak frequency (setting 47). | Intel® Stratix® 10 L- and H-Tile | Receiver pane | ||||||||
| CTLE DFE mode |
|
Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| Data rate |
Data rate of the channel that appears in the project file, or data rate the frequency detector measures. To use the frequency detector, turn on Enable Frequency Counter in the Data Pattern Checker IP core or Data Pattern Generator IP core, regenerate the IP cores, and recompile the design. The measured data rate depends on the Avalon® management clock frequency that appears in the project file. If you make changes to your settings and want to sample the data rate again, click the Refresh button next to the Data rate |
All supported device families |
Transmitter pane Receiver pane |
||||||||
| DC gain | Provides an equal boost to the incoming signal across the frequency spectrum. | Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| DFE mode |
Decision feedback equalization (DFE) for improving signal quality.
In Intel® Arria® 10 devices, DFE modes are Off, Manual and Adaptation Enabled. DFE in Adaptation Enabled mode automatically tries to find the best tap values. |
Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| E-Tile Adaptation Mode |
Specifies the tuning mode for the Receiver equalizer parameters:
Note: When running the One-Time Adaptation Mode, ensure that BER measurement is not running at the same time.
The Start One-Time button remains pressed until the adaptation finishes. |
Intel® Stratix® 10 E-Tile | Receiver pane | ||||||||
| Equalization control |
Boosts the high-frequency gain of the incoming signal to compensate for the low-pass filter effects of the physical medium. When you use this option with DFE, use DFE in Manual or Adaptation Enabled mode. |
Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| Equalization mode |
For Intel® Arria® 10 devices, you can set Equalization Mode to Manual or Triggered. |
Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| Error rate limit |
Turns on or off error rate limits. Start checking after specifies the number of bits the toolkit waits before looking at the bit error rate (BER) for the next two checks. Bit error rate achieves below sets upper bit error rate limits. If the error rate is better than the set error rate, the test ends. Bit error rate exceeds sets lower bit error rate limits. If the error rate is worse than the set error rate, the test ends. |
All supported device families | Receiver pane | ||||||||
| Generator/Checker mode |
Specifies Data pattern checker or Serial bit comparator for BER tests. If you enable Serial bit comparator the Data Pattern Generator sends the PRBS pattern, but the serial bit comparator checks the pattern. In Bypass mode, clicking Start begins counting on the Serial bit comparator. For BER testing:
|
All supported device families |
Transmitter pane Receiver pane |
||||||||
| Increase test range |
For the selected set of controls, increases the span of tests by one unit down for the minimum, and one unit up for the maximum. You can span either PMA Analog controls (non-DFE controls), or the DFE controls. You can quickly set up a test to check if any PMA setting combinations near your current best yields better results.To use, right-click the Advanced panel |
All supported device families | Receiver pane | ||||||||
| Maximum tested bits | Sets the maximum number of bits tested for each test iteration. | All supported device families | Receiver pane | ||||||||
| Number of bits tested | Specifies the number of bits tested since the last reset of the checker. | All supported device families | Receiver pane | ||||||||
| Number of error bits | Specifies the number of error bits encountered since the last reset of the checker. | All supported device families | Receiver pane | ||||||||
| PLL refclk freq | Channel reference clock frequency that appears in the project file, or reference clock frequency calculated from the measured data rate. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Populate with | Right-click the Advanced panel to load current values on the device as a starting point, or initially load the best settings auto sweep determines. The Intel® Quartus® Prime software automatically applies the values you specify in the drop-down lists for the Transmitter settings and Receiver settings. | All supported device families | Receiver pane | ||||||||
| Preamble word | Word to send out if you use the preamble mode (only if you use soft PRBS Data Pattern Generator and Checker). | All supported device families | Transmitter pane | ||||||||
| Pre-emphasis |
This programmable module boosts high frequencies in the transmit data for each transmit buffer signal. This action counteracts possible attenuation in the transmission media. |
All supported device families | Transmitter pane | ||||||||
| Receiver channel | Specifies the name of the selected receiver channel. | All supported device families | Receiver pane | ||||||||
| Refresh Button | After loading the .pof file, loads fresh settings from the registers after running dynamic reconfiguration. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Reset | Resets the current test. | All supported device families | Receiver pane | ||||||||
| Rules Based Configuration (RBC) validity checking |
Displays in red any invalid combination of settings for each list under Transmitter settings and Receiver settings, based on previous settings. When you enable this option, the settings appear in red to indicate the current combination is invalid. This action avoids manually testing invalid settings that you cannot compile for your design, and prevents setting the device into an invalid mode for extended periods of time and potentially damaging the circuits. |
Intel® Arria® 10 Intel® Cyclone® 10 GX Intel® Stratix® 10 L- and H-Tile |
Receiver pane | ||||||||
| Run length | Sets coverage parameters for test runs. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| RX CDR PLL status | Shows the receiver in lock-to-reference (LTR) mode. When in auto-mode, if data cannot be locked, this signal alternates in LTD mode if the CDR is locked to data. | All supported device families | Receiver pane | ||||||||
| RX CDR data status | Shows the receiver in lock-to-data (LTD) mode. When in auto-mode, if data cannot be locked, the signal stays high when locked to data and never switches. | All supported device families | Receiver pane | ||||||||
| Serial loopback enabled | Inserts a serial loopback before the buffers, allowing you to form a link on a transmitter and receiver pair on the same physical channel of the device. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Start | Starts the pattern generator or checker on the channel to verify incoming data. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Stop | Stops generating patterns and testing the channel. | All supported device families |
Transmitter pane Receiver pane |
||||||||
| Test pattern | Test pattern sent by the transmitter channel.
|
All supported device families |
Transmitter pane Receiver pane |
||||||||
| Time limit | Specifies the time limit unit and value to have a maximum bounds time limit for each test iteration. | All supported device families | Receiver | ||||||||
| Transmitter channel | Specifies the name of the selected transmitter channel. | All supported device families | Transmitter pane | ||||||||
| TX/CMU PLL status | Specifies whether the transmitter channel PLL is locked to the reference clock. | All supported device families | Transmitter pane | ||||||||
| Use preamble upon start | If turned on, sends the preamble word before the test pattern. If turned off, starts sending the test pattern immediately. | All supported device families | Transmitter pane | ||||||||
| VGA | The variable gain amplifier (VGA) amplifies the signal amplitude and ensures a constant voltage swing before the data enters the Clock Data Recovery (CDR) block for sampling. This assignment controls the VGA output voltage swing, and allows values from 0 to 7. | Intel® Arria® 10 and Intel® Cyclone® 10 GX | Receiver pane | ||||||||
| VGA DC gain | Specifies the VGA Gain for the receiver. The full range of VGA gain goes from approximately -5 dB (setting 0) to +7 dB (setting 31). | Intel® Stratix® 10 L- and H-Tile | Receiver pane | ||||||||
| VOD control | Programmable transmitter differential output voltage. | All supported device families | Transmitter pane |
Troubleshooting Common Errors
Missing high-speed link pin connections
Check the pin connections to identify high-speed links (tx_p/n and rx_p/n) are missing. When porting an older design to the latest version of the Intel® Quartus® Prime software, make sure that these connections exist after porting.
Reset Issues:
Ensure that the reset input to the Transceiver Native PHY, Transceiver Reset Controller, and ATX PLL Intel® FPGA IPs is not held active (1'b1). The Transceiver Toolkit highlights in red all the Transceiver Native PHY channels that you are setting up.
Unconnected reconfig_clk
You must connect and drive the reconfig_clk input to the Transceiver Native PHY and ATX PLL Intel® FPGA IPs. Otherwise, the toolkit does not display the transceiver link channel.
Scripting API Reference
- Set up and define links that describe the entire physical system.
- Click Save Tcl Script to save the setup for future use.
You can also build a custom test routine script.
To run the scripts, double-click the script name in the System Explorer scripts folder.
To view a list of the available Tcl command descriptions from the Tcl Console window, including example usage:
- In the Tcl console, type help help. The Console displays all Transceiver Toolkit Tcl commands.
- Type help <command name>. The Console displays the command description.
Transceiver Toolkit Commands
The following tables list the available Transceiver Toolkit scripting commands.
| Command | Arguments | Function | ||||||
|---|---|---|---|---|---|---|---|---|
| transceiver_channel_rx_get_data | <service-path> | Returns a list of the current checker data. The results are in the order of number of bits, number of errors, and bit error rate. | ||||||
| transceiver_channel_rx_get_dcgain | <service-path> | Gets the DC gain value on the receiver channel. | ||||||
| transceiver_channel_rx_get_dfe_tap_value | <service-path> <tap position> | Gets the current tap value of the channel you specify at the tap position you specify. | ||||||
| transceiver_channel_rx_get_eqctrl | <service-path> | Gets the equalization control value on the receiver channel. | ||||||
| transceiver_channel_rx_get_pattern | <service-path> | Returns the current data checker pattern by name. | ||||||
| transceiver_channel_rx_has_dfe | <service-path> | Reports whether the channel you specify has the DFE feature available. | ||||||
| transceiver_channel_rx_is_checking | <service-path> | Returns non-zero if the checker is running. | ||||||
| transceiver_channel_rx_is_dfe_enabled | <service-path> | Reports whether the DFE feature is enabled on the channel you specify. | ||||||
| transceiver_channel_rx_is_locked | <service-path> | Returns non-zero if the checker is locked onto the incoming data. | ||||||
| transceiver_channel_rx_reset_counters | <service-path> | Resets the bit and error counters inside the checker. | ||||||
| transceiver_channel_rx_reset | <service-path> | Resets the channel you specify. | ||||||
| transceiver_channel_rx_set_dcgain | <service-path> <value> | Sets the DC gain value on the receiver channel. | ||||||
| transceiver_channel_rx_set_dfe_enabled | <service-path> <disable(0)/enable(1)> | Enables or disables the DFE feature on the channel you specify. | ||||||
| transceiver_channel_rx_set_dfe_tap_value | <service-path> <tap position> <tap value> | Sets the current tap value of the channel you specify at the tap position you specify to the value you specify. | ||||||
| transceiver_channel_rx_set_dfe_adaptive | <service-path> <adaptive-mode> | Sets DFE adaptation mode of the channel you specify.
|
||||||
| transceiver_channel_rx_set_eqctrl | <service-path> <value> | Sets the equalization control value on the receiver channel. | ||||||
| transceiver_channel_rx_start_checking | <service-path> | Starts the checker. | ||||||
| transceiver_channel_rx_stop_checking | <service-path> | Stops the checker. | ||||||
| transceiver_channel_rx_set_pattern | <service-path> <pattern-name> | Sets the expected pattern to the one specified by the pattern name. | ||||||
| transceiver_channel_rx_set_word_aligner_enabled | <service-path> <disable(0)/enable(1)> | Enables or disables the word aligner of the channel you specify. | ||||||
| transceiver_channel_rx_is_word_aligner_enabled | <service-path> <disable(0)/enable(1)> | Reports whether the word aligner feature is enabled on the channel you specify. | ||||||
| transceiver_channel_rx_is_locked | <service-path> | Returns non-zero if the checker is locked onto the incoming signal. | ||||||
| transceiver_channel_rx_is_rx_locked_to_data | <service-path> | Returns 1 if transceiver is in lock to data (LTD) mode. Otherwise 0. | ||||||
| transceiver_channel_rx_is_rx_locked_to_ref | <service-path> | Returns 1 if transceiver is in lock to reference (LTR) mode. Otherwise 0. |
| Command | Arguments | Function |
|---|---|---|
| transceiver_channel_tx_disable_preamble | <service-path> | Disables the preamble mode at the beginning of generation. |
| transceiver_channel_tx_enable_preamble | <service-path> | Enables the preamble mode at the beginning of generation. |
| transceiver_channel_tx_get_number_of_preamble_beats | <service-path> | Returns the number of beats to send out the preamble word. |
| transceiver_channel_tx_get_pattern | <service-path> | Returns the pattern. |
| transceiver_channel_tx_get_preamble_word | <service-path> | Returns the preamble word. |
| transceiver_channel_tx_get_preemph_pretap1 | <service-path> | Gets the pre-emphasis first pre-tap value on the transmitter channel. |
| transceiver_channel_tx_get_preemph_posttap1 | <service-path> | Gets the pre-emphasis first post-tap value on the transmitter channel. |
| transceiver_channel_tx_get_preemph_posttap2 | <service-path> | Gets the pre-emphasis second post-tap value on the transmitter channel. |
| transceiver_channel_tx_get_preemph_pretap2 | <service-path> | Gets the pre-emphasis second pre-tap value on the transmitter channel. |
| transceiver_channel_tx_get_vodctrl | <service-path> | Gets the VOD control value on the transmitter channel. |
| transceiver_channel_tx_inject_error | <service-path> | Injects a 1-bit error into the generator's output. |
| transceiver_channel_tx_is_generating | <service-path> | Returns non-zero if the generator is running. |
| transceiver_channel_tx_is_preamble_enabled | <service-path> | Returns non-zero if preamble mode is enabled. |
| transceiver_channel_tx_set_number_of_preamble_beats | <service-path> <number-of-preamble-beats> | Sets the number of beats to send out the preamble word. |
| transceiver_channel_tx_set_pattern | <service-path> <pattern-name> | Sets the output pattern to the one specified by the pattern name. |
| transceiver_channel_tx_set_preamble_word | <service-path> <preamble-word> | Sets the preamble word to be sent out. |
| transceiver_channel_tx_set_preemph_pretap1 | <service-path> <value> | Sets the pre-emphasis first pre-tap value on the transmitter channel. |
| transceiver_channel_tx_set_preemph_posttap1 | <service-path> <value> | Sets the pre-emphasis first post-tap value on the transmitter channel. |
| transceiver_channel_tx_set_preemph_posttap2 | <service-path> <value> | Sets the pre-emphasis second post-tap value on the transmitter channel. |
| transceiver_channel_tx_set_preemph_pretap2 | <service-path> <value> | Sets the pre-emphasis second pre-tap value on the transmitter channel. |
| transceiver_channel_tx_set_vodctrl | <service-path> <vodctrl value> | Sets the VOD control value on the transmitter channel. |
| transceiver_channel_tx_start_generation | <service-path> | Starts the generator. |
| transceiver_channel_tx_stop_generation | <service-path> | Stops the generator. |
| Command | Arguments | Function |
|---|---|---|
| transceiver_debug_link_get_pattern | <service-path> | Gets the pattern the link uses to run the test. |
| transceiver_debug_link_is_running | <service-path> | Returns non-zero if the test is running on the link. |
| transceiver_debug_link_set_pattern | <service-path> <data pattern> | Sets the pattern the link uses to run the test. |
| transceiver_debug_link_start_running | <service-path> | Starts running a test with the currently selected test pattern. |
| transceiver_debug_link_stop_running | <service-path> | Stops running the test. |
| Command | Arguments | Function |
|---|---|---|
| transceiver_reconfig_analog_get_logical_channel_address | <service-path> | Gets the transceiver logic channel address currently set. |
| transceiver_reconfig_analog_get_rx_dcgain | <service-path> | Gets the DC gain value on the receiver channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_rx_eqctrl | <service-path> | Gets the equalization control value on the receiver channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_tx_preemph_pretap1 | <service-path> | Gets the pre-emphasis first pre-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_tx_preemph_posttap1 | <service-path> | Gets the pre-emphasis first post-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_tx_preemph_posttap2 | <service-path> | Gets the pre-emphasis second post-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_tx_preemph_pretap2 | <service-path> | Gets the pre-emphasis second pre-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_get_tx_vodctrl | <service-path> |
Gets the VOD control value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_logical_channel_address | <service-path> <logic channel address> | Sets the transceiver logic channel address. |
| transceiver_reconfig_analog_set_rx_dcgain | <service-path> <dc_gain value> | Sets the DC gain value on the receiver channel specified by the current logic channel address |
| transceiver_reconfig_analog_set_rx_eqctrl | <service-path> <eqctrl value> | Sets the equalization control value on the receiver channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_tx_preemph_pretap1 | <service-path> <value> | Sets the pre-emphasis first pre-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_tx_preemph_posttap1 | <service-path> < value> | Sets the pre-emphasis first post-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_tx_preemph_posttap2 | <service-path> <value> | Sets the pre-emphasis second post-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_tx_preemph_pretap2 | <service-path> <value> | Sets the pre-emphasis second pre-tap value on the transmitter channel specified by the current logic channel address. |
| transceiver_reconfig_analog_set_tx_vodctrl | <service-path> <vodctrl value> |
Sets the VOD control value on the transmitter channel specified by the current logic channel address. |
| Command | Arguments | Function |
|---|---|---|
| get_channel_type | <service-path> <logical-channel-num> | Reports the detected type (GX/GT) of channel <logical-channel-num > for the reconfiguration block located at <service-path>. |
| set_channel_type | <service-path> <logical-channel-num> <channel-type> | Overrides the detected channel type of channel <logical-channel-num> for the reconfiguration block located at <service-path> to the type specified (0:GX, 1:GT). |
Data Pattern Generator Commands
You can use Data Pattern Generator commands to control data patterns for debugging transceiver channels. You must instantiate the Data Pattern Generator component to support these commands.
| Command | Arguments | Function | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| data_pattern_generator_start | <service-path> | Starts the data pattern generator. | ||||||||||||||
| data_pattern_generator_stop | <service-path> | Stops the data pattern generator. | ||||||||||||||
| data_pattern_generator_is_generating | <service-path> | Returns non-zero if the generator is running. | ||||||||||||||
| data_pattern_generator_inject_error | <service-path> | Injects a 1-bit error into the generator output. | ||||||||||||||
| data_pattern_generator_set_pattern | <service-path> <pattern-name> |
Sets the output pattern that <pattern-name> specifies.
|
||||||||||||||
| data_pattern_generator_get_pattern | <service-path> | Returns currently selected output pattern. | ||||||||||||||
| data_pattern_generator_get_available_patterns | <service-path> | Returns a list of available data patterns by name. | ||||||||||||||
| data_pattern_generator_enable_preamble | <service-path> | Enables the preamble mode at the beginning of generation. | ||||||||||||||
| data_pattern_generator_disable_preamble | <service-path> | Disables the preamble mode at the beginning of generation. | ||||||||||||||
| data_pattern_generator_is_preamble_enabled | <service-path> | Returns a non-zero value if preamble mode is enabled. | ||||||||||||||
| data_pattern_generator_set_preamble_word | <preamble-word> | Sets the preamble word (could be 32-bit or 40-bit). | ||||||||||||||
| data_pattern_generator_get_preamble_word | <service-path> | Gets the preamble word. | ||||||||||||||
| data_pattern_generator_set_preamble_beats | <service-path> <number-of-preamble- beats> | Sets the number of beats to send out in the preamble word. | ||||||||||||||
| data_pattern_generator_get_preamble_beats | <service-path> | Returns the currently set number of beats to send out in the preamble word. | ||||||||||||||
| data_pattern_generator_fcnter_start | <service-path> <max-cycles> | Sets the max cycle count and starts the frequency counter. | ||||||||||||||
| data_pattern_generator_check_status | <service-path> |
Queries the data pattern generator for current
status. Returns a bitmap indicating the status, with bits defined as
follows:
|
||||||||||||||
| data_pattern_generator_fcnter_report | <service-path> <force-stop> | Reports the current measured clock ratio, stopping the counting first depending on <force-stop>. |
| Command | Arguments | Function | ||||||
|---|---|---|---|---|---|---|---|---|
| hard_prbs_generator_start | <service-path> | Starts the generator that you specify. | ||||||
| hard_prbs_generator_stop | <service-path> | Stops the generator that you specify. | ||||||
| hard_prbs_generator_is_generating | <service-path> |
Checks the generation status. Returns:
|
||||||
| hard_prbs_generator_set_pattern | <service-path> <pattern> | Sets the pattern of the hard PRBS generator you specify to pattern. | ||||||
| hard_prbs_generator_get_pattern | <service-path> | Returns the current pattern for a given hard PRBS generator. | ||||||
| hard_prbs_generator_get_available_patterns | <service-path> | Returns the available patterns for a given hard PRBS generator. |
Data Pattern Checker Commands
You can use Data Pattern Checker commands to verify your generated data patterns. You must instantiate the Data Pattern Checker component to support these commands.
| Command | Arguments | Function | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| data_pattern_checker_start | <service-path> | Starts the data pattern checker. | ||||||||||||||||
| data_pattern_checker_stop | <service-path> | Stops the data pattern checker. | ||||||||||||||||
| data_pattern_checker_is_checking | <service-path> | Returns a non-zero value if the checker is running. | ||||||||||||||||
| data_pattern_checker_is_locked | <service-path> | Returns non-zero if the checker is locked onto the incoming data. | ||||||||||||||||
| data_pattern_checker_set_pattern | <service-path> <pattern-name> | Sets the expected pattern to <pattern-name>. | ||||||||||||||||
| data_pattern_checker_get_pattern | <service-path> | Returns the currently selected expected pattern by name. | ||||||||||||||||
| data_pattern_checker_get_available_patterns | <service-path> | Returns a list of available data patterns by name. | ||||||||||||||||
| data_pattern_checker_get_data | <service-path> | Returns a list of the current checker data. The results are in the following order: number of bits, number of errors, and bit error rate. | ||||||||||||||||
| data_pattern_checker_reset_counters | <service-path> | Resets the bit and error counters inside the checker. | ||||||||||||||||
| data_pattern_checker_fcnter_start | <service-path> <max-cycles> | Sets the max cycle count and starts the frequency counter. | ||||||||||||||||
| data_pattern_checker_check_status |
<service-path>
<service-path> |
Queries the data pattern checker for current status. Returns a bitmap
indicating status:
|
||||||||||||||||
| data_pattern_checker_fcnter_report | <service-path> <force-stop> | Reports the current measured clock ratio, stopping the counting first depending on <force-stop>. |
| Command | Arguments | Function |
|---|---|---|
| hard_prbs_checker_start | <service-path> | Starts the specified hard PRBS checker. |
| hard_prbs_checker_stop | <service-path> | Stops the specified hard PRBS checker. |
| hard_prbs_checker_is_checking | <service-path> | Checks the running status of the specified hard PRBS checker. Returns a non-zero value if the checker is running. |
| hard_prbs_checker_set_pattern | <service-path> <pattern> |
Sets the pattern of the specified hard PRBS checker to parameter <pattern>. |
| hard_prbs_checker_get_pattern | <service-path> | Returns the current pattern for a given hard PRBS checker. |
| hard_prbs_checker_get_available_patterns | <service-path> | Returns the available patterns for a given hard PRBS checker. |
| hard_prbs_checker_get_data | <service-path> | Returns the current bit and error count data from the specified hard PRBS checker. |
| hard_prbs_checker_reset_counters | <service-path> | Resets the bit and error counts of the specified hard PRBS checker. |
Debugging Transceiver Links Revision History
The following revision history applies to this chapter:
| Document Version | Intel® Quartus® Prime Version | Changes |
|---|---|---|
| 2018.07.03 | 18.0.0 |
|
| 2017.11.27 | 17.1.0 |
|
| 2017.11.06 | 17.1.0 |
|
| 2016.10.31 | 16.1.0 |
|
| May 2015 | 15.0.0 |
Software Version 15.0 Limitations
|
| December, 2014 | 14.1.0 |
|
| June, 2014 | 14.0.0 |
|
| November, 2013 | 13.1.0 |
|
| May, 2013 | 13.0.0 |
|
| November, 2012 | 12.1.0 |
|
| August, 2012 | 12.0.1 |
|
| June, 2012 | 12.0.0 |
|
| November, 2011 | 11.1.0 |
|
| May, 2011 | 11.0.0 |
|
| December, 2010 | 10.1.0 |
|
| August, 2010 | 10.0.1 |
|
| July 2010 | 10.0.0 |
|
Intel Quartus Prime Pro Edition User Guides
Refer to the following user guides for comprehensive information on all phases of the Intel® Quartus® Prime Pro Edition FPGA design flow.