Axi Verification Ip V1.0: Logicore Ip Product Guide
Axi Verification Ip V1.0: Logicore Ip Product Guide
Chapter 1: Overview
Feature Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Licensing and Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Appendix D: Debugging
Finding Help on Xilinx.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
The AXI VIP core supports three versions of the Supported User
AXI4, AXI4-Lite, AXI3
Interfaces
AXI protocol (AXI3, AXI4, and AXI4-Lite).
Resources N/A
timing and drives the content on the interface. Tested Design Flows(2)(3)
Design Entry Vivado® Design Suite
For supported simulators, see the
Features Simulation(4)
Xilinx Design Tools: Release Notes Guide.
Synthesis Vivado Synthesis
• Supports all protocol data widths, address Support
widths, transfer types, and responses Provided by Xilinx at the Xilinx Support web page
Overview
The Xilinx® LogiCORE™ AXI Verification IP (VIP) core is used in the following manner:
Figure 1-1 shows the AXI master VIP which generates AXI commands and write payload and
sends it to the AXI system.
X-Ref Target - Figure 1-1
M_AXI
SystemVerilog Interface AXI Protocol Checker
X18492-121316
Figure 1-2 shows the AXI slave VIP which responds to the AXI commands and generates
read payload and write responses.
X-Ref Target - Figure 1-2
S_AXI
SystemVerilog Interface AXI Protocol Checker
X18493-121316
Figure 1-3 shows the AXI pass-through VIP which protocol checks all AXI transactions that
pass through it. The IP can be configured to behave in the following modes:
• Monitor only
• Master
• Slave
The AXI protocol checker does not exist in the synthesized netlist.
X-Ref Target - Figure 1-3
S_AXI M_AXI
SystemVerilog Interface AXI Protocol Checker
X18494-121316
IMPORTANT: When using the Vivado ® simulator, the AXI Protocol Checker IP [Ref 3] is used in place of
the ARM AMBA Assertions.
Feature Summary
• Supports AXI3, AXI4, or AXI4-Lite interface
• Configurable as an AXI master, AXI slave, and in pass-through mode
• Configurable simulation messaging
• Provides simulation AXI protocol checking
Applications
The AXI VIP is for verification and system engineers who want to:
Information about other Xilinx LogiCORE IP modules is available at the Xilinx Intellectual
Property page. For information about pricing and availability of other Xilinx LogiCORE IP
modules and tools, contact your local Xilinx sales representative.
Product Specification
The AXI VIP core supports the AXI3, AXI4, and AXI4-Lite protocols.
Standards
The AXI interfaces conform to the ARM ® Advanced Microcontroller Bus Architecture
(AMBA ®) AXI version 4 specification [Ref 2], including the AXI4-Lite control register
interface subset.
Performance
The AXI VIP core synthesizes to wires and does not impact performance.
User Parameters
Table 2-1 shows the AXI VIP core user parameters.
Type: long
Value range: 0..1024
AWUSER_WIDTH 0 Width of the *_axi_awuser
AXI4LITE: 0
READ_ONLY: 0
Type: long
Value range: 0..1024
ARUSER_WIDTH 0 Width of the *_axi_aruser
AXI4LITE: 0
WRITE_ONLY: 0
Type: long
Value range: 0..1024
WUSER_WIDTH 0 Width of the *_axi_wuser
AXI4LITE: 0
READ_ONLY: 0
Type: long
Value range: 0..1024
BUSER_WIDTH 0 Width of the *_axi_buser
AXI4LITE: 0
READ_ONLY: 0
Type: long
Value range: 0..1024
RUSER_WIDTH 0 Width of the *_axi_ruser
AXI4LITE: 0
WRITE_ONLY: 0
Notes:
1. SUPPORTS_NARROW is treated as SUPPORTS_NARROW_BURST in Vivado IP integrator.
Port Descriptions
Table 2-2 shows the AXI VIP independent port descriptions.
Table 2-3 lists the interface signals for the AXI VIP core in master or pass-through mode.
The m_axi_aw*, m_axi_w*, and m_axi_b* signals are not shown on the port list when
the READ_WRITE MODE parameter is READ_ONLY. The m_axi_ar* and m_axi_r* signals
are not shown on the port list when the READ_WRITE MODE parameter is WRITE_ONLY. See
the AXI specification for port definitions.
Notes:
1. SUPPORTS_NARROW is treated as SUPPORTS_NARROW_BURST in Vivado IP integrator.
Table 2-4 lists the interface signals for the AXI VIP core when it has been configured to be
in slave or pass-through mode.
Notes:
1. SUPPORTS_NARROW is treated as SUPPORTS_NARROW_BURST in Vivado IP integrator.
AW/W/B
X18495-121316
AW/W/B
X18496-121316
AW/W/B AW/W/B
AXI Pass-Through
AXI Master System AXI Slave System
AR/R VIP AR/R
X18497-121316
Clocking
This section is not applicable for this IP core.
Resets
The AXI VIP requires one active-Low reset, aresetn. The reset is synchronous to aclk. The
reset is optional based on HAS_ARESETN.
• Vivado Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994)
[Ref 4]
• Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 5]
• Vivado Design Suite User Guide: Getting Started (UG910) [Ref 6]
• Vivado Design Suite User Guide: Logic Simulation (UG900) [Ref 7]
If you are customizing and generating the core in the Vivado IP integrator, see the Vivado
Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994) [Ref 4] for
detailed information. IP integrator might auto-compute certain configuration values when
validating or generating the design. To check whether the values do change, see the
description of the parameter in this chapter. To view the parameter value, run the
validate_bd_design command in the Tcl console.
You can customize the IP for use in your design by specifying values for the various
parameters associated with the IP core using the following steps:
For details, see the Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 5] and
the Vivado Design Suite User Guide: Getting Started (UG910) [Ref 6].
Note: Figures in this chapter are an illustration of the Vivado Integrated Design Environment (IDE).
The layout depicted here might vary from the current version.
Figure 4-1 shows the AXI VIP Vivado IDE Basic Settings tab configuration screen.
X-Ref Target - Figure 4-1
• Component Name – The component name is used as the base name of output files
generated for the module. Names must begin with a letter and must be composed
from characters: a to z, 0 to 9 and "_".
• Interface Mode – Control the mode of protocol to be configured as master, slave, or
pass-through.
• Protocol – Select the specific AXI protocol.
• Read or Write Mode – Enable the AXI read or write mode.
• Address Width – Select the address width. Default at 32.
• Data Width – Select the data width. Default at 32.
• ID Width – Select the ID width. Default at 0.
• User Signal Widths – Select the width for each user signal. Default at 0.
Figure 4-2 shows the AXI VIP Vivado IDE Advanced Settings tab configuration screen. For
more information on the user parameters, see Table 2-1.
X-Ref Target - Figure 4-2
User Parameters
For the relationship between the fields in the Vivado IDE and the User Parameters (which
can be viewed in the Tcl Console), see Table 2-1.
Output Generation
For details, see the Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 5].
IP Sources
The IP sources are held in the subdirectories of the <ip_source_dir>.
Table 4-2: IP Sources
Name Description
hdl/*.sv AXI VIP source files.
AXI VIP generated top-level file for synthesis. Optional, generated if
synth/<component_name>.sv
synthesis target selected.
AXI VIP generated top-level file for simulation. Optional, generated
sim/<component_name>.sv
if simulation target selected.
X18577-121316
The AXI VIP is a SystemVerilog class library that is supported by most simulators. The AXI
VIP uses similar naming and structures as the Universal Verification Methodology (UVM) for
core design. The AXI VIP uses advanced verification techniques such as constrained
randomization and transaction level modeling. It is coded in SystemVerilog. The AXI VIP is
comprised of two parts. One is instanced like other traditional IP (modules in the static/
physical world) and the second part is used in the dynamic world in your verification
environment. The AXI VIP is an IP which has a static world connected to the dynamic world
with a virtual interface. The virtual interface is the only mechanism that can bridge the
dynamic world of objects with the static world of modules and interfaces.
• User environment
• Master agent
• AXI master VIP
The user environment and master agent are in the dynamic world while the AXI master VIP
is in the static world. The user environment communicates with the master agent and the
master agent communicates with the AXI VIP interface though a virtual interface. The
master agent has four class members:
For more information about the master agent, see Appendix C, AXI VIP Agent and Flow
Methodology.
Test Bench
User Environment
Master Agent
Monitor
Virtual Interface
Interface
Static World
AXI System
X18578-121316
Figure 4-5 shows how a write transaction is constructed and sent to the AXI VIP interface.
The user environment first declares a variable of the transaction type and then requests the
Master Write Driver for a handle to a new transaction. During the create_transaction,
the Master Write Driver sets properties on the transaction based on the physical
configuration of the AXI VIP.
Using the handle, the user environment sets up the members of the transaction by either
filling in using access methods or randomization. Once the transaction has been
configured, the transaction is passed back to the Master Write Driver which sends it to the
AXI VIP through a virtual interface and the AXI VIP interface pins start to wiggle. The read
transaction flow follows a similar process, except using the Master Read Driver as the source
of the handle to the transaction.
X18579-121316
• User environment
• Slave agent without a memory model
• AXI slave VIP
The user environment and slave agent are in the dynamic world, while the AXI slave VIP is
in the static world. The user environment communicates with the slave agent and the slave
agent communicates with the AXI VIP interface though a virtual interface. The slave agent
without a memory model has four class members.
For more information about the slave agent, see Appendix C, AXI VIP Agent and Flow
Methodology.
Test Bench
User Environment
Slave Agent
Monitor
Virtual Interface
Interface
Static World
AXI System
X18580-121316
Figure 4-7 shows how a write response transaction is constructed and sent to the AXI VIP
interface. The user environment first declares a variable of the transaction type which is
used by the user environment to manage the transaction. The user environment then calls
get_wr_reactive which blocks until a write transaction has been received by the Slave
Write Driver.
The Slave Write Driver waits until it receives a write command, and then it returns the
handle to the transaction. The user environment fills in the response portion of the
transaction by either randomization or member functions of the transaction class. The Slave
Write Driver then sends it to the AXI VIP interface through a virtual interface and the AXI VIP
interface related pins start to wiggle. The read response transaction flow follows a similar
process.
X18581-121316
DATA_WIDTH
2(ADDR_WIDTH – log2(DATA_WIDTH/8)) - 1
X18984-041117
IMPORTANT: This memory has no support for built-in system tasks such as readmemh. You can use the
backdoor_memory_write to write all of the file information into the memory. Reset has no effect on
memory content.
• User environment
• Slave agent with a memory model
• AXI slave VIP
The user environment and slave agent are in the dynamic world, while the AXI slave VIP is
in the static world. The user environment communicates with the slave agent and the slave
agent communicates with the AXI VIP interface though a virtual interface. The slave agent
without a memory model has five class members:
For more information about the slave agent with memory model, see Appendix C, AXI VIP
Agent and Flow Methodology.
Different from the AXI slave VIP, the AXI slave simple memory VIP does not need the user
environment to create and fill in write/read reactive transaction since all these are being
done in the slave memory agent. Refer to the multiple simsets for its usage.
Test Bench
Pass-Through Agent Master Agent Slave Agent Pass-Through Agent Dynamic World
DUT
Static World
Interface
Interface
AXI Pass-Through AXI System AXI Pass-Through
AXI Master IP AXI Slave IP
VIP VIP
X18582-121316
2. After the General Output Products is delivered, right-click bd design again and select
Create HDL Wrapper.
3. Figure 4-11 shows the complete hierarchy of the instances after the wrapper generates.
X-Ref Target - Figure 4-11
4. Use the generated wrapper as a DUT module in the test bench and the hierarchy path of
these three AXI VIPs are DUT.design_1.axi_vip_0.inst,
DUT.design_1.axi_vip_1.inst, and DUT.design_1.axi_vip_2.inst.
5. The best method to identify the VIP instance in the hierarchy is after the connection of
all the IPs and the validation check. Click the Simulation Settings, set up the tool, and
then click Run Simulation. Figure 4-12 shows the Mentor Graphics Questa Advanced
Simulator results. After the hierarchy is identified, it is used in the SystemVerilog test
bench to drive the VIP APIs.
After the AXI VIP is instantiated in the IP integrator design and its hierarchy path found, the
next step is using the AXI VIP in the test bench. See Chapter 5, Example Design.
Required Constraints
This section is not applicable for this IP core.
Clock Frequencies
This section is not applicable for this IP core.
Clock Management
This section is not applicable for this IP core.
Clock Placement
This section is not applicable for this IP core.
Banking
This section is not applicable for this IP core.
Transceiver Placement
This section is not applicable for this IP core.
Simulation
For comprehensive information about Vivado simulation components, as well as
information about using supported third-party tools, see the Vivado Design Suite User
Guide: Logic Simulation (UG900) [Ref 7].
IMPORTANT: For cores targeting 7 series or Zynq-7000 devices, UNIFAST libraries are not supported.
Xilinx IP is tested and qualified with UNISIM libraries only.
Example Design
This chapter contains information about the example design provided in the Vivado®
Design Suite.
IMPORTANT: The example design of this IP is customized to the IP configuration. The intent of this
example design is to demonstrate how to use the AXI VIP. The AXI VIP can only act as a protocol checker
when contained within a VHDL hierarchy. Do not import two different revision/versions of the
axi_vip packages. This will cause elaboration failures. All AXI VIP and parents to the AXI VIP must be
upgraded to the latest version.
Overview
Figure 5-1 shows the AXI VIP example design.
X-Ref Target - Figure 5-1
This section describes the example tests used to demonstrate the abilities of the AXI VIP
core. Example tests are delivered in SystemVerilog. The example design is available in the
AXI VIP installation area in the Tcl Console folder in an unencrypted format.
When the core example design is open, the example files are delivered in a standard path
test bench and bd design are under directory imports. The packages are under the directory
example.srcs/sources_1/bd/ex_sim/ipshared.
The AXI master VIP creates write/read transactions and sends them to the AXI pass-through
VIP. The AXI pass-through VIP receives transactions from the AXI master VIP and sends them
to the AXI slave VIP. The AXI slave VIP receives transactions from the AXI pass-through VIP,
generates write/read responses, and sends the responses back to the AXI pass-through VIP
and then back to AXI master VIP.
Monitors for the AXI VIP (master, pass-through, and slave) are always on and collect all of
the information from the interfaces. The monitors convert the interface information back to
the transaction level and sends it to the scoreboard. Two scoreboards are built in the test
bench which performs self-checking for the AXI master VIP against the AXI pass-through
VIP and the AXI slave VIP against the AXI pass-through VIP.
The AXI VIP core is not fully autonomous. If tests are written using the APIs, there are
different methods from the user environment to set up the transaction. It is possible that
the AXI protocol can be accidentally violated. The member functions of the transaction class
performs quick protocol and configuration checks. Xilinx recommends the use of
transaction randomization and constraints for generating generic transactions.
Furthermore, it is possible to further modify a transaction after it was originally generated
through a randomization.
When the AXI VIP is configured in pass-through mode, it has the ability to be a passive
monitor or it can take control of the interface. The AXI VIP can change to be a master
driving a downstream slave or a slave responding to the master. This process can be done
during a simulation at any time and then changed back to pass-through mode according to
your preference.
When it is switched to runtime master mode, it behaves exactly as an AXI master VIP. When
it is switched to runtime slave mode, it behaves exactly as an AXI slave VIP.
IMPORTANT: Make sure all transactions have completed before switching modes. Examples of how to
wait for the transactions finishing can be found in the example design.
Test Bench
This chapter contains information about the test bench for the example design provided in
the Vivado ® Design Suite.
To open the example design either from the Vivado IP catalog or Vivado IP integrator
design, follow these steps:
In both scenarios, a new project with the example design is created. The example design has
the master, pass-through, and slave VIP connected directly to each other as shown in
Figure 5-1. The configuration of the example design matches the original VIP configuration.
The AXI VIP example design in the 2017.1 release has simulation sets listed in Table 6-1. The
sim_all_config is a comprehensive simulation set. See the AXI VIP Example Test Bench
and Test section for a list of features. It shows different examples of how to use the AXI VIP
in a complex method.
For ease of use, 10 additional simulation sets with simple codes are also included in the
example design. Naming of these 10 simulation sets:
sim_<basic or adv>_mst_<mode>__pt_<mode>__slv_<mode>
For the 10 simulation set test benches, it includes three files which are generic_tb.sv,
master stimulus, and slave stimulus.
• The generic_tb performs a simple self-checking of the master side (can be AXI
master VIP or AXI pass-through VIP in runtime master mode) against the slave side (can
be AXI slave VIP or AXI pass-through VIP in runtime slave mode).
• Master stimulus is generated by the AXI master VIP or AXI pass-through VIP in the
runtime master mode.
• Slave stimulus is generated by the AXI slave VIP or AXI pass-through VIP in the runtime
slave mode with/without the memory model. The slave mem stimulus file is included
and you can access the file to check the AXI slave VIP with the memory model.
The difference between basic and advanced simulation sets is that the basic simulation set
shows the code snippets which are needed in the test bench to use the AXI VIP. Advanced
simulation set adds more APIs such as user-configured READY signals which are optional.
For more information, see the example design in the Vivado Design Suite and for usage of
APIs, see the Xilinx AXI VIP API Documentation [Ref 11].
1. To generate a transaction for the AXI master VIP, see the mst_stimulus.sv from any
of the 10 simulation sets in Table 6-1.
2. To generate a transaction response for a basic AXI slave VIP, see the
slv_basic_stimulus.sv from any of the 10 simulation sets in Table 6-1. For
memory model requirements, see the mem_basic_stimulus.sv.
3. To generate a transaction response for an advanced AXI slave VIP, see the
slv_stimulus.sv from any of the 10 simulation sets in Table 6-1. For memory model
requirements, see the mem_stimulus.sv.
4. To generate a transaction for the AXI pass-through VIP, see the
passthrough_mst_stimulus.sv from any of the simulation sets in Table 6-1.
5. To generate a transaction response for a basic AXI pass-through VIP, see the
passthrough_slv_basic_stimulus.sv from any of the simulation sets in
Table 6-1. For memory model requirements, see the
passthrough_mem_basic_stimulus.sv.
6. To generate a transaction response for an advanced AXI pass-through VIP, see the
passthrough_slv_stimulus.sv from any of the simulation sets in Table 6-1. For
memory model requirements, see the passthrough_mem_stimulus.sv.
7. When you open the AXI VIP example design under the Sources window, it shows 11
simulation sets. You can choose any simulation sets and run simulation or view the
source codes of each test bench.
Figure 6-1 to Figure 6-3 show the basic, advanced, and all configured simulation sets for
AXI VIP.
X-Ref Target - Figure 6-1
sim_basic_mst_passive_pt_mst_slv_comb
Testbench
passthrough_mst_stimulus.sv slv_basic_stimulus.sv
sim_basic_mst_active_pt_slv_slv_passive
Testbench
Pass-Through VIP
Slave VIP
Master VIP (Runtime Slave without
(Passive)
Memory Model)
mst_stimulus.sv passthrough_slv_basic_stimulus.sv
sim_basic_mst_active_pt_mem_slv_passive
Testbench
Pass-Through VIP
Slave VIP
Master VIP (Runtime Slave with
(Passive)
Memory Model)
mst_stimulus.sv passthrough_mem_basic_stimulus.sv
sim_basic_mst_active_pt_passive_slv_mem
Testbench
mst_stimulus.sv mem_basic_stimulus.sv
sim_basic_mst_active_pt_passive_slv_comb
Testbench
mst_stimulus.sv slv_basic_stimulus.sv
X18985-033017
sim_adv_mst_passive_pt_mst_slv_comb
Testbench
passthrough_mst_stimulus.sv slv_stimulus.sv
sim_adv_mst_active_pt_slv_slv_passive
Testbench
Pass-Through VIP
Slave VIP
Master VIP (Runtime Slave without
(Passive)
Memory Model)
mst_stimulus.sv passthrough_slv_stimulus.sv
sim_adv_mst_active_pt_mem_slv_passive
Testbench
Pass-Through VIP
Slave VIP
Master VIP (Runtime Slave with
(Passive)
Memory Model)
mst_stimulus.sv passthrough_mem_stimulus.sv
sim_adv_mst_active_pt_passive_slv_mem
Testbench
mst_stimulus.sv mem_stimulus.sv
sim_adv_mst_active_pt_passive_slv_comb
Testbench
mst_stimulus.sv slv_stimulus.sv
X18986-033017
sim_all_config
Testbench
Slave VIP
Master VIP Pass-Through VIP
(Without Memory Model)
X18988-033017
1. Create module test bench as all other standard SystemVerilog test benches.
module testbench();
…
endmodule
3. Declare agents. One agent for one AXI VIP has to be declared. Depending on the AXI VIP
interface mode, different typedef class should be called for declaration of the agent.
Name Description
<component_name>_mst_t Master VIP
<component_name>_slv_t Slave VIP without memory model
<component_name>_slv_mem_t Slave VIP with memory model
<component_name>_passthrough_t Pass-through VIP without memory model
<component_name>_passthrough_mem_t Pass-through VIP with memory model
4. Create a new for the agent and pass the hierarchy path of IF correctly into the new
function. Before the agent is set to new, run the simulation with an empty test bench to
find the hierarchy path of the AXI VIP instance. A message like this shows up and then
puts the path into a new function (see Figure 4-12).
agent = new("my VIP agent", <hierarchy_path>.IF);
Start Agent
For the VIP to start running, start agent has to be called. The following shows how the
master, slave, and pass-through VIPs start to run.
mst_agent.start_master();
Then, generate the transaction. For more information about how to generate transaction,
see the Vivado example design simset and look for mst_stimulus.sv.
slv_agent.start_slave();
Switch AXI pass-through VIP into the runtime slave mode. The <hierarchy_path> can be
found in step 4 and then start the slave agent.
<hierarchy_path>.set_slave_mode();
passthrough_agent.start_slave();
For more information, see the Vivado example design simset and look for
passthrough_slv_basic_stimulus.sv/passthrough_slv_stimulus.sv.
Switch AXI pass-through VIP into the runtime master mode. The <hierarchy_path> can
be found in step 4 and then start the master agent.
<hierarchy_path>.set_master_mode();
passthrough_agent.start_master();
Create transaction. For more information, see the Vivado example design simset and look
for passthrough_mst_stimulus.sv.
Default is in pass-through mode. If you want to switch back to the pass-through mode from
the master/slave mode, you have to call API set_passthrough_mode. The
<hierarchy_path> can be found in step 4 and then start the pass-through agent.
<hierarchy_path>.set_passthrough_mode();.
The following shows a list of related parameters and type definitions used in the AXI VIP:
IMPORTANT: You have to call stop_master when pass-through VIP switches from the runtime
master mode to the other mode. Similarly, you have to call stop_slave when pass-through VIP
switches from runtime slave mode to the other mode. For more information, see the example design in
Vivado. The start_master and start_slave of the pass-through VIP agent cannot be called at the
same time. When the pass-through VIP is switching from the runtime master mode to the runtime slave
mode, the stop_master has to be called. Vice versa, stop_slave has to be called.
Transaction Examples
There are different methods of configuring the transaction after it is created. In the example
design, simset_all_config, three methods are shown for write and read transactions.
Method 1 is to fully randomize the transaction after it is being created. Method 2 is similar
to AXI BFM WRITE_BURST and READ_BURST for migration purpose. Method 3 shows how to
use the APIs to set the transaction.
1. Create the transaction from the write driver of the master agent.
2. Randomize the transaction.
3. Send the transaction from the master agent write driver.
IMPORTANT: The API sent here is non-blocking. By default, the driver does not return transaction
information. If you want to receive transaction information back, the API,
set_driver_return_item, can be called and the related driver_return_item_policy can be
called here.
This methods shows how to use the APIs to set the command and data of the write
transaction.
1. Create the transaction from the read driver of the master agent.
2. Randomize the transaction.
3. Send the transaction from the master agent read driver.
IMPORTANT: The API sent here is non-blocking. If you want to receive transaction information back,
the driver return item policy needs to be set here.
This methods shows how to use the APIs to set the command and data of the read
transaction.
Upgrading
This appendix is not applicable for the first release of the core.
1. In Vivado IP integrator BD design, replace BFM with AXI VIP and configure the AXI VIP.
If the old BFM is AXI4 in slave mode, for example, set up the AXI VIP protocol to AXI4
and the interface mode to slave.
2. In the test bench, remove all BFM related tasks and add the following codes:
Because it is for migration purpose, no pass-through agent is declared since BFM did
not support pass-through mode.
° Start agent:
- If AXI VIP is in master mode:
mst_agent.start_master();
User Environment
Virtual Interface
AXI Interface
X18585-121316
AXI Monitor
• Monitors all five AXI channels: AW, AR, R, W, and B.
• It has seven analysis ports which you can select to use. By default, only
item_collect_port is ON, all other ports are OFF. You can use the API,
set_enabled, in each analysis port to switch ON the port. They include:
Name Description
Collects both write/read transaction information and converts to
item_collect_port
axi_monitor_transaction.
axi_cmd_port Collects both write/read channel information and converts to xil_axi_cmd_beat.
axi_rd_cmd_port Collects read address channel information and converts to xil_axi_cmd_beat.
axi_wr_cmd_port Collects write address channel information and converts to xil_axi_cmd_beat.
axi_bresp_port Collects write response channel information and coverts to xil_axi_resp_beat.
axi_wr_beat_port Collects write data channel information and converts to xil_axi_wr_beat.
axi_rd_beat_port Collects read data channel information and converts to xil_axi_read_beat.
• Collects and reorders R Channel beats and returns a completed transaction when the
RLAST is accepted.
• Collects and reorders B Channel response and returns a completed transaction when
the B channel is accepted.
• Transaction based protocol checking.
No
Yes
Assert WVALID
Yes
Assert WLAST
Address Insertion Delay
(Transaction)
Assert AWVALID
Last Write Beat
Accepted
X18586-033017
1. Driver asks for the next transaction through a get_next_item. This is a blocking get.
2. The user environment creates a single transaction. The transaction contains the
following:
° XIL_AXI_CMD_RETURN
° XIL_AXI_CMD_WLAST_RETURN
° XIL_AXI_WLAST_RETURN
° XIL_AXI_PAYLOAD_RETURN
° XIL_AXI_CMD_PAYLOAD_RETURN
° XIL_AXI_CMD_WLAST_PAYLOAD_RETURN
° XIL_AXI_WLAST_PAYLOAD_RETURN
6. The user environment receives the completed transaction if the driver return item policy
is not XIL_NO_RETURN.
X-Ref Target - Figure C-3
6
User Environment
2
3
1 5
X18587-121316
GET
Address Insertion
Delay (Transaction)
Assert ARVALID
Address Accepted
X18588-033017
1. Driver asks for the next transaction through a get_next_item. This is a blocking get.
2. The user environment creates a single transaction. The transaction contains the
following:
6
User Environment
2
3
1 5
X18589-121316
Initialize Current
Initial BREADY
BREADY
Configuration
Configuration
BREADY
Configuration
Queue
If not empty, replace
current BREADY
configuration.
GET BREADY
Configuration
Process Current
BREADY Configuration
Assert BREADY
Response Accepted
X18590-033017
Initialize Current
Initial RREADY
RREADY
Configuration
Configuration
RREADY
Configuration
Queue
If not empty, replace
current RREADY
configuration.
GET RREADY
Configuration
Process Current
RREADY Configuration
Assert RREADY
Response Accepted
RLAST
No
Asserted
X18591-033017
User Environment
Virtual Interface
AXI Interface
X18592-121316
AXI Monitor
• Monitors all five AXI channels: AW, AR, R, W, and B.
• Collects and reorders R Channel beats and returns a completed transaction when the
RLAST is accepted.
• Collects and reorders B Channel response and returns a completed transaction when
the B channel is accepted.
• Transaction-based protocol checking.
FIFO
FIFO
Reactive Put to
User Environment
GET
BRESP
Response Delay
(Transaction Property)
Assert BVALID
Response Accepted
Response Channel
Done
X18593-040517
Both the address and data channels have their READY responses configured independently
from the user environment. Only the response channel, B, relies on communication with the
user environment to make forward progress. The transaction flows through the write agent
in the following steps:
1. Master write response driver performs a blocking get to the user environment through
a get_next_item. Because the command has not yet been received, the user
environment must wait until the command has been received from the master.
2. The user environment performs a blocking get, get_next_item, on the reactive port
of the driver.
3. The driver at this time can accept the incoming beats of WDATA and AWADDR and
places them in a holding structure.
4. Only after the slave driver receives the complete AWADDR phase and the WDATA phase,
it transfers the command object through the reactive port to the user environment.
5. The user environment determines the correct response to the request and puts the
complete transaction on the REQUEST port of the driver. The transaction has:
° Command Information – AWADDR, AWLEN, AWSIZE, AWID, etc. From the original
command passed to the user environment.
8
User Environment
2 5
1 4 7
3 6
X18594-121316
Initialize Current
Initial AWREADY
AWREADY
Configuration
Configuration
AWREADY
Configuration
Queue
If not empty, replace
current AWREADY
configuration.
GET AWREADY
Configuration
Process Current
AWREADY
Configuration
Assert AWREADY
Address Accepted
X18595-040517
Initialize Current
Initial WREADY
WREADY
Configuration
Configuration
WREADY
Configuration
Queue
If not empty, replace
current WREADY
configuration.
GET WREADY
Configuration
Process Current
WREADY Configuration
Assert WREADY
WLAST
No
Asserted
X18596-040517
FIFO
Reactive Put to
User Environment
GET
Assert RVALID
Yes
Assert RLAST
X18597-040517
The address channel has its READY responses configured through the user environment.
The data channel relies on the user environment for timing and payload generation. The
transaction flows through the read agent in the following steps:
1. Master read response driver performs a blocking get to the user environment through a
get_next_item. Because the command has not yet been received the user
environment must wait until the command has been received from the master.
2. The user environment performs a blocking get, get_next_item, on the reactive port
of the driver.
3. The slave driver waits for an ARADDR command.
4. Only after the slave driver receives the completion ARADDR phase, it transfers the
command object through the reactive port to the sequencer. The command information
consists of the Command Information field with ARADDR, ARLEN, ARSIZE, ARID, etc.
5. The user environment creates a single transaction. The transaction contains the
following:
Initialize Current
Initial ARREADY
ARREADY
Configuration
Configuration
ARREADY
Configuration
Queue
If not empty, replace
current ARREADY
configuration.
GET ARREADY
Configuration
Process Current
ARREADY
Configuration
Assert ARREADY
Address Accepted
X18598-040517
User Environment
AXI Monitor Master Write Driver Master Read Driver Slave Write Driver Slave Read Driver
Virtual Interface
AXI Interface
X18599-121316
AXI Monitor
The same features for both master/slave agent monitors.
READY Generation
READY signals of write command channel, write data channel, write response channel, read
command channel, and read data channel are generated independently from other
attributes. The axi_ready_gen is the class used for READY generation.
The control of the READY signal is set in the DRIVER of the given AGENT. For masters these
are:
• RREADY
• BREADY
• AWREADY
• ARREADY
• WREADY
To control the generation of the READY signal there are two main configurations, however,
to simplify the programming model these might be presented as different configurations.
low_time high_time
*VALID
*READY
A B
X18603-031517
Note: The *READY does not drop until the specified number of cycles has occurred. The policy
repeats until the channel is given a different policy.
Figure C-17 shows that following event A, there is a delay of low_time ACLKs, then READY
is asserted. After high_time cycles of ACLK, READY is deasserted and the counter restarts
at A.
X-Ref Target - Figure C-17
low_time high_time
*READY
A B
X18601-031517
Note: There is a built-in watchdog that triggers after the event_cycle_count_reset cycles and
the programmed number of events has not been satisfied. This terminates that part of the policy. The
policy repeats until the channel is given a different policy.
The value of low_time can range from 0 to 256 cycles. The READY remains asserted for N
channel accept events, where N can be from 1 to N beats. This allows you to assert a READY
after some number of cycles and keep it asserted indefinitely or for some number of events.
When attempting to model a self-draining FIFO, an event cycle count time reset is provided.
This allows you to configure the READY to be deasserted after some number of events,
unless the event cycle count time has expired. In this case, the event count resets and the
READY remains asserted for N more events.
Figure C-18 shows that following event A, there is a delay of low_time ACLKs, then the
READY is asserted. It remains asserted for events E1 to E4 then deasserts since the event
count is satisfied. The algorithm then restarts at A.
X-Ref Target - Figure C-18
low_time
*READY
A E1 E2 E3 E4
Event Counter
X18600-031517
GEN_AFTER_VALID_SINGLE/RAND_AFTER_VALID_SINGLE
This policy is active when *VALID is detected to be asserted. When enabled, it drives the
*READY Low for low_time and then asserts the *READY until one handshake has been
detected. The policy repeats until the channel is given a different policy.
X-Ref Target - Figure C-19
low_time high_time
*VALID
*READY
A B
X18603-031517
GEN_AFTER_VALID_EVENTS/RAND_AFTER_VALID_EVENTS
This policy is active when *VALID is detected to be asserted. When enabled, it drives the
*READY Low for low_time and then drives the *READY High until either event_count
handshakes have been received OR event_count_reset number of cycles have passed.
The policy repeats until the channel is given a different policy.
delta1
*VALID
*READY
A E1 E2 E3 E4
Event Counter
X18602-121316
GEN_AFTER_VALID_OSC/RAND_AFTER_VALID_OSC
This policy is active when the *VALID is detected to be asserted. When enabled, it drives the
*READY Low for low_time and then drives the *READY High for high_time. The policy
repeats until the channel is given a different policy.
X-Ref Target - Figure C-21
low_time high_time
*VALID
*READY
A B
X18603-031517
GEN_AFTER_RANDOM
This policy is used to randomly generate different policies including low_time,
high_time, and event_count. When used, it randomly selects a new policy when the
previous policy has completed.
This uses the minimum/maximum pairs for generating the value of the low_time,
high_time, and event_count values.
Debugging
This appendix includes details about resources available on the Xilinx Support website and
debugging tools.
Documentation
This product guide is the main document associated with the AXI VIP. This guide, along with
documentation related to all products that aid in the design process, can be found on the
Xilinx Support web page or by using the Xilinx Documentation Navigator.
Download the Xilinx Documentation Navigator from the Downloads page. For more
information about this tool and the features available, open the online help after
installation.
Answer Records
Answer Records include information about commonly encountered problems, helpful
information on how to resolve these problems, and any known issues with a Xilinx product.
Answer Records are created and maintained daily ensuring that users have access to the
most accurate information available.
Answer Records for this core can be located by using the Search Support box on the main
Xilinx support web page. To maximize your search results, use proper keywords such as
• Product name
• Tool message(s)
• Summary of the issue encountered
A filter search is available after results are returned to further target the results.
AR: 68234
Technical Support
Xilinx provides technical support at the Xilinx Support web page for this LogiCORE™ IP
product when used as described in the product documentation. Xilinx cannot guarantee
timing, functionality, or support if you do any of the following:
• Implement the solution in devices that are not defined in the documentation.
• Customize the solution beyond that allowed in the product documentation.
• Change any section of the design labeled DO NOT MODIFY.
To contact Xilinx Technical Support, navigate to the Xilinx Support web page.
Xilinx Resources
For support resources such as Answers, Documentation, Downloads, and Forums, see
Xilinx Support.
• From the Vivado ® IDE, select Help > Documentation and Tutorials.
• On Windows, select Start > All Programs > Xilinx Design Tools > DocNav.
• At the Linux command prompt, enter docnav.
Xilinx Design Hubs provide links to documentation organized by design tasks and other
topics, which you can use to learn key concepts and address frequently asked questions. To
access the Design Hubs:
• In the Xilinx Documentation Navigator, click the Design Hubs View tab.
• On the Xilinx website, see the Design Hubs page.
Note: For more information on Documentation Navigator, see the Documentation Navigator page
on the Xilinx website.
References
These documents provide supplemental material useful with this product guide:
Revision History
The following table shows the revision history for this document.