FPGA First steps

Due to my professional activity, I have to work very closely with programming microcontrollers and FPGAs. But if mastering MK is more or less subject to even a housewife, then with FPGA some difficulties may arise. It is about the pitfalls and a look at them from above that I would like to tell.
Step 0. Acquaintance
My first
Step 1. Nodding
Well, of course, for a hardware programmer, hello world is blinking LEDs. Indeed, in order to send the coveted two words to the terminal - still need to grow. In this case, we should take the languages of the hardware description: a sweet couple of Verilog and VHDL. To them, you can add the ability to build circuits on primitive logical elements. I immediately recall the institute course in computer technology: triggers, registers, logic elements, counters, multiplexers. But we will not get too far ahead, especially since it was described on the hub and before me. I will make a reservation, the Verilog / VHDL languages are far from trivial, even in comparison with the assembler, so for their understanding a completely different approach is needed.
Step 2. And if more difficult?
Despite the peculiarity that hardware description languages can scare away an inexperienced user, they have a huge plus: you can implement a really very high-speed device on FPGAs, and DSP modules open up enormous possibilities for digital signal processing. If we add ready-made libraries with already implemented modules (IP Cores) to this, the possibilities are becoming more and more significant. However, it could not do without a fly in the ointment - laboriousness, or as they say, you can’t figure it out without a bottle.
To implement the first two steps, a bunch of ISE (aka Project Navigator) + ISim (simulation) + Impact (FPGA firmware) is suitable.
Step 3. Good old microcontroller
Sometimes, well, I just really want something pleasant ... Please remember about SoC (System-on-Chip) - a system on a chip. In our case, this is the processor, bus, memory, and a bunch of peripherals. You can try to make similar systems yourself (see step 2), you can screw on the found IP Cores on the Internet. But why reinvent the wheel? Smart guys from the Xilinx office have already come up with the PicoBlaze and MicroBlaze software processors. The first is an eight-bit processor, which is morally obsolete, has not been implemented in SoC for a long time, and has open source code. The second one, MicroBlaze, has good prospects: 32 bits, RISC architecture, etc., etc.
As the memory can be used as external memory connected to the FPGA, and internal, implemented directly inside the FPGA. Typically, the second is often used to cache instructions and data found in the first. In addition, systems containing more than one processor and using special communication modules for interprocess communication are quite widely used.
There is a huge pile of all kinds of peripherals that can be used in huge quantities - everything is limited only by FPGA resources. In addition, “self-made” modules can be added to the exchange bus with the PLB peripherals, but only if they work correctly.
At this stage, the Xilinx Project Stuido (XPS) from the Emedded Development Kit (EDK) is the most important tool, by and large, it is the output that allows you to get the finished FPGA hardware configuration file with the SoC located on it.
Step 4. Now let's go
Now, as for writing a program for the same MicroBlaze. In the Xilinx software suite there is a Software Development Kit (SDK) that allows you to write programs in C / C ++. Yes, you heard right, C ++ is really a rarity for glands, but not in our case. By the way, we have Eclipse-based SDK, therefore, there are content assist, human refactoring, and a wagon of delicious buns. Do not forget about assembler: sometimes inserts on acme are very useful.
As a compiler, GCC is used, tailored to the needs of our software processor, it is possible to use RTOS under the expressive name XilKernel, which, by the way, is POSIX-compatible. This means that if a person is not familiar with the mutexes, threads and semaphores in UNIX-based systems, then understanding XilKernel will not be difficult for him.
Step 5. Instead of a resume
FPGA is a powerful and flexible tool that can solve a huge number of problems. However, do not try to hammer in nails with a microscope - many problems are perfectly solved on the same microcontrollers with cheaper and more affordable methods (Cortex M3, hello!).
Verilog, VHDL, Behavioral, Implementation - these and many other words can drive you crazy and frighten off development using FPGA for a long time, however, sometimes you can replace a bunch of obsolete powder with a dozen ancient MKs with one elegant chip and get a huge moral satisfaction!