Data gathering and analysis opportunities multiply as more devices get involved.
I recently bought myself an activity tracker. The watch-like device keeps track of how many steps I take and how high I climb, such as the number of vertical feet I “conquer” by taking the stairs. From that, it calculates the distance I travel and the amount of calories that I burn in a day. The device also can measure my heart rate and the oxygen level in my blood, but given the high heart rate I supposedly have even without doing any exercise, I seriously doubt the accuracy of the device on those accounts.
While the information displayed on the device screen itself is already interesting, the data gathering and analysis opportunity multiplies through connectivity of the activity tracker with my iPhone. Through a Bluetooth connection, I can transfer all the data to a dedicated app on my iPhone. On top of that, I log other activities like strength training and biking activity on another app that synchronizes the data with my activity tracker app. Plus if you want to, you can log all the food you eat and thus your calorie intake with a third app that again syncs with the activity tracker app comparing actual calorie intake versus calorie consumption.
This, of course, is only one example of the possibilities with today’s multitude of “smart” and connected devices. More than ever the world is full of devices that capture data for dedicated applications and are connected to each other and with a central PC, server or mobile phone/tablet that enables data analysis and the option to tune the functionality of the devices for which the data was gathered.
This also means that for these devices it is not enough to develop and test these devices stand-alone. Both the hardware and the software need to be tested and tuned in the context of a complete system set up. First of all, all of these devices need to have an interface IP that enables communication with the “outside world.” Typical interface IPs are: USB, Ethernet, and PCI Express, like DesignWare IP for USB 3.0 from Synopsys. And each interface IP needs to have an optimized device driver that enables smooth operation while still being power conscious. The development of these low-level software functions needs to happen as early in the design cycle as possible given software’s critical role to test any functionality of the resulting device.
Hardware and software have become completely interdependent, and a technique like virtual prototyping is required to enable early development of the hardware-dependent software. But, as indicated above, just developing and testing the hardware and software in the context of the specific device or SoC is not enough. It is critical to create the system setup so that the multitude of connections can be established and tested. These tests are important to verify and optimize the driver functionality of the interface IP. Virtual prototypes are also good for this task as they can represent the connection of multiple virtual devices before any of them exists in hardware. This pulls in the time at which the entire driver testing can be done and provides the software developer with valuable debug control and visibility that are unique to virtual prototypes.
As everything around us gets connected, it is important that the software development methods adjust accordingly. Software and system testing requires the full system setup to test the interaction of each of these “smart” and connected devices. Virtual prototyping can help with a lot of this work. For example, it can provide a solution to develop and test interface IP drivers both within the context of an SoC as well as within the system context of multiple connected devices. So while my activity tracker is urging me to take more steps, I am helping promote a method to make the connected world a bit more of a reality, step-by-step.