A big hello to everyone on the EE Times Programmable Logic and Microcontroller Designlines. I'm sure you will agree with me that some people do weird things in their spare time -- just for fun.
Some people like to wander about. Others like to lay down on the sand letting the sun toast their delicate skin, and I've even observed that some people like to run around for no apparent reason. For myself, I like to design digital hardware systems -- mostly CPUs and System-on-Chip (SoC) devices -- just for fun. Just for plain old fun.
In my real-life job, I work mostly with software. This is often extremely complex mission-critical and safety-critical software targeting anything from "small" processors, like DSPs, to large ones, like SPARC, ARM, and Intel x86/AMD64. In particular, I am known for my deep knowledge of the Linux kernel and ecosystem, as well as some RTOS.
Having said this, I often want to get away from the software side of things. One reason for this is that working with complex software can be somewhat stressful. Another reason is that I am convinced anyone doing software should (must) know his or her target architectures. What are their good points? What are their bad points? What are their potential pitfalls? I believe that, in order to obtain the best possible results in terms of performance, memory utilization, etc., the software developer should have a good understanding as to how to make the software fit perfectly into the target hardware.
My academic background is not pure software, but rather a mix of electrical, electronics, and software. Since my earliest days, I've been involved with both software and hardware -- even back when I was a 10-year-old. I still remember destroying FM receivers (who could ever solder everything back in place?), using my ZX Spectrum to control an intrusion detection system, and doing the typical stupid things kids do when they are bored.
Happily, I actually ended up knowing a bit from all these areas -- analog, digital, and software. From there, I used a lot of small microprocessors and microcontrollers like Zylog's Z80 and Intel's 8051, not to mention the larger beasts like the Intel 8086. (This was long before Intel 286 devices arrived on the scene.) I also did a lot of work with Microchip's PICs. Oddly enough, I came to know about the AVR processor only a few years later. My house was full of breadboards, 74xx chips, wires, wires, and more wires.
Then one day, I bought an FPGA development board -- a Spartan3E Starter Kit. At that time, I was already in my 30s, and there were not many FPGAs available with a price tag that would fit a hobbyist's wallet. This was not a cheap board by our Portuguese standards, but my life changed a lot due to this decision, and I do not regret it at all. In fact, it's fair to say that a whole world opened up in front of me -- a world containing far fewer wires (my wife still thanks me for this).
Sometime later, I read about the ZPU -- a small, synthesizable 32-bit CPU core with a fully available toolchain that could actually fit in my FPGA and run at a decent clock speed. However, I quickly realized that the basic ZPU was not fast enough for my needs, so I decided to pipeline it. Thus, the Alvieboy ZPU (ALZPU) was born. This was a very, very complex design that required three buses to operate properly but could execute most instructions in a single clock cycle. (The original ZPU used a four-cycle approach.) This also provided me with the opportunity to learn two of the most used HDL languages available: VHDL and Verilog. I started with Verilog but would soon abandon it in favor of VHDL – a decision I've never regretted. Apart from anything else, I later had to learn ADA, and it was like I already knew how to program in this language due to my VHDL experience.
To Page 2 >