I'm about to have a bit of a rant (not a nasty rant, just a brain dump), so please excuse me....
What is making things difficult is that FPGA tools use different conventions to software tools, for no other reason than history.
...
In terms of how they are designed-in and used, FPGAs really aren't any different to MCUs at the topmost level - they're both chips that need code.
...
But HDL design isn't like software - it might look like software but it isn't A lot of the abstractions that S/W gives you have gone. Lets take the first thing I was told in programming 101 about 30 years ago....
Computers can do three things:
* Sequential execution of sets of instructions
* Conditional execution of sets of instructions
* Iterative execution of sets of instructions (a.k.a. loops)
... and as programmers it is our job to tell the computer what instructions are needed to complete the task. Our example for the day was "instructions for an alien on how to make a cup of tea".
Working on FPGAs in a HDL looks the same (code in a text editor), but it is very different - no longer have:
* sequential execution (as everything occurs in parallel all over the chip)
* the nature of conditional execution changes, because you no longer are executing a series of statements, but configuring a chain of muxes and digital logic.
* Loops do not really exist, unless they are bounded at compile time.
* no fixed data types exist, apart from that binary bits can be treated as numbers
* no dynamic resource allocation is possible - you can't just "malloc" in 64k of SRAM into a design at runtime.
That is a lot of abstractions to loose and on top of that we pick up new problems:
* Timing closure - is everything simple enough to complete in the tick of a clock
* Clock domains and clock domain crossings are just annoying
* Interfacing with FPGA resources
* Fighting against resource limitations - we only have so much chip to use
You can write the instructions for an alien to make a cup of tea in HDL, but it is for an alien with no short term memory. It looks completely different, involving an finite state machine, watching a clock and remembering lots of state information.
And this is why learning HDL is so painful. You hear people say "I've had 20 years of programming, but I find FPGAs hard". This is because
(a) it is complex - implementing an non-trivial high speed digital design is hard work
(b) it is like somebody saying "I've got a degree in literature and used a word processor to write 20 books, yet I find writing a working Arduino program is hard". Of course it is. Although it looks the same it isn't what you are skilled in.
A course in digital logic is more appropriate as a grounding in low-level FPGA work than a course in programming. If you have ever used TTL logic to build a video card, then you would say "My, this FPGA stuff is a walk in the park, it's so fast and flexible, and turnaround time is a few minutes".
With the foundations being so different, it follows that the tools will be different - for example, that is why there is no 'gdb' for VHDL - it is the wrong tool for the job.