Live data from Hacker News

Exploring FPGA Graphics

projectf.io

11–20 of 47 posts

Re: Exploring FPGA Graphics

#11
post #7

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.

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.

Re: Exploring FPGA Graphics

#12

Around 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?

Not the same guy, but if you're interested in the subject https://github.com/xenowing/xenowing is also worth a look.

Re: Exploring FPGA Graphics

#13
post #7

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.

I think from a hardware perspective this would be non-trivial, despite sounding like an obvious thing in principle.

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

#15
post #7

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.

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 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/

[2] https://en.wikipedia.org/wiki/Serial_digital_interface

Re: Exploring FPGA Graphics

#16
post #2

Hello, 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.

Just here to say thanks for this, it looks awesome and is well in my reading list :)

Re: Exploring FPGA Graphics

#17
post #7

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.

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.

The examples aren’t limited to VGA; I support four different outputs with these designs.

* 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

#18
post #2

Hello, 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.

Nice! How about a chapter on ray-tracing?

Re: Exploring FPGA Graphics

#19
post #18
post #2

Hello, 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.

Nice! How about a chapter on ray-tracing?

Oh, I’ll get to that :D

Re: Exploring FPGA Graphics

#20
post #7

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.

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…

It's limited, but there are demos of bitbanged DVI on fairly modest hardware, after some overclocking.

https://github.com/Wren6991/picodvi

Post reply on HN