Quote:
Originally Posted by davidthefat
Second question, the cRio having a FPGA, is that a whole different ball park?
edit: a bit of research led to conclude that FPGAs use Hardware Description Languages, and I assume those are the equivalent of Assembly for FPGAs? So does that mean I can not use Assembly for the cRio? Vertigo is one of those HDLs
|
As a first approximation, FPGA programming is completely different from what you think of as programming. It's an entirely different mindset, and leads some very subtle bugs that are hard to find. (At least when I programmed one in Verilog, but my understanding is that these class of bugs are common to the architecture, not the language) It also takes a while, because of this. You can think of an FPGA as a bunch of logic blocks and a huge matrix of patch cords that you programatically connect up. So, in effect, you are really wiring up logic gates to do what you want. Which is really cool, since all the logic gates do computations in parallel, which leads to some tremendous speedups from code.
The equivalent of Assembly on an FPGA would be to hand configure the LUTS and do the routing by hand. Nobody really does that, since it is so tedious and error prone. Another equivalent might be invoking the actual simple logic gates in Verilog and wiring those up directly, rather than using the faster syntaxes that exist for inferring logic. After trying each of those once, you quickly realize that just using the higher level features of the languages save a heck of a lot of time, and you can get them to generate code that is either better than what you could do by hand, or the same.
Keeping that in mind, if you really want to get into FPGA programming, I recommend starting out by simulating everything. Since it is so hard to debug on the real device, it is best to catch everything in simulation through unit tests. I don't know how to download to the FPGA on the cRIO though, so that might not get you too far. There are plenty of smart people here on CD though who can help with that and answer questions on how to go about hardware design.