fpgafs/doc/www/index.html

107 lines
5.0 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- (c) Benjamin Krill <ben@codiert.org> -->
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>FPGA Filesystem</title>
<style type="text/css" media="all">@import "f.css";</style>
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
</head>
<body>
<div id="headspace">
<div id="header">
<a href="#top" title="Top">Top</a> :
<a href="#concept" title="Concepts">Concept</a> :
<a href="#download" title="Download">Download</a> :
<a href="#contact" title="Contact">Contact</a>
</div>
</div>
<div id="logo">
<img src="img/fpgafs.png" alt="FPGAFS" />
</div>
<div id="content">
<a name="top" id="top"></a>
<div id="conspace"> </div>
<h1>FPGAFS</h1>
<p>It provides a framework for a high performance reconfigurable computer
environment for Linux. The abstraction between the reconfigurable device and the
user application is simplified by using a virtual filesystem and a thread
abstraction per device context.<br/>
FPGAFS consists of two major layers of abstraction. First, the directory
representation to the user application. This interface provides for each context
one directory with a specified content to transfer data. The second layer
provides an interface for low level driver. It gives the flexibility to register
a lot of different low level drivers for different accelerators which can be
operate at the same time in one target system.</p>
<h2 class="title">Concept</h2><a name="concept" id="concept"></a>
<h2 class="subtitle">Overall Design</h2>
<p>As the name already mentioned the project provides a virtual filesystem for the
operating system. The filesystem abstrect each each reconfigurable part inside a
host system or inside one chip by a directory. The permissions of the files can
provide access control for different users. The following listing shows the directory
entries which will be created. These entries can be seen as the assigned context to
the FPGA interface:</p>
<ul>
<li>/fpgafs/example/cmd: write only file, this is the interface to send
defined commands to the context.</li>
<li>/fpgafs/example/stat: read only file, from which the context's status
can be received.</li>
<li>/fpgafs/example/din: write only file, sends data to the reconfigurable
device.</li>
<li>/fpgafs/example/dout: read only file, receives calculated data from
the device.</li>
<li>/fpgafs/example/load: write only file, writes data which should be
loaded onto the reconfigurable device.</li>
<li>/fpgafs/foobar/lldrv: write only file, selects the low level driver
which should be used.</li>
</ul>
<p>
In general, the complete framework provides a generic interface to the userspace
and a flexible and changeable interface to the hardware. Figure 1 shows the design of
the framework. At the bottom, there are low level drivers which must be registered on
the main FPGAFS. On top of the low-level drivers, different contexts are shown
which are represented by directories.</p>
<div class="center">
<img class="border" src="img/design_overall.png" alt="overall design" />
</div>
<h2 class="subtitle">Low Level Driver</h2>
<p>All low level drivers implement an interface which will be used by more generalized
functions from the low level management. The structure "fpgafs_lldrv" provides at least
the defined function pointers. Each low level driver can be loaded and unloaded as a
common Linux module. The init function of each low level driver has to call the
registration function of the FPGAFS low level management module. At unloading the module
the unregistration function will be called. With this concept different hardware
accelerators can be supported and each low level driver can implement its own
communication functions. So each low level driver brings its own programming routine
for the accelerator. This gives the possibility to create accelerators that can handle
more than one application at once. For example, the accelerator can reprogram parts of
the accelerator and can be used without reconfiguring the whole accelerator. However,
this functionality totally depends on the underlying hardware and the programming
mechanism. But the framework will support such and other functionalities because of
the flexible layer concept.</p><br />
<p>More documentation can be found in the repository and can be enquired (see Contact).
Also the <a class="text" href="var/th2007.pdf" alt="dissertation">dissertation</a> can be
downloaded where the FPGAFS was developed.</p>
<h2 class="title">Download</h2><a name="download" id="download"></a>
FPGAFS keeps its development tree in a GIT repository. It can be downloaded with GIT clone.
<br /><br />
<h2 class="consol">$ git clone http://fpgafs.codiert.org/fpgafs.git</h2>
<h2 class="title">Contact</h2><a name="contact" id="contact"></a>
<p>Benjamin Krill: ben@codiert.org</p>
</div>
</body>
</html>