ZipCPU / vgasim

A Video display simulator
154 stars 16 forks source link
fpga gplv3 gtkmm verilator verilog vga video video-simulator

Controller

This repository contains a couple of Video Controllers.

The original Video Controller includes not only the low-level framer, but also a bus controller to read values from memory to then be displayed on the screen. This is the basis of a frame buffer approach to video. This capability is fully demonstrated via the Verilator based simulator.

There are now also two AXI-based cores. The first is an AXI-based Video Controller that can produce either VGA or HDMI signals. This controller is demonstrated via a slightly different simulator, including simulations for both VGA and HDMI. The second AXI-based video controller will record incoming video signals to memory. The incoming capability is demonstrated via a simulation to capture a piece of your screen via an HDMI source simulator, write it to an AXI-based block RAM frame buffer memory, and then to read it back out again to feed a GTK++ window.

Simulation

This repository also contains two basic video simulator components. The first, either VGASIM or HDMISIM takes video outputs from a Verilated design module and displays them on your screen as though it were the monitor the design was displaying to, and the second takes a piece of your screen and creates either a VGA source signal or an HDMI source signal with it.

All video modes are supported by simply creating the simulator object with the appropriate mode lines, although the memory initialization file for the outgoing demo is specifically formatted for a 1280x1024 screen. The simulator will then create a window of that size on any GTK enabled screen (i.e. Linux), displaying whatever image your design is producing.

The repository also contains a test pattern generator modeled roughly after a standard VGA pattern, although not quite the same. As mentioned above, there's also a frame buffered approach to drawing on the window centered around a wishbone enabled memory driver. This second capability will draw a more arbitrary image on the display.

References to VGA within this module could just as easily refer to any display. Be careful that you match the proper polarity of the sync pulses.

Building

There is a master Makefile in this directory. Hence, to build this project you should be able to just clone it, git clone https://github.com/ZipCPU/vgasim, run make in the main directory, and then run one of the test programs, such as main_tb, from within the bench/cpp directory. For those that display images from the frame buffer, such as main_tb or axi_tb, be sure to wait long enough to see the outgoing image from the frame buffer--it takes a few seconds.

The project depends upon having both Verilator and gtkmm-3.0 installed.

License

All of the source code in this repository is released under the GPLv3. If these conditions are not sufficient for your needs, other licenses terms may be purchased.