This post is structured as following:
- 0. Abstract
- 1. Introduction
- 2. General Information
- 3. Personal view and conclusion
AbstractDear, readers,
it isn't a tutorial, since a don't provide any material that can be treated as such. It's rather a paper, that features some informative nature, as well excerpt from personal experience. Who should read this? Anyone, who has some time for this, or has very abstract ideas about this field of engineering.
I hope you find it interesting. If there are any typos, oddly sounding sentences, please, feel free to inform me.
IntroductionAs I've mentioned earlier in my intro post, I'm studying in the field of Information Engineering. I am deeply grateful to all my mentors, who showed me how "stuff works" and helped me to scratch the top of the mistery. The mistery, that doesn't let me in peace with myself and keeps pushing me to learn more and feel desperately pathetic at times.
I should rather confess that I have a better picture/understanding of a tiny piece of this magic, that keeps alive wordl web and many zillions of other services existent, on lower level: on the level of circuitry and gates, on the level of simple microcontroller architectures.
To express myself sharper: I can better see/understand and pretend to understand the things, that I see, the screws and bolts, the sceleton and carcase of a machine. Knowing some of it, I still know nothing about the magic and the benders that are up there on the top, that makes internet, that kind of place, that it reprents itself today. The gates I am not sure I will be able to reach. I can be eaten for any meal:
Some of us eat noobs for breakfast.
But enough of poetry.
BasicsI guess it might be a bit interesting for some of you, respected community memmbers, to read about FPGAs nad SoCs. I searched the forum for already existing posts on this topic (being new here, I believe I have a limited access), but didn't see anything, like an introduction or general tips. The eager to contribute and shy belief of having some knowledge motivated me to write this post.
The "toys", mentioned above, are the ones that, I think, most of us don't have. Whether they are too expensive to purchase them, or it's to expensive to afford a decent playground for them for later. Luckily, I had an opportunity to be involved in some projects, that were based on FPGAs and microcontrollers.And all the following will be dedicated to describe some of the work flow and specifics of this branch of development.
First things first, without knowledge of digital circuits and some electronics(as a perfect case), to be involved into FPGA design is really painful and I would say, from my personal experience of a student who struggled for almost 2 years, is meaningless.
What FPGA stands for can be googled for a better definition, but if I put it in less detailed manner, without over complications then, an FPGA can be treated as a LEGO. You define you own logic blocks, and go further specify what these blocks should do. As example, this can be a logic to implement *hated by most of student, since it's "cool"* a coin changing machine, speedometer, filter system for signals (playing with sound effects and so on), controller for old and pretty snake game or anything else that your imagination is capable of.
If you, my dear reader, interested to dig deeper, then take a look at basics of Digital Logic (boolean algebra, latches, flip flops, FSMs, these are good tips for starting). The programming languages out there are VHDL that I am a bit familiar with, and Verilog. The thing, that one with computer science background should keep in mind, is the feel of these languages. They aren't same as any language that you know. They are hardware description languages and using them you are building hardware blocks with some functionality, which is a bit different than using programming language to describe an algorithm to solve a problem. As a play ground you can stick to ModelSim, to simulate simple tasks and get the feeling of it.
SoC - system on the chip, it consists of FPGA and a so called control unit, which is a microcontroller. Named two can interact with each other, through various interfaces. What actually gives you freedom of both worlds. You can implement custom logic on FPGA and use the microcontroller for controlling/processing the logic/data. Microcontroller side programming is mainly done in C.
Some concepts like registers, timers, analogue to digital converters, UARTs and other communication protocols, interrupts are necessary to have idea of and some experience with. Being a bit prejudiced against Arduino, I would still suggest it as a starting point to the interesting world of microcontrollers.
For this kind of design there are software in market, one of two tools which I had hand on experience was Xilinx Design Suite for students. It is a damn heavy software, but it features enormous amount of facilities to mess around and learn. Though it can be too overwhelming for a beginner and has relatively steep learning curve. Xilinx provides very nice documentation and has decent teaching material. My personal experience of this kind of design ensured me that C is the mother of all languages, elegant and very very powerful (I don't sound like someone who worships a programming language, but C is C =) ).
ConclusionAs a conclusion, I can say that it's something interesting to get involved with. Understanding of basics and "low" level would never be something useless.
Thank you for reading.