Nothing Special   »   [go: up one dir, main page]

Using The Chipscope Logic Analyzer: 1. Overview

Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

Structure of Computer Systems – Using the ChipScope Logic Analyzer 1

USING THE CHIPSCOPE LOGIC ANALYZER

This laboratory work presents an introduction to the ChipScope logic analyzer of the Xilinx
ISE design environment and describes the steps required to use this logic analyzer in a simple VHDL
design.

1. Overview
ChipScope is a software based logic analyzer that allows monitoring the status of selected sig-
nals in a design in order to detect possible design errors. It provides several cores that can be added to
a design by generating the cores with the CORE Generator tool, instantiating them into the source
code, and connecting the cores to the design before the synthesis process (Figure 1). Alternatively, it is
possible to customize the cores and insert them into the design netlist using the ChipScope Core In-
serter tool after the synthesis process. The design is then implemented into the FPGA device using the
implementation tools of the Xilinx ISE design environment. Next, the user configures the FPGA de-
vice and analyzes the design with the graphical interface provided by the ChipScope Analyzer soft-
ware.
Monitoring the status of signals is possible by capturing and storing their values when certain
events occur. The amount of data that can be stored is limited by the available Block RAM (BRAM)
within the FPGA device. Users can set complex trigger conditions to specify when the data capture
should start, which allows detecting the occurrence of certain events that are important for design veri-
fication and debug. The trigger conditions can be changed during the operation of the hardware with-
out the need to recompile the design.
Compared to hardware based logic analyzers, the ChipScope analyzer has several advantages.
One advantage is that hardware based logic analyzers are much more expensive. Another advantage is
that by using the ChipScope analyzer it is possible to analyze a large number of signals (up to 1024),
while traditional logic analyzers have a limited number (e.g., 16) of data channels, often insufficient to
debug complex designs. Finally, the ChipScope analyzer allows specifying much more complex trig-
gering conditions and modes.

2. ChipScope Cores
The main types of cores required for using the ChipScope analyzer are the following: ICON
(Integrated CONtroller), ILA (Integrated Logic Analyzer), and VIO (Virtual Input/Output). Additional
cores are available for more complex designs or for attaching external logic analyzers to the FPGA
device; these cores are not described in this document.

2.1. ICON Core

All of the ChipScope cores use the JTAG Boundary Scan port to communicate with the host
computer via a JTAG downloading cable (either a parallel or a USB cable). The Integrated CONtrol-
ler (ICON) core provides a communications path between the JTAG Boundary Scan port of the FPGA
device and the other ChipScope cores (ILA, VIO).
The ICON core can communicate with up to 15 ILA and/or VIO cores at any given time.
However, individual cores cannot share their control ports with any other core. Therefore, the ICON
core needs a distinct control port for every ILA and VIO core.
2 Structure of Computer Systems – Using the ChipScope Logic Analyzer

Figure 1. Design steps for using the ChipScope software.

The Boundary Scan primitive component is used to communicate with the JTAG Boundary
Scan logic of the FPGA device. This component extends the JTAG Test Access Port (TAP) interface
of the FPGA device so that up to four internal scan chains can be created, depending on the device
family. The ChipScope Analyzer tool communicates with the ChipScope cores by using one of the in-
ternal scan chains provided by the Boundary Scan component. For instance, the Boundary Scan com-
ponent of Spartan-3 and Spartan-3E devices provides two internal scan chains, USER1 and USER2.
Since the ChipScope cores use a single internal scan chain of the Boundary Scan component,
it is possible to share the Boundary Scan component with other elements of the user’s design. One of
the following two methods can be used for this sharing:
 Instantiating the Boundary Scan component inside the ICON core and including the unused
Boundary Scan chain signals as ports on the ICON core interface. The Boundary Scan compo-
nent is instantiated inside the ICON core by default.
 Instantiating the Boundary Scan component somewhere else in the design and attaching the
USER1 or USER2 scan chain signals to the corresponding ports of the ICON core interface.
When generating the ICON core, it is possible to enable the Include Boundary Scan Ports op-
tion to provide access to the unused scan chain interfaces. However, the Boundary Scan ports should
be included only if the design needs them. If the ports are included and not used, the synthesis tools
may not connect the ICON core properly, causing errors during the synthesis and implementation
stages of the design.
Figure 2 illustrates the communication between the ICON, ILA, and VIO cores.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 3

Figure 2. Communication between the ICON, ILA, and VIO cores.

2.2. ILA Core

The Integrated Logic Analyzer (ILA) core is a customizable logic analyzer core that can be
used to monitor any internal signal of the design. Since the ILA core is synchronous to the design be-
ing monitored, all the clock signal constraints that are applied to that design are also applied to the
components inside the ILA core. The ILA core consists of the following main components: trigger
input and output logic, data capture logic, control and status logic. These components are described
next.

2.2.1. Trigger Input Logic

The trigger input logic allows detecting complex trigger events. Each ILA core can have up to
16 trigger ports, and each port can be 1 to 256 bits wide. The ability to provide multiple trigger ports is
necessary in complex systems where different types of signals or buses need to be monitored.
To detect events on a trigger port, up to 16 comparators can be connected to that port. An in-
dividual comparator is called match unit. This feature enables multiple comparisons to be performed
on the trigger port signals. The results of one or more match units are combined together to form the
overall trigger condition event that is used to control data capture. Selecting a single match unit con-
serves resources while still allowing some flexibility in detecting trigger events. Selecting two or more
match units allows a more flexible trigger condition equation. However, increasing the number of
match units connected to a trigger port increases the usage of logic resources accordingly.
The match units connected to the trigger ports can be one of the following types:
 Basic comparator: Performs ‘=’ and ‘<>’ () comparisons.
 Basic comparator w/edges: Similar to the basic comparator, but also detects high-to-low and
