But my day job revolves around HDLs, and it is my opinion that a higher level language isn't the answer. Fifty years from now it might be, but state-of-the-art HDL compilers just aren't good enough yet. It's like C compilers a few decades ago, where you had to insert some inline ASM in your code here and there because the compilers were still developing.
So I guess what I'm saying is you can't target CPU, GPU, DSP, & FPGA in one compiler until we can master targeting FPGA even just by itself.
I think the idea would be to keep the backdoors, the question is how to make them still usable in that case.
Depending on the make and model of FPGA, you will have "large" areas that you either can't or don't want to plop logic.
You can have a pretty netlist that validates and simulates correctly (although you'll eventually end up dealing with Cadence, who seem to have the right hand side of the bugs per line of code curve locked up) but still takes weeks or months of that inline ASM work to make it competitive with a rack of Xeons. The edit/compile/debug cycle is not quick by any means past a trivial number of gates.
Dealing with that junk is why IP blocks are so attractive, but you end up on the road to structured ASICs and that just leads to misery.
If I was back at school, this is something I would definitely spend time on.
Some possible ideas:
- Writing different LLVM backends to target the various hardware. You still would need some runtime to schedule/organise the tasks.
- A language with a very powerful type system (ie fully dependent) which allows a high level of programmer intent to be extracted by a compiler. (ie we are only doing Multiply-adds on a specific range of doubles, so create an custom fpga for just that)
- Just writing a bunch of libraries which provide nice APIs for the various functions, kinda like NumPy.
Your work sounds interesting. Contact me at skyfex@gmail.com if you want to exchange more ideas