|
You can also directly modify the configuration bitstream, I do that for
evolving hardware. I'm sending you the section of the last paper that I wrote for ICES05 which describes how to modify it, (It is still in reviewing phase). Andres 3.3 Bitstream Manipulation Up to now, all
described evolving techniques are highly dependant on Xilinx tools,
making them
restrictive for on-chip evolution. An attempt for providing a similar
functionality from Jbits running on-chip has been proposed by Xilinx
engineers [21]: XPART (Xilinx
Partial
Reconfiguration Toolkit) is an application program interface (API), for Microblaze or PowerPC
microprocessors, that provides methods to read and modify select FPGA
resources
by using the ICAP (Internal Configuration Access Port). Anyway, XPART
was never
released. Directly evolving the configuration bitstream has been a very common technique. It has been widely used with the XC6200 family and on other custom platforms summarized in section 1. However, in every case one must maintain a fixed section – i.e. not evolved – in the bitstream. For instance, Thompson in [10], uses an XC6216 with an array of 64x64 logic cells, but the evolved circuit uses just an array of 10x10 logic cells, while keeping fixed input and output. In this case the evolved section of the bitstream is just that containing the 10x10 array while the sections for IO blocks and the remaining cells are kept constant during the evolution. Exactly the same principle can
be applied
for Virtex families, including Virtex II, Virtex II-Pro and eventually
Virtex 4:
LUT contents can be evolved, while keeping a fixed routing. By using
hard
macros, as described in 3.2, one can describe a computing cell. This
computing
cell can implement a neuron, a fuzzy rule, a simple LUT, or any
function,
including one or several LUTs; it can include also flip-flops for
making the
design synchronous, or it can just implement combinatorial circuits.
LUTs configuration
can be modified in an arbitrary way; however, routing must remain
fixed. Connectivity
among components of a computing cell is manually set when designing the
hard macro;
connectivity among computing cells is defined by an For the Virtex family, the
XAPP151 [23] describes in a detailed way the configuration bitstream,
specifying
the position of LUT contents on the bitstream. However, for the Virtex
II
family this documentation is not available and just a limited bitstream
description can be found in [24]. A Virtex-II bitstream is divided by columns and each
column is
composed by frames. There are different column types, each type with a
given
number of frames, as described in figure 2 (for more details refer to [24]). However, there is no documentation about frame
composition, consequently,
no information about LUT contents.
Figure 2. Virtex-II
configuration
bitstream composition We present in the following
paragraphs how
to address LUT contents on a bitstream. This problem can be solved by
exploring
the bitstream content. In the Virtex-II architecture each Even if it is not documented,
LUT contents
can be localized in the configuration bitstream. As shown in figure 2 a
Table 1. Frame description. The
first 12
bytes configure the IOB, the next 2 bytes configure the G-LUT contents
for the
top slice, the next byte has an unknown functionality, the next 2
configure the
G-LUT, … This sequence is repeated for every slice, and finishes by the
bottom
IOB configuration. *
Supposing it is the second frame of the first
Based on
this description one can determine any LUT content position on the
bitstream by
applying the following equation: Position= Size of the header
+ #GCLK_col_frames X #bytes/frame
+ #IOB_col_frames X
#bytes/frame
+ #
+ #Xcoord_of_
+ 1 frame X #bytes/frame
if
slice X coord is even
+ 2 frames X #bytes/frame
if
slice X coord is odd
+ 12 bytes -- IOB config.
+ 5 bytes X slice_Ycoord(from top)
+ 0 bytes
if G-LUT
+ 3 bytes
if
F-LUT Almost all
these values are constant for every Virtex-II family devices; just the
#bytes/frame depends on the number of Accessing
LUT contents on a partial bitstream is even easier, since one can
directly
address the target frame by setting the frame address in the bitstream
header
as described in [24]. Then, the table 1 description may
be used for directly localizing LUT contents on the frame. Grégory Mermoud wrote: You can generate scripts for FPGA editor and run it without using the GUI. To do that, you need to locate precisely the coordinates of the LUT to modify. I advise you to read the following paper that deals with such an approach: http://ic2.epfl.ch/~gmermoud/fuzzy_hard.pdf Grégory On 5/27/05, Lucas Lee <lucaswb.lee@gmail.com> wrote: |