Critical Concepts in Hardware/Software Co-Design
Quinn Jacobson, SiPanda Hardware Architect, Tuesday July 6, 2021
So now that we talked about what co-design isn’t in our last blog, let’s talk about what it is. The driving concept behind hardware/software co-design is that we look at the problem we are trying to solve and attempt to optimize the solution collaboratively between the software and hardware teams – essentially, making sure that the ‘contract’ between hardware and software is dynamic and open to negotiation. This approach requires good communication and compromise under the guidance of a very good understanding of the problem, and modelling of all the key metrics. This includes remembering that solutions must be optimized for both performance and usability in a balanced way. When done well, hardware/software co-design leads to more efficient solutions and often fundamentally much more simple solutions. Hardware/software co-design also avoids the common pitfalls of either hardware that has great feeds and speeds but is impractical to use, or flexible software that runs slowly.
A datacenter networking solution today is extremely complex and requires sophisticated special-purpose hardware and millions of lines of code from diverse sources and decades. Optimizing a system like this to achieve the expected customer performance and functionality can be exceedingly challenging, and having a flexible architectural construct to make tradeoffs in is critical. The flexibility inherent in co-design can enable one team to help another if unexpected issues are run into during the product design or implementation. For instance, if the hardware team is having issues implementing a feature, the software team can look for an alternative approach that avoids the need for the feature. Conversely, if the software team is struggling to reach performance targets the hardware team can look to implement new features that directly perform transformations that are too slow in software.
While co-design provides a highly flexible framework to deal with issues, there are several critical disciplines that need to be utilized to allow designs and implementations to be completed. Some of these include the following:
Requirements management is a critical part of the co-design process. With a highly flexible design process, it is tempting to take on new requirements during the design and implementation process. This of course can lead to solutions that do everything but don’t do any of it well (the ‘god-box’ scenario), and/or schedules that keep moving out.
Modeling system performance (and more importantly, system changes) on a continuous basis as the solution matures becomes invaluable to spot potential performance issues. Most importantly, it enables making tradeoff decisions before a system implementation progresses too far to easily reverse.
Management, documentation, and communication of architectural changes and tradeoffs to the team as they occur. With the collaboration tools available today such as Slack, Teamwork, and others this has become significantly easier.
And most importantly, creating, encouraging, and maintaining continuous real-time communications between software and hardware engineers is critical to the success of co-design. This can help to avoid the “siloing” which often occurs in engineering organizations.
Combining co-design with development processes such as rapid prototyping that are built to deal with requirements and technology unknowns can further improve the likelihood of success on complex multi-discipline embedded solutions.
SiPanda was created to rethink the network datapath and bring both flexibility and wire-speed performance at scale to networking infrastructure. The SiPanda architecture enables data center infrastructure operators and application architects to build solutions for cloud service providers to edge compute (5G) that don’t require the compromises inherent in today’s network solutions. For more information, please visit www.sipanda.io. If you want to find out more about PANDA, you can email us at email@example.com.