I have one doubt : What is the need of parallelism/concurrency in the hardware description language ? I have seen some topics which says, C in its purest form is not suitable for the hardware description. The main reason is lack of parallelism in C. I am new to HDLs. It will be very nice if somebody can explain which feature of HDL really needs parallelism support. Thanks a lot.
Hi Srinu, C is a language to describe sequential algorithms for computers. Thus it got transfered in a series of small instructions to be processed one at a time by a device we call processor. (Forget for a moment the existance of multicore processors.) This basic principle caused C just to be able to solve one problem at a time.
In contrast HDLs are made to create real physical hardware. And if you want to create multiple function blocks that can work at the same time on different problems/algorithms you need a way to describe this. Verilog and VHDL offer this feature and are provided with tools that convert these descriptins into a single piece of silicon, either ASIC or FPGA.
To give you an example about how important it can be to have parallel working devices take a look at my office: On my desk there are two monitors connected top two different computers. For the computers one might say they can be replaced by a faster one with two graphic cards. But for the monitors, they have to exist in parallel so I can view two independant pictures for my working purposes. No way to constantly switch the pictures on one monitor, there have to be two.
Ok, this example was very simple but you can also take a look at some numbers: e.g. Cryptographic algorithms like AES. Even the fastest full speed running processor has only about 10% of the performance that can be acheived with a simple FPGA. And the FPGA saves a lot of energy compared to the CPU too.
This gain in performace comes from the fact that a processor has only a single ALU and a fixed bus width, while the FPGA can use as much calculating ressources and signal lines as needed/possible. In order to do so you need a language that can describe this. And that can only be done by language elements that support concurrency.
Now back to your original question: why not C for hardware design? Well, there are synthesis tools that promise to do so: Handel-C , Catapult-C. But how is that done? By extensions to the language. Either adding new functions to support concurrency and special signal types, or by using synthesis constraints.
Both approches have their advantage and drawbacks, but in both cases you can't copy your sources from "numerical recipes" and expect good hardware results. You just need more than plain C.