programming geek - EE geek

March 15th, 2004 at 8:00 pm

About a year has passed since I finished my studies and started my
current job. This is a hardware/electronics engineer position, which
I had very little experience with during Uni.
Although my formal education is in EE, programming has
always been my biggest passion, so I tried to take as many programming
and CS courses as possible and worked as a student in IBM’s
research labs, programming in C, C++ and Perl (I still work there
part-time…)

I want to try to summarize for myself how this year went, how I’m slowly
learning the craft of hardware engineering.

Some of the stuff I’m doing here now are what I always wanted the most,
a mix between the theoretical (software) and practical (hardware). That
is, not coding just for the sake of applications, but for real things,
like various devices. For me, it’s much more interesting to code a
program that reads/writes to serial port and talks with devices than
Yet Another J2EE application with a BLAHBLAH database interface.

But first things first…

When I just came in, I was given a relatively simple task - to take some
VHDL code written by another engineer and verify it, following the spec,
using simulations in Modelsim. This was a good task, as it allowed me
to learn VHDL (I knew it a little before, from homework and labs, but not
enough to read/write real code), and get to know Modelsim, which is a great
simulator. Programming skills quickly came to my rescue - it took me exactly
2 days to understand that I need a Perl installation here. I wrote scripts
that generate testbenches, test vectors, compare results to expected, etc.
Fun fun fun, especially to be able to help people who are not aware of such
tricks at all and were doing boring manual work before.

They probably liked the way I verified those designs, as my next task was
to thoroughly test a bought soft IP core (a module with VHDL code supplied).

Next, I actually got to write some VHDL code myself. I was teamed up with a
senior engineer on his board that featured 4 FPGAs and 3 embedded processors (no
less !). My task was to help him code the FPGA designs and verify his code. Oh,
I still remember the excitement when for the first time I synthesized some
VHDL I wrote, loaded it to the FPGA on-board and saw it running in the Logic
Analyzer. As I mentioned earlier, these “real” applications are what I enjoy
the most.

Another task I did is modify an existing program in C that was running on an
old DOS PC and talking to a custom-built card to gather some data from a
communication link. The program needed refreshing and some options added, so
with my knowledge of C I did it. It’s real fun the DOS way - the card’s registers
is just memory-mapped, and accessed directly (direct-memory access, uh oh, an
immediate fatal exception on Windoze, but not DOS :-) with in() and out() functions.

Slowly I started to get more involved on lower levels - understanding what some
analog circuits are doing on the board, to be able to better check them using
a special test version of the FPGA.

In parallel, I got to fiddle with the test program of the embedded CPUs. My first
taste of Ada hacking ! Writing code, compiling it a loading it to a PCB (that
lays on your desk) from which it runs is a whole different experience than
traditional PC programming.

The task with this board and its FPGAs is quite long and still ongoing. We
have some bugs to brush-out (hardware bugs are far meaner than software bugs…),
and more code to write.

Later I was assigned a programming task - a program to be used in-house to decode
binary data from special files. In-house means that I could choose any tool I liked
to program it, as long as it works. I decided to try to use Perl for this rather
large project. So far it’s about 4500 lines of code, and there’s still a lot to
add. Perl doesn’t dissapoint me, except for a little slowness in Tk’s GUIs.

I also began to do real low-level stuff, like designing small circuits
with diodes, transistors, capacitors, etc. It’s real fun building a test circuit,
feeding it with a pulse generator and tracing lines with a Oscilloscope - you can
actually see the little electrons moving (figuratively, of course)!

Recently I found some components we could use
in one of the boards, and now it’s all about designing how to encorporate them
into the project. This is stuff I’ve never done before, hell I had to recall what
a Zener diode is. A senior engineer just said “sure, use a zener here”. I nodded
with understanding and 5 minutes later rushed into the net and my old notebooks
to recall what the hell a zener is used for. Well, now I know :-)

A little later, I’ll have to test these components with a PC (communication devices).
I can’t wait ! We’ll build a test board, connect the communication component through
a RS232 converter to a PC serial port, and I’ll have to code some C to talk to it
(there are development kits ready, so I’ll probably just have to understand how they
tick and borrow code from there).

So, I’m just slowly turning from a programming geek to a hardware/electronics/embedded/programming
geek. As long as I stay the geek I am, it’s allright :-)

Related posts:

  1. the joys of embedded hacking
  2. testing and test-benches
  3. “Programming Embedded systems in C and C++” by Michael Barr
  4. dealing with a wide range of things
  5. Using perl for hardware verification

Leave a Reply

To post code with preserved formatting, enclose it in `backticks` (even multiple lines)