public domain tools for FPGAs
Go to file
2012-09-26 11:53:56 +08:00
autotest.gold fixed minor iob bugs, improved iob_cfg test 2012-09-23 15:04:34 +02:00
debian debian: update ocommit for get-orig-source 2012-09-19 22:41:19 +08:00
doc create a subfolder for libs 2012-09-19 21:49:30 +08:00
libs fixed minor iob bugs, improved iob_cfg test 2012-09-23 15:04:34 +02:00
mini-jtag mini-jtag: finish readreg 2012-09-26 11:53:56 +08:00
.gitignore renamed fpga_net to fnet, added hello_world 2012-09-17 14:05:27 +02:00
autotest_diff.sh autotest cleanup 2012-08-31 07:05:58 +02:00
autotest.c improved iob config 2012-09-23 03:10:01 +02:00
bit2fp.c changelog update 2012-09-24 04:31:22 +02:00
draw_svg_tiles.c cleanup, some more devices 2012-08-02 08:01:46 +02:00
fp2bit.c broke bits.c into 2 separate files bit_regs.c and bit_frames.c 2012-08-19 13:31:14 +02:00
fpgastyle.css css 2012-06-23 16:55:17 +02:00
hello_world.c improving hello_world 2012-09-19 07:47:37 +02:00
hstrrep.c minor testing and lut fixes, merge_log.sh helper script 2012-08-29 03:15:31 +02:00
lib.svg tiny svg steps 2012-06-18 04:47:51 +02:00
LINKS ran into a wall with routing drawings, starting a C model of the chip 2012-07-11 16:01:01 +02:00
lut.svg finished lut equiv. schematic 2012-06-23 16:54:53 +02:00
Makefile fixed minor iob bugs, improved iob_cfg test 2012-09-23 15:04:34 +02:00
Makefile.common using bash in Makefile 2012-09-20 12:22:43 +08:00
merge_log.sh slightly improved switch design, preparing for switch device 2012-09-05 04:52:43 +02:00
merge_seq.c higher-level compiler warnings - thanks to Werner! 2012-08-14 03:04:33 +02:00
new_fp.c minor floorplan fixes 2012-08-25 12:21:36 +02:00
pair2net.c minor cleanup 2012-08-16 12:17:37 +02:00
README TODO update 2012-09-24 06:55:41 +02:00
sort_seq.c autotester 2012-08-16 10:57:51 +02:00
UNLICENSE ramb16 cleanup, going public domain, see unlicense.org 2012-06-26 01:45:43 +02:00

Introduction
 fpgatools is a toolchain to program flexible programmable gate arrays
 (FPGAs). The only supported chip at this time is the xc6slx9, a cheap
 (ca. 10 USD) but powerful 45nm-generation chip with about 2400 LUTs,
 block ram and multiply-accumulate devices.
 The principles of fpgatools are:

 *) reach the maximum physical performance of the chip
 *) fast development cycles
 *) independent toolchain that only depends on other free software
 *) bootstrap on chip, i.e. program the fpga from a softcore running
    on the same fpga
 *) complete package including all tools to get started such as jtag,
    debugging, parts data and designs for prototyping hardware
 *) work towards a design flow that includes later manufacturing
    in different ASIC processes, include information about ASIC
    processes, libraries, GDS generation, etc.
 *) lightweight C implementation without GUI
 *) supported platform: Linux
 *) license: public domain

FAQ
 todo

Libraries

- libfpga-cores      reusable cores
- libfpga-stdlib     standard design elements on top of libfpga-control
- libfpga-control    programmatic access to libfpga-model
- libfpga-model      memory-only representation of an FPGA
- libfpga-floorplan  reads and writes .fp floorplan files
- libfpga-bit        reads and writes .bit bitstream files

Design Utilities

- hello_world        outputs an AND gate floorplan to stdout
- new_fp             creates empty .fp floorplan file
- fp2bit             converts .fp floorplan into .bit bitstream
- bit2fp             converts .bit bitstream into .fp floorplan
- draw_svg_tiles     draws a simple .svg showing tile types

fpgatools Development Utilities

- autotest           executes test suite
- sort_seq           sorts line-based text file by sequence numbers in strings
- merge_seq          merges a pre-sorted text file into wire sequences
- pair2net           reads the first two words per line and builds nets
- hstrrep            high-speed hashed array based search and replace util

Design Principles

- small independent command line utilities, no GUI
- plain C, no C++
- simple Makefiles
- text-based file formats
- automatic test suite
- public domain software

TODO

short-term (1 month):
* support counter sample (including clock, jtag)
* support reading iologic switches
* autotest: fix roundtrip issues in routing_sw test
* autotest: automate generation of gold standards
* autotest: protect stderr of diff executable in autotest log
* autotest: cleanup extensions and switch to new extension system
* autotest: include samples such as hello_world in testing
* 3 Debian packages: libfpga, libfpga-doc, fpgatools

mid-term (6 months):
* support chips other than xc6slx9, maybe an ftg256 or fgg484-packaged
  xc6 or the xc7a100
* more cases in switches (98% done) and inter-tile connections (15% done)
* more cases in logic block configuration
* configuration of bram and macc blocks, bram initialization data
* write standard design elements for libfpga-stdlib library
* several places might benefit from a bison parser:
  - switchbox description into bit parser/generator (bit_frames.c)
  - inter-tile wire connections (model_conns.c)
  - configure devices and route wires

long-term (>6 months):
* auto-crc calculation in .bit file
* support lm32 or openrisc core, either via libfpga or iverilog backend
* ipv6 or vnc in hardware?
* iverilog fpga backend

ChangeLog

2012-09-24
* First design verified: hello_world is an unclocked AND gate design
  which was verified in a xc6slx9.

2012-08-20
* Beginning of full fidelity circle with model, floorplan, conversion
  between floorplan and binary configuration formats.

2012-06-03
* Project started.