low-to-high transitions.
 Extended comparator: Performs ‘=’, ‘<>’ (), ‘>’, ‘>=’, ‘<‘, and ‘<=’ comparisons.
 Extended comparator w/edges: Similar to the extended comparator, but also detects high-to-
low and low-to-high transitions.
 Range comparator: Performs ‘=’, ‘<>’ (), ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘in range’, and ‘not in range’
comparisons.
 Range comparator w/edges: Similar to the range comparator, but also detects high-to-low
and low-to-high transitions.
All the match units of a trigger port can be configured with an event counter, with a selectable
size of 1 to 32 bits. This counter can be configured at run time to count events in the following ways:
 Exactly n occurrences: A match is only signaled when exactly n consecutive or nonconsecu-
tive events occur.
4 Structure of Computer Systems – Using the ChipScope Logic Analyzer

 At least n occurrences: The match signal is asserted and remains asserted once n consecutive
or non-consecutive events occur.
 At least n consecutive occurrences: The match signal is asserted when n consecutive events
occur, and remains asserted until the match function is not satisfied.
The internal trigger condition of the ILA core can be accessed using the optional trigger out-
put port. The signal on this port can be used as a trigger signal for external test equipment by attaching
the signal to an output pin. This signal can also be used by internal logic as an interrupt, a trigger, or to
cascade multiple ILA cores together. The shape (level or pulse) and sense (active-High or active-Low)
of the trigger output can be controlled at runtime.
In order to monitor different kinds of signals and buses in a design, multiple trigger ports can
be used. For example, if the design includes an internal system bus that consists of control, address,
and data signals, then a separate trigger port can be assigned to monitor each signal group, as shown in
Figure 3. If all of these different signals and buses would be connected to a single trigger port, it
would not be possible to monitor for individual bit transitions on the CE, WE, and OE signals while
looking for the Address bus to be in a specified range.

Figure 3. ILA core connection example

A trigger condition is a Boolean or sequential combination of events that is detected by match


unit comparators attached to the trigger ports of the ILA core. The trigger condition is used to specify
the initial point in the data capture window and can be located at the beginning, the end, or anywhere
within the data capture window.
A storage qualification condition is also a Boolean combination of events that is detected by
the match unit comparators. However, the storage qualification condition differs from the trigger con-
dition in that it evaluates trigger port match unit events to decide whether or not to capture and store
each individual data sample. The trigger and storage qualification conditions can be used together to
define when to start the capture process and what data to capture.
In the ILA core example shown in Figure 3, suppose that the following operations are re-
quired:
Structure of Computer Systems – Using the ChipScope Logic Analyzer 5

 Trigger on the first memory write cycle (CE = rising edge, WE = 1, OE = 0) to Address =
FF0000h.
 Capture only memory read cycles (CE = rising edge, WE = 0, OE = 1) from Address =
23AACCh and Data values between 00000000h and 1000FFFFh.
To implement these conditions, the TRIG0 and TRIG1 trigger ports should each have two
match units attached to them, one for the trigger condition and one for the storage qualification condi-
tion. Table 1 summarizes the set up of the trigger condition and storage qualification equations and of
each individual match unit, in order to satisfy the conditions stated initially ('R' means rising edge).

Table 1. The set up of trigger and storage qualification conditions for the example of Figure 3.
Trigger Condition: M0[2:0] = CE:WE:OE = "R10"
M0 && M2 M2[23:0] = Address = "FF0000"
Storage Qualification Condition: M1[2:0] = CE:WE:OE = "R01"
M1 && M3 && M4 M3[23:0] = Address = "23AACC"
M4[31:0] = Data = in the range 00000000h ..1000FFFFh

2.2.2. Trigger Output Logic

The ILA core implements a trigger output port called TRIG_OUT. The signal on this port is
the output of the trigger condition that is set up at run-time using the analyzer. The shape (level or
pulse) and sense (active-High or active-Low) of the trigger output can also be controlled at run-time.
The TRIG_OUT port can be connected to a device pin in order to trigger external test equip-
ment such as oscilloscopes and logic analyzers. The TRIG_OUT port of one core can also be con-
nected to a trigger input port of another core in order to expand the trigger and data capture capabili-
ties of the design.

2.2.3. Data Capture Logic

Each ILA core can capture data using on-chip Block RAM resources independently from all
other cores in the design. Each ILA core can capture data using one of two capture modes: Window
and N samples.
In Window capture mode, the sample buffer can be divided into one or more equal-sized sam-
ple windows. This mode uses a Boolean combination of the individual trigger match unit events in
order to collect enough data to fill a sample window.
The N samples capture mode is useful for capturing the exact number of samples needed per
trigger without wasting capture storage resources. This mode is similar to the Window capture mode
except for two major differences:
 The number of samples per window can be any integer N from 1 to the sample buffer size mi-
nus 1;
 The trigger must always be at position 0 in the window.

