I'm busy porting a design to Efinix right now, thanks to the complete failure of Intel to make Cyclone parts available any longer.
So far, my impressions are:
- I can actually buy them. Can't overstate just how important this is. Seriously, it trumps absolutely everything else.
- Having to buy a Xyloni board to get a licence key was a completely trivial non-issue. I'm using these products commercially, so a 2 or low 3 figure sum to obtain the dev tools doesn't even warrant the time spent to think about it. The value of my time that'll be spent porting the design, not to mention the commercial value of the end product, makes it barely even a rounding error. Just order the board.
- Support from the manufacturer has been good so far. Yes, you read that correctly - support from the actual manufacturer. Try getting that from one of the bigger players.
- There are some important architectural quirks, especially to do with the internal interface between the programmable core and the completely logically separate I/O ring (which includes PLLs, DDIO interfaces and optional latches). It's like having two physically separate parts inside the same package, and I've yet to find anything I actually like about that.
- Timing constraints are applied to the core, NOT the physical pins of the device. If anyone's figured out how to apply constraints that govern, say, the Tco for a data pin on the FPGA relative to a clock pin also driven by the FPGA, then do please let me know. This does seem to be an area in which that separation between core and I/O ring is particularly awkward.
- Documentation surrounding timing constraints is - as per the industry standard - incredibly unclear. Would it really be asking too much to be told 'this is the delay from specific point A to specific point B when triggered by specific clock C' - complete with a few diagrams and worked examples?
- On the subject of timing - the synthesis tool appears incapable of inserting delays to cope with internal clock skew. So, for example, you can create a slow clock from a fast one by using a logical counter, but you'll struggle to pass data between those two clock domains because the tool can't then meet hold timing when going from the slower domain to the faster one. This is a big difference, and a major limitation, compared to Altera / Quartus, which copes admirably with this scenario.