A reoccurring question on the Reddit FPGA forum is whether or not it is possible to make a living as a solo digital design engineer. By “solo”, I mean as an independent consultant–a business of one if you will. Such a business is not really big enough to qualify as a “small business”, it’s really more of a micro business. By digital design engineer, I mean one who builds digital designs for either FPGAs or ASICs. My answer has always been yes. To explain why, let me share some of my story.
First, I started out knowing nothing about business. I am a twenty year veteran of the U.S. Air Force. By the time I left, I was working for the Air Force as an electrical engineer in support of large acquisitions. Other than working on the purchasing end, I had absolutely no experience running a business. No one in my family runs their own business either.
That’s not really a good place to start from, but it’s where I started.
I left the Air Force with a pension. When I left in 2013, I was bringing in a reliable sum of money every month to provide for my rather large family. The pay of a Lt. Col. is well known and well published. The benefits that go with it are significant as well, amounting to another 40% on top of the basic pay. Upon retirement, those benefits go away leaving you with 50% of your base pay, or 44% if you elect for the Survivor Benefit Plan (SBP) to provide a retirement pension for your wife after you die.
Yes, I am a father. I am married to my college sweetheart, Tracy, who has been a stay-at-home mom since 1999. Together, we have eight children, and she has homeschooled all of them. My youngest was born just two months before I left the Air Force, and today I now have two in college and one who has just started out as a mechanical engineer working for a large defense company.
My point here is simply that, as a father, I have a lot of needs to provide for.
For me the question was never whether or not it would be possible to make a living as a solo digital design engineer, but rather whether or not it would be possible to earn enough of a living to support my large family.
For those who have asked, though, let me share some of the business half of the Gisselquist Technology story behind the ZipCPU blog today. Perhaps it might encourage someone else who wishes to start out on their own.
Step 1: Be prepared for a spiritual battle
Let me start out by saying that running your own business is a spiritual battle. It’s not for the faint of heart. If you want to do it, be prepared to be tested at every turn. To make matters worse, you will often find your individual self worth tied tightly to whether or not you are able to provide for your family. That’s not an easy place to be in.
My own personal business journey began in 1st Corinthians 7:21,
Art thou called being a servant? care not for it: but if thou mayest be made free, use it rather. For he that is called in the Lord, being a servant, is the Lord’s freeman: likewise also he that is called, being free, is Christ’s servant. Ye are bought with a price; be not ye the servants of men. (1 Cor 7:21-23)
I had spent over twenty years the servant of someone else. That someone else told me what I was allowed and not allowed to say about my faith, lest somehow I might exert an undue command influence over a subordinate. Now, if I was going to serve anyone in business, I wanted that someone to be my Lord and saviour Jesus–the same Jesus who is the Christ.
I’m sure we’ve all had supervisors who have had less than the perfect character in the past. Some yell and scream. Some are hard task masters. Some curse and swear. Some are critical of everything you do. Some don’t care what you do, perhaps even going so far as to act as if you don’t exist. Others are kind enough to teach you and work with you. Let me ask, now, where do you believe the perfect supervisor would fall on that list? Having known Jesus for decades, I knew He was the perfect supervisor. That was who I wanted to work for. Being in business for myself, therefore, meant working for the same Jesus who had saved my soul.
Choosing to step out on faith like this means there will be a test to follow. There always is. You will fall until you and the Lord are convinced that you will trust Him first above anything else. For me, I fell until my life savings was gone, and then I fell even farther before business took up–but that part comes later.
Before leaving this section, I’d like to point out a couple passages that were also key parts of my business understanding.
The borrower is servant to the lender.
The rich ruleth over the poor, and the borrower is servant to the lender. (Prov 22:7)
My goal in business was to serve Jesus from the very beginning. I wasn’t going to be able to do that if I borrowed any money. Therefore, I chose early on not to go into any more debt as a part of business. I say any more because, like many, I’m still paying for the house I live in. That loan is too large to pay off either today or tomorrow. Instead, I promised not to gain any more debt.
God provides for His own. Our requirement is to seek His righteousness, and then He will provide for us.
Therefore take no thought, saying, What shall we eat? or, What shall we drink? or, Wherewithal shall we be clothed? (For after all these things do the Gentiles seek:) for your heavenly Father knoweth that ye have need of all these things. But seek ye first the kingdom of God, and his righteousness; and all these things shall be added unto you. Take therefore no thought for the morrow: for the morrow shall take thought for the things of itself. Sufficient unto the day is the evil thereof. (Matt 6:31-34)
Okay, it’s one thing to read it, but it’s another thing to believe it.
Would you be willing to believe that you should seek God’s righteousness first when there’s no money in your bank account? When your savings are gone? When you don’t know where your next income source is coming from?
If so, you might be ready to follow this path of serving the Lord.
If not, then you will always be the slave of someone else.
When I found myself wondering whether or not I’d be able to feed my family, this verse came up again and again.
The Lord is a hard man. He expects as much from His servants.
Remember the parable of the talents? This story was very instructive for me as I got going, and I learned a lot from it. Indeed, I learned the most from the discussion of the slothful servant–the one who had received only one talent from his lord, and did nothing more than return that talent back to his lord.
Then he which had received the one talent came and said, Lord, I knew thee that thou art an hard man, reaping where thou hast not sown, and gathering where thou hast not strawed: And I was afraid, and went and hid thy talent in the earth: lo, there thou hast that is thine. His lord answered and said unto him, Thou wicked and slothful servant, thou knewest that I reap where I sowed not, and gather where I have not strawed: Thou oughtest therefore to have put my money to the exchangers, and then at my coming I should have received mine own with usury. (Matt 25:24-27)
Let’s pause and notice some things here. First, in the context of this parable, the Lord is telling a story of how the Almighty deals with His servants. The business man in this story is metaphor for the Almighty Himself. So a study of this hard master is really a study of the Almighty, of what he expects from His servants, and how He deals with His own.
Second, notice the description the slothful servant gives of his lord, “I knew thee that thou art an hard man, reaping where thou hast not sown, and gathering where thou hast not strawed.” The key in this description is that the slothful servant’s lord embraces the description. He doesn’t dispute it. Instead, he says, “thou knewest that I reap where I sowed not, and gather where I have not strawed …” Therefore, the Lord’s character is as one who reaps where he has not sown, and who gathers where he has not strawed.
There are many who would argue that, “It takes money to make money.” That’s not the character of the Almighty in this passage. The character of the Almighty, which it would be well for His servants to consider, is of one who reaps what he has not sown. In other words, he makes money without first making any investment.
It is possible.
In the case of digital design, it is definitely possible. You can download all the software you need to get started for free. You can download all the data sheets you need for free. You can use formal tools and a simulator to verify your designs for no cost. Only after you’ve done that for a while do you need to worry about purchasing any FPGA equipment.
I didn’t purchase my first FPGA board until after I had a simulation running which could demodulate and despread GPS waveforms.
The way of the spirit
Those that follow the Lord are not of those that are “of the flesh”, but rather of those that are “of the spirit.” John teaches that,
That which is born of the flesh is flesh; and that which is born of the Spirit is spirit. Marvel not that I said unto thee, Ye must be born again. The wind bloweth where it listeth, and thou hearest the sound thereof, but canst not tell whence it cometh, and whither it goeth: so is every one that is born of the Spirit. (John 3:6-8)
A quick study of the greek word for Spirit will reveal that it can equivalently be translated as: spirit, ghost, wind, or breath. Now go back above and re-read that passage, treating the words “spirit” and “wind” and “breath” as though they were the same concept.
This is the nature of someone that is born “of the spirit.”
That’s just a quick background to the passage that I found relevant to starting a business:
There be three things which are too wonderful for me, yea, four which I know not: The way of an eagle in the air; the way of a serpent upon a rock; the way of a ship in the midst of the sea; and the way of a man with a maid. (Prov 30:18-19)
Of these four, the eagle is truly a creature of the spirit. It can soar for extended periods of time without ever beating its wings. How? It senses the air currents, and lets the air push it upwards into the sky.
When I first studied this passage, I thought that ships were also creatures of the spirit. In hind sight, not all ships are sailing ships, so this isn’t quite true. The lesson still holds, however, that ships can harvest and use oceanic currents that they didn’t create, or that snakes can enjoy the temperature of the rock that they didn’t heat up.
A business following this philosophy would sense the business winds, and soar on whatever is able to sustain it.
To put it another way, you don’t get to pick what business opportunities will be available to you–just as you can’t pick which direction the wind will blow. Instead, you get to pick which business opportunities you will pursue.
You will make mistakes.
If you aren’t willing to take risks, you won’t learn which risks to take. The man with one talent never took any risks. His lord wasn’t pleased. I’ve taken risks in this process, and lost tens of thousands of dollars.
The steps of a good man are ordered by the LORD: and he delighteth in his way. Though he fall, he shall not be utterly cast down: for the LORD upholdeth him with his hand. (Ps 37:23-24)
Each time I’ve lost money, even significant money, I’ve always managed to get back up again.
The next verse of this passage is awesome as well.
I have been young, and now am old; yet have I not seen the righteous forsaken, nor his seed begging bread. (Ps 37:25)
Take that verse, together with Jesus’ instruction to seek first the kingdom of God, as a promise. Here’s another one that I’ve memorized, and recited to myself as I’ve traveled on trips where … I don’t know if I’ll make money or not.
Blessed is the man that walketh not in the counsel of the ungodly, nor standeth in the way of sinners, nor sitteth in the seat of the scornful. But his delight is in the law of the LORD; and in his law doth he meditate day and night. And he shall be like a tree planted by the rivers of water, that bringeth forth his fruit in his season; his leaf also shall not wither; and whatsoever he doeth shall prosper. (Ps 1:1-3)
That little bit about “whatsoever he doeth shall prosper” has always caught my attention. It too is a promise. I’ve found it quite comforting.
This was where I began.
Step 2: Financial Planning
When I first started out, I built a spreadsheet detailing how much money I would need to make to stay afloat. I looked over several possibilities–things from trying to live on my Air Force pension alone, to finding a minimum wage job, working as an engineer for someone else, to running my own business.
If I wanted to live on my pension alone, I might manage about $47k per year. It wasn’t enough to get by. Some time later, the VA adjudicated that my asthma qualified me for a 100% disability. That helped, but $65k/yr still wasn’t enough to make my ends meet.
If I added a minimum wage job to the mix, I might manage to make $105k/yr. In that case, we might cut some corners and still get by–that bottom line was at least close enough to my Air Force pay that I might’ve been able to make it work.
In the years that followed, this was always a reassuring thought: I could at least get by flipping burgers somewhere.
However, that wasn’t what I wanted to do.
If, on the other hand, I managed to make $198/hr working for myself, I would bring in the big bucks! This was a reasonable hourly charge for an engineer, so why not?
… and this is where I made one of my biggest mistakes. $198/hr is an awesome wage, at forty hours per week by fifty weeks a year, but only if, and it’s a big if, you can get enough work to fill a forty hour work week for fifty weeks a year.
It took me about a year or two before I realized my mistake. By then, I was committed to working for myself and not making nearly what I had dreamed I would. Still, I enjoy what I do, so I’m not planning on any career changes any time soon.
Step 3: What would I do?
My initial business plan was to work hours for whoever hired me.
I suppose I started out well: I managed to get two contracts in two years for GPS signal processing work. After that, the client decided they were no longer interested in the project, and I was left holding onto a bunch of ideas that no one was interested in.
After that, working hours for whoever might hire me didn’t have enough clarity.
Think about it: Who wants to hire an engineer who says he can do everything? Most can’t really do everything, and those who are somewhat good at doing everything are just that: somewhat good.
So, what did I want to do? I wanted to do signal processing, but I wasn’t in a position to get very far with it. I didn’t mind working for the defense department, but I didn’t want that to be my only business. My wife believed I “worked with computers”, but frankly I didn’t want to do modern software (i.e. web) development. I just didn’t feel like it was my calling.
This left me, after about two years, “working for myself” but with absolutely no income.
After watching way too much youtube, and burying myself deeper and deeper into having no money, I found some useful insight from a verse from Proverbs:
In all labour there is profit: but the talk of the lips tendeth only to penury. (Prov 14:23)
What caught my attention was the comment that, “In all labour there is profit”–even labour that has no sponsor, labour for which no one is paying.
So, I started doing what I wanted to do: digital design. I worked for free, for myself, with no one paying me, and I built digital designs under the hope that someone might purchase them later.
As a quick footnote, while I eventually made a profit, it was never for selling any of these designs. That’s just not how open source works. In the end, the designs were used to convince customers that I could solve their problems, and so they helped me make money doing something else–but it took me a while to learn that.
Step 4: GPS and the ZipCPU
As those first contracts doing GPS work finished up, I invested a lot of my own time into what I thought would be the next step.
One item I didn’t have was a GPS processing system that could process the GPS signal from acquisition to lock in real time. So, I invested my time into building such a system.
The GPS algorithm I was working with needed a lot of block RAM. After doing some research (back in 2015), I decided that a VC707 development board might just have an FPGA with enough block RAM on board. However, I was going to need to do a lot of work to get to a working GPS system on a VC707.
I would need the PCIe interface. The VC707 had one, but I had no idea how to use it.
Instead, I built a serial port interface to a Wishbone bus, and a Wishbone scope I could use across that serial port interface to debug items within my design. I judged that, once I purchase the VC707 (I never got that far), I’d then be able to debug the PCIe interface using a USB to UART/JTAG bridge.
Processing the GPS signal at such high speeds meant being able to run a lot of correlations. Correlations required FFTs, and so I built and verified the dblclockfft project–one that could run an FFT at two input samples per clock period.
The project was even cooler than that: I wanted to be able to run an 8k point FFT on 2k points of data, so I built a 2k point FFT followed by the correlation multiplies, followed by four 2k point inverse FFTs.
It worked really nicely (in simulation).
This was also when the ZipCPU project began.
The ZipCPU was designed initially to be a light-weight general purpose CPU that could support the GPS processing on the VC707. The GPS engine needed a CPU to load the pseudorandom noise coefficients and Doppler offsets into the various correlators.
Not only that, but the ZipCPU would also be required to compute the positions of the various satellites, calculate what Doppler offsets to expect for a given point on the earth’s surface, and then to run correlations against that satellite and that Doppler.
To this day, the project has never become a full and complete reality. 1) I could never afford the VC707, 2) I couldn’t afford the Xilinx license required to build a design that would fit on a chip that big, 3) I still have no idea if the extensive block RAM requirements of the algorithm would’ve even fit on the chip, and 4) I/O speed is everything. I don’t know if the hardware could’ve kept up with the memory requirements.
Finally, I needed to run at a clock rate of 200MHz (or faster). Meeting this requirement may have been nothing more than me dreaming.
If nothing else, this was where the ZipCPU project began–as an effort to put “labour” into a project, any project, while having no idea whether or not it would pay off. All I could do was simply trust God that “in all labour there is profit.”
I put close to $0.5M worth of hours into the ZipCPU before I stopped keeping track.
I was quite proud of the ZipCPU. It was designed to be a low-logic CPU, and I feel it’s met that goal quite well (especially after I finally managed to do an apples-to-apples comparison against the PicoRV32–but that’s a different story for a different day).
Step 5: Marketing
When I began, I had no plans for marketing. None.
I was also starting about two rungs short of a step-ladder: brand new in a corporate community that didn’t know anything about me.
For this, I took inspiration from Ecclesiastes:
In the morning sow thy seed, and in the evening withhold not thine hand: for thou knowest not whether shall prosper, either this or that, or whether they both shall be alike good. (Ecc 11:6)
I therefore tried several marketing approaches, not having any idea which would prosper.
My first approach at marketing was just to publish open source IP. I suppose that was a good start, but it wasn’t good enough. No one came beating a path to my door–and certainly no one with any cash.
My second approach was to participate in any forum I could. I kept the OpenCores forums alive for a while–long past when there wasn’t enough traffic to justify the work. I responded to everything I could find on Digilent’s forums, looking up and answering any question I could and recommending my IP every chance I could get.
This helped. I managed to find a customer who wanted some SONAR work done as a result of my work on OpenCores.
I found a second customer when I went to OrConf 2016 and presented the ZipCPU in Bologna, Italy. Well, at least that was when I met them. That meeting didn’t turn into any funded development work until early 2018, but I’ll still credit that first meeting.
Step 6: Blogging
My next step was to start blogging. My first blog article was in May of 2017. That article, and the ones that soon followed, were based upon my frustrations helping clueless students out on the Digilent forums. The bottom line, at least then, was that I had found ways to overcome most of the challenges these beginning students had, and so I started sharing these tidbits.
The blog found some sponsors very quickly, even though $20/mo is a far cry from the $33k/mo I had been hoping to make by owning and operating my own business. By the end of the year, I had made $472 blogging. Still, nothing to write home about.
Things started to change when I tried out formal verification.
Edmund from Symbiotic EDA had asked me to try out their formal tools. Why not? I had nothing to lose, I wasn’t bringing in many dollars, and it might help draw some more sponsors to the blog. I was also confident enough in my design abilities that I wasn’t expecting to get spanked. I mean, everyone knows how to build a FIFO, right?
I got spanked.
Apparently I didn’t know how to make a working FIFO.
This was also a serious blow to my attempts to find business: If my OpenSource cores were as buggy as that FIFO was, then how would I know whether a potential client looking over my online designs could immediately spot a bug that I had missed? If that ever happened, it would be bye-bye potential client.
I then went back through all of my public designs, formally verifying them, and fixing any bugs I had found.
Much to my dismay, I found (and fixed) many bugs in the ZipCPU.
Needless to say, I was hooked.
Step 7: Reap the profit
Remember the proverb:
In all labour there is profit: but the talk of the lips tendeth only to penury. (Prov 14:23)
Once I started getting into formal methods, I started making a profit. I’ll argue the proverb is true, but it took a while for my years of investment to start paying off.
The first key was a formal verification tool I could afford: the open source version of SymbiYosys.
The second key was that I went back to formally verify everything I had previously posted–my online portfolio if you will. By doing this, I ended up building a background in formal verification, learning how to verify a large number of design types.
Third, by blogging about what I had done, I became a recognized “expert” in formal verification.
Finally, I had people start calling me for work.
The first contract I received was with Symbiotic EDA. They wanted to sponsor my blog, and eventually pay for me to help expand their customer base. Since this was what I was already doing, the fit was natural. They also wanted me to build a formal verification course and teach others who might be interested.
Step 8: AXI
I like to think the blog gained the majority of its notoriety when I started blogging about AXI.
AXI is a difficult protocol to work with.
It’s also fairly ubiquitous.
– This includes example designs from both Xilinx and Intel
– It also includes some of Xilinx production designs. (No, I haven’t tested any of Intel’s production designs.)
– It also includes most student designs that copy from those examples
I can get nearly free publicity on Xilinx’s forums by just sharing the above information, and pointing them to blog articles stating those facts. It’s awesome!
From December, 2018, when I published my first AXI-lite article, through this summer, I did a lot of work verifying AXI cores.
Most of this work centered around building formal properties for verifying AXI designs. Formal properties, however, need to be tested under various environments–so I built AXI slaves, crossbars, bridges, simplifiers, bus masters, anything I could get my hands on that would test my properties and (as a result) teach me more about AXI verification.
Just as a caution, (full) AXI verification is hard. AXI-lite is easy, but full AXI verification is pretty hard. It gets harder the more packets the design allows to be in the pipeline, and so the crossbar was one of the harder designs I had to verify.
It takes work, but it’s kind of fun work.
I was doing pretty well at the task until this summer. This summer, Avery
design systems tried out my (formally verified)
They found a bug in it. Worse, it was a very serious bug: The design allowed
AW* packets to be in transit, but only accounted for the beats
required to complete a single write
W* packet. As a result, it would
hang if a second
AW* packet was presented while the first was still
This is a serious bug. AXI is designed to allow the
to be asynchronous. Because they are asynchronous, the
AW* requests are
supposed to be able to go through the
ahead of the
W* packets, so that the
W* beats never get slowed down
by the channel allocations that need to follow.
What happened goes back to, AXI is hard. I had struggled to figure out how to
handle out of order
W* packets, so I assumed the two would be
aligned. (Oops.) This became a limitation of the formal properties that I
hadn’t paid attention to.
Fixing the crossbar was easy.
Fixing the proof of the crossbar? That’s still not done. Lord willing, I hope I’ll get another chance at that when my current contract load lets up a bit.
Step 9: Honesty
Before I close up this story, I’d like to bring your attention back to the beginning, where I promised that my business would be my service to God. By working for myself, what I really mean is that Jesus is my lord, and that I am His servant in business.
This is not a position I intend to compromise on.
This also requires honesty. Honesty doesn’t always make friends.
On one contract, I was asked to adjust the dates in the user’s guide to make it look like the product was more mature than it was. I had to explain to this customer that honesty was a condition of our working together.
One (potential) client asked me to fill out security forms, under penalty of perjury, stating that I was working for him full time. When I discovered there was no paycheck attached, I turned him down.
On another team I worked with, I was asked to call a man by female pronouns. This one brings me more grief, as I enjoyed working with the individual in question. He wanted to declare himself to be a woman. He changed his name, his clothing, his looks, his dress, you name it. While I might disagree with his decisions, who made me a judge? However, for me to call a man a “she” would make me a liar. This I refused to do.
Let’s be honest with one another. God made man “male and female” by design. This is obvious and evident from the creation itself: Only women can give birth. Only women menstruate. Only women suffer from miscarriages. Men dressed like women, who call themselves women, are nothing more than that: men who dress like women, and who imagine themselves to be women. Some may have even made themselves eunuchs. They have not made themselves into women.
When I declared that I was not going to use female pronouns when addressing a man, I lost the funding for my AXI work. That was paying me about $1.5k/mo for some really fun work. In the process, though, I gained another, much larger contract (about $70k over 6 months or so), but my point here is simply that the AXI crossbar still needs some verification work that isn’t getting done.
Lord willing, I’ll be able to get back to it next year–after I finish taping out my first ASIC project.
Just think about that, though: I’ve gone from work without pay, to now needing to turn down work because my calendar is full. That’s a good place to be in business.
Today is Thanksgiving, 2020. It’s that time of year in America when those of
the faith give thanks to God for the year’s harvest.
Looking back on how far I’ve come, I have a lot to be thankful for. I’m thankful first and foremost for my relationship with Jesus. Perhaps you’ve heard Him speak in the verses above? I’m thankful for my wife, who has been willing to figure out how to make life work without knowing how much income she will have to work with from one month to the next. I’m thankful for my family, and for their encouragement even through the more difficult times.
Today, I’m also very thankful that I’ve had contracts this year. Indeed, I like to think I’ve been pretty successful. I certainly haven’t made the $198/hr I had planned on for year round work, but I have made enough to keep my family from any more debt–in spite of sending two of my daughters to college this year.
As an engineer, I’m not getting a lot of little contracts. I’m getting just a couple very large contracts, from about 3-4 good paying clients. The formal verification course is fun, although it doesn’t really pay my bills unless I teach two students at a time. (Expect the price of the course to go up in the future.) The blog is also fun, and I enjoy it, but in spite of the wonderful individuals who sponsor it, it’s not paying my bills either. The few contracts I have, those are paying my bills in abundance.
When I started out writing a blog, my goal was always to find customers. Now that I’ve had to turn some down because I’m too busy, I’m going to judge that it has been successful to date towards that end.
So, let’s return to the question of whether or not it is possible to build a business as a lone digital design engineer. Or, more specifically, is it possible to earn a living in such a business that is sufficient to support a large family? My answer to that question is a resounding, Yes, it is possible. Not only have I done so, but I have also met many others along the way who have managed to do so as well. Your success, however, will depend upon your ability to find customers for your work. I wasn’t as prepared for that as I should’ve been. Your success will also depend upon your ability to endure through the hard times, since it may take you some time to find those reliable customers that you need.
The good news is that, in the case of digital design, you can download most of the tools you need to get started. You can then get started and do a lot of work before you ever purchase your first piece of hardware. Yes, it is possible to reap where you have not sown, and to gather where you have not scatterred.
For the kingdom of heaven is as a man travelling into a far country, who called his own servants, and delivered unto them his goods. And unto one he gave five talents, to another two, and to another one; to every man according to his several ability; and straightway took his journey. (Matt 25:14-15)