One of the major challenges SoC verification and validation teams has is ensuring correct system operation with real workloads. The core of this challenge comes down to the fact that hardware and software teams have different perspectives and different debug needs when tasked with ensuring correct system operation. Often hardware and RTL design teams rely on waveforms to debug while software developers need a full-functioning software debugger. The problem is when there is an issue that they both need to be involved in, such as debug, each set of users is speaking a different debug language. They need a way to speak a common debug language and correlate between both the hardware teams and the software teams.
Recently, a customer came to us with a unique challenge. This customer had a six-stage boot process that jumped from CPU to CPU through the "power on" sequence where the CPUs came from different vendors. Ultimately, they were tasked with
integrating the IP as well as validating the multi-stage boot process of their SoC. The customer's existing verification and validation methodologies didn’t have a unified way to debug this scenario. They would look at waveforms from one simulation or emulation run at a specific stage, and then use different tool sets from different CPU vendors to debug the following stage. There was no common unified debug. To make matters more challenging, the team involved in this verification and validation effort was the SoC integration team. This team didn’t have domain expertise of the hardware design, and they didn’t have the software expertise on what individual blocks were responsible for what. Still, they were tasked with validating and making sure that the SoC booted
properly. They were interested in using a new solution to address their needs.
Using standard features from Codelink, like the source code view, the register view, and the correlation engine as well as RTL Waves from an emulation run, the customer
created and adopted a new methodology focused on unifying their debug. Using this new methodology, they were able to look at the multi-core capabilities of their SoC and debug the software execution as it jumped through the various stages to ensure things were operating as expected.