μShell is a lightweight shell environment for engineers and software developers working with embedded microprocessors in Xilinx FPGAs. (μShell has also been successfully ported to run on ARM Cortex-M1 microprocessors in Actel ProASIC3 FPGAs, but without project-integration support.) μShell decreases the time spent performing initial tests of field-programmable gate array (FPGA) designs, simplifies running customizable one-time-only experiments, and provides a familiar-feeling command-line interface. The program comes with a collection of useful functions and enables the designer to add an unlimited number of custom commands, which are callable from the command-line. The commands are parameterizable (using the C-based command-line parameter idiom), so the designer can use one function to exercise hardware with different values. Also, since many hardware peripherals instantiated in FPGAs have reasonably simple register-mapped I/O interfaces, the engineer can edit and view hardware parameter settings at any time without stopping the processor.
μShell comes with a set of support scripts that interface seamlessly with Xilinx’s EDK tool. Adding an instance of μShell to a project is as simple as marking a check box in a library configuration dialog box and specifying a
software project directory. The support scripts then examine the hardware design, build design-specific functions, conditionally include processor-specific functions, and complete the compilation process. For code-size constrained designs, most of the stock functionality can be excluded from the compiled library.
When all of the configurable options are removed from the binary, μShell has an unoptimized memory footprint of about 4.8 kB and a size-optimized footprint of about 2.3 kB. Since μShell allows unfettered access to all processor-accessible memory locations, it is possible to perform live patching on a running system. This can be useful, for instance, if a bug is discovered in a routine but the system cannot be rebooted: μShell allows a skilled operator to directly edit the binary executable in memory. With some forethought, μShell code can be located in a different memory location from custom code, permitting the custom functionality to be overwritten at any time without stopping the controlling shell.
This work was done by Thomas A. Werne of Caltech for NASA’s Jet Propulsion Laboratory.
This Brief includes a Technical Support Package (TSP).
Shell Minimalist Shell for Xilinx Microprocessors
(reference NPO-47495) is currently available for download from the TSP library.
Don't have an account? Sign up here.