2.2.4. Control and Status Logic

The ILA core contains a control and status logic that is used to manage the operation of the
core. All logic necessary to properly communicate with the ILA core is implemented by this control
and status logic.
6 Structure of Computer Systems – Using the ChipScope Logic Analyzer

2.3. VIO Core

The Virtual Input/Output (VIO) core is a customizable core that can monitor and drive internal
FPGA signals in real time. Unlike the ILA core, no storage resources are required. There are four
types of signals available in a VIO core:
 Asynchronous inputs. These signals are sampled using the JTAG clock signal provided by
the JTAG cable. The input values are read back periodically and displayed in the graphical in-
terface of the analyzer.
 Synchronous inputs. These signals are sampled using the design clock signal. The input val-
ues are read back periodically and displayed in the graphical interface of the analyzer.
 Asynchronous outputs. These signals are defined by the user in the graphical interface of the
analyzer and driven out of the core to the surrounding logic. A logical 1 or 0 value can be de-
fined for individual asynchronous outputs.
 Synchronous outputs. These signals are defined by the user in the graphical interface of the
analyzer, synchronized to the design clock signal, and driven out of the core to the surround-
ing logic. A logical 1 or 0 can be defined for individual synchronous outputs.
Every VIO core input has additional cells to capture the presence of transitions on the input.
Since the design clock will most likely be much faster than the sample period of the analyzer, it is pos-
sible for the signal being monitored to transition many times between successive samples. The activity
detectors capture this behavior and the results are displayed along with the signal value in the graphi-
cal interface of the analyzer. In the case of a synchronous input, activity cells capable of monitoring
for asynchronous and synchronous events are used. This feature can be used to detect glitches as well
as synchronous transitions on the synchronous input signal.
Every VIO core synchronous output has the ability to output a static 1, a static 0, or a pulse
train of successive values. A pulse train is a 16-clock cycle sequence of 1 and 0 bits that drive out of
the core on successive design clock cycles. The pulse train sequence is defined in the analyzer and is
executed only one time after it is loaded into the core.

3. The ChipScope Core Inserter Tool


ChipScope Core Inserter is a tool used after the synthesis process to generate a netlist that in-
cludes the user design, as well as the ICON and ILA cores needed. This tool enables to use the debug
functionality in a simple manner to analyze an already synthesized design, without any instantiation of
components into the source code.
Projects saved with the Core Inserter tool keep all relevant information about source files,
destination files, core parameters, and core settings. This allows storing and retrieving information
about core insertion between sessions. The project file (with .cdc extension) can be used as an input to
the analyzer to import signal names.
When the associated top-level design is implemented using the ISE implementation tools, the
cores are automatically inserted into the design netlist as part of the Translate process. There is no
need to set any properties to enable this operation. The .cdc file that is included into the project is as-
sociated with the design module being implemented and causes the cores to be inserted automatically.
The Core Inserter tool automatically reloads the design netlist if it detects that the netlist has changed
since the last time it was loaded.

4. The ChipScope Analyzer Tool


The ChipScope Analyzer tool interfaces directly to the ICON, ILA, and VIO cores. With this
tool, the user can configure the FPGA device, set up trigger conditions, and view the design signals in
graphical form. The analyzer provides an intuitive interface to determine the functionality of the de-
sign.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 7

The ChipScope Analyzer tool consists of two distinct applications: the server and the client.
The server is a console application that connects to the JTAG chain of the FPGA device using a JTAG
download cable. The client is a graphical user interface (GUI) application that allows interacting with
the devices in the JTAG chain and the cores that are found in those devices.
The server and client applications can be running on the same computer (local mode) or on
different computers (remote mode). Remote mode is useful when the user needs to debug a system
that is in a different location or to share a single system resource with other design team members.
If the user desires to debug a system that is connected directly to its local computer via a
JTAG download cable, there is no need to start the server manually. The server application has to be
started manually only when the user desires to interact with the server from a remote client. The server
application can handle only one client connection at a time.
The graphical interface of the client application consists of four parts:
 Project tree: contains a graphical representation of the JTAG chain and the cores in the de-
vices that are in the chain;
 Signal window: displays all the signals for the core selected in the project tree;
 Message pane: displays a list of status messages.
 Main window: displays multiple windows (such as Trigger Setup, Waveform, Listing) at the
same time.
Projects hold important information about the analyzer program state, such as signal names,
signal ordering, bus configurations, and trigger conditions. They allow to conveniently store and re-
trieve this information between analyzer sessions.

5. Example Design
This section presents the steps required to create and add an ICON core, an ILA core, and a
VIO core to a simple design of a bidirectional 32-bit counter. The method of using the CORE Genera-
tor software for creating the ChipScope cores and adding them to the design is described. Next, the
use of the ChipScope Analyzer software is presented.

5.1. Generating the ChipScope Cores

In order to generate the ChipScope ICON, ILA, and VIO cores, first a CORE Generator pro-
ject has to be created.

5.1.1. Creating a CORE Generator Project

Perform the following steps to create a new CORE Generator project.


1. Launch the CORE Generator program (Start  All Programs  Xilinx ISE Design Suite 10.1
 ISE  Accessories  CORE Generator).
