In: Computer Science
Why are we required to create a GPU from scratch on an FPGA using HDL language?
What are the design challenges with this?
If you want to compute something, the common approach is to write some software for an instruction based architecture, such as a CPU or GPU. Another, more arduous, route one could take is to design a special circuit for this specific computation — as opposed to writing instructions for a general purpose circuit such as a CPU or GPU.
Once you have designed this circuit, you need some way to implement the design so that you can actually compute something. One way, which requires quite deep pockets, is to actually produce a circuit that implements this design (this is called an Application Specific Integrated Circuit or ASIC).
An easier way, and the main topic of this blog, is to implement your circuit design is to use a Field Programmable Gate Array (FPGA), a reconfigurable integrated circuit. You can configure the FPGA to become any circuit you want to (as long as it fits on the FPGA). This is quite a bit different than the instruction-based hardware most programmers are used to, such as CPUs and GPUs. Instruction-based hardware is configured via software, whereas FPGAs are instead configured by specifying a hardware circuit.
Heterogeneous Architectures of today's computers impose a number of design challenges. From RTL coding, through verification to physical implementation, the tool flows had to be modified from the previous – easier – homogeneous flows. Strict system power limitations created another layer of difficulties of system design that had to be integrated into tool flows, as well as forced designers to reach for innovative ways of logic implementation, and creative methods of careful energy usage by all system components. And finally, semiconductor technologies face even bigger challenges to keep up with computer chips industries expectations of offering ever more sophisticated products at reduced prices – the ultimate design challenge.