OpenVGA is a free and open-source video card. It features 8 MB of SDRAM, an embedded processor, DVI and VGA outputs, and connects to the host PC using the PCI Local Bus. Free and Open-Source Software (FOSS) has achieved widespread use and acceptance though open-source designs of the underlying hardware which comprise the systems on which the software is executed have not. While the interfaces between many components have been standardised, the implementation of these components is often proprietary, and considered a trade secret.
By implementing a design within programmable logic, such as an FPGA, it is possible for organisations, and even individuals, to design and implement complex digital circuits without having to pay the signiﬁcant non-recurring engineering costs to have an Application Speciﬁc Integrated Circuit (ASIC) fabricated. By using logic cores, advanced digital circuits can be constructed within Programmable Logic Devices (PLDs) by combining many smaller cores. With the advent of high logic capacity, low-cost FPGA families, and with freely available HDL EDA tools, the barriers to designing and implementing advanced logic cores are now signiﬁcantly lower. And like FOSS, it is possible for the Register Transfer Level (RTL, the most popular method for describing digital logic circuits in HDL) descriptions of logic cores to be made freely available, resulting in free and open-source hardware designs.
Embedded Processor Cores
OpenVGA is designed to use a processor logic core for initialisation, mode setting, and data processing tasks. Two processors were developed for these tasks, the first was TTA16, a novel, 16-bit, transport-triggered processor. The second processor that was developed, RISC16, a 16-bit, RISC processor architecture, was for comparison with TTA16, and for its relative ease of programming in assembly language.
A TTA processor is different from more common processors, like RISC and CISC based processors such as ARM, SPARC, x86, Power, and MIPS. TTA instructions are simply a list of data moves for each transport that the processor has to perform. For comparison, instructions of more traditional architectures typically specify the desired operation and the data to use for that operation. To perform useful work, processors need FUs (Functional Units) that carry out some operation, like branching, memory load and store, and subtraction and other calculations.
The OpenVGA source code is available from the Sourceforge project page.
Included within the source code are the following Wishbone-compliant, Verilog logic cores:
- TTA16: A 16-bit, 190 MHz, TTA processor. - RISC16: A 16-bit, 140 MHz, RISC processor. - A 2-way set-associative, 150 MHz data cache. - SDRAM controller that operates at up to 120 MHz. - PCI-to-Wishbone bridge. - Display redraw core supporting VGA and DVI.