What is this?
As the name suggests, this sub-site of The Embedded Kitchen, is a 100-day challenge or solo bootcamp for myself to ramp up on FPGAs and Digital Design.
I will be maintaining a record of what I do daily, how I learn in the interest of keeping track of my own progress as well as with the hope that it may help someone who is along a similar path.
The 100-Day count will start from Monday, 10th June 2019 and end on Tuesday, 18th September, 2019.
Even though the official time starts from 10th of June, I am counting the days leading up to it when I am preparing for the sprint. For example, this page has been written on Day -6 (Monday) and Day -4 (Wednesday). I will log work done on these days as well.
Why 100 days?
100 is a neat round number. As Digital Design and FPGAs are a vast topic in themselves, so 100 days would be the sweet spot in doing something that’s significant in a short time span.
As an electronics professional and also in my personal time as an electronics hobbyist, I have had exposure to a wide variety of circuit types. I have built analog circuits, digital circuits and embedded devices - devices that use microcontrollers + maybe displays, motors and also Embedded Linux devices like Single Board Computers (BeagleBoard, RPi, etc) and at the same time, I have proficiency in designing boards as well as developing software - which means I can take care of an electronics design almost end-to-end.
However, something I have passed along the way but never took up and what prevents me from calling myself a “full-stack hardware engineer” is FPGAs and digital design. Why did I pass it along for so long?
- Maybe because someone told me along the way that “FPGAs are only useful in huge industrial settings and there’s no point in learning it as a hobby”
- Maybe because FPGAs looked cool from a distance but the toolchain and effort required to ramp up on them took long and scared me off?
- Maybe because they were priced way out of my budget and looked scary in an SMD or BGA package
- Maybe because writing Verilog (or any other HDL) full time looked “less cool” to me than the idea of designing boards and working with “physical hardware”
Now that I look back, none of these “excuses” are deal breakers. Budget is no longer that much of a constraint as I have a full time job. With a fully open source toolchain available for (currently) the iCE40 and ECP5 FPGAs, access to FPGAs is democratized, and they are now in the hands of a lot of more people (at least that I see) than they were in the past. Hardware designers are now embracing BGAs and cheaply available 4 or even 6 layer PCBs with tighter design rules enable them to be fanned out - even I am no longer shy of using them on my next board! Now that I am about two years into my professional career I understand that both the HDL work as well as the work that I do (with board design, hardware and software) are cool in their own ways, one no cooler than the other. And the best way to learn “Digital Design”, as it is in the industry, is to be a part of a cool design team. The next best way? DIY as I have always done when I took up electronics as a hobby in my early childhood. I just dove in, got my hands dirty and learnt it step by step. There were manuals and guides, but I charted my own path. That’s what I want to do here.
Which technology platforms (hardware, software) will you use?
Ideally I want to start with the open source toolchains and iCE40 FPGAs, but I also have more powerful boards lined up :)
- (The Humble) TinyFPGA BX (Lattice iCE40LP8K)
- (will have) Radiona ULX3S (Lattice ECP5)
- bunnie’s NeTV2 (Xilinx Artix-7 XC7A100T)
- (Giant Killer) Avnet’s Ultra96 board
My aim will be to structure up my projects in such a way that what I make does justice to a particular board - while it’d be great to make a FPGA blinky on the Ultra96 board for example, it won’t do justice to the board as it is capable of doing things which are far more complex - considering it has a ARM Cortex-A53 application processor that can run Linux as well.
For toolchains, I’d be using:
- Project iCEStorm for iCE40 FPGAs
- Project Trellis for ECP5 FPGAs
- Explore not just Verilog, but Migen and LiteX as well on the NeTV2 and the ECP5 boards
- Xilinx’s Vivado toolchain for Xilinx FPGAs, as well as PetaLinux for the Ultra96
On the projects front, I don’t just expect to recreate examples - of course that’s how I plan to start but I would also build one (for the bigger boards) or multiple projects per board that’d illustrate “more than example”.
I’ll keep special emphasis on the following as I believe that they will be very useful to me:
- RISC-V cores
- PCI Express (on NeTV2)
- MIPI DSI/CSI
How long will you work per day?
On weekdays, I’ll keep this to 1-2 hours a day which I can fairly manage alongside my full-time job. On the weekends I hope to spend at least 6 hours or more if I don’t have other plans.
How can I read the daily logs?
To your left is a section of weekly logs - the latest ones will be on top first. Please feel free to click on the links and read the daily logs!
Where will you keep your code?
I will keep my daily code at https://github.com/abhishek-kakkar/100DayFPGA
Is there a structure or outline of what you are going to do each week?
There isn’t one for now, it’s going to be free-form. However I have pointed out areas that I’d like to give emphasis on, and I would structure my days around it.
If you (the reader) have any suggestions on what I could do next based on my record of activity, please feel free to let me know at my email “abhishek” AT the embedded kitchen dot net (minus spaces) and begin the subject line with “#100DayFPGA”.
I want to leave a comment, or discuss something!
Sure, please write to me at my email! (see previous answer) Alternatively, you can create an account on https://discourse.theembeddedkitchen.net (I recently opened it) and we can discuss there as well.
How is this website made?
This is a static site made in Hugo that uses the Hugo Book theme. I like this theme for its simplicity and felt it was just right for this purpose.