System Design, Documentation and Object-oriented Methodologies
Few people would argue that up-front design and documentation can save project time. I began working with Object-oriented technology in 1985 using the Symbolics LISP Machine's FLAVORS system - truly a system ahead of its time. C++ has become the OO tool of choice, while many systems-level OOA/OOD methods, such as the Schlaer-Mellor, UML, Booch and Rambaugh methods, also gain acceptance. Check this OOP page out.
A formal methodology such as UML captures several styles of design expression. For example, the Schlaer-Mellor style utilizes Relational Database ideas, Real-time state-based techniques, as well as Object-oriented concepts of inheritance, encapsulation and polymorphism. Embedded Systems are especially going to have this great mix of modeling to them. Good documentation doesn't have to be a formal methodology, though. How many technical projects ultimately fail because they were not documented well or at all? And - not because they were bad, or didn't work, but simply because they were minimally documented and scared people from working with them. Anyway, I like to write. Strange but true - I enjoy producing a usable test document as much as I do a design.
Microsoft Windows Programming
My primary PC language tools are C++ and Visual Basic (looking for some piece of code you know someone else has written? Try this site SNIPPETS), often used concurrently. My Graphical User Interfaces (GUI) typically include MDI features, menus, dialogs, drag-n-drop, database-driven "grids", etc. If a specialized scripting language or macro capability is required, I can use LEX/YACC tools or perhaps Perl. Mixing and matching is important - often a Visual Basic GUI can be very effectively blended with a C++ DLL to obtain the speed and ease of VB, with the horsepower and scalability of C++ (one example; I use Visual Basic as the GUI for a training system, while utilizing a C++ DLL to simulate a large Diesel Generator in real-time in the background).
Graphics is important, too. Many of my projects include real-time screen graphics, for example, for real-time simulation. Also, we can incorporate multimedia into our GUIs including MPEG video, audio and animation.
A increasingly common scenario for me, is where my custom embedded hardware (which may be a PIC-based design, a custom PCI board with ASICs/XILINX, or an embedded PC) is controlled by an attractive Visual Basic program. For example, we have recently delivered such a VB program that communicates with a network of RS485-capable 68HC11-based controllers. The VB program allows operators to easily monitor and control this network. The VB program does this AND maintains a database of SPC data, has on-line help for troubleshooting, and even dials/pages an operator if a controller fails in the off hours over the modem. Frequently, developers will use a serial "console" port to talk to the embedded system, but I've found that with only a little additional work, you can create the VB front-end that is easy to work with, flexible, attractive and something the is delivered with the system. Anyway, the point is that custom hardware and embedded designs are greatly enhanced when combined with the high-quality and attractive PC programming tools now available.
Embedded and Real-time Programming
What is an embedded computer? Simply; it is the computer you don't see! Perhaps, it has no display monitor and no keyboard. It is under your car's hood, behind the factory equipment faceplate, or held in your palm (an old colleague of mine, Randy Rasa, maintains a nice jumping point for embedded stuff including all the magazines, etc. Check it out! Randy Rasa's Page )
Some evening at home, when you're bored, go through your entire house and count how many microprocessors are apparent (many embedded computers will not be detectable, of course, but often you see a small display, beeping, or just a behavior too complex to attribute to a purely mechanical or analog mechanism). You might be surprised at your number! Send me email with your number if you can. (I think it is Motorola which points out in their Ads that there are far more Microcontrollers hidden away on the planet then there are actual microprocessors in PCs and such).
A wide range of embedded systems are possible. I've developped several postage stamp size PIC chip (nice PIC page) powered from a small battery that performs a very simple control function. Slightly larger; I've utilized a 68HC11 microcontroller board with a keypad and small LCD display. For more demanding applications, I've used embedded ZIATECH PCs (for example) that may even incorporate an Operating System (DOS, MSWindows, or a real-time OS such as QNX), a Relational Database, or communicate over a network.
Special programming skills are required for Embedded Programming including DSP (say, using software to eliminate noise in a signal from a sensor), Motion Control (e.g. using the computer to precisely control the speed of a motor), and Data Communications (e.g. transferring data and sending commands over a modem to a remote embedded controller). And, of course, Embedded Programmers must write code that interface to hardware, whether the hardware is a standard UART chip, a special ASIC chip, or even our own custom FPGA.
I've worked on PID motion controllers, multiple sensor systems, plenty of hardware device interfacing, some Error Control Coding, some DSP stuff (FIRs, and such), low-level graphics, lot's of communications protocols; satellite protocols, custom 232 protocols, custom "bit-banging" protocols, data logging.. I've gotten to work on the other side too, designing ASICs that are the I/O Media Access Controller chip *used* by an embedded microcontroller.
Digital Design
Embedded PCs and Microcontrollers can do a lot of things. It's always tricky (and interesting) making that tradeoff and choice between software, firmware or hardware. Sometimes, however, a customized digital logic chip is required for reasons of speed, cost, or size. The XILINX Field Programmable Gate Array (FPGA) familiy of chips are excellent both for one-time prototypes or for higher volumes. XILINX FPGA development can even be done on a PC, with an EPROM programmer, and an Oscilloscope. For larger volumes, XILINX prototypes may be transformed into masked gate arrays suitable for large-scale manufacturing runs. An FPGA may be used all by itself, along with Microcontrollers and other circuitry, or they can be placed on plug-in IBM PC cards (and even be reprogrammed on-the-fly by the PC!). The possibilities are unlimited. I've been using FPGAs as either the digital solution in themselves, or as an "ASIC Emulation" where I try out a design in the FPGA before committing to ASIC silicon (sometimes, its just not practical to simulate the whole system..)
Hardware Description Languages are becoming the design entry method of choice for the design of ASICs, FPGAs, and even PLDs. An HDL design's advantages include; 1) portability to many technologies and chip vendors, 2) a "higher level" of abstraction that is easier to maintain and understand, 3) a more easily documentable design (due to its text-based nature), and most importantly 4) ease of meshing HDL design with an HDL "testbench" that can better verify the design.
More recently, I have gotten involved in more intense ASIC Verification efforts that have employed Co-Simulation techniques - mixing and matching HDL and C, HW and SW, using the Verilog PLI, and using some sophisticated Verification tools such as Verisity's Specman Elite.
I can design your custom hardware (PLDs, FPGAs, or even ASICs) in VHDL/Verilog (here's a VHDL page) (and, here's a Verilog page)plus deliver a complete "Test Bench" in VHDL/Verilog that verifies the functional design. The Test Bench will provide a complete test "suite" showing the design's functionality and coverage of all conditions. We will also work together in assessing DFT (Design For Test) issues and system constraints (is your design a portable, low power design, high speed, JTAG, reconfigurable, etc.). Celia maintans a good hard-core ASIC page (need a Synopsys script?). Here are some other basic ASIC links, Synopsys is the Synthesis tool I use the most, and Verilog-XL is my main simulator. I use various "point tools" (for test insertion, etc.) from Viewlogic. If you wanted to see what a typical ASIC Semiconductor vendor offers, you can go to LSI Logic's page.
Artificial Intelligence
I began my association with AI while working on the ARPA Pilot's Associate program. Search Technology, together with Lockheed and several others, worked to introduce AI techniques into a real-time aircraft cockpit. Our goal - "close the loop" between Man and Machine so that the cockpit actually adapted to the pilot and mission conditions. Using Symolics LISP machines in a networked, real-time environment, we integrated Intelligent Planners, Intent Inferencers, and Expert Systems with the existing flight systems and displays. Here's a nice AI starting point.
For more pedestrian AI work, CLIPS (A rule-based C-library) may be coupled with PC-based software (CLIPS Page). I have worked with a myriad of training programs written in either C++ and/or Visual Basic that also used CLIPS rulebases to supply advice, explanations, or warnings to users.
I have found many of the "old" AI ideas creeping into the mainstream and into chip design tools, especially. Many ATPG tools utilize Genetic Algorithms, for example. I have started using a Verification tool from Verisity called Specman Elite which uses many "Constraint-based" programming ideas that I encoutered in the old Scheme AI language. And, of course, the now completely ordinary use of Object-orientedness and even List-processing was pioneered in the AI world.
But.. enough about me. E-mail me if you have an overlapping experience, a question, or any interesting links, stories or references on all this (hey, what else is the net for?).
Back to Tom Coonan's Home Page