XHWIF is the standard hardware interface to Xilinx FPGA-based hardware. This interface permits simple porting of both JBits and BoardScope to new hardware platforms. Once an XHWIF interface is defined for a particular piece of hardware, tools such as BoardScope will run without any recompilation or modification. In addition, other JBits applications which use the XHWIF interface will also typically run on the new hardware, usually without modification or re-compilation. Finally, part of the XHWIF package is TCP/IP based remote network access support. Once the XHWIF interface is ported to new hardware, the remote server and remote networked access to hardware are also automatically supported. The following topics are discussed below
The XHWIF Interface
XHWIF, the Xilinx hardware interface standard, is a Java interface for communicating with FPGA-based boards. It includes methods for reading and writing bitstreams to FPGAs, and methods for describing the kinds and number of FPGAs on the board. Also included are methods for incrementing the on-board clock, and for reading and writing to on-board memories, if they are available. Essentially, the interface describes the board, and enables sending data on and off the board.
The interface standardizes the way that applications communicate with hardware, so that using the same interface, applications like BoardScope for example, can communicate with a variety of boards. All of the hardware specific information is hidden inside of a class that implements the XHWIF interface. Using the Java programming language's Native Methods, XHWIF can communicate with hardware directly, through libraries or through a device driver.
The advantage of this approach is that new hardware can be quickly and easily supported. All that is required is that an XHWIF interface for the new hardware be implemented. Once this interface exists, all software which uses the XHWIF interface will run on the new hardware, without modification and without re-compilation.
The XHWIF Server
Once XHWIF is implemented for a new system, applications may directly access the new hardware. In addition, the XHWIF interface is supplied with a remote access interface. This permits applications to run, unmodified, on hardware at some remote location. All that is required is a TCP/IP networking connection to the remote hardware. XHWIF takes care of everything else.
This remote access is especially useful in applications such as the BoardScope debug tool. Using the remote access mode of XHWIF hardware can be shared among several users, even if they are at remote locations. It is no longer necessary to have a system dedicated to each user. The diagram below shows how the XHWIF remote server operates.
Accessing hardware remotely using XHWIF.
The user or vendor supplied XHWIF interface provides direct access to the FPGA based hardware. In the normal "local" mode, this interface is used by XHWIF applications to perform all of the functions required by the system. In remote networked mode, however, this direct interface is used by the XHWIF Server to access the local hardware. This server connects to some host XHWIF application via a TCP/IP network, using the XHWIFnet remote interface. This XHWIFnet interface operates identically to other XHWIF direct hardware interfaces, except that instead of accessing the hardware directly, it contacts the XHWIF Server and uses it to access the hardware.
In order to connect remotely to a system, the XHWIF Server must be run on the system containing the FPGA-based hardware. This server is a Java application which waits for a network connection from a remote XHWIF application and performs all hardware access functions for the remote application. Aside from the possible slow speed of a network connection, remote operation of XHWIF is completely transparent. There should be no functional difference between using XHWIF remotely or locally. The figure below shows the user interface for the XHWIF Server.
The XHWIF remote access server.
In the figure above, the tracing feature has been manually emabled. This allows a detailed view of the messages being exchanged between the host and the server. In this case, the BoardScope debug tool is establishing communication with some undefined hardware platform. The XHWIF server returns messages containing a description of the hardware platform and its state and configuration. Messages from the host to the server are also used to control various aspects of the hardware, including reset, FPGA download, FPGA readback and clock control.
Running the XHWIF Server
The command line used to start the XHWIF Server is:
Note that in the example command line above, "java" is the Java interpreter from Sun Microsystems. Any Java interpreter, including Microsoft's JView may be used. Here the <Board> parameter is the name of the system being accessed. Again, the hardware must reside on the system running the XHWIF Server.
Finally, an application which connects up to some remote server must use the XHWIFserver interface. This interface is much like any other XHWIF board interface, except that instead of directly accessing hardware, messages are sent via a network to the server, which accesses the hardware by proxy. The BoardScope debug tool uses the command line below to remotely access a running XHWIF Server.
While this format for command line flags is application dependent, this format is supported directly by XHWIF and is recommended. The command line flag consists of two parts. The first is "XHWIFNet@", which indicates that the XHWIFNet interface is being used. The second part is <machine name> which gives the name of the remote host running the server. In a local network environment, this is typically some machine name such as "Yertle". It is possible, however, to operate in an even more remote networking scenario. In this case, the machine name could be something such as "yertle.xilinx.com". Experiments using the XHWIF remote access over large distances on public networks indicates a very reasonable level of performance.
Finally, the use for remote access using XHWIF can extend beyond simple remote debug capabilities. Applications may use XHWIF to remotely upgrade hardware even after it has been deployed in the field. Consumers can use this capability to upgrade or modify functionality of networked devices. Any place where probing or modifying FPGA based hardware remotely is of interest is a candidate for XHWIF and its remote networking capabilities.
XHWIF interface is presently ported to the following hardware systems