2. In the window of this program, select File  New Project. The Choose new file name dialog
window will open. Browse to the folder where the project has to be created (this should be a
subfolder of the D:\Student\ folder). Create a new folder with the Create New Folder but-
ton, enter its name, click on the Open button, and then click on the Save button to save the co-
regen.cgp file to this folder. The ChipScope cores will be generated in this folder.
3. In the Part tab of the next dialog window, select the type of FPGA device for which the cores
should be generated. In the Family field select Spartan3E, in the Device field select
xc3s500e, in the Package field select fg320, and in the Speed Grade field select –4. Click on
the OK button to close the window.
8 Structure of Computer Systems – Using the ChipScope Logic Analyzer

4. In the left part of the CORE Generator window, select the View by Function tab if it is not al-
ready selected. Expand the Debug & Verification section, and then expand the ChipScope Pro
section. The list of available cores will be displayed. Among them should be the ICON, ILA,
and VIO cores.

5.1.2. Generating the ICON Core

The ICON core controls the other ChipScope cores, such as ILA and VIO, through control
ports. Perform the following steps to generate the ICON core.
1. In the left part of the CORE Generator window, double-click on the ICON (ChipScope Pro –
Integrated Controller) line. A window that allows setting the parameters of the ICON core
opens.
2. In the Component Name field, enter a simpler name for the core, for instance, icon_01.
3. In the Number of Control Ports field, select the correct number of control ports for the ICON
core. Each control port generated must be later connected to an ILA or VIO core to be possible
synthesizing the design. Each ILA or VIO core requires one control port. In this example de-
sign, one ILA core and one VIO core will be used. Therefore, select 2 for the number of con-
trol ports.
4. Leave the other options unselected, as in Figure 4, and click on the Finish button to create the
ICON core files. While the core is generated, a progress indicator will appear. After the ICON
core has been generated, a list of files created will be displayed in a separate window. Click on
the OK button to close this window.

Figure 4. Dialog window for setting the parameters of the ICON core.

5.1.3. Generating an ILA Core

An ILA core allows capturing and storing the values of selected signals within a hardware
module when a certain trigger condition is satisfied. Perform the following operations to generate an
ILA core.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 9

1. In the left part of the CORE Generator window, select the View by Function tab.
2. Double-click on the ILA (ChipScope Pro – Integrated Logic Analyzer) line. A window that al-
lows setting the parameters of the ILA core opens.
3. In the Component_Name field, enter a simpler name for the core, for instance, ila_01.
4. In the Number Of Trigger Ports field, select the required number of trigger ports for the ILA
core. Each ILA core can have up to 16 separate trigger ports. Normally, a single trigger port is
needed, so that leave unchanged the default setting of 1 for the number of trigger ports.
5. Leave the Use RPMs option selected. Therefore, Relationally Placed Macros (RPMs) will be
used to improve the performance of the core.
6. Leave the Sample On field with the default Rising setting. This way, the rising edge of the
clock signal will be used to capture the values of signals.
7. The Sample Data Depth field allows selecting the number of samples the ILA core will cap-
ture and store when the trigger condition is satisfied. One sample will be captured in each
clock cycle. The maximum number of samples captured depends on the number of available
Block RAM (BRAM) units in the FPGA device. For this example design, leave the default
value of this field (512) unchanged.
8. Unselect the Data Same As Trigger option. Therefore, the data port of the ILA core will be in-
dependent of its trigger ports. This allows to limit the amount of data that will be captured. If
this option is unselected, the Data Port Width parameter needs to be specified. Enter the value
18 for this parameter.
9. Leave the other parameters with their default settings, as in Figure 5, and click on the Next
button to display the window that allows setting the options for the trigger port.

Figure 5. First page of the dialog window for setting the parameters of the ILA core.

10. The Trigger Port Width field specifies the number of bits that will be used for the trigger con-
dition. Leave this number with its default value of 8.
10 Structure of Computer Systems – Using the ChipScope Logic Analyzer

11. The Match Units field specifies the number of match units connected to each trigger port. A
match unit is a comparator used to detect events on the trigger port it is connected to. When
several match units are used, the results from these units are combined together to form the
overall trigger condition. This allows a more flexible trigger condition equation, at the expense
of more logic resources used. Select the value 2 for the number of match units.
12. Leave the Counter Width option with its Disabled setting. Therefore, the counter provided at
the output of each match unit will not be used. This counter might be configured at run time to
count a specific number of match unit events.
13. In the Match Type field, select extended (Figure 6). This allows to use more functions to spec-
ify the trigger conditions, such as >, , <, , in addition to the basic functions = and .

Figure 6. Second page of the dialog window for setting the parameters of the ILA core.

14. Click on the Finish button to create the ILA core files. While the core is generated, a progress
indicator will appear. After the ICON core has been generated, a list of files created will be
displayed in a separate window. Click on the OK button to close this window.

5.1.4. Generating a VIO Core

A VIO core allows adding virtual inputs and outputs to a design. The number of input and
output signals used by the VIO core can be customized. Perform the following operations to generate a
VIO core.
1. In the left part of the CORE Generator window, select the View by Function tab.
2. Double-click on the VIO (ChipScope Pro – Virtual Input/Output) line. A window that allows
setting the parameters of the VIO core opens.
3. In the Component Name field, enter a simpler name for the core, for instance, vio_01.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 11

