FPGA Interchange format to enable interoperable FPGA tooling
opensource.googleblog.com
opensource.googleblog.com
The problem is that really it's only a tiny subset of RTL languages that are supported by FPGAs, and an even tinier subset that's optimial. God alone can write 10 lines of RTL that'll map to DSP blocks utilizing the carry chain. The problem isn't that the languages don't support multiple targets, it's that the targets are so idiosyncratic that you have to know exactly how it maps.
Now, what this format promises to do encompasses describing the resources on a device, but there's a few problems with this. Firstly, they're incredibly complex in terms of trade-offs (you can do X Y Z but X only in A mode Y in all modes but B, Z but the timing of N is off). The likely result of this are a set of simplified rules that make it tractable, but not performant. Secondly, since the only way of getting optimal hardware is to design it for one target - an interchange format seems like nonsense. It's exactly like RTL - it describes everything but doesn't functionally help you translate between targets at all.
Fundamentally this just doesn't seem like it solves anything, it's seems to suggest "Hey guys, adopt our standard for all your stuff!", but why? They don't seem to be offering anything of value.
If I were being particularly glib, I'd wish a swift promotion to the guys at Google who authored this.
In short: each architecture has some code for it, and often a lot of it is boilerplate. Some of it is for specific purposes (some devices might have specific rules about promoting clock lines or global device objects, whatever, and you might put them there.) But the generic descriptions of what the place-and-route algorithms work with, the "Basic Elements of Logic" (BELs), that's exactly what this project aims to solve. It describes how an Artix-7 or an ECP5 device can theoretically be mapped to these basic place-and-route abstractions. All EDA tools work this way... nobody would completely rewrite a placer and router ground up from scratch for every target architecture or PDK for every client they have or whatever. They all work at some level on an abstract description of a physical layout, and the vendor brings the real meat to the table and wires them together. The question of API design and where to draw the line between those two is, well, software engineering. So it's not like there will be effortless magical zero-effort plug-and-play between NextPNR and some random architecture. It just means that the integration work that must happen is now easier. That's it.
So this does not make technology mapping more effective or anything like that more effective. It's just an efficient binary format for describing the FPGA wire layout with enough fidelity to do things like place-and-route effectively. That's all; it doesn't really improve expressiveness, fmax, or anything like that. It's a developer velocity thing so that vendors and tool developers get a little more stuff "for free" than before.
Honestly as long as this lets me use NextPNR for Xilinx devices easily, I'm fine with it. As the maintainer of NextPNR for a package manager there might also be ancillary benefits for me but I don't think those matter much.
For mainstream use and high perf/low power you're maybe still better off doing custom synthesis.
As the parent says, you're likely to be targeting a specific FPGA for your application.
And if you are using an ASIC, most of the design is usually carried out in an HDL, just like an FPGA design. The end result may be different, but the process is similar.
They are very widely used. Some iPhones used an FPGA. iPhone 7 had a small lattice FPGA. https://www.ifixit.com/Teardown/iPhone+7+Teardown/67382
The FPGA in that iPhone is the FPGA version of a microcontroller. Those are very popular, as glue logic, and for kludging in emergency fixes after production has already begun. They are also not terribly difficult to program; you hardly even need an HDL, much like you often don't really need a compiler to program a microcontroller.
All the "high level synthesis" pfaff is aimed at the big gigantic $20,000-per-chip FPGAs. Those have mostly been a big fat failure, except for a few big military and cryptocurrency-mining sales. They are wonderful for prototyping ASICs, but that application doesn't sell enough chips to be economically meaningful.
I've always kept an eye on the GHDL and gEDA projects, but open progress has been glacial. The Icestorm project finally opened up FPGAs enough for me to want to work with them, but it came 15 years too late.
I agree with you that designing for FPGA hasn't become any easier since the introduction of hardware accelerators inside the chip (multipliers, block rams etc) but the lack of standardization has been hurting the field for more than 20 years. Even upgrading a project from Xilinx $chip to Xilinx $chip++ was a multi-week project.
Players like Xilinx have held out their compliers and instead selling them and using lawsuit to prevent people from reverse engineering there IP. This hasn't stopped people or lesser players like lattice from doing this but it's definitely slowed it down. I think open sourcing or releasing the compliers is just kind of forced because what new company would but a complier if they can get one for free (yosys).
That being said, EDIF already exists.
My crowning glory hack from that era was a perl script that read verilog netlists and lisp placement data between the place and route stages of the P&R tool and did location dependent scan insertion producing a netlist and a the lisp instructions to the P&R tool to fix it up
EDIF is big and complex and there are different only partially compatible versions in parallel use.
They consider their chips to be the copy-protection dongles for the software.
It's nuts, and it infuriates me, but looking at it this way explains a whole lot of their behavior.
I have very little hope from any netlist format that comes from Yosys. Not only has it changed a couple times in the last years, but the latest iteration is some JSON-based monstrosity that has to be by far the most inconvenient netlist format ever created (see https://github.com/nturley/netlistsvg/blob/master/test/digit... ) .
Remember when this was going to bring it all together?
As of late it seems to be a lot of re-invention of problems that have been solved, except there's some use of JSON, Python, etc. It feels like people solving problems they find interesting rather than solving problems that are necessary.
I synthesized complex modules to EDIF/NGC using Synopsys Design Compiler, Xilinx XST and Mentor Precision and stitched them together via NGDbuild targeting Virtex 4 FPGAs.
The fact that these existing formats are all named "xxx logic interchange format" should give you an idea what will happen to this new "interchange format". It will be used mostly to interchange with itself.
From what I gather ( https://github.com/SymbiFlow/python-fpga-interchange/blob/ma... ) , the new format is basically close to the existing Yosys/nextpnr JSON format except dumped as a Cap'n Proto binary file. I am not impressed -- this is even more inconvenient than a huge JSON file.
I guess the meat here is on the universal device resources format anyway...
1) The standards body that controls EDIF no longer exists, this could limit the ability to evolve and improve it.
2) Large placed and routed FPGA designs contain a lot of data and rendering it to EDIF would just slow down the process of transferring, parsing, etc. Binary is the way to go (unless debugging, the FPGA Interchange Format offers a human-readable version for that). As a comparison, some of the proprietary vendor design formats can take tens of minutes to load a full design.
3) Expressing the details necessary to reconstruct a placed and routed FPGA circuit would not naturally flow from EDIF. EDIF is good for describing a logical netlist. However, a placed and routed FPGA implementation is the mapping of a logical netlist onto the physical netlist of the FPGA. Building a format suited to FPGA architecture makes expression of these constructs easier and more efficient.
4) Writing and maintaining an EDIF parser/de-parser creates more work than using a schema-based code generator. Although work is still involved when interfacing the tool to the format, it removes a pile of issues associated with text-based formats.
[edit: fixed typo]
The interchange format includes a computer readable description of the FPGA which tells the tooling what is available inside the FPGA and how they can be connected.
"OpenAccess is a proprietary API controlled by the OpenAccess Coalition" https://en.wikipedia.org/wiki/OpenAccess
Artisan is now off the scene, and they have no incentive to do it properly now.
I'd love to see an open standard be widely adopted in this space. In my daily work, open standards (Si2.org formats and SDC in particular) drives meaningful competition and moves the industry forward.
It's not like it's all that uniform between the vendors; it's just a generic set of limited TCL APIs, but I guess it doesn't matter if they can just bully you anyway.
[1] https://www.synopsys.com/community/interoperability-programs...
[1] - https://www.amd.com/en/press-releases/2022-02-10-amd-receive...
Could the upcoming TSMC fab in Arizona be used for FPGAs which require US mainland provenance?
OpenFPGA, https://osfpga.org/introduction-to-openfpga-a-fully-customiz...
> The Open-Source FPGA Foundation offers a set of free and open-source tools enabling fast prototyping for FPGA chips and automated EDA support, through open standard collaboration. The Foundation aims to set FPGA companies free from engineering-labor intensive process in producing FPGA chips, give full freedom for software developers when customize FPGA software stacks and provide an open collaboration for FPGA end-users to implement high-quality designs.
I have a background in software engineering so I'm fairly comfortable with that part but looking for a sideline into FPGAs.
This implies that there are other architectures this group looked at and felt did not need to be addressed in this announcement. What are they, I wonder?
Until recently "FPGA" was used for tile based architectures and "CPLD" for macroblock architectures, but marketing has redefined the terms such that small FPGAs are now called CPLDs if they are non volatile (they are already configured when you turn them on).
Lattice also uses the NeoCAD tools for their FPGAs (at the time, they were AT&T's ORCA FPGAs). Basically Lattice Diamond and ISE are almost the same tool..
Car - you need a model T Computer - you need a os/360 and later ms/dos Os - you needs a os/360, unix/linux and ms/dos then windows Mobile - you need apple then android
The key immature part is that when you start this no one told you not to start with ecp5 but x. And that is the problem. You need start with 1 then better 2 dominating players in a free to choose environment.
Waiting for the market to mature.
But more importantly, your comment is easy cynicism and doesn't offer any new information or insight. I'm guilty of it myself, and when I recognize it in myself I try to resist. All language is open to interpretation, especially written language. Dialog is more productive if one tries to assume the most charitable reading instead of the worst.
For some perspective, I've been around long enough to have seen many many similar things before ... generally not for the better. I saw Google appear, and do very well, all the while acknowledging that their world is complex and their business had the potential for terrible consequences. Remember "Don't be Evil."
That could have been enough - do great, useful, interesting stuff, and profit from it.
But Google (like most of the others) has been subsumed by new managerialism and short-term goals. Search and Maps have both morphed and look more like low-end advertising directories. Android hasn't learnt much from Windows; is driven by "feature tick-boxism" and becomes more bloated and confused (for users and programmers) with each release. And short-term profit-driven decisions have written-off or endangered products like Reader, Drive, and Gmail.
So when I see "Google" and "FPGA" I was primed for warning flags. And flags-a-plenty there are. I'm afraid I distrust the basic model: pick an open source tool (nextptr) and "extend" it (which locks users into the new tool). Create an "alliance", bundle, and add bits and pieces. It looks (deliberately or not) like an attempt to dominate an environment - reminds me of the Android development environment, and not in a good way.