Software in electronic design parlance is called firmware. Devices in Consumer, Industrial and Network aspects achieve special functions unlike PC Operating Systems/Applications. Software on these devices works very closely with the underlying silicon(Integrated Circuits) without any intermediate layers hence the name firmware. The aspect of firmware that drives the various peripherals on the devices is known as Board Support Package(BSP). Thotaka has among the best BSP teams, that have ported/developed drivers to multiple application processors for a variety of peripherals.
The software design flows from the software architecture and requirements document. Thotaka usually uses an RTOS to provision critical system resources such as timers etc. On high-speed application processors full Operating Systems such as Linux and BSD are used. The Operating System and the associated peripheral drivers constitute the BSP. There is also a bare-metal BSP in the form of a bootmonitor that is executed on the application processor even before the OS code is executed.
The BSP is developed on reference boards from manufacturers such as Freescale, TI, STMicro etc. Thotaka usually uses ARM(R) processors for Industrial and Consumer products and PowerPC(R) for networking products. Thotaka also uses simulator/emulators for certain aspects of the RTOS implementation.
The actual application is designed using software engineering practices. Sequence diagrams and other UML 2.x notations are used to model the application functionality. The application is written in a modular fashion and uses a design pattern such as Model-View-Controller architecture. Design flow at Thotaka places special emphasis on modeling software components before actually coding it suitably. The software code is versioned using Mercurial DVCS. The versioned code base is a deliverable to the client.
Software Q/A at Thotaka uses a variety of techniques. The source code is validated for adherence to coding standards using a set of perl scripts. The md5 checksum of binaries is used to check that the build system and the target device have the same application. Test-cases are designed to bring-out even corner cases. Where applicable automated test-scripts are written in Expect and bugs are filed onto the internal bugzilla portal.
While the above flow holds good for firmware and application executed on COTS application processors. The flow is significantly different for FPGA RTL. Thotaka develops certain communication products around FPGA's from Xilinx.
Thotaka has experience developing the following types of firmware:
a. Boot-loaders and BIOS for various ASIC
b. Bare-metal drivers for various on-chip and off-chip/on-board peripherals
c. Linux device drivers for Ethernet, GPIO expander, LCD, Touch drivers
d. Development of IIO drivers for newer sensors
e. Porting of legacy drivers to newer Linux kernels
f. Porting of bare-metal drivers to Linux Kernel
g. Complete BSP development for Bare-metal and Linux Operating System
Signal Processing Algorithms on ASIC
a. Development of software on TI DSP such as C67xx, F28xx and OMAP3530
b. Development of GStreamer plug-ins to interface with GPU and media accelerators
c. Optimization and porting of software multimedia CODECS
d. Digital filter design for optimal processor cycle utilization
RTL development on FPGA
a. Development of DSP algorithms on FPGA
b. Development of Data Acquisition algorithms in FPGA
d. Porting of communication algorithms and IP to FPGA
e. Development of Image Processing algorithms in FPGA
f. FPGA-SoC system integration
g. Development of CODEC accelerators in FPGA