4. Select the Enable Synchronous Input Port option. This option allows connecting output sig-
nals from the design to the inputs of the VIO core. These signals should be synchronous to the
clock signal of the VIO core. The number of signals is specified in the Width field. Leave the
contents of this field to the default value of 8.
5. Select the Enable Synchronous Output Port option. This option allows connecting output sig-
nals from the VIO core to the inputs of the design, if these signals are synchronous to the
clock signal of the VIO core. The number of signals is specified in the Width field. Change the
contents of this field to 2.
6. Leave the Invert Clock Input option unselected (Figure 7). This option can be used to com-
plement the clock signal that is connected to the input of the VIO core.

Figure 7. Dialog window for setting the parameters of the VIO core.

7. Click on the Finish button to create the VIO core files. A progress indicator will appear while
generating the core. After the VIO core has been generated, a list of files created will be dis-
played in a separate window. Click on the OK button to close this window.
8. Close the CORE Generator window.

5.2. VHDL Description of the Example Design

The example design consists of a 32-bit counter module and a main module containing the
instantiation of the counter. The VHDL description of the 32-bit counter is presented below. The di-
rection of counting is controlled with the down signal. When this signal is asserted, the counter is dec-
remented, and otherwise the counter is incremented at each rising edge of the clock signal.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity count32 is
port (clk : in std_logic;
rst : in std_logic;
down : in std_logic;
count : out std_logic_vector(31 downto 0));
end count32;

architecture Behavioral of count32 is


12 Structure of Computer Systems – Using the ChipScope Logic Analyzer

signal c_int : std_logic_vector(31 downto 0);

begin
process (clk, rst)
begin
if (rst = '1') then
c_int <= (others => '0');
elsif (clk'event and clk = '1') then
if (down = '1') then
c_int <= c_int - 1;
else
c_int <= c_int + 1;
end if;
end if;
count <= c_int;
end process;

end Behavioral;

The VHDL description of the main module is presented next. Four bits of the counter will be
connected to four LEDs on the Spartan-3E development board.

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity main is
port (clk : in std_logic;
rst : in std_logic;
down : in std_logic;
cnt_out : out std_logic_vector(3 downto 0));
end main;

architecture Behavioral of main is

signal count : std_logic_vector(31 downto 0);

component count32 is
port (clk : in std_logic;
rst : in std_logic;
down : in std_logic;
count : out std_logic_vector(31 downto 0));
end component;

begin

cnt_out <= count(31 downto 28);

i_count32 : count32 port map (


clk => clk,
rst => rst,
down => down,
count => count);

end Behavioral;

5.3. Creating the ISE Project

Launch the Project Navigator software of the Xilinx ISE design environment and create a new
project. In the Device Properties dialog window, select the type of FPGA device for which the project
is created. In the Family field select Spartan3E, in the Device field select XC3S500E, in the Package
field select FG320, and in the Speed field select –4.
After finishing to create the project, select File  New or click the New button. In the
New dialog box, select Text File, then select the OK button. Copy the VHDL description of the counter
Structure of Computer Systems – Using the ChipScope Logic Analyzer 13

to the editor window and save the contents of the window to a file with the .vhd extension. Add to the
project the file with the description of the counter. Perform the same operations to create a .vhd file for
the main module and to add it to the project.
In the Sources window, select the VHDL file of the main module. In the Processes window,
double-click the Implement Design process to synthesize and implement the design. Correct any pos-
sible errors before continuing with the next steps.

5.4. Adding and Connecting the ChipScope Cores

After generating the ICON, ILA, and VIO cores, they have to be instantiated in the main
module and connected to signals.

5.4.1. Adding and Connecting the ICON Component

Perform the following operations to instantiate and add the ICON component to the design.

1. In the Project Navigator main window, select File  Open or select the Open button.
Browse to the folder in which the CORE Generator project has been created, select the file
with the name of the ICON core and the .vho extension (for instance, icon_01.vho), and then
select the Open button.
2. Copy the component declaration of the ICON module from the .vho file and paste it into the
declarative part of the main module, after the component declaration of the 32-bit counter
and before the begin keyword.
3. Copy the instantiation template of the ICON component from the .vho file, paste it into the
main module after the instantiation of the count32 component, and change the instance name
of the ICON component.
4. Insert the declaration of two signals, control0 and control1, after the declaration of the
count signal. These two control signals should have the same widths as the two ports of the
ICON component.
5. Close the .vho file of the ICON module.

5.4.2. Adding and Connecting the ILA Component

In order to instantiate and add the ILA component to the design, perform the steps described
below.
1. Select File  Open or select the Open button. Browse to the folder in which the CORE
Generator project has been created, select the file with the name of the ILA core and the .vho
extension (for instance, ila_01.vho), and then select the Open button.
2. Copy the component declaration of the ILA module from the .vho file and paste it to the de-
clarative part of the main module, after the component declaration of the ICON module.
3. Copy the instantiation template of the ILA component from the .vho file, paste it into the main
module after the instantiation of the ICON component, and change the instance name of the
ILA component. Change the name of the signal connected to the CONTROL port of the ILA
component to control0.
4. Insert the declaration of two signals, data and trig0, after the declaration of the control1
signal. These two signals connected to the data and trigger ports of the ILA component should
have the same widths as the corresponding ports of the ILA component.
5. In the main module, after the assignment to the cnt_out signal, assign values to the data
and trig0 signals. Assign to the data signal the signal obtained by concatenating the down,
14 Structure of Computer Systems – Using the ChipScope Logic Analyzer

rst, and bits 15..0 of the count signal. Therefore, the down and rst signals will be con-
nected to bits 17 and 16 of the ILA module’s data port, respectively. Assign to the trig0 sig-
nal bits 7..0 of the count signal.
6. Close the .vho file of the ILA module.

5.4.3. Adding and Connecting the VIO Component

In order to instantiate and add the VIO component to the design, perform the steps described
below.
1. Select File  Open or select the Open button. Browse to the folder in which the CORE
Generator project has been created, select the file with the name of the VIO core and the .vho
extension (for instance, vio_01.vho), and then select the Open button.
2. Copy the component declaration of the VIO module from the .vho file and paste it into the
declarative part of the main module, after the component declaration of the ILA module.
3. Copy the instantiation template of the VIO component from the .vho file, paste it into the main
module after the instantiation of the ILA component, and change the instance name of the VIO
component. Change the name of the signal connected to the CONTROL port of the VIO compo-
nent to control1.
4. Insert the declaration of two signals, sync_in and sync_out, after the declaration of the
trig0 signal. These two signals should have the same width as the corresponding ports of the
VIO component.
5. In the main module, assign bits 31..24 of the count signal to the sync_in signal. Hence, the
most significant 8 bits of the counter will be connected to the synchronous inputs of the VIO
module.
6. Instead of connecting the rst and down signals of the 32-bit counter to buttons on the devel-
opment board, we will connect these signals to bits 0 and 1 of the sync_out signal generated
by the VIO module. This will allow setting the two signals using the graphical interface of the
ChipScope logic analyzer. To make these connections, remove the rst and down ports from
the port list of the main module and declare rst and down as internal signals. Assign bit 0 of
the sync_out signal to the rst signal and bit 1 of the sync_out signal to the down signal.
7. Close the .vho file of the VIO module.
8. Save the VHDL file of the main module.

5.5. Synthesizing and Implementing the Design

After adding the ICON, ILA, and VIO cores to the design and connecting them, the design can
be synthesized and implemented using the XST synthesis tool. During the synthesis process, these
cores will act as “black boxes”; their behavior will be provided during the implementation process in
the form of netlists.
Before synthesizing and implementing the design, create and add to the project an UCF file to
specify the assignment of signals to the pins of FPGA device. To perform this, select File  New to
create a new text file. In the New dialog box, select Text File, and then select the OK button. Copy the
following lines to the editor window and save the contents of the window to a file with .ucf extension.
NET "clk" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "cnt_out<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "cnt_out<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "cnt_out<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "cnt_out<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
Structure of Computer Systems – Using the ChipScope Logic Analyzer 15

Close the editor window of the UCF file and add this file to the project. Then perform the
steps described below to synthesize and implement the design.
1. In the Sources window, select the VHDL file of the main module. In the Processes window,
right-click on the Implement Design process and select the Properties… option. The Process
Properties dialog window will open with the Translate Properties category selected. In the
Value field of the Macro Search Path property, click on the button. In the Browse For
Folder dialog window, browse to the folder in which the ChipScope core files have been gen-
erated, and then select the OK button. Close the Process Properties – Translate Properties
dialog window by selecting the OK button.
2. Specify the use of the JTAG clock for configuring the FPGA device. To perform this, in the
Processes window right-click on the Generate Programming File process, and then select the
Properties… option. In the Process Properties dialog window select the Startup Options cate-
gory, and for the FPGA Start-Up Clock property choose the JTAG Clock option. Close the
Process Properties dialog window by selecting the OK button.
3. In the Processes window, double-click on the Implement Design process to synthesize and
implement the design.
4. In the same window, double-click on the Generate Programming File process to generate the
configuration file for the FPGA device.

5.6. Using the ChipScope Analyzer

After generating the configuration file, the FPGA device on the development board can be
configured either with the iMPACT tool or with the ChipScope Analyzer tool. In this example design,
the ChipScope Analyzer tool will be used to configure the FPGA device. After that, it will be possible
to set the trigger condition, to capture the values of selected signals, and to display the signal wave-
forms in graphical form. These operations are described next.

5.6.1. Configuring the FPGA Device

Perform the following steps to configure the FPGA device on the development board.
1. Connect a Spartan-3E development board to a USB port of the computer with a USB cable.
2. Connect the power supply to the board and move the power switch near the power connector
to the ON position.
3. In the Processes window, double-click on the Analyze Design Using ChipScope process to
launch the ChipScope analyzer. The ChipScope analyzer main window will open.
4. In the JTAG Chain menu select Xilinx Platform USB Cable… even if it is already selected.
The Platform USB Cable Parameters dialog box is displayed (Figure 8). Leave unchanged the
default values that are selected and select the OK button.

Figure 8. Platform USB Cable Parameters dialog box.


16 Structure of Computer Systems – Using the ChipScope Logic Analyzer

5. In the message pane (at the bottom of the window) notice that the ChipScope tool tries to con-
nect to the programming cable. If a Windows Security Alert dialog box appears, ignore the
message displayed and click on the OK button. If the cable connection can be established, the
“Successfully opened Xilinx Platform USB Cable” message will be displayed in the message
pane. If the cable connection cannot be established, it is possible that the board drivers are not
installed correctly or the drivers are not installed for the USB port used. In this case, connec-
tion to the cable should be tried again after properly installing the drivers or connecting to an-
other USB port. When the connection is established, the JTAG Chain Device Order dialog box
is displayed (Figure 9), showing all the devices found in the JTAG chain. For the FPGA de-
vice, the Device Name field contains XC3S500E. Close the dialog box by selecting the OK
button.

Figure 9. The JTAG Chain Device Order dialog box.

6. In the project tree (upper part of the left side of the window) right-click on the FPGA device
name (XC3S500E) and select the Configure… option from the menu. The JTAG Configura-
tion dialog box opens. To select the configuration file, click on the Select New File button.
The Open Configuration File dialog box opens. Browse to the ISE project folder, select the
.bit configuration file, and click on the Open button to return to the JTAG Configuration dialog
box. Click on the OK button to configure the device.
7. If the configuration is performed successfully, the message “INFO: Found 2 Core Units in the
JTAG device Chain” is displayed in the message pane and the rightmost four LEDs (LD3 ..
LD0) on the board show that the counter is operational. The project tree is updated with the
number of ChipScope cores detected on the device. The Trigger Setup, Waveform, Listing, and
Bus Plot nodes appear under the ILA core, and the VIO Console node appears under the VIO
core (Figure 10).

Figure 10. The project tree after configuring the FPGA device.

5.6.2. Using the VIO Core

To use the VIO core, the VIO Console window has to be opened. This window allows to ob-
serve the status and activity of the VIO core input signals and to modify the status of the VIO core out-
put signals.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 17

1. Double-click on the VIO Console node in the project tree to open the VIO Console window. In
this window, the eight SyncIn signals are displayed in blue, and the two SyncOut signals are
displayed in green.
2. The SyncIn input signals to the VIO core are connected to bits 31..24 of the counter. Rename
each individual SyncIn[i] signal to the appropriate name count(i) of the counter signal.
For instance, SyncIn[0] becomes count(24), and SyncIn[7] becomes count(31). Re-
naming can be performed by right-clicking on the signal name, selecting the Rename… option,
and entering the new name into the Input dialog box.
3. The SyncOut[0] output signal from the VIO core is connected to the rst signal of the main
module, while the SyncOut[1] signal is connected to the down signal of the main module.
Rename these two SyncOut signals to their appropriate name.
4. The type of input signals to the VIO core can be set to LED, and therefore these signals can
simulate virtual LEDs of one of three colors (red, blue, or green). Set the type of count(24)
.. count(27) signals individually to red LED by right-clicking on the signal name and select-
ing the options Type  LED  Red  High. Similarly, set the type of count(28) ..
count(31) signals to green LED. The VIO Console window will look like in Figure 11. The
VIO core input signals are updated periodically. Notice that the status of the green LEDs in
the VIO Console window is the same as the status of the four LEDs that are used on the devel-
opment board. The transitions of the signals are also detected and are shown by arrows. These
arrows are displayed in black because the signals are synchronous; in case of asynchronous
signals, the arrows would be displayed in red.

Figure 11. The VIO Console window after setting the type of input signals to LED.

5. Set the type of the rst output signal to Push Button to simulate a push button on the board
(right-click on the signal name and select the options Type  Push Button  High). Click on
the Value field of this signal and notice that the counter is reset.
6. Set the type of the down output signal to Toggle Button to switch between 1 and 0 with a sin-
gle click (right-click on the signal name and select Type  Toggle Button). Click on the Value
field of this signal and notice that the direction of the counter is reversed.
7. Close the VIO Console window.

5.6.3. Setting the Trigger Condition

In order to capture the values of signals, first the trigger condition must be set up. This condi-
tion can be modified at run-time without the need to re-synthesize the design. In this example design,
18 Structure of Computer Systems – Using the ChipScope Logic Analyzer

the eight least significant bits of the counter are connected to the trigger port of the ILA core. Perform
the following steps to set up the trigger condition.
1. Double-click on the Trigger Setup node in the project tree to open the Trigger Setup window.
This window has three sections: Match Functions, Trigger Conditions, and Capture Settings.
2. First, define the match functions. A match function specifies the trigger value for a particular
match unit. Maximize the Match Functions section with the Maximize button. The two
match units used in this design are M0 and M1.
3. For the M0 match unit, in the Function field select the > function and change the contents of
the Value field to 0000_0001.
4. For the M1 match unit, in the Function field select the < function and change the contents of
the Value field to 0000_0100.
5. Collapse the Match Functions section by clicking on the vertical bar on the left side of this
section.
6. Next, define the overall trigger condition that will be used by the core to capture the values of
signals. This condition can be based on a Boolean equation or sequence of one or more match
functions. Several trigger conditions can be defined, but only one condition can be active at
any one time. Maximize the Trigger Conditions section with the Maximize button. The
single trigger condition that is available initially is displayed in this section, and it is set to the
Active value by default.
7. The Trigger Condition Equation field displays the current trigger condition. Initially, only the
M0 match unit is enabled. Click on M0 in the Trigger Condition Equation field to open the
Trigger Condition dialog window. This window displays a table of all available match units.
Click on the Enable field of the M1 match unit to enable it. The trigger condition equation will
be set to M0 && M1 by default (Figure 12). It is possible to combine the outputs of match
units with an OR logical operation, to negate the output of any match unit individually, and to
negate the overall equation. Leave unchanged the trigger condition equation and select the OK
button to close the Trigger Condition dialog window.

Figure 12. The Trigger Condition dialog window.

8. Collapse the Trigger Conditions section by clicking on the vertical bar on the left side of this
section.
Structure of Computer Systems – Using the ChipScope Logic Analyzer 19

9. Finally, in the Capture Settings section define the number of samples to capture, the number
of capture windows, and the position of the trigger in those windows. A capture window is a
contiguous sequence of samples containing a single trigger event. Keep the default type of
Window for the capture windows. In this case, the number of samples in each window must
be a power of two and the triggering can occur in any position in the window. The Windows
field specifies the number of capture windows. The Depth box defines the depth of each cap-
ture window. The Position field defines the position of the trigger in the windows. The Stor-
age Qualification field can specify to capture each data sample (by default) or only samples
that satisfy a Boolean AND or OR combination of all the enabled match units’ outputs. Keep
the default settings for all these fields.
10. Save the settings made in the Trigger Setup window to a file that can be opened later in the
current project or in other projects. To perform this operation, in the main ChipScope menu
select the Trigger Setup  Save Trigger Setup command. In the Save Trigger Setup As File
dialog window that opens, browse to the desired folder, enter the name of the file (keeping the
.ctj extension), and select the Save button. The settings can be retrieved later and loaded into
the Trigger Setup window by selecting the command Trigger Setup  Read Trigger Setup.

5.6.4. Capturing Signals and Viewing the Waveforms

After setting up the trigger condition, the trigger can be armed to start capturing the values of
selected signals. When the trigger condition is satisfied, the ILA core will start capturing the signals on
the data port according to the capture settings until the sample buffer is full. The values of the signals
are then sent to the computer via the downloading cable and are displayed in the Waveform window.
Perform the operations described below to capture signals and display their waveforms.
1. Double-click on the Waveform node in the project tree to open the Waveform window.
2. In the Bus/Signal column, click on the DataPort[0] signal, hold down the Shift key, and
click on the DataPort[15] signal. After selecting these signals, right-click on any selected
signal and choose the Add to Bus  New Bus options. A new bus named DataPort will be
created at the top of the existing signals.
3. Right-click on the newly created bus, select Rename, enter count into the Input dialog box,
and click on the OK button.
4. Rename the DataPort[16] signal to rst and the DataPort[17] signal to down.
5. In the main ChipScope window, click on the Trigger Immediate button. The ILA core
will ignore the trigger condition and storage qualification condition and will trigger the captur-
ing immediately using a single capture window with the trigger position set to sample 0. When
the sample buffer is full, the trigger disarms and the signals are displayed in the Waveform
window (Figure 13).
6. To arm the trigger, click on the Run button. When the trigger condition is satisfied, the
Waveform window is updated with the newly captured signals. Notice that the least significant
8 bits of the count signal are either 02h (when the down signal is 0) or 03h (when the down
signal is 1) at clock cycle position 0.
7. In the Capture Settings section of the Trigger Setup window, enter the value 100 into the Posi-
tion field. Arm the trigger again and notice that in the Waveform window the signal wave-
forms start with 100 samples before the trigger event.
8. Disarm the trigger by clicking on the Stop Acquisition button. Close the ChipScope win-
dow and move the power switch of the board to the OFF position.
20 Structure of Computer Systems – Using the ChipScope Logic Analyzer

Figure 13. The Waveform window after the Trigger Immediate command.

6. Applications
6.1. Answer the following questions:
a. What are the advantages of using the ChipScope analyzer versus using a traditional
logic analyzer to debug hardware designs implemented in FPGA devices?
b. What are the main functions of the ICON, ILA, and VIO ChipScope cores?
c. What is a trigger condition?
d. What is a storage qualification condition?
6.2. Perform the steps described in Section 5 to design and analyze the operation of a bidirec-
tional counter.
6.3. Modify the design of the multiplier circuit that uses the direct (shift-and-add) method (de-
scribed in the Application-SSC02-e.pdf document) in order to implement the circuit on the Spartan-3E
development board. First, in the main module of this circuit replace the SSEG and AN output ports
with the A and Q output ports of four bits each. These ports will be connected to the LEDs on the
board (the A port will be connected to LEDs LD7..LD4, and the Q port will be connected to LEDs
LD3..LD0). Remove the TERM output port and declare TERM as an internal signal. Then remove the
display and hex2sseg modules from the project and delete the instantiation of the display component
from the main module. Connect the output signals of the A and Q registers to the A and Q output ports.
Remove the UCF file from the project and instead of it add the mult_spartan3e.ucf constraints file,
available in the mult_spartan3e.zip archive. Perform the synthesis and implementation of the design,
correcting the possible errors.
6.4. Add to the project made for Application 6.3 the ChipScope cores needed for generating
the input signals X and Y with a VIO core and for viewing all the internal signals of the circuit with the
ChipScope analyzer. First, launch the CORE Generator software and change the parameters of the
ILA and VIO cores generated for the example design so that the port widths will be sufficient. Then,
Structure of Computer Systems – Using the ChipScope Logic Analyzer 21

in the main module of the multiplier circuit remove the X and Y input ports. Define internal signals in
the place of these ports, signals that will be generated with the VIO core. Instantiate the ChipScope
cores in the main module and make the required connections. Perform the synthesis and implementa-
tion of the design, correct the possible errors, and then follow the operation of the circuit with the
ChipScope analyzer.

You might also like