Why are we still generating video signals as if there is a CRT on the other end? E.g. we could save power by only sending parts of the display image that change.
Exploring FPGA Graphics
11–20 of 47 posts
Re: Exploring FPGA Graphics
#12Around 10-12 years ago someone with industry experience started a project to create a modern open source GPU from scratch. I believe he even had an sponsor for first round of ASIC production, but was targeting FPGA for the first demos. What happened to that guy?
Re: Exploring FPGA Graphics
#13Why are we still generating video signals as if there is a CRT on the other end? E.g. we could save power by only sending parts of the display image that change.
In sending the entire frame with every refresh you get pixel addressing "for free", since you just send the data for each pixel sequentially in a predefined order. If you only wanted to update a single pixel, you would need to effectively send an instruction saying "set pixel x to rgb: a, b, c" or whatever, including both the pixel colour values and the pixel address. You'd also need some sort of edge detection for when a pixel is supposed to change which adds a delay.
This is fine for one pixel, but if every pixel on the screen changes at once then suddenly you are going to be sending a hell of a lot of instructions that not only contain the colour values as in the "old crt style" method, but also the address of every individual pixel too, which will then have to be decoded by the screen-side hardware.
All in all, you'll be using a lot more bandwidth and will need a much faster clock to do all of that in the same period of time. In the old school way, you just have a pixel clock that matches the pixel rate and some serdes for serialisation/deserialisation on each end which imo is considerably simpler.
Re: Exploring FPGA Graphics
#14It’s really simple to set up: https://projectf.io/posts/verilog-sim-verilator-sdl/
Re: Exploring FPGA Graphics
#15Why are we still generating video signals as if there is a CRT on the other end? E.g. we could save power by only sending parts of the display image that change.
DVI, HDMI, DisplayPort or heaven forbid Thunderbolt are a hot mess - to generate a signal out of these without the usage of dedicated chips, you need a ton of logic and parts: output format negotiation, extremely strict timing requirements that completely rule out bitbanging, signal conditioning, specially shielded cables, shielded traces on the circuit board.
[1] https://hackaday.com/2014/06/10/640x480-vga-on-an-arduino/
Re: Exploring FPGA Graphics
#16Hello, I'm the author of the Project F blog. I've almost finished a complete overhaul of this series: animation and double-buffering are coming in October. I'd be happy to field any questions you have.
Re: Exploring FPGA Graphics
#17Why are we still generating video signals as if there is a CRT on the other end? E.g. we could save power by only sending parts of the display image that change.
The purpose of this site is to teach the fundamentals of creating graphics and having them show up on an external display. Driving a VGA signal is extremely straightforward compared to the complexity of HDMI. Generating an HDMI signal is arguably not the main goal of the site, so using VGA makes total sense imo.
* VGA using a Pmod board (you could also create your own register ladder)
* DVI using the TI TFP410 on the DVI Pmod board
* DVI generated on FPGA with a Verilog TMDS encoder (no IC required)
* SDL simulation on a PC
DVI is a subset of HDMI, so works on modern TVs and monitors.
You can find the source on GitHub: https://github.com/projf/projf-explore/tree/main/graphics/fp...
Re: Exploring FPGA Graphics
#18Hello, I'm the author of the Project F blog. I've almost finished a complete overhaul of this series: animation and double-buffering are coming in October. I'd be happy to field any questions you have.
Re: Exploring FPGA Graphics
#19Re: Exploring FPGA Graphics
#20Why are we still generating video signals as if there is a CRT on the other end? E.g. we could save power by only sending parts of the display image that change.
VGA is incredibly easy to generate - you can do it via bitbanging (carefully turning on and off) GPIO pins on an Arduino [1], simply because the tolerances are insanely huge. A step above is SD-SDI [2], which uses less pins but has stricter requirements on timing, and equipment accepting SDI is usually only found in the professional-grade TV production space. DVI, HDMI, DisplayPort or heaven forbid Thunderbolt are a…