fpga lcd display factory
Not long ago, we published some articles about controlling different kinds of displays, using your FPGA. On a VGA screen, on a small LCD screen, on a PSP LCD or even for the old, but nasty-analog-signaled NTSC system.
And today, we share with you another great tutorial on how to control a LCD TFT, that takes advantage of the ability of a FPGA to fully control what happens on every single clock cycle.
You may think, well, another LCD tutorial, more on the same…And you will be wrong. There are no identical systems. Each one has its own features which make it unique, and we want you to know them.
This is a very well explained tutorial that gives you all the files you will need to successfully implement it: schematics, VHDL code files, Project files, datasheets of the display…Everything!
In addition the author takes some extra time to explain what really matters about this project and what makes it different from any other “How to control your LCD screen with your FPGA”. To properly control a TFT display you need two specific timed signals: DCLK (Pixel Clock) and DE (Data Enable). Why the code lines that control these two signal are coded the way they are is carefully explained in the article so you don´t want to miss it. Understanding this will make you capable of playing with any other TFT screen you may find.
The panel uses a 30-pin connector (which plugs into a port on the mainboard). The 30 pin connector then splits into two: one set of wires goes to the inverter for the backlight, and the other set containing the LVDS & EDID wires goes to the PCB on the LCD panel.
FPD-Link is a high speed digital video interface that is used to transmit video from the GPU (laptop/tablet/TV motherboard) to the display panel. FPD-Link uses LVDS (Low Voltage Differential Signalling), which transmits bits of data as differences in voltages between the 2 twisted pair wires. LVDS reduces the generation of electromagnetic noise, and due to the twisted pair cables and differential signalling, is resistant to common mode noise as well. Note that most literature refers to FPD-Link as "LVDS", although LVDS is just the electrical standard, and FPD-Link defines the signalling/packet structure.
From what I"ve read here and here, FPD-Link is being phased out and replaced by embedded Display Port. As panel resolutions increase, LVDS requires multiple channels (eg at 1080p60, FPD-Link requires around 4 or 5 channels @ ~135Mhz), but eDP can do with only 1 or 2 channels, and much higher signalling rates (1.6, 2.7, 5.4 Gbits). eDP would be interesting to try, but it would need a more expensive FPGA that has Gigabit transceivers.
I then turned to the the laptop mainboard, since if there was a LVDS transmitter, I could find a way to route the signals from the FPGA to the transmitter. I managed to find schematics for the laptop, but the LVDS signals were being routed directly from the Intel Chipset. I checked the datasheet for the chipset (an Intel 965 Express), and it confirmed that the Chipset was infact generating LVDS. This meant that it wouldn"t be possible to tap the data lines of any LVDS transmitter, and I would need to find a way of generating it.
I was searching for LCD addon boards (PMOD, FMC etc.) to see how the signalling & conversion is implemented, when I found a forum post detailing how Avnet"s 7-inch Zed Touch Display Kit generates a LVDS signal using the Zynq"s TMDS33 outputs.
The LCD panel uses a CFL backlight (it"s from an old laptop), so my first task was to turn on the backlight. I referred to the pinout of the connector, and the schematics of the laptop main board to try to figure out how it was being controlled.
The next blog post LCD panel + FPGA with an HDMI sink = External Display will continue from here: implement a HDMI sink, and display the received video on the LCD panel.
If you’re reading this article on a desktop or laptop computer, you’re probably staring at millions of pixels on a TFT LCD display. TFT became a dominant technology due to its picture quality and fast response times, but it’s not the only way to build an LCD. There are cheaper technologies, such as STN and its color variant, CSTN. They’re rarely used nowadays, but [Wenting Zhang] had one lying around and wanted to take a crack at driving it.
[Wenting] instead grabbed an FPGA and got to work. Driving displays can be taxing for small microcontrollers, so an FPGA is always a great choice when working on such projects. They’re easily capable of generating whatever weird and wacky signals are required, and can generate many such signals in parallel without breaking a sweat.
Adding a character liquid crystal display (LCD) to an FPGA project is a simple and inexpensive way to get your project talking. In this post I discuss interfacing an FPGA with garden-variety generic 1602 LCD like the one pictured nearby. These alphanumeric displays include an integrated HD44780-compatible controller with a parallel interface that enables you to send data in ASCII format one byte at a time. The output is two lines of 16 characters each on a fixed dot matrix grid. They"re cheap as chips (as my English friends say) and perfect for displaying measurements, results of calculations and any other simple messages.
My objective here was to develop a reusable Verilog module that could be dropped in to multiple FPGA projects and handle the low-level communication with the LCD. As part of an effort to make the Verilog as platform independent as possible, I developed and tested the module on two different boards. First is an Olimex ICE40HX8K-EVB board using the Project Icestorm workflow. (I discuss the board and Project Icestorm in an earlier post here: iCE40 and the IceStorm Open Source FPGA Workflow.) Second is an Arrow BeMicro CV board featuring an Intel/Altera 5CEFA2F23C8N Cyclone V, developed using Quartus 15.0.
The Hitachi HD44780 LCD controller has been around for decades. I don"t have an exact year of release, but a quick search has it turning up in catalogs and magazines by the early-to-mid-eighties. Somewhere along the line Hitachi stopped making them, but compatible replacements exist including the Sunplus SPLC780, the Samsung KS0066U and the Sitronics ST7066U. While not all small text displays are HD44780-compatible, the instruction set and interface for the controller have become something of a standard.
Both 5v and 3.3v displays are available. While it"s technically possible to interface a 5v version, I don"t have any appetite for letting 5v devices get too close to the 3.3v IO pins on my FPGA board, so I"m of course using a 3.3v version.
Configuring these displays is reasonably easy and there is a lot of raw material online to help get a project started. The fact that they"ve been around so long means there are tutorials available for every imaginable microcontroller. They"ve even shown up on some Xilinx and Altera training and development boards over the years.
I think I"ve got the timing pretty-well demystified and I"ll provide some detail further in this posting. But at a high level I can say that it"s very helpful to remember that the timing requirements from the datasheets are minimum requirements. You don"t have to try to achieve these exact time values. In fact, unless you have an application that needs to squeeze every nanosecond of performance out of the display, you can save yourself a lot of headache by building in some nice buffer around the minimum timings.
Five of the pins are dedicated to power, including a contrast control for adjusting the backlighting. Vss (ground) and Vdd (positive supply) are the main power for the logic. A and K are positive and ground to the backlight. The V0 pin adjusts the contrast to the display. Most setups use a 10k potentiometer on the contrast pin. You can tie it straight to ground through a 1K to 4K resistor, but the contrast is pretty sensitive and if you use a potentiometer you"ll probably be happier.
Three of the pins are dedicated to control signals. The RS (register select) is used to indicate whether data on the bus is a character (RS=1) or an instruction (RS=0). The E (enable) pin is toggled on and off to enter the data. The R/W (read/write) pin switches between read (R/W=1) and write (R/W=0). R/W is frequently tied to ground and the LCD is treated as a write only device. (My setup has R/W tied to ground and the FPGA and Verilog ignore it.)
The remaining eight pins are the data bus. As noted, data on the bus can either be a character or an instruction. Characters include standard ASCII codes for the numbers 0-9, letters a-z and A-Z, and many of the general standard ASCII punctuation and symbols such as !, ?, #, and $. Beyond those characters, the LCD will have additional characters depending on the manufacturer of the board and the version of the controller. The controller can also manage user-defined custom characters.
At the highest level, controlling the display can be seen as a simple process of pushing a sequence of instructions and characters through by setting up the RS pin and the DB0-7 pins one byte at a time while toggling the E pin on and off to tell the controller as each byte is ready.
Before data or instructions can be written to the controller, an initialization sequence must be executed that configures the controller and makes sure it"s ready to receive input. The HD44780 does run through a version of the initialization when it first powers up, but there are a few problems with that routine. The hardware initialization is somewhat fragile and very dependent on the circuit"s power supply. It also sets the controller to a default that might not be the desired state. Best practice looks to be including initialization in the design. For my own use, I have the FPGA drive the full initialization sequence on startup and have also tied the sequence to a push button on my board for a soft reset.
Steps 2,3 and 4 all load the same instruction to the controller. Once RS and D[0-7] are set on the FPGA it is not necessary to keep resetting them - all that is needed is to bring the enable pin high and low at the appropriate times.
Step 8 configures the Entry Mode which determines what the controller does as it receives new characters. The setting here fills in text from left to right while the display itself stays still. There are multiple options.
To implement the initialization sequence, I again use a state machine to step through the process. I actually combine the initialization and operating phases into one 26-step state machine (code further below). Of course, my solution is only one of many possible approaches. In researching for this project and hunting up examples of FPGAs driving LCDs, I found tremendous variety in the ways that people setup their state machines and manage the timing. It"s certainly worth looking around for inspiration.
The final steps in making a usable LCD driver involve reconfiguring the module to process incoming data (rather than just displaying the letter "H" in the notional code) and establishing some type of handshaking.
Slightly trickier is the idea of establishing communication between the LCD driver module and the hypothetical other module producing the data. The LCD driver needs to know when there is fresh data available to be written to the display. Likewise, since the LCD driver needs considerable time to process a byte of data, the data producing module needs to know when the LCD driver is ready. In the code below you"ll see that I addressed these two parallel needs with a "data_ready" input bit and a "busy_flag" output bit.
In states 23-25, which comprise the portion of the state machine that actually writes data to the LCD, state 23 will idle until the data_ready bit goes high. Once the bit goes high, the module sets its own internal tracking bit called "start" to high, sets the busy_flag output high, and starts processing the incoming data. The busy_flag and start bits remain high until the process is complete.
Below is the Verilog code for the full LCD driver module. This module has been tested with a hello world demonstration. I"m not displaying the full demo, but you can download it here: Verilog LCD Hello World Demonstration. The demonstration adds a ROM with the ASCII codes for Hello World and a controller that interfaces with the LCD module to feed one character at a time.
Project IceStorm is the first, and currently only, fully open source workflow for FPGA programming. Here, the software and hardware are discussed and a small sample project implemented.
Do you know the large outdoor LED display? What features does it have? In contemporary economic life, outdoor LED large display has been known and commonly used in advertising, traffic …
LCD splicing screen with its high-definition ultra-wide viewing angle, non-stop operation, low energy consumption, long life and other advantages, popular indoor display screen market, widely used in monitoring command center, …
Under the influence of the Russia-Ukraine conflict and inflation, the overall market demand for finished LED displays has weakened, and display manufacturers will more actively promote ≤P1.0 ultra-small pitch displays …
LED display is widely used in our surrounding, involving numerous industry sectors, such as security monitoring, office meetings, advertising media, exhibition displays and other occasions. In this process, LED display …
Outdoor LED display has become the current mainstream outdoor media carrier, the display form is very new, is an important part of the modern urban environment construction layout. At the …
Recently, the display industry began to reflective displays such as electronic paper and no backlight reflective LCD, as well as semi-translucent semi-translucent LCD hype, these in the process of evolution …
Many times we can’t install the LED display immediately after we buy it because of some factors, in this case, we need to store the LED display well. And LED …
Intelligent display module is the use of our specially developed editing software on the PC (free), you can put any display pattern of the PC, transformed and stored in our …
As an Industrial LCD module distributor, we can supply a wide range of TFT LCDs in many sizes. Common resolutions are QVGA, VGA, SVGA and XGA. Wide aspect ratio displays are also available in many similar sizes and resolutions such as WQVGA, WVGA, WSVGA, and WXGA.
Our industrial LCD suppliers are manufacturers with different capabilities specially designed for a wide variety of industrial applications. High-brightness, sunlight readability and long life product guarantees are some of the special features available.
Get in touch to work closely with one of our LCD Solutions Specialists to determine the perfect display for your project. We can also recommend and supply the proper LCD controller board, inverter, LED driver, cables, touch screen, or other associated enhancement.
ATOM Display Lite is an all-in-one display driver kit. Use FPGA to simulate traditional SPI TFT-LCD Data output. This kit supports images at a maximum resolution of 1280 x 720 pixels (720P). Built-in LT8618SX RGB to HDMI chip supports wide range HDMI signal output. Integrate 2.4G Wi-Fi, with 4M Flash + 520KB SRAM. So small yet powerful, which can replace the traditional display driving solution.
The 162D is one of our 16 character x 2 row chip on board (COB) alphanumeric displays. These classic 16x2 LCD modules are available in a multitude of LCD and LED backlight color combinations to achieve the perfect look for your product. Some of our most popular combinations are STN yellow-green LCD with yellow-green LED backlight, STN blue LCD with white LED backlight, and STN grey LCD with either blue, amber or pure green LED backlight.
A field-programmable gate array (FPGA) is an integrated circuit designed to be configured by a customer or a designer after manufacturing . The FPGA configuration is generally specified using a hardware dscription language (HDL), used by engineers in the design of specialized ICs that can later be produced hard-wired in large quantities for distribution to computer manufacturers and end users.
When choosing a development board, consider what you get with it and what you want to use it for. FPGAs are ideal for use with high speed peripherals, and in general it is much easier to buy a board that contains the part you want, rather than trying to add one on later (and inevitably giving up and upgrading to a more capable board). Examples of things you might want, and are quite difficult to add yourself:
I like having a board with many (at least 8) SPST switches and LEDs, and momentary buttons. Unlike a microcontroller where it"s relatively easy to spit debug information out of a serial port or to an LCD with a single C function call, debugging FPGA designs is a bit harder. LEDs provide a zero fuss way to break out internal signals for visualisation - if you"re tracking the progress of a complex state machine, you can light up an LED when it gets to a certain point without adding any extra logic. While these are easy enough to add yourself, I find that it"s better to get a board that has them so that you don"t waste valuable user IOs or waste time investigating failures caused by your terrible soldering skills.
If you would like to connect high speed devices (above 10-20 MHz) to your FPGA, make sure your board has an interface connector that supports the speeds you"ll be using. Look for ground wires interspersed regularly between signal wires, high speed connectors (not just 0.1" headers), PCB trace length equalisation, and impedance control. Few of the cheap boards bother with any of these.
A long-standing complaint with vendor FPGA design tools is that they are generally enormous, complicated, slow, buggy, closed source, and are either expensive or have annoying license requirements. The open source community has made great progress in recent years to reimplement parts or all of the FPGA design toolchain and to address all of these concerns.
Tim "mithro" Ansell has an open offer to send FPGA hardware to anyone who has time to contribute to open source FPGA projects but doesn"t have any hardware.
$56Zynq 7010512MB DDR3, micro SD slot, 100 Mbit Ethernet, two LEDs, 62 length-matched and paired FPGA I/Os and 15 processor I/Os. Some documentation is available at QMTech"s site and there are some observations in this EEVBlog thread, where there are some complaints about a lack of decoupling.
$159/$179Zynq 7010/ 70201GB DDR, 16MB flash, TF socket, gigabit Ethernet, CAN, USB2.0 OTG, USB-UART, HDMI output, 90 or 106 user I/Os (with 39 LVDS pairs), accelerometer and temperature sensor, JTAG, two buttons, 4 switches, four LEDs, and a buzzer. An "IO Cape" breakout board ($35) provides three Pmod connectors, camera and LCD connectors, and 0.1" header I/O pins.
$214Zynq 7010512MB, 128 Mb flash, micro SD, gigabit Ethernet, 802.11/b/g/n WiFi and Bluetooth 4.2/LE, USB for JTAG, UART, and OTG, HDMI Tx/Rx, VGA, stereo audio output, light and temperature sensors, 4*7 Seg LEDs, 5 LEDs, 4 slide switches, 31 PL I/Os and 4 PS I/Os. A 2x16 LCD module is included, and camera and TFT LCD modules are available.
$79Artix 35T4 switches, 5 buttons, 7 LEDs, JTAG 256MB DDR3, 16MB flash, Arduino shield connector, one PMOD, and some sort of high speed connector which supports expansion boards with HDMI and VGA. Larger FPGA sizes will apparently be available too.
$149Artix 200TA PCIe x4 gen 2 development board with an NVMe (2280 Key M) connector. It has 1GB DDR3, 256 Mb flash, 1 LED, and 12 I/Os (including four LVDS pairs). This is the same form factor as the LiteFury, with larger FPGA and memory.
$149Artix 50T128 Mb flash, 2Gb DDR, USB and JTAG programming interfaces, gigabit Ethernet, HDMI input and output, GTP interface, micro SD, 3x7 segement segment displays, 6 buttons, 8 DIP switches, and 80 I/Os (40 length-matched differential pairs).
$149Artix 35TUSB-UART, 12-bit VGA output, USB HID host, 16 switches, 16 LEDs, 5 buttons, a 4-digit 7-segment display, 4 PMODs with XADC inputs on one of them. A device-locked Vivado Design Edition is available for $10.
$320, $159 academicArtix 100TPushing the limits of "cheap" unless you qualify for academic pricing, but attractive if you need the larger FPGA. Includes 5 PMOD connectors (40 low speed I/Os), 128MB DDR RAM, 16MB flash, 10/100 Ethernet, USB HID host, SD card, VGA, accelerometer, microphone, audio out, 16 switches, 16 LEDs, 8 7-segment displays, 5 buttons. The Artix"s internal ADC is available on one of the ports.
$165Artix 35TA full-featured development board with 32MB SDRAM, SPI flash, USB-JTAG and USB-UART, 802.11 b/g/n via an ESP-12F module, BLE, 12-bit VGA, HDMI out, 4 ADC channels, temperature and light sensors, 12-bit DAC, 2x16 LCD, 4x7 segment display, Micro SD, 16 SPDT switches, 5 buttons, 16 LEDs, a buzzer, and 31 I/Os. Compatible SPI TFT display and CMOS camera modules are also available.
$69XC7S50An educational platform with an associated digital logic course. It features HDMI output, ADC, four servo controllers, 8-digit 7-segment display, 4 SPST buttons, 16 switches, 16 LEDs and 2 RGB LEDs, 4 PMODs, PWM audio output, USB programming/UART, and BLE ($10 extra)
$137XC7S15A development board with an array of onboard peripherals. It features 802.11 b/g/n WiFi and Bluetooth 4/BLE, VGA output, 8-channel ADC, DAC, temperature and light sensors, USB-UART and USB-JTAG, 2x16 LCD, 4 7-segment displays, 16 slide switches, 5 SPST buttons, a buzzer, 16 LEDs, and 26 I/Os.
$34 deliveredLX9A "no name" board apparently available only on eBay. It has a Spartan-6 LX9, 4-digit 7 segment display, RS232 interface, 12-bit VGA, PS2, 8 LEDs, 3 buttons, 8-bit DIP switch, two PMOD interfaces, 26 digital I/Os, JTAG and SPI flash.
$89-258LX9/LX16A slightly baffling array of FPGA boards. Two that caught my eye were the 5I25, which is a PCI card with a Spartan-6 LX9 for $89 and the 6I25 (PCI Express) for $109.
₹ 8,500 ($132)LX9A development board with 8MB SPI flash, USB JTAG programmer, USB UART, WiFi, Bluetooth, VGA, 8-channel 12-bit ADC, 12-bit DAC, temperature sensor, LDR, 2x16 LCD, 4*7 segment display, buzzer, 16 SPST switches, 16 LEDs, 5 buttons, and external CMOS camera and TFT display modules.
$30.00100EA controller board with 8 LEDs, three SPST buttons, 35 I/Os, and USB programmer. It forms the foundation of a robotics and automation ecosystem, supporting up to nine simultaneous peripherals sold by the same manufacturer, complete with an FPGA code generation tool and Linux API.
$3050AA board with a 16Mbit of SPI flash, 8 LEDs, 6 SPST switches, 8 DIP switches, 3 7-segment displays, VGA and stereo audio output, 39 I/Os (including four PMOD connectors), and USB JTAG.
$53200AAn Arduino shield that is intended to be an audio and video coprocessor for Arduino applications, but could be repurposed as a general-purpose FPGA interface board with the Arduino form factor. VGA and audio outputs, with SPI flash.
$24ICE40UP5KA revised version of the original UPDuino with non-EOL parts, a stronger connector, and improved signal integrity. It also provides 32 I/Os, 4MB SPI flash with support for qSPI, RGB LED, USB programmer, an open source design, and compatibility with the tinyFPGA bootloader.
$60ICE40 HX1K4 LEDs, 2 SPST buttons, two 7-segment LED displays, micro USB for programming and USB-UART, VGA, and a PMOD I/O connector. It is designed to be used in conjunction with the tutorials available at nandland.
90 EURiCE40Currently taking pre-orders. It provides an FPGA supported by the open source Lattice synthesis toolchain and 200 I/Os (via PMOD and flat flex connectors). It is designed to be connected to a Raspberry Pi 2B / B+.
$115/$155ECP5 12F/45F/85FAn open hardware design with many code examples and projects. It has 56 I/Os (28 differential pairs), 32 MB SDRAM, SPI flash, micro SD, 8 user LEDs, 7 buttons, audio, composite and digital video output, ESP32 for WiFI and Bluetooth, FM/ASK receiver (and transmitter?), 8-channel 12-bit ADC, RTC, USB-serial, and USB-to-FPGA.
$262LFE3-35EAVery occasionally reduced to $99 on special, but still one of the cheaper PCI-Express (x1) development boards with 64-Mbit flash, 1 Gbit DDR3, four SMA connectors (one full-duplex SERDES channel), dual gigabit Ethernet, expansion connectors, 14-segment alpha-numeric display, switches and LEDs, and USB programmer. It appears that the FPGA device requires a licensed version of the design software, but this is also available for $99 for the first year. Pricing options beyond the first year are not very clear.
$61M2S010A small FPGA module with integrated 166 MHz ARM Cortex-M3, 8 MB SDRAM, 8 MB QSPI Flash, JTAG and UART over USB, 3 pin header for Live Probe, 9 LEDs, 1 button, one PMOD, and a total of 31 I/Os.
$71-$123M2S005-M2S090A module with an integrated 166 MHz 32-bit ARM Cortex-M3. On board are 64 MB RAM, 16 MB flash, and 10/100 Ethernet. Also available is a $179 Starter Kit, which includes an FPGA module as well as USB/Ethernet connectors and a prototyping area.
$99A2F200M3FIntegrated 100 MHz ARM Cortex-M3, 10/100 Ethernet PHY and on-chip MAC, USB-serial, on-board USB programming interface, OLED display, 8 LEDs, two user switches, and an indeterminate number of analog and digital outputs. It looks like a very interesting and inexpensive board for developing mixed FPGA/microcontroller applications.
$5910CL006A board intended for study purposes. It includes USB-serial and USB programming, 8 DIP switches, 6 7-segment displays, 8 LEDs, thermistor, potentiometer, photoresistor, 4 buttons, VGA, AD/DA, gigabit Ethernet, and two PMOD connectors.
$1795CGTFD9EPacks 4 Gb DDR RAM, 4 Mb SRAM, high speed mezzanine connector with four 3.125 Gbps transceivers, 40 GPIOs, Arduino-compatible header with analog inputs, configuration flash, USB programmer, HDMI output, audio, 18 LEDs, 10 slide switches, 4 debounced buttons, CPU reset button, 4 seven segment displays, micro SD socket, and USB UART.
$199, $150 academic5CSEMA5FContains an integrated dual core ARM Cortex-A9. The board has 64 MB SDRAM, 1GB DDR3, micro SD, dual USB 2.0 host, gigabit Ethernet, PS/2, IR emitter and receiver, around 80 digital I/Os, 8 * 12-bit 1MSPS ADC inputs, VGA, audio codec, analog TV video input, four buttons, 10 switches, 11 LEDs, 6 * 7-seg displays, accelerometer, USB-serial, and USB programmer.
$119, 81 academic3C168Mbyte SDRAM, 4 Mbyte flash, SD card socket, USB programmer, 3 buttons, 10 switches, 10 LEDs, 4 seven-segment displays, 16x2 LCD interface, VGA output, RS232 and PS/2 interfaces, and 72 I/Os.
$28-77Cyclone IIA range of cheap boards from Shenzhen, most with RAM and a variety of I/O including LCDs, 7-segment LEDs, VGA, switches, etc. Again they"re great value if you already have some experience with FPGAs, are comfortable reading schematics and don"t require any vendor support.
$7510M08A MAX 10 board that is a drop-in replacement for an Arduino Uno, and comes with FPGA-accelerated hardware components that can be used from Arduino sketches. It features 5V I/Os, Arduino-compatible ADCs, and USB-serial.
$110Cyclone IIContains an FT2232H USB interface chip to provide high speed data transfer. It has a total of 80 to 96 I/Os (split between the FPGA and FT2232H, and depending on who you ask) with a 0.1" spacing.
Some interesting and less well known FPGA vendors. Take the time to listen to the very interesting interview with Efinix CEO Sammy Cheung on The Amp Hour.
$5.90GOWIN GW1N-1-LVA very low cost board with 1152 LUT4s. It has a RGB LCD driver (supporting 800x480) and FPC connector, 8MB PSRAM, 34 I/O, RGB LED, and USB-C for power supply and programming.
$17.90Anlogic EG4S201 MB flash, 64 Mbit SRAM, RGB LED, TF card socket, FPC sockets for LCD or VGA adaptors and camera or ADC, resistive touch screen controller, USB-JTAG, and 72 I/Os.
KNJN Pluto ($29-$129) a range of small boards with various FPGAs. No on-board peripherals, so they seem more suited to dropping in to a larger project than as a standalone development tool.
If you manufacture or know of any other cheap FPGA development boards, please let me know so that I can include them on this list. Review units will be cheerfully accepted! :)
There is a long and comprehensive list of boards at FPGA-FAQ that includes a couple of other cheap options - there are a number of Spartan-3 generation boards that I haven"t listed.