Chris Keeser wrote: It wasn't done out of spite for other operating systems or anything so diabolical : ) We want to go cross platform, We know its important, but we have man-decades (maybe even man-centuries) of effort in our existing tools, built on a Windows platform. Is it perfect? Of course not. Its going to take a lot of work to redo the tools to make them cross platform like they should be. I guess I just want you to know, we do hear you, and we are working to address it. Or at least, I hear you : )

I would like to start by saying that I really like the PSoC4/5 silicon capabilities, especially the Digital System. I've been looking forward to playing with this architecture since it was first announced in 2009. More on this later.

Regarding the immediate topic at hand, I appreciate the difficulty of porting a Windows application to GNU/Linux if it wasn't designed for portability from the beginning. The Linux kernel is complex, but it's well-engineered and maintained by people who are committed to having it work reliably. However, the GUI level is kind of all over the place and varies between distros. From what I can tell, there really isn't a GUI standard so if you want portability you use X Windows (X11) and hope that the particular distro does a good job of implementing it or provide a reliable adaptation layer for whatever it's using for graphics. For example, my XXICC software (see my link if you're interested) works fine on Raspberry Pi under Debian "Squeeze", but Ubuntu 11.10 misbehaves drawing diagonal lines and arcs. Xilinx deals with the GNU/LINUX distro problem by only supporting Fedora (the last time I looked) so if you run it on anything else you'll be relying on community support.

My XXICC runs on both Windows and X11, and it's challenging. I solve the problem using an intermediate layer called G-SWIM (GalaxC Simplified Windows Manager). This is a use of David Wheeler's: "All problems in computer science can be solved by another level of indirection". My application programs call G-SWIM for graphics, which in turn calls the underlying windows manager (Windows or X11 for now).

It was quite challenging to get copy/paste working well on both Windows and X11, because they do it in quite different ways. And I never could figure out how to print directly from a GNU/Linux program, so I just generate a PDF and require the user to print it using "lpr" or an PDF reader. This is OK for work-in-progress software like XXICC, but you'd like something more seamless for a final product.

Plus, if you need to access custom hardware such as a device programmer, you'll get to explore the netherworld of device drivers.

Getting back to PSoC4 and PSoC5, I first heard about PSoC5 at a Xilinx/Avnet XFEST in October 2009 and thought it was a cute chip from the marketing flyer. Then I heard TJ Rogers talk about it at ARM Techcon later that month, and I was very excited by the chip's capabilities, especially the Digital System. Reading the TRM got me even more excited, especially since it seemed on a first reading that everything was accessible through documented registers and that after asking cranky questions for decades I'd finally have something I've always wanted: a programmable logic device I could program myself rather than being forced to use the vendor's software and EULA.

Well, I found out a few months later that PSoC5 isn't all documented: while you have full control of the programming of Universal Digital Blocks and other blocks, the documentation won't tell you how to connect to them. This was quite discouraging and I felt like Alice in Wonderland when she looked through the tiny doorway at "loveliest garden you ever saw" but was too large to fit through. Every six months or so I review the TRMs chez Cypress and I'm still locked out. Now maybe this is all documented somewhere in an app note or hard-to-find wiki (please, please, please point me there!), but from what I can tell I'm locked out and the only way to use PSoC4/5 is PSoC Creator. In that case PSoC4/5 gives me no advantage over Xilinx FPGAs.

Now back to GNU/Linux. When Chris says "it's going to be a lot of work to redo the tools to make them cross platform", there's a really obvious solution: Release the documentation for PSoC routing, and the Open Source Software world will do the work for you. Intel doesn't have to write their own compilers -- others happily do it for them. ARM doesn't either. Neither does MIPS or PowerPC. Xilinx and Altera have chosen to write all their own software, and IMO that's prevented them from being the next Intel or ARM.