[HN Gopher] The Linux Kernel FPGA Subsystem ___________________________________________________________________ The Linux Kernel FPGA Subsystem Author : yummypaint Score : 169 points Date : 2020-05-16 14:06 UTC (8 hours ago) (HTM) web link (www.kernel.org) (TXT) w3m dump (www.kernel.org) | mhh__ wrote: | What kind of data throughout can you get with this? | | I've always wanted to play with something like this but FPGAs | worth connecting to a PC are $$$. | btashton wrote: | You can find some shitcoin mining flops that are $300-$400 | worth of hardware being sold off for $60 that are PCIe cards. | There are a few examples in the LiteX project. | gravypod wrote: | Do you have any links? I'd love to get my hands on some PCIe | FPGAs and start messing with them | aswanson wrote: | Artix-7 xilinx fpgas have a pcie interface and are lower | priced. | btashton wrote: | This is what I am currently working on. I think I paid $80 | to get one shipped to the US most of them seem to be in | eBay in Europe. https://twitter.com/enjoy_digital/status/12 | 57985111469015040 | wyldfire wrote: | Throughput? Programming throughput or I/O? You should be able | to saturate the bus. It's all dependent on what kind of | processing takes place on either end. | | AWS offers FPGAs for rent [1] starting at around 1.50 USD/hr -- | perfect if you want to dip your toes in without a huge capital | expense. | | [1] https://aws.amazon.com/ec2/instance-types/f1/ | non-entity wrote: | Admittedly, I'm pretty ignorant of FPGA's right now, but I was | curious about PCIe based boards a while back and was able to | find some moderately priced ones such as | | https://www.latticesemi.com/products/developmentboardsandkit... | | It's around $300, which might not be cheap, but it's certainly | more affordable than other I've seen which are very much out of | the range of any hobbyists. | myself248 wrote: | There are all sorts of old FPGA-in-a-PCI-slot dev boards | floating around eBay, with a few nice looking ones under $300 | if that's attractive. | RL_Quine wrote: | Way cheaper. I have some Kintex7 PCI boards that were under | $150 from aliexpress. Which is less than the cost of the | FPGA. | anfractuosity wrote: | Neat that looks pretty cool, I assume Kintex7 doesn't work | in Vivado webpack though? | | Edit: Or at least the K420T board I found doesn't seem to | be supported: https://www.xilinx.com/products/design- | tools/vivado/vivado-w... | bawana wrote: | Is there a tutorial for dummies somewhere? I want to implement my | deep learning model in an fpga to see if it would be faster. | czig wrote: | I like this book: | https://github.com/hamsternz/IntroToSpartanFPGABook/blob/mas... | | It's free and the exercises are very helpful for getting some | hands on experience. | elevation wrote: | This subsystem will configure an FPGA attached to your host by | sending it a bitstream you provide. You still have to use your | FPGAs vendor tools to generate the bitstream. | | One popular use case is for System-on-Chip (SoC) designs that | pair a Processor System (PS) with Programmable Logic (PL); once | the PS is running the kernel, the FPGA Manager can be used to | program the PL fabric from kernel space. | | FPGA Manager has another handy feature for FPGA images that | implement new peripherals on buses like SPI, I2C, PCI, AXI, etc. | These devices are not "discoverable" in the sense that they are | capable of communicating to the kernel what driver must be loaded | to support them. So in along with a bitstream, FPGA Manager | accepts a device tree overlay which indicates to the kernel what | drivers to load for the new resources implemented by the | configured FPGA. This causes the kernel to probe the requisite | drivers after the FPGA configuration has completed. The FPGA | manager can also unload drivers for devices implemented in an | FPGA that is being reconfigured. | | Unfortunately, in LTS kernels 4.9 and 4.14, while SoC vendors | include support for their own PL targets, the FPGA Manager | subsystem was written as a singleton; once you've configured e.g, | the PL, you can't configure additional peripheral FPGAs. | qubex wrote: | > _was written as a singleton_ | | Can you please explain this? What does it mean exactly? And is | it different in versions of the kernel that aren't the ones you | explicitly mention? | ouzu wrote: | A singleton is a design pattern making sure only one instance | of an object can exist | qubex wrote: | I know the term but I can't quite understand how to | interpret it in this specific context. Does it mean you can | only program an FPGA once? Only one FPGA? One object per | bus? | | I really don't understand it. | anewvillager wrote: | > you can't configure additional peripheral FPGAs. | | My understanding is that you can only have a single FPGA. | elevation wrote: | The FPGA Manager in K4.9 and K4.14 worked fine to fully | manage a single FPGA through multiple configuration cycles | through both the sysfs and the configfs interfaces. | | On a system with multiple FPGAs, FPGA Manager would fully | manage any one of them, as long as it was the first device it | probed. The second probe would partially fail after creating | nodes on sysfs, and a third probe would crash the kernel. | | For that particular system, the upstream vendor hasn't rolled | out K4.19 support yet. My initial impression of the FPGA | Manager code in 4.19 is that this may be fixed (that an FPGA | Manager looks to be allocated per driver instead of one | global singleton) but I haven't backported it for testing | yet. | | I think the interfaces FPGA Manager are well designed, its | seems to be adequately expressive for even exotic uses, but I | would love to see the implementation mature a bit. | baybal2 wrote: | Since when it was in the kernel? | Znafon wrote: | The first commit is from Oct 7 2015. | yummypaint wrote: | Came across a pretty clear video with an iCE40 and a rasPI | showing the concept, though its from 2017. Presumably it would be | a similar process to do this with a pci card? | https://www.youtube.com/watch?v=nIEB1VAGUcs ___________________________________________________________________ (page generated 2020-05-16 23:00 UTC)