Software Development

Although I am a hardware engineer, I have past experience doing software development,  mostly for things like embedded hardware ( HC11, 68K, ARM in C and assembly ) but also some PC for test fixtures, etc.  Pre-college ( and pre-internet ) days I taught myself computers via BASIC and Assembly programming on TRS Model-I ( 2 MHz Z80 1980 ) then the Apple ][ (1984 – 1 MHz 6502 ) before finally coming to my senses in 1990 and buying an IBM clone and discovering C when I entered the Electrical Engineering department at the UW and realized Apple was not where its at ( sorry Mac fans ).  These days I mostly write a lot of Perl and Python scripts for chip development and testing. The chips themselves I design in Verilog and VHDL – which is definitely NOT Software Development ( its inferring Flip-Flops and Combinatorial logic – not inferring assembly instructions for a CPU – huge difference ). Anyways –  I have created a couple of open source software projects that make me a more productive Electrical Engineer.


[ Chip Vault ]  ChipVault I wrote in 2001 when I realized that ASIC and FPGA designs were rapidly getting too big to manage all the RTL design files manually and software oriented IDEs weren’t well suited for hardware designs. It was written in Perl and at 11K lines – ridiculously large for a Perl script. It runs on Linux ( and Solaris initially ) and does basic IDE hierarchy management and revision control for chip designs. Back in 2001 when EE Times was still an actual newspaper trade publication, I was phone interviewed by Richard Goering – the industry EDA expert for a nice article on ChipVault.bd_shell

[ bd_shell ] bd_shell I wrote just recently in 2014.  It was inspired by all the BASIC programs I wrote for my TRS-80 Model-I and Apple 2 in the 1980s.  BASIC had commands Poke and Peek for easily writing and reading to hardware IO ports which were all open to user access.  With 1 MHz CPUs I could build wire-wrap circuit boards with TTL 7400 series 5V parts from RadioShack and Jameco that would plug into my 1st two computers and actually decode bus IO cycles. By writing Poke and Peek commands in BASIC I could access my hardware directly and flash LEDs, beep buzzers, etc. As a kid in the 1980s it was perfect timing to learn hardware and software on your own. I studied the Apple 2 schematics in detail and definitely grew up in awe of Steve Wozniak – he definitely deserves more credit then he has received for starting the personal computer revolution.  Just compare the Apple2 with the Altair that Bill Gates and Paul Allen wrote BASIC for.  That said, Woz by himself was just a ( extremely talented ) hardware hacker – combined with Jobs they became a virtual Tony Stark ( or Elon Musk ) virtual entity. This open computer era inspired the RaspberryPi team to create their wonderful little open and low cost Linux computer. It challenged and inspired me to follow a career path into Electrical Engineering. The personal computer revolution and evolution was pretty exciting from 1980 to 1995 – then things just kind of stopped. Sigh.

Modern computers make it VERY difficult to communicate to hardware peripherals at a low level without writing root privilege device drivers. Inspired by the early open computer days I wrote bd_shell.exe as a UNIX shell like interface for communicating to hardware over a 2 wire ( “Backdoor” ) FTDI serial interface to USB. It inherits low level hardware access commands from BASIC ( Poke became “w” and Peek became “r” ) and also powerful UNIX shell features like piping, nested scripting, command history, variables, etc.  bd_shell is written in Microsoft Powershell, a scripting language primarily intended for SysAdmins – but it binds to .NET components – making it as powerful as C# without the VisualStudio overhead.  I stumbled across this awesome Powershell script by Ingo Karstein called PS2EXE that translates a *.ps1 script into a .NET *.exe windows executable.  What this means is that I no longer have to write windows Form apps in C# and using VisualStudio ( license headache ).  Now I can develop a Windows Form app in PowerShell as a script, test it and only  ~compile~ it to a .NET executable when I’m ready to share with people. I don’t need VisualStudio at all even.  Just some decent C# reference books. Although the syntax of Powershell is a bid odd, the ability to rapidly develop a software application as a script and then compile into an executable for deployment is very much the best of both worlds. I’m hooked.


[ sump ] SUMP.exe is my own version of a SUMP logic analyzer.  The original SUMP project was designed in 2007 as an external logic analyzer using a low cost Xilinx FPGA eval board for capturing external electrical signals to all available RAM inside the FPGA.
The original developer published the serial communication protocol and also wrote a Java based waveform capture tool. The simplicity of the protocol and the quality and maintenance of the Open-Source Java client has inspired many new SUMP compliant projects such as:
‘Open Logic Sniffer’ :

I created SUMP RLE hardware following original SUMP protocol and it maintains compatibility with the open source Java Client ‘Logic Sniffer’ by Michael Poppitz 2006 and actively maintained by J.W. Janssen at: . After I finished the hardware ( a variation of SUMP that stores samples with Run Length Encoding compression to conserve FPGA RAM ) I l took my recent PowerShell experience and created the SUMP.exe GUI to add new features to my own version of SUMP.  It provides a user configurable trigger menu that configures the hardware and then reads the acquired data and displays in a waveform window with basic cursor measurements.

Software Development

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s