It’s a new school year!

For all you new students out there, please accept my welcome to the wonderful world of digital design. I am neither a student nor a professor, and yet I have helped many students through their projects on the Digilent forum, as well as on freenode IRC.

This post is an outgrowth of my own experience counseling beginners on Digilent’s forums. Indeed, sometimes I feel like I’m a broken record there repeating over and over the same rules for newbies.

So, before you ask for help, here are a couple rules to keep you from running into the same trouble others have gotten stuck within:

Rules for software engineers

Just for students

I’ve seen a lot of students get burned. While some might say that this is a normal part of the learning process, don’t let it be your process. Learn from those who have gone before you. Specific lessons I would share include:

Success is measured by the number of failures. Plan for failure. Every student tends to come across some “impossible” problem in his design that he cannot figure out. He may get stuck at this point for days or even weeks. This is common. Plan on getting stuck, put some time into your schedule in case this happens, and then plan before hand on how you are going to get yourself unstuck.

Don’t start your project at the last minute. Good engineering takes time to do, and to do right. You cannot control when things will go wrong, or how long it will take to fix things when it does.

Plan on debugging from the beginning. Build yourself the infrastructure you need for that task first, then build your design. o All of my designs include both one or more wishbone scopes o All of my designs include a wishbone to UART debugging bus giving me access to my wishbone scopes

Consider this discussion on the FPGA design process, and learn what both instructors and experts often overlook when they teach you how to do the task.

Rules from Twitter

Many thanks to those who know me on twitter! They also offered the following pieces of advice for new students: (some edits applied)

My boss would tell me “Think in hardware” #parallel execution of code, not serial. sachin_bhutada

Thank you, sachin_bhutada, this may be one of the most common struggles software students have.

Use the right device for your job. Need to do 100kOps/s of multiplications? Pah, you cheapest MCU can do that. Remember: designing in HDL is hard, programming in C is easy. Marcus Muller

I think Marcus Muller meant to say that programming in C++ is easy …

One week of aimless development can easily save you two hours of writing specifications. Marcus Muller

Use build-time parameters instead of magic constants; you’ll thank me later. Marcus Muller

When working in a team, beat others with a stuck until they learn to properly use git Marcus Muller

Don’t believe hypes. Marcus Muller

If it’s complicated, make a drawing. Marcus Muller

Get a good book. The online tutorials you find are … spotty, at best. Learn the basics first. Marcus Muller

I often recommend asic-world’s online tutorials, but Marcus Muller’s advice still rings true. “Learn the basics first.” This blog cannot cover all of the basics.

Indeed, his comments hit the nail on the head so well, I’ve struggled here to figure out anything to add to them.

As for this blog and what you will find here, I’m just going to go back and underline Marcus Muller’s advice to “Learn the basics first.” Thank you, Marcus Muller!

Indeed, thank you again to all who responded!

Rules are made to be broken

Please notice how I titled this post as “Rules for new FPGA designers”. These rules are for beginners. Those who have worked with FPGAs for a longer period of time will understand that there are times and places for all of these rules to be broken.

To those who are contemplating breaking these rules, who may be at the point of moving from a beginning FPGA designer to a more intermediate one, my advice is this:

Carefully consider your steps. Do you really need to break the rule? My twitter friends and I shared these rules for a reason. Don’t break them unless you absolutely need to. Further, if you do absolutely need to break the rule, do your research first so that you know how to do so safely and reliably.

This isn’t the last word

I expect I’ll come back to this post many times to update my rules for beginners. So, if you’ve read this once, don’t be surprised if it changes again later as I add to these rules.

Have I missed anything? Feel free to let me know at the address below, and thank you for everyone who has contributed so far.

Finally good luck, have some fun, and stay out of FPGA Hell!