Jack Bonn

Software Design Labs, Inc.
26985 Fenview Dr
Tower Lakes, IL 60010


Embedded Software Consultant


Embedded real-time consultant with industry experience in life sciences, robotics, telecom, and military domains. Lead designer fluent in C and C++, often using C#, Java, and Python for user interfaces and test control.


University of Michigan, Ann Arbor, Michigan

MSE Computer, Information, and Control Engineering

BSE Electrical and Computer Engineering

Professional Development:

Courses in Software Engineering, Agile Development, ISDN, C++, DSP Algorithms, Verilog, VHDL, CAN bus, Xilinx MicroBlaze SoC, TI DSP, Rational UML, Digital Imaging, High Availability Embedded Systems Design, and Real-Time UML.

Regular Embedded Systems Conference attendee.

Key Skills


C, C++, Java, C#, MATLAB, Python, Perl, VB, many assemblers.

Kernels / Operating Systems

VxWorks, Xilkernel, TIs DSP/BIOS, Unix/Linux, Win2K/NT/XP/7, QNX


Xilinx XPS, EDK, and ISE tools in support of System on a Chip (SoC) design

Agile methods

Use of finite state machine (FSM) techniques for software design

Subversion, SourceSafe


Intel x86, CUDA, Xilinx MicroBlaze (SOC), ARM, Power PC, TI and Motorola DSPs; Motorola 68xxx, 68HC11, and 68HC05; Intel 8051; Microchip PIC.


Northrop Grumman (2013-present)

Developed real-time programs using embedded Linux and pthreads.  Wrote inter-thread communication queues, implemented in C++ as a template.  Each queue can then be created with a suitable data type, preventing superfluous type casting.

Offline control and analysis was done in MATLAB and Python.

ARM / PowerPC Processing

Implemented code to control and process results from an embedded signal processing system.  Interfaced with the FPGA and provided remote access to the system.  Since the system was headless, access was provided via (potentially multiple) Telnet connections, each providing a command interpreter.  Facilities were provided to easily add additional commands.

A parameter interface was included to allow examination and modification of parameters, either interactively or from scripts or programs.  This allows easy test setup and results logging. 
CUDA Signal Processing

Successfully completed the proof of concept implementation of a next generation electronic counter-measure system which performed the required signal processing in Nvidia CUDA cores, rather than FPGA logic.  This provided increased agility as well as simplified debug capability.  The multiple cores provided by the CUDA architecture allowed throughput results previously achievable only with FPGA solutions.

Zoll Medical (2012-2013)

Wrote embedded real-time code for ARM processors as part of a medical heart defibrillator device.  Utilized Greenhill's Integrity kernel and C++ in a multiprocessor environment to add functionality and correct errors.

Fixed problems related to the interaction of multiple finite state machines.  Analyzed the error situation with the use of UML sequence diagrams and used these to document both the error flow as well as the solution.

Documented requirement changes to provide a written agreement between the implementers and the domain experts.  Used finite state diagrams to provide a clear and concise description of the allowed as well as the illegal sequences.

Provided design and implementation documentation that was able to be extracted with Doxygen, a post-processing tool.  Wrote Python scripts to facilitate testing and debugging.
Wrote and executed test plans as part of a formal version release plan.  These were written in an unambiguous manner to provide consistent results.

Added features which spanned processors, utilizing inter-processor communication as needed.
Provided analysis of vendor provided sub-assemblies which failed in the field as well as during manufacture.  Provided documentation which served to anchor communication with the vendor which helped yield an improvement to their design.

Software Design Labs, Inc. (2011 2012)

Generated a proposal for a client to migrate to an SOC solution from a TI DSP one. Proposed a MicroBlaze processor with VHDL DSP to both reduce cost and improve performance.

Brought up a system-on-a-chip development board. Utilized Xilinx tools to enable a MicroBlaze processor on an FPGA. Programmed the MicroBlaze in C and C++.

Developed tools to provide network access to embedded applications. This allows easy access to statistics as well as control of embedded systems that have only a network access port.

Northrop Grumman (2004 2010)

Developed embedded real-time programs using VxWorks, Xilinx XilKernel, and Windows CE kernels. Implementation was in C and C++ using active objects and finite state machines. Offline control and analysis was done in MATLAB, Python, and C#.

Training Pod Project, Phase 1

Using agile techniques, designed, coded, and tested software for a training pod. Code was developed in C under VxWorks. Various signal classification phases were implemented, with signal aging providing for the removal of targets when they no longer exist.

A MATLAB model was used to ensure that the development results would track that provided by the model. This facilitated regression testing and required less lab time to ensure correctness.

A successful demonstration of this capability was given to our customer and we received excellent reviews.

Training Pod Project, Phase 2

Developed code in C++ for an advanced implementation of a training pod. Features included parameters that could be examined and set remotely via an Ethernet connection. Parameters were able to be introduced into modules needing them in a modular way, without needing to change a common parameter table.

Improved computationally intense mathematical functionality by implementing in SSE, Intel's Streaming SIMD Extensions. This provided performance beyond what commercial SSE vector libraries alone could provide.

Used Xilinx tools to configure MicroBlaze hardware and develop applications. This involved crafting VHDL interfaces as well as use of ISE and EDK.

Configured Xilinx' Xilkernel and wrote multitasking code using it. Implemented code utilizing the serial device as well as custom devices.

VOIP Communications Project

Used Windows CE and open source software to provide a remote VOIP communications facility. This provided a quick and robust mechanism to provide a nailed-up voice path for remote operator communication.

Radar Tracking Project

Designed and wrote code for a multiprocessor system which performed FFTs and other application specific processing to implement RADAR functionality. Provided load balancing between processors performing computation intensive processing. Provided capability to allow tuning of the code by improving use of the cache.

A command/response interface was implemented under TCP/IP, allowing a user to telnet into the product and display status or request control. This, in concert with Python scripts that ran on the PC, controlled the target under test via a TCP/IP interface.

Wrote MATLAB scripts to analyze and graph test results. Use of MATLAB's 3D graphs allowed easy interpretation of the results. These graphs were logged facilitating regression analysis.

Critical C functions were placed in wrapper code that allowed them to be called from MATLAB. This allowed the simulation to use the target functions directly, allowing the results to be compared with the MATLAB-only results. This allowed target code to be easily kept tracking with system simulation.

Image Sensor Project

Used C# to interface with a prototype embedded system. Wrote Python scripts to control the build. Provided VxWorks IP communication capability between the target and a control PC.

Wrote a video recorder to capture video from a custom infrared video camera in C#.

General Monitors (2003-2004)

Explosive Gas Detector

Led a team to develop the firmware and custom hardware for an industrial explosive gas detection device which used infrared light sensing. In addition to overall project responsibility, personally developed much of the firmware in the product, which uses TIs TMS320F28xx processor to collect and process the data.

Designed and implemented firmware to provide link level communications, mode control, data collection, and application specific calculations for this product. In addition, provided reusable objects to perform filtering, contact debouncing, interpolation, and queuing. This latter code was done using object oriented techniques, even though the client required use of the C programming language.

Developed the serial device driver and link level code for the Modbus protocol, an RS-485 based protocol which is used to communicate with the controlling PLC. Finite state machine techniques were vital to the reliable implementation of this protocol.