15 ms·
FuryGpu – Custom PCIe FPGA GPU
- deleted 2y ago[deleted]
- bloatfish 2y agoThis is insane! As a hobby hardware designer myself, I can imagine how much work must have gone into reaching this stage. Well done!
- allanrbo 2y agoWhat an inspiring passion project! Very ambitious first Verilog project.
- snvzz 2y agoPipeline seems retro, but far better than nothing. There's no open hardware GPU to speak of. Depending on license (can't find information?), this could be the first, and a starting point for more.
- crote 2y agoIt all depends on your definition of "open", of course. As far as I know there is no open-source toolchain for any remotely-recent FPGA, so you're still stick with proprietary (paid?) tooling to actually modify it. You're pretty much out of luck if you need more than an iCE40 UP5k.
- rwmj 2y agoAt least some Xilinx 7-series FPGAs have been reverse engineered: https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/synth_xilinx.html https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/...
- robinsonb5 2y agoThere's been some interesting recent work to get the QMTech Kintex7-325 board (among others) supported under yosys/nextpnr - https://github.com/openXC7 https://github.com/openXC7 It works well enough now to build a RISC-V SoC capable of running Linux.
- snvzz 2y ago>You're pretty much out of luck if you need more than an iCE40 UP5k. Lattice ECP5 (which goes up to 85k LUT or so?) and Nexus have more than decent support. Gowin FPGAs are supported via project apicula up to 20k LUT models. Some new models go above 200k LUT so there's hope there.
- robinsonb5 2y agoYeah I've used yosys / nextpnr on an ECP5-85 with great results - it's pretty mature and dependable now.
- bajsejohannes 2y agoThe up an coming GateMate seems interesting to me. They are leaning heavily on open source tooling. chip: https://colognechip.com/programmable-logic/gatemate/ https://colognechip.com/programmable-logic/gatemate/ board: https://www.olimex.com/Products/FPGA/GateMate/GateMateA1-EVB/open-source-hardware https://www.olimex.com/Products/FPGA/GateMate/GateMateA1-EVB...
- monocasa 2y ago> There's no open hardware GPU to speak of. Depending on license (can't find information?), this could be the first, and a starting point for more. There's this which is about the same kind of GPU https://github.com/asicguy/gplgpu https://github.com/asicguy/gplgpu
- the_panopticon 2y agowhat about projects like https://github.com/VerticalResearchGroup/miaow https://github.com/VerticalResearchGroup/miaow ?
- monocasa 2y agoThat's purely GPGPU and doesn't contain hardware like the rasterizers or texture samplers. Cool project though.
- mips_r4300i 2y agoTicket2Ride Number9 is a fixed function GPU from the late 90s that was completely open sourced under GPL
- Hazematman 2y agoThere's also Nyuzi which is more GPGPU focused https://github.com/jbush001/NyuziProcessor https://github.com/jbush001/NyuziProcessor, but the author also experimented with having it do 3D graphics.
- userbinator 2y agoDepends what you mean by "GPU". https://github.com/schlae/graphics-gremlin https://github.com/schlae/graphics-gremlin is an MDA/CGA compatible adapter https://github.com/OmarMongy/VGA https://github.com/OmarMongy/VGA is a VGA core https://github.com/archlabo/Frix https://github.com/archlabo/Frix is a whole IBM PC compatible SoC, including a VGA.
- deleted 2y ago[deleted]
- jamesu 2y agoSimilarly there is this: https://github.com/ToNi3141/Rasterix https://github.com/ToNi3141/Rasterix Would be neat if someone made an FPGA GPU which had a shader pipeline honestly.
- actionfromafar 2y agoHow good would a Ryzen with 32 cores be if it did just graphics?
- tux3 2y agoYou can run Crysis in software rendering on a high core count AMD CPU. It's terrible use of the hardware and the performance is far from stellar, but you can!
- deleted 2y ago[deleted]
- immibis 2y agoWasn't Intel Larrabee something like that? Get a bunch of dumb x86 cores together and tell them to do graphics?
- actionfromafar 2y agoI'm so sad Larrabee or similar things never took off. No, it might not have benchmarked well against contemporary graphics cards, but I think these matrixes of x86 cores could have come to great use for cool things not necessarily related to graphics.
- fancyfredbot 2y agoIntel launched Larabee as Xeon Phi for non-graphics purposes. Turns out it wasn't especially good at those either. You can still pick one up on eBay today for not very much.
- 2y ago
- gchadwick 2y agoCool! I found the hello blog here illuminating to understand the creators intentions: https://www.furygpu.com/blog/hello https://www.furygpu.com/blog/hello As I read it, it's just a fun hobby project for them first and foremost and looks like they're intending to write a whole bunch more about how they built it. It's certainly an impressive piece of work, in particular as they've got the full stack working, a windows driver implementing a custom graphics API and then quake running on top of that. A shame they've not got some DX/GL support but I can certainly understand why they went the custom API route. I wonder if they'll open source the design?
- PfhorSlayer 2y agoI'm in the process of actually trying to work out what would be feasible performance-wise if I were to spent the considerable effort to add the features required for base D3D support. It's not looking good, unfortunately. Beyond just "shaders", there are a significant amount of other requirements that even just the OS's window manager needs to function at all. It's all built up on 20+ years of evolving tech and for the normal players in this space (AMD, Nvidia, Intel, Imagination, etc.) it's always been an iterative process.
- iAkashPaul 2y agoFPGAs for native FP4 will change the entire landscape
- luma 2y agoHow so?
- iAkashPaul 2y agoReduced memory requirements, dropping higher precision IP blocks for starters
- CamperBob2 2y ago4-bit values (or 6-bit values, nowadays) values are interesting because they're small enough to address a single LUT, which is the lowest-level atomic element of an FPGA. That gives them major advantages in the timing and resource-usage departments.
- jsheard 2y agoVery briefly, until someone makes an ASIC that does the same thing and FPGAs are relegated to niche use-cases once again. FPGAs only make long-term sense in applications that are so low-volume that it's not worth spinning an ASIC for them.
- iAkashPaul 2y agoAbsolutely
- Y_Y 2y agoFour-bit floats are not as useful as Nvidia would have you believe. Like structured sparsity it's mainly a trick to make newer-gen cards look faster in the absence of an improvement in the underlying tech. If you're using it for NN inference you have to carefully tune the weights to get good accuracy and it offers nothing over fixed-point.
- 2y ago
- spuz 2y agoThis looks like an incredible achievement. I'd love to see some photos of the physical device. I'm also slightly confused about which FGPA module is being used. The blog mentions the Xylinx Kria SoMs but if you follow the links to the specs of those modules, you see they have ARM SoCs rather than Xylinx FGPAs. The whole world of FGPAs is pretty unfamiliar to me so maybe I'm missing something. https://www.amd.com/en/products/system-on-modules/kria/k26/k26c-commercial.html https://www.amd.com/en/products/system-on-modules/kria/k26/k...
- crote 2y ago> you see they have ARM SoCs rather than Xylinx FGPAs It's a mixed chip: FPGA and traditional SoC glued together. This mean you don't have a softcore MCU taking up precious FPGA resources just to do some basic management tasks.
- spuz 2y agoAh that makes sense. It's slightly ironic then that the ARM SoC includes a Mali GPU which presumably easily outperforms what can be achieved with the FGPA.
- chrsw 2y agoI didn't see any mention of what the software on the Zynq's ARM core is doing, which made me wonder why use Zynq at all.
- PfhorSlayer 2y agoThe hardened DisplayPort IP is connected to the ARM cores, and requires a significant amount of configuration and setup. FuryGpu's firmware primarily handles interfacing with that block: setting up descriptor sets to DMA video frame and audio data from memory (where the GPU has written it for video, or where the host has DMA'd it for audio), responding to requests to reconfigure things for different resolutions, etc. There's also a small command processor there that lets me do various things that building out hardware for doesn't make sense - moving memory around with the hardened DMA peripheral, setting up memory buffers used internally by the GPU, etc. If I ever need to expose a VGA interface in order to have motherboards treat this as a primary graphics output device during boot, I'd also be handling all of that in the firmware.
- wpwpwpw 2y agoExcellent job. Would be amazing if this became an open source hardware project.
- sylware 2y agoHopefully their hardware programming model is going full hardware circular command/interrupt buffers (even for GPU register programming). It is how it is done on AMD GPU, that said I have no idea what is the nvidia hardware programming model.
- codedokode 2y ago"UltraScale" in name assumes ultra price? FPGAs seem to be an expensive toy.
- mattalex 2y agoNot in the grand scheme of things: you can get fpga dev boards for $50 that are already useable for this type of thing (you can go even lower, but those aren't really useable for "CPU like" operation and are closer to "a whole lot of logic gates in a single chip"). Of course the "industry grade" solutions pack significantly more of a punch, but they can also be had for <$500.
- varispeed 2y agoAges ago I bought TinyFPGA, which is like £40 and I was able to synthesize RISC-V cpu on it. It was fun.
- nxobject 2y agoIt's worth mentioning that it's easy enough to find absurdly cheap (~$20) early-generation dev boards for Zynq FPGAs with embedded ARM cores on Aliexpress, shucked from obsolete Bitcoin miners [1]. Interfaces include SD, Ethernet, 3 banks of GPIO. [1] https://github.com/xjtuecho/EBAZ4205 https://github.com/xjtuecho/EBAZ4205
- deleted 2y ago[deleted]
- thrtythreeforty 2y agoZynq is deeply annoying to work with, though. Unfortunately the hard ARM core bootloads the FPGA fabric, rather than the other way around (or having the option to initialize both separately). This means you have to muck with software on the target to update FPGA bitstreams.
- CamperBob2 2y agoIsn't it mostly just boilerplate code that does the FPGA configuration, though?
- MalphasWats 2y agoIt's incredible how influential Ben Eater's breadboard computer series has been in hobby electronics. I've been similarly inspired to try to design my own "retro" CPU. I desperately want something as easy to plug into things as the 6502, but with jussst a little more capability - few more registers, hardware division, that sort of thing. It's a really daunting task. I always end up coming back to just use an MCU and be done with it, and then I hit the How To Generate Graphics problem.
- jsheard 2y agoI've been looking into graphics on MCUs and was disappointed to learn that the little "NeoChrom" GPU they're putting on newer STM32 parts is completely undocumented. Historically they have been good about not putting black boxes in their chips, but I guess it's probably an IP block they've licensed from a third party.
- gchadwick 2y agoThe RP2040 is a great MCU for playing with graphics as it can bit bang VGA and DVI/HDMI. There's some info on the DVI here: https://github.com/Wren6991/PicoDVI https://github.com/Wren6991/PicoDVI I wrote a couple of articles on how to do bit banged VGA on the RP2040 from scratch: https://gregchadwick.co.uk/blog/playing-with-the-pico-pt5/ https://gregchadwick.co.uk/blog/playing-with-the-pico-pt5/ and https://gregchadwick.co.uk/blog/playing-with-the-pico-pt6/ https://gregchadwick.co.uk/blog/playing-with-the-pico-pt6/ plus an intro to PIO https://gregchadwick.co.uk/blog/playing-with-the-pico-pt4/ https://gregchadwick.co.uk/blog/playing-with-the-pico-pt4/
- jsheard 2y agoYou can do something similar on STM32 parts that have an LCD controller, which can be abused to drive a VGA DAC or a DVI encoder chip. The LCD controller at least is fully documented, but many of their parts pair that with a small GPU, which would be an advantage over the GPU-less RP2040... if there were any public documentation at all for the GPU :(
- 2y ago
- nxobject 2y agoI hope the author goes into some detail about how he implements the PCIe interface! I doubt I'll ever do hardware work at that level of sophistication, but for general cultural awareness I think it's worth looking under the hood of PCIe.
- gorkish 2y agoThe FPGA he is using has native pcie so usually all you get on this front is an interface to a vendor proprietary ip block. The state of open interfaces in FPGA land is abysmal. I think the best I’ve seen fully open source is a gigabit MAC
- 0xcde4c3db 2y agoThere is an open-source DisplayPort transmitter [1] that apparently supports multiple 2.7 Gbps lanes (albeit using family-specific SERDES/differential transceiver blocks, but I doubt that's avoidable at these speeds). This isn't PCIe, but it's also surprisingly close to PCIe 1.0 (2.5 Gbps/lane, and IIRC they use the same 8b/10b code and scrambling algorithm). [1] https://github.com/hamsternz/FPGA_DisplayPort https://github.com/hamsternz/FPGA_DisplayPort
- alexforencich 2y agoThe GPU uses this: https://github.com/alexforencich/verilog-pcie https://github.com/alexforencich/verilog-pcie . And there is an open-source 100G NIC here, including open source 10G/25G MACs: https://github.com/corundum/corundum https://github.com/corundum/corundum
- gorkish 2y agoThank you very much for the references. These look like great projects and I am happy to see that I’m a bit out of date. The vendors don’t appear to be making anything easier though; it appears these projects are still supporting devices by making the brute force effort to build the abstractions to vendor specific stuff themselves.
- 2y ago
- notorandit 2y agoIt needs to be very fancy to write text in light gray on white. I am not sure your product will be a success. I am sure you web design skills need a good overhaul.
- nicolas_17 2y agoIt's not a "product" that will be "sold" or has intention of being "successful" in a commercial sense.
- KallDrexx 2y agoThis is my dream! The last year I've been working on a 2d focused GPU for I/O constrained microcontrollers (https://github.com/KallDrexx/microgpu https://github.com/KallDrexx/microgpu). I've been able to utilize this to get user interfaces on slow SPI machines to render on large displays, and it's been fascinating to work on. But seeing the limitation of processor pipelines I've had the thought for a while that FPGAs could make this faster. I've recently gotten some low end FPGAs to start learning to try and turn my microgpu from an ESP32 based one to an FPGA one. I don't know if I"ll ever get to this level due to kids and free time constraints, but man, I would love to get even a hundredth of this level.
- Chabsff 2y agoYou probably know this already, but for anyone else curious about going down that road: For this type of use, it's definitely worth it to constrain yourself to FPGAs with dedicated high-bandwidth transceivers. A "basic" 1080p RGB signal at 60hz requires some high-frequency signal processing that's really hard to contend with in pure FPGA-land.
- KallDrexx 2y agoThat's good to know actually. I'm still very very early in my FPGA adaption (learning the fpga basics) and I am intending to start with standard 640x480 VGA before expanding.
- detuur 2y agoI can't believe that this is the closest we have to a compact, stand-alone GPU option. There's nothing like a M.2 format GPU out there. All I want is a stand-alone M.2 GPU with modest performance, something on the level of embedded GPUs like Intel UHD Graphics, AMD Radeon, or Qualcomm's Adreno. I have an idea for a small embedded product which needs a lot of compute and networking, but only very modest graphical capabilities. The NXP Layerscape LX2160A [1] would be perfect, but I have to pass on it because it doesn't come with an embedded GPU. I just want a small GPU! [1]: https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/layerscape-processors/layerscape-lx2160a-lx2120a-lx2080a-processors:LX2160A https://www.nxp.com/products/processors-and-microcontrollers...
- magixx 2y agoWhat about MXM GPUs that used to be found in gaming laptops? I know the standard is very niche and thus expensive ($400 for a 3080M used on ebay) but it does exists and you could convert them to PCI-E and thus m.2
- t-3 2y agoMaybe a little bit too low-powered for you, but: https://www.matrixorbital.com/ftdi-eve https://www.matrixorbital.com/ftdi-eve
- cpgxiii 2y agoThere's at least one m.2 GPU based on the Silicon Motion SM750 controller made by Asrock Rack. Similar products exist for mPCIe form factor. Performance is nowhere near a modern iGPU, because an iGPU has access to all of the system memory and caches and power budget, and a simple m.2 device has node of that. Even low-end PCIe GPUs (single slot, half-length/half-height) struggle to outperform better iGPUs and really only make sense when you have to use them for basic display functionality.
- PfhorSlayer 2y agoSo, this is my project! Was somewhat hoping to wait until there was a bit more content up on the site before it started doing the rounds, but here we are! :) To answer what seems to be the most common question I get asked about this, I am intending on open-sourcing the entire stack (PCB schematic/layout, all the HDL, Windows WDDM drivers, API runtime drivers, and Quake ported to use the API) at some point, but there are a number of legal issues that need to be cleared (with respect to my job) and I need to decide the rest of the particulars (license, etc.) - this stuff is not what I do for a living, but it's tangentially-related enough that I need to cover my ass. The first commit for this project was on August 22, 2021. It's been a bit over two and a half years I've been working on this, and while I didn't write anything up during that process, there are a fair number of videos in my YouTube FuryGpu playlist (https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7F6YoZ1Jvxu5j https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) that can kind of give you an idea of how things progressed. The next set of blog posts that are in the works concern the PCIe interface. It'll probably be a multi-part series starting at the PCB schematic/layout and moving through the FPGA design and ending with the Windows drivers. No timeline on when that'll be done, though. After having written just that post on how the Texture Units work, I've got even more respect for those that can write up technical stuff like that with any sort of timing consistency. I'll answer the remaining questions in the threads where they were asked. Thanks for the interest!
- rustybolt 2y agoI have seen semi-regular updates from you on discord and it is awesome to see how far this project has come (and also a bit frustrating to see how relatively little progress I have made on my FPGA projects in the same time!). I was hoping you'd do a writeup, can't wait!
- michaelt 2y agoGoogling the Xilinx Zynq UltraScale+ it seems kinda expensive. Of course plenty of hobbies let people spend thousands (or more) so there's nothing wrong with that if you've got the money. But is it the end target for your project? Or do you have ambitions to go beyond that?
- raphlinus 2y agoVery cool project, and I love to see more work in this space. Something else to look at is the Vortex project from Georgia Tech[1]. Rather than recapitulating the fixed-function past of GPU design, I think it looks toward the future, as it's at heart a highly parallel computer, based on RISC-V with some extensions to handle GPU workloads better. The boards it runs on are a few thousand dollars, so it's not exactly a hobbyist friendly, but it certainly is more accessible than closed, proprietary development. There's a 2.0 release that just landed a few months ago. [1]: https://vortex.cc.gatech.edu/ https://vortex.cc.gatech.edu/
- userbinator 2y agoSupporting hardware features equivalent to a high-end graphics card of the mid 1990s I see no one else has asked this question yet, so I will: How VGA-compatible is it? Would I be able to e.g. plug it into any PC with a PCIe slot, boot to DOS and play DOOM with it?
- bobharris 2y agobeyond amazing. i've dreamt of this. so inspiring. it reminds me of alot of time i spent thinking about this: https://rcl.ece.iastate.edu/sites/default/files/papers/SteJon11A.pdf https://rcl.ece.iastate.edu/sites/default/files/papers/SteJo... i actually wrote one of the professors asking for more info. didn't get a reply. my dream EE class I never got to take.
- anon115 2y agocan you run valorant on it?