<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Verification</title><link>https://community.cadence.com/cadence_blogs_8/b/fv</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Enhancing Ethernet Security with MACsec</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/enhancing-ethernet-security-with-macsec</link><pubDate>Mon, 22 Jun 2026 05:13:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f31ce7e1-ea7e-496b-a260-7311852b8dc0</guid><dc:creator>Harinee Rathod</dc:creator><slash:comments>0</slash:comments><description>&lt;div&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Understanding MACsec in Today&amp;rsquo;s Ethernet World&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today, Ethernet is being widely adopted across domains ranging from high-performance computing (HPC) and cloud data centers to automotive systems, where security has become a critical requirement. If network security is compromised, sensitive data can be modified, intercepted, or stolen, leading to serious reliability and privacy concerns. Ethernet was originally designed for high-speed data transfer and interoperability between devices. However, traditional Ethernet does not provide built-in mechanisms for securing data traffic, such as encryption or authenticity protection. This is where MACsec comes into the picture.&amp;nbsp; Media Access Control Security (MACsec) helps bridge this security gap by identifying and preventing the security threats at Data Link Layer (Layer 2) of Ethernet communication.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;MACsec ensures data confidentiality, integrity, and authenticity for Ethernet communication. MACsec uses the Advanced Encryption Standard with Galois/Counter Mode (AES-GCM), which enables both encryption and integrity protection with high performance. Unlike security protocols such as Transport Layer Security and Internet Protocol Security, which operate at upper layers of the networking stack, MACsec is implemented directly at the Ethernet port level. This allows Ethernet links to be secured transparently at the Data Link Layer without requiring modifications to higher-layer protocols such as IP, TCP, UDP, or application software. MACsec is standardized under IEEE 802.1AE and is widely adopted in systems where secure and reliable Ethernet communication is essential.&lt;/p&gt;
&lt;p&gt;Today, MACsec is widely deployed in environments where both high-speed communication and strong security are essential. In cloud data centers and enterprise networks, MACsec helps secure traffic between switches, routers, and servers against unauthorized access and packet tampering. In 5G infrastructure, MACsec protects fronthaul and backhaul communication carrying massive amounts of network traffic. The growing adoption of Automotive Ethernet has also increased the importance of MACsec, where secure communication between Electronic Control Units (ECUs) is critical for vehicle reliability and safety. Similarly, in HPC systems and secure chip-to-chip communication, MACsec provides hardware-level link security while maintaining high throughput and low latency.&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Inside a MACsec Frame&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Before MACsec protection is applied, a standard Ethernet frame contains the Destination MAC address, Source MAC address, EtherType field, payload, and Frame Check Sequence (FCS).&amp;nbsp;&lt;span&gt;As shown below.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6114.Screenshot-2026_2D00_06_2D00_19-160554.png" /&gt;&lt;/p&gt;
&lt;p&gt;When the frame enters the MACsec processing engine, MACsec modifies the frame structure by inserting a Security Tag (SecTAG) after the Source MAC address and appending an Integrity Check Value (ICV) before the frame check sequence (FCS). As shown below.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6114.Screenshot-2026_2D00_06_2D00_19-160829.png" /&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s first look at the SecTAG. It carries control and security-related information such as the Packet Number (PN), Association Number (AN), Tag Control Information (TCI), Short Length (SL), and optionally the Secure Channel Identifier (SCI). These fields help the receiving device identify the secure channel, detect replay attacks, and process the frame correctly.&lt;/p&gt;
&lt;p&gt;After the SecTAG is inserted, MACsec encrypts the Ethernet payload using AES-GCM. Encryption ensures that sensitive information carried within the Ethernet frame cannot be read by unauthorized devices while traversing the network.&lt;/p&gt;
&lt;p&gt;Once encryption is completed, MACsec generates an Integrity Check Value (ICV), which acts as a cryptographic integrity tag appended near the end of the frame. The receiving device uses the ICV to verify that the frame has not been modified or tampered with during transmission.&lt;/p&gt;
&lt;p&gt;MACsec inserts a dedicated EtherType value of 0x88E5 after the Source MAC address to identify a MACsec‑protected frame, while the original EtherType is preserved inside the encrypted payload.&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;How MACsec Secures Communication&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Before secure communication begins, both devices must first authenticate each other and establish encryption keys. MACsec uses the MACsec Key Agreement (MKA) protocol to manage this process. MKA authenticates peers using the CAK and derives Secure Association Keys (SAKs) used by MACsec for frame encryption.&lt;/p&gt;
&lt;p&gt;The communicating devices share a secret key called the Connectivity Association Key (CAK), which is used by MKA to authenticate peers. Once authentication is successful, MKA derives and distributes Secure Association Keys (SAKs) that are used by MACsec for frame encryption.&lt;/p&gt;
&lt;p&gt;After the secure connection is established, MACsec starts encrypting Ethernet frames using AES-GCM. Each transmitted frame also carries a Packet Number (PN) inside the SecTAG. When replay protection is enabled, the receiving device validates the Packet Number to detect duplicated or replayed packets.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s how MACsec provides&amp;nbsp;data authenticity, confidentiality, integrity, and replay protection.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;MACsec Verification with Cadence VIP&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;With the availability of the Cadence Verification IP for Ethernet MACsec, adopters can start working with these specifications immediately, ensuring compliance with the standard and achieving the fastest path to IP and SoC verification closure. Incorporating the latest protocol updates, the mature and comprehensive Cadence Verification IP (VIP) for the Ethernet protocol provides a complete bus functional model (BFM), integrated automatic protocol checks, and coverage model. Designed for easy integration in test benches at IP, system-on-chip (SoC), and system levels, the VIP for Ethernet helps you reduce the time to test, accelerate verification closure, and ensure end-product quality. The VIP for Ethernet runs on all major simulators and supports System Verilog and e-verification languages and associated methodologies, including the Universal Verification Methodology (UVM).&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364213&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MACsec%2bVerification">MACsec Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bVIP">Ethernet VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bSecurity">Ethernet Security</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/IEEE%2b802-1AE">IEEE 802.1AE</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP">VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Cadence%2bVIP">Cadence VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet">Ethernet</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MacSec">MacSec</category></item><item><title>Ethernet Auto-Negotiation: Enabling Seamless Link Optimization</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/ethernet-auto-negotiation-enabling-seamless-link-optimization</link><pubDate>Fri, 19 Jun 2026 11:11:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f44ae13b-47aa-48a5-b01f-e9b826b5995e</guid><dc:creator>Krunal Patel</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ethernet has evolved significantly from 10 Mbps shared media to today&amp;rsquo;s multi-hundred gigabit high-speed links. One foundational feature that has enabled this scalability and ease of deployment is &lt;strong&gt;Auto-Negotiation (AN)&lt;/strong&gt;. Defined in multiple IEEE 802.3 clauses, Auto-Negotiation allows two connected devices to automatically determine the best possible operating parameters for a link, eliminating manual configuration and ensuring optimal performance.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv0"&gt;Why Auto-Negotiation Is Required&lt;/h2&gt;
&lt;p&gt;In early Ethernet deployments, link parameters such as speed and duplex mode had to be manually configured on both ends of the link. This approach led to frequent issues, the most common being duplex mismatch, where one device operates in full-duplex and the other in half-duplex, causing severe performance degradation.&lt;/p&gt;
&lt;p&gt;Auto-Negotiation addresses these challenges by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatically selecting the highest common speed and mode: This ensures both devices operate at the best mutually supported configuration&lt;/li&gt;
&lt;li&gt;Avoiding configuration errors: Eliminates manual mismatches that can lead to packet loss and poor throughput&lt;/li&gt;
&lt;li&gt;Supporting feature compatibility: Modern Ethernet requires negotiation of additional capabilities such as:
&lt;ul&gt;
&lt;li&gt;Flow control (pause frames)&lt;/li&gt;
&lt;li&gt;Forward Error Correction (FEC)&lt;/li&gt;
&lt;li&gt;Energy Efficient Ethernet (EEE)&lt;/li&gt;
&lt;li&gt;Link training for high-speed channels&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Providing scalability for future standards: As speeds increase, negotiation becomes essential to decide lane counts, encoding, and error correction mechanisms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, Auto-Negotiation ensures &lt;strong&gt;plug-and-play interoperability&lt;/strong&gt; across diverse devices and generations of Ethernet technology.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv1"&gt;Auto-Negotiation Clauses and Applicable Speeds&lt;/h2&gt;
&lt;p&gt;Different IEEE 802.3 clauses define how Auto-Negotiation works for various physical layers and speeds:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Applicable Speeds/Media&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Key Characteristics&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 98&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;MultiGig BaseT1&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Classic Auto-Negotiation using Fast Link Pulses (FLPs); negotiates speed and duplex&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 37&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1000BASE-X (fiber), SGMII&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Uses ordered sets instead of FLPs; supports gigabit links&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 73&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;10G to upto 1.6T (KR/CR/backplane)&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Advanced AN with base + next pages; supports FEC, link training, multi-lane speeds&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Key trend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lower speeds &amp;rarr; Simple negotiation&lt;/li&gt;
&lt;li&gt;Mid speeds (1G) &amp;rarr; PHY-specific signaling&lt;/li&gt;
&lt;li&gt;High speeds (10G and above) &amp;rarr; Multi-stage negotiation with extended capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv2"&gt;Top-Level Overview: How Auto-Negotiation Works&lt;/h2&gt;
&lt;p&gt;At a high level, Auto-Negotiation is a structured handshake between two link partners. The process is similar across clauses, with increasing complexity at higher speeds.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv3"&gt;Step 1: Capability Advertisement&lt;/h2&gt;
&lt;p&gt;Each device advertises its supported capabilities using a structured data format called a link code word (LCW).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Clause 98: Sent using fast link pulses&lt;/li&gt;
&lt;li&gt;In Clause 37/73: Sent using encoded ordered sets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Information is exchanged through base/next pages. &lt;span&gt;Base/next page c&lt;/span&gt;ontains core capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supported speeds&lt;/li&gt;
&lt;li&gt;Duplex modes (for lower speeds)&lt;/li&gt;
&lt;li&gt;Link types (e.g., KR, KX)&lt;/li&gt;
&lt;li&gt;FEC support&lt;/li&gt;
&lt;li&gt;Advanced speeds (e.g., 25G, 50G)&lt;/li&gt;
&lt;li&gt;Link training capability&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv4"&gt;Step 2: Acknowledgment Handshake&lt;/h2&gt;
&lt;p&gt;Once a device receives its partner&amp;rsquo;s base page, it sets an ACK bit and continues transmitting its own advertisement.&lt;/p&gt;
&lt;p&gt;Both partners must confirm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They have received each other&amp;rsquo;s capabilities&lt;/li&gt;
&lt;li&gt;The information is stable (not corrupted)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This ensures synchronization before proceeding further.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv5"&gt;Step 3: Extended Capability Exchange (Next Pages)&lt;/h2&gt;
&lt;p&gt;For modern Ethernet (Clause 73), Auto-Negotiation continues with the exchange of next pages.&lt;/p&gt;
&lt;p&gt;These pages are used to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Negotiate Forward Error Correction (FEC)&lt;/li&gt;
&lt;li&gt;Indicate support for link training (clause 72)&lt;/li&gt;
&lt;li&gt;Advertise newer speed modes beyond base page limitations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A toggle bit mechanism ensures that new pages are distinguished from retransmissions.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv6"&gt;Step 4: Resolution of Link Parameters&lt;/h2&gt;
&lt;p&gt;A deterministic priority resolution function selects the final link mode based on the common capabilities of both devices.&lt;br /&gt;Typical rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highest speed wins (e.g., 25G over 10G)&lt;/li&gt;
&lt;li&gt;Compatible lane configuration selected&lt;/li&gt;
&lt;li&gt;FEC enabled only if both sides support/request it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv7"&gt;Key Takeaway&lt;/h2&gt;
&lt;p&gt;Auto-Negotiation is far more than just speed selection is a multi-stage protocol that ensures compatibility, reliability, and optimal operation across Ethernet links. At lower speeds, AN selects which link to use. At higher speeds (clause 73), it also decides how the link operates (FEC, training, lanes).&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv8"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Auto-Negotiation is a critical feature that underpins Ethernet&amp;rsquo;s flexibility and backward compatibility. From simple duplex selection in early networks to complex multi-parameter negotiation in high-speed systems, AN has evolved to meet the demands of modern communication.&lt;/p&gt;
&lt;p&gt;For engineers working with high-speed Ethernet, especially clause 73, understanding the interplay between base pages, next pages, and the state machine is essential for debugging and ensuring robust link bring-up.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0638.Designer.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;With the availability of the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification.html"&gt;Cadence Verification IP&lt;/a&gt; for Ethernet, adopters can start working with these specifications immediately, ensuring compliance with the standard and achieving the fastest path to IP and SoC verification closure. Incorporating the latest protocol updates, the mature and comprehensive Cadence Verification IP (VIP) for the Ethernet protocol provides a complete bus functional model (BFM), integrated automatic protocol checks, and coverage model. Designed for easy integration in test benches at IP, system-on-chip (SoC), and system levels, the VIP for Ethernet helps you reduce the time to test, accelerate verification closure, and ensure end-product quality. The VIP for Ethernet runs on all major simulators and supports SystemVerilog and e-verification languages and associated methodologies, including the Universal Verification Methodology (UVM).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364212&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2b800G">Ethernet 800G</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/uvm">uvm</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bVIP">Ethernet VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Functional%2bVerification">Functional Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet">Ethernet</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bUEC">Ethernet UEC</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ethernet%2b1600G">ethernet 1600G</category></item><item><title>DDR5 MRDIMM: A Transformational Evolution for DDR5 DIMM</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/ddr5-mrdimm-transformational-evolution-for-ddr5-dimm</link><pubDate>Tue, 09 Jun 2026 18:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0c0e3ebd-6510-48d0-9aa3-e03b2d872cee</guid><dc:creator>Shyam Sharma</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;DDR5 is the latest generation of DDR server memory capable of supporting data rates of up to 9,200Mbps, which is a huge leap over the previous generation of DDR memories. It is used in a wide variety of applications, with the huge server and data center market being the key driver behind the adoption of DDR5-based memory systems. As systems move towards more CPU cores, bandwidth, and capacity, DDR5 is considered the most widely used DDR memory as compared to the previous generation, DDR4.&lt;/p&gt;
&lt;p&gt;DDR memories are typically used as a part of dual in-line memory (DIMM) cards. DIMMs are a JEDEC-defined standard for increasing density and bus width by connecting several individual DRAM memories&amp;nbsp;to a DIMM card. Traditionally, DIMMs can be categorized as &lt;strong&gt;Small Outline-DIMM/Unbuffered DIMM&lt;/strong&gt; (uses just the DRAM memories), &lt;strong&gt;Registered DIMM&lt;/strong&gt; (uses RCD + the DRAM), and &lt;strong&gt;Load Reduced DIMM&lt;/strong&gt; (uses RCD + DRAM + DB).&lt;/p&gt;
&lt;p&gt;The Registering Clock Driver (&lt;strong&gt;RCD&lt;/strong&gt;) and Data Buffer (&lt;strong&gt;DB&lt;/strong&gt;) help the RDIMM and LRDIMM with better Command/Clock and Data signal quality and help with Electrostatic Overstress (EOS) and electrostatic discharge (ESD) issues. However, even with these, bringing DDR5 LRDIMMs to support higher data rates has become a challenge beyond 4800Mbps due to issues like clock loading.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:300px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1010x418/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1780989287080v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;To enable DDR5 DIMM in supporting higher speeds like 12,800Mpbs, JEDEC members have produced a new architecture and a new category of DIMMs called &lt;strong&gt;Multiplexed Rank DIMM (MRDIMM)&lt;/strong&gt;. This is a paradigm shift for the DDR memories that not only enable DDR5 DIMM to support DDR5 SDRAM&amp;#39;s current highest speeds of 9200 but can also allow for higher data rates. Some of the key features for DDR5 MRDIMM Generation 2 are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For the first time, there will be &lt;strong&gt;two sets of clocks&lt;/strong&gt; within the DIMM, including a Host side clock, which will run at twice the speed of the internal clock on which DRAMs will be operating. This will allow DRAM and DB&amp;#39;s DRAM side interface to only require meeting half-rate operating speed requirements.&lt;/li&gt;
&lt;li&gt;DDR5 MRDIMM will benefit from being able to support &lt;strong&gt;higher densities&lt;/strong&gt; than traditional RDIMM/LR-DIMM, since it will have twice the number of DRAMs. These DRAMs are connected to support two Pseudo Channels for MRDIMMs, doubling the DIMM capacity.&lt;/li&gt;
&lt;li&gt;DDR5 MRDIMM is &lt;strong&gt;pin compatible&lt;/strong&gt; with traditional DIMM, and it can be used in the same DIMM slots that are used for DDR5 RDIMMs.&lt;/li&gt;
&lt;li&gt;There is no change to the DRAMs used for DDR5 MRDIMM. DDR5 MRDIMM Generation 2 cards only require the use of new DDR5 &lt;strong&gt;MRCD&lt;/strong&gt; and DDR5 &lt;strong&gt;MDB&lt;/strong&gt; components and will use the same DDR5 SDRAM components.&lt;/li&gt;
&lt;li&gt;DDR5 MDB has two DRAM side interfaces named as the A and B sides. It &lt;strong&gt;multiplexes DRAM data&lt;/strong&gt; and sends it to the Host in an interleaved pattern at twice the speed at which it is sampling Data from the DRAMs on its A and B sides.&lt;/li&gt;
&lt;li&gt;Unlike traditional DDR5 DIMMs that can only have two Physical Ranks, DDR5 MRDIMM is capable of supporting up to &lt;strong&gt;four physical ranks&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;While DDR5 &lt;strong&gt;MRDIMM&lt;/strong&gt; is &lt;strong&gt;pin compatible&lt;/strong&gt; with traditional DDR5 &lt;strong&gt;RDIMM&lt;/strong&gt; and follows the same DDR5 protocol. The memory controller and PHY will still need changes to support MRDIMMs, such as changes in the training sequences, handling two sets of DRAMs connected to PS0/PS1, programming of additional RCD/DB Control words, supporting burst with twice the burst lengths, etc.&lt;/li&gt;
&lt;li&gt;DDR5 MRDIMM will have multiple &lt;strong&gt;generations,&lt;/strong&gt; with Generation 2 supporting up to 12.8GT/s and Generation 3 supporting even higher data rates.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DDR5 MRDIMM is an evolving standard that is still in progress at JEDEC.&lt;/p&gt;
&lt;p&gt;The Cadence memory model for DDR5/DDR5 DIMM aims&amp;nbsp;to support all generations of DDR5 MRDIMM with Cadence DDR5 MRDIMM (including MRCD and MDB) VIPs features tracking JEDEC DDR5 MRDIMM Generation 2 and Generation 3 Specification development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about Cadence DDR5 MRDIMM VIP at the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/memory-models.html"&gt;Cadence VIP Memory Models webpages&lt;/a&gt; and reach out to our&amp;nbsp;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;Cadence Verification IP experts&lt;/a&gt; with any questions.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364195&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ddr5">ddr5</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DDR5%2bMRDIMM">DDR5 MRDIMM</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP">VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/JEDEC">JEDEC</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MRDIMM">MRDIMM</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DRAM">DRAM</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Dual%2bIn%2bLine%2bMemory">Dual In Line Memory</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DDR5DIMM">DDR5DIMM</category></item><item><title>Controller Memory Buffer (CMB): NVMe 2.0’s On-Controller Memory Feature</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/controller-memory-buffer-cmb-nvme-2-0-s-on-controller-memory-feature</link><pubDate>Mon, 08 Jun 2026 05:18:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:aa24758a-0521-4992-92eb-740eaaeb1c1d</guid><dc:creator>Rajan Jani</dc:creator><slash:comments>0</slash:comments><description>Non-volatile Memory Express (NVMe) has become the dominant interface protocol for high-performance storage devices. As workloads demand ever-lower latencies, the NVMe specification has evolved with features that reduce data-path overhead. One such fe...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/controller-memory-buffer-cmb-nvme-2-0-s-on-controller-memory-feature"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364189&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Functional%2bVerification">Functional Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVMe">NVMe</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP">VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Inside Akeana and Cadence’s Secret Sauce for Faster RISC-V Chip Verification</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/inside-akeana-and-cadence-secret-sauce-for-faster-risc_2d00_v-chip-verification</link><pubDate>Tue, 26 May 2026 23:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f7079cc2-52cf-4fd4-aa11-62797b22bccd</guid><dc:creator>HSV Marketing</dc:creator><slash:comments>0</slash:comments><description>&lt;h2 id="mcetoc_1jp0jrbej5"&gt;The Nightmare of Chip Testing (And How to Fix It)&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s be real: designing ambitious new RISC-V chips is cool, but testing them is an absolute nightmare. When you are building crazy complex pipelines and custom instructions, you eventually hit a massive brick wall. Your designs are brilliant, but traditional simulators are too slow to run actual software on them. To catch every glitch before making the physical chip, you need trillions of test cycles. Who has the time to wait around for that while the launch deadline creeps closer?&lt;/p&gt;
&lt;p&gt;The crew at Akeana hit this exact roadblock. Instead of crying into their coffee, they teamed up with Cadence Palladium Cloud to speed things up. Here is how they turned a scheduling nightmare into a massive win.&lt;/p&gt;
&lt;h2 id="mcetoc_1jp0jrbej6"&gt;The Backstory and The Big Problem&lt;/h2&gt;
&lt;p&gt;In just four years, Akeana built a massive tech portfolio. We are talking about everything from tiny edge microcontrollers and smart car brains to data center AI chips. They do way more than basic processor cores; they build the heavy-duty system infrastructure like cache controllers, data highways, and advanced AI engines. But mixing and matching all these parts creates a giant puzzle. Testing individual blocks is easy. Testing how they all interact when running actual operating systems and AI software? That is a different beast. Traditional testing methods could not keep up. Akeana needed a way to test everything at scale without blowing their budget or burning out their engineers.&lt;/p&gt;
&lt;h2 id="mcetoc_1jp0jrbej7"&gt;Enter Cadence Palladium Cloud&lt;/h2&gt;
&lt;p&gt;Instead of just buying a mountain of expensive new servers, Akeana upgraded their strategy by moving to Cadence Palladium Cloud. This gave them instant access to top-tier hardware acceleration in the cloud, allowing them to subscribe massive emulation computing power exactly when they needed it. No huge upfront hardware costs and no new IT infrastructure to build up. Their engineers just code securely on-site, push the massive workloads to the cloud, and let it rip. Even better, they aligned their emulation models so they could run massive system checks every single night with zero drama.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/1854.image_5F00_1779827780302564.png_2D00_640x480.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpj8bvq20"&gt;The Results: Working Like Tech Giants&lt;/h2&gt;
&lt;p&gt;This partnership turned Akeana into a speed machine, giving them the kind of agile development power usually reserved for trillion-dollar tech giants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supercharged tuning:&lt;/strong&gt; They managed 10 to 15 performance upgrade iterations per month.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two-day turnaround:&lt;/strong&gt; They cut the time between writing code and getting system feedback down to just two days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Running real AI workloads:&lt;/strong&gt; They ran continuous AI data tests to prove their hardware handles real-world software without breaking a sweat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trillions of cycles:&lt;/strong&gt; By running 24/7 in the cloud, they ran trillions of test cycles. When customers get their tech, it is already battle-tested.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;Using Cadence Palladium Cloud was critical for Akeana to get to high-quality product readiness in a short time. The platform enabled fast development and debug cycles... and provided a cost-effective way to scale.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jp0jrbej9"&gt;Your Turn!&lt;/h2&gt;
&lt;p&gt;If your engineering team is losing its mind trying to validate massive AI workloads or complex chip architectures, stop waiting on traditional simulators. &lt;strong&gt;Reach out to the &lt;a title="Cadence Sales Support Team" href="https://www.cadence.com/en_US/home/company/contact-us.html"&gt;Cadence Sales Support Team&lt;/a&gt; to see how Palladium Cloud can save your timeline.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364152&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/cadence">cadence</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/System%2bDesign%2band%2bVerification">System Design and Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Emulation">Emulation</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Cadence Announces PCIe 8.0 Verification IP Availability at PCI‑SIG US</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/cadence-announces-pcie-gen8-verification-ip-availability-at-pci-sig-usa</link><pubDate>Mon, 18 May 2026 05:17:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:19e7f65b-1d65-41f3-80fb-fe3f4abbcad0</guid><dc:creator>Sangeeta Soni</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span data-contrast="auto"&gt;At the recent &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;PCI&lt;/span&gt;&lt;/b&gt;&lt;span&gt;‑&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;SIG Developers Conference&amp;nbsp;US&amp;nbsp;held&amp;nbsp;on&amp;nbsp;May 6-7,2026&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;, Cadence announced the availability of its &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;PCIe 8.0 Verification IP (VIP)&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;&amp;mdash;taking another significant step in enabling early, confident adoption of the PCI Express roadmap.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;As PCIe continues to evolve to meet the growing demands of AI accelerators,&amp;nbsp;high&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;performance&amp;nbsp;computing, and hyperscale data centers, the complexity of verification grows alongside bandwidth. With PCIe Gen8 VIP, Cadence equips customers with a&amp;nbsp;production&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;ready&amp;nbsp;verification solution aligned with&amp;nbsp;emerging&amp;nbsp;specifications, helping translate evolving standards into reliable silicon implementations.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/Image-_2800_1_2900_.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1joveb9k70"&gt;Built on a Proven, Scalable VIP Architecture&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PCI Express&amp;nbsp;remains&amp;nbsp;the backbone interconnect for modern&amp;nbsp;compute&amp;nbsp;platforms, delivering scalable performance while preserving backward compatibility across generations. Each new generation introduces architectural advances that require equally advanced verification capabilities.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Cadence PCIe Gen8 VIP is built on the same &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;C/C++&lt;/span&gt;&lt;/b&gt;&lt;span&gt;‑&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;based VIP architecture&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt; that has been widely adopted across&amp;nbsp;previous&amp;nbsp;PCIe generations and complementary interconnect standards. This architecture delivers a consistent user experience across protocols and verification environments, while enabling reuse from&amp;nbsp;IP&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;level&amp;nbsp;verification through full SoC integration.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;The VIP supports both serial and&amp;nbsp;PIPE&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;based&amp;nbsp;architectures and&amp;nbsp;maintains&amp;nbsp;protocol behavior consistency across transaction, data link, and physical layers&amp;mdash;allowing verification teams to adopt Gen8 with minimal disruption to existing flows.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1joveb9k71"&gt;Supporting&amp;nbsp;System‑Level&amp;nbsp;Verification at Extreme Speeds&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PCIe Gen8 extends the PCIe architecture to support significantly higher data rates while preserving core concepts introduced in earlier generations, such as PAM4 signaling,&amp;nbsp;FLIT&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;based&amp;nbsp;transfers, and&amp;nbsp;low&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;power&amp;nbsp;states. Cadence PCIe Gen8 VIP is designed to&amp;nbsp;validate&amp;nbsp;these capabilities across realistic system configurations.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;The VIP supports verification of &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;root complexes, endpoints, switches, and&amp;nbsp;retimers&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;,&amp;nbsp;along with&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;monitor components for serial, pipe&amp;nbsp;interface, and switch topologies,&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;enabling customers to&amp;nbsp;validate&amp;nbsp;complex topologies and interoperability scenarios.&amp;nbsp;Integration&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;friendly&amp;nbsp;building blocks, configurable checking, and&amp;nbsp;coverage&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;driven&amp;nbsp;flows help verification teams scale from focused IP validation to&amp;nbsp;full&amp;nbsp;system&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;level&amp;nbsp;verification.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1joveb9k72"&gt;Enhancing Debug and Productivity&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;As PCIe speeds increase, observability and debug efficiency become critical. Cadence PCIe Gen8 VIP provides rich debug visibility through&amp;nbsp;protocol&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;aware&amp;nbsp;packet tracking,&amp;nbsp;waveform&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;based&amp;nbsp;transaction views, and&amp;nbsp;trace&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;file&amp;nbsp;correlation across layers.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Complemented by Cadence&amp;rsquo;s verification ecosystem&amp;mdash;including&amp;nbsp;GUI&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;based&amp;nbsp;configuration, reusable test suites, and automated verification planning&amp;mdash;the Gen8 VIP helps reduce&amp;nbsp;bring&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;up&amp;nbsp;time and accelerates convergence toward verification closure.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1joveb9k73"&gt;Moving the PCIe Ecosystem Forward&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;The announcement of PCIe Gen8 VIP at &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;PCI&lt;/span&gt;&lt;/b&gt;&lt;span&gt;‑&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;SIG US&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt; reflects Cadence&amp;rsquo;s continued role in advancing the PCIe ecosystem&amp;mdash;from early standards participation through&amp;nbsp;customer&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;ready&amp;nbsp;verification solutions.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;With its combination of early availability, architectural consistency, and&amp;nbsp;system&lt;/span&gt;&lt;span&gt;‑&lt;/span&gt;&lt;span data-contrast="auto"&gt;level&amp;nbsp;verification focus, &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Cadence PCIe VIP continues to set the benchmark for PCI Express verification&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;, empowering customers to innovate with confidence as the industry transitions into the PCIe Gen8 era.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;For more info on how Cadence PCIe Verification IP and&amp;nbsp;TripleCheck&amp;nbsp;VIP enable users to confidently verify PCIe designs, see our product pages on&lt;/span&gt;&lt;span data-contrast="auto"&gt; &amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/pcie.html"&gt;VIP for PCI Express&lt;/a&gt; &lt;/span&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;and&lt;/span&gt;&lt;span data-contrast="auto"&gt; &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/vip-tools/triplecheck-test-suite.html"&gt;Triplecheck&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Refer to the &lt;a href="https://pcisig.com/"&gt;PCI-SIG website&lt;/a&gt; for more details on PCIe in general and upcoming revisions on PCIe 8.0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="1" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Reach out to&amp;nbsp;Cadence Verification IP experts at&amp;nbsp;&lt;/span&gt;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;&lt;span data-contrast="none"&gt;talk_to_vip_expert@cadence.com&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364143&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Functional%2bVerification">Functional Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/pcie%2b8-0">pcie 8.0</category></item><item><title>VLAB at the MATLAB Expo Japan 2026</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/vlab-at-the-matlab-expo-japan-2026</link><pubDate>Wed, 06 May 2026 22:05:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:2476e919-00c2-4b11-930b-0e3725326277</guid><dc:creator>JEngblom</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The Cadence VLAB team will be part of the Cadence team present at the &lt;a href="https://www.matlabexpo.com/jp/2026.html?s_tid=expo_gateway_jp_expo26"&gt;MATLAB Expo Japan&lt;/a&gt; on May 26 in Tokyo. We will be demonstrating how MATLAB and Simulink models can be used to co-simulate with VLAB virtual development machines (VDMs), allowing software to be tested in a &lt;strong&gt;virtual hardware-in-the-loop environment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:1200px;" alt=" " src="https://community.cadence.com/resized-image/__size/2400x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/5047.matlab_2D00_vlab_2D00_overview.png" /&gt;&lt;/p&gt;
&lt;p&gt;Virtualized hardware-in-the-loop (HIL), processor-in-the-loop (PIL), and software-in-the-loop (SIL) techniques provide the ease of testing and development agility needed to realize &lt;a href="https://vlabworks.com/sia-cesa-2025-it-is-sdv-you-have-to-change-your-mindset/"&gt;software-defined vehicles&lt;/a&gt; (SDV). &lt;a href="https://vlabworks.com/sdv-europe-2025-virtualization-and-collaboration/"&gt;Virtualization&lt;/a&gt; provides developers and automated continuous integration and deployment (CI/CD) systems with instant access to any amount of hardware, avoiding the need to queue up tests for execution on limited physical test rigs.&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://vlabworks.com/vdm-catalogue/"&gt;VLAB VDM&lt;/a&gt; typically runs the complete software stack from the target system&amp;mdash;applications, operating system, and drivers. The software is compiled for the target system, with no need for a special simulation variant. The VDM contains models of various input and output devices, both digital and analog. Sometimes it is as simple as a GPIO pin being driven in pulse-width modulated (PWM) mode. But it can also be analog signals or high-current drivers on a separate board, whatever is in the hardware.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:1200px;" alt=" " src="https://community.cadence.com/resized-image/__size/2400x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/3480.mbse_2D00_into_2D00_vlab.png" /&gt;&lt;/p&gt;
&lt;p&gt;From a VLAB perspective, it does not matter if the software being tested is written manually or generated from MATLAB/Simulink models. The software running on the VDM can be debugged and tested using standard software tools. It can be subjected to faults injected by VLAB scripts. This makes it possible to test the system under conditions like faulty sensors and actuators, exploring system stability and error handling. And, of course, challenging physical conditions can be simulated by the MATLAB/Simulink side.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about Cadence&amp;#39;s&lt;/strong&gt; &lt;a href="https://vlabworks.com/"&gt;&lt;strong&gt;VLAB&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; and&lt;/strong&gt; &lt;a href="https://www.cadence.com/en_US/home/solutions/automotive-solution.html"&gt;&lt;strong&gt;automotive&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; solutions&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364123&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Automotive">Automotive</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Simulink">Simulink</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/vlab">vlab</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MBSE">MBSE</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Testing">Testing</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/event">event</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Matlab">Matlab</category></item><item><title>Unraveling Precision Time Measurement (PTM)</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/unraveling-precision-time-measurement-ptm</link><pubDate>Fri, 01 May 2026 17:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:6dad4ccf-bdb9-4b1a-8dcf-0eb42d049199</guid><dc:creator>Igor Krause</dc:creator><slash:comments>0</slash:comments><description>&lt;h2 id="mcetoc_1jnas9b712"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Precision Time Measurement (PTM) is an optional capability for communicating precise timing information between components. PTM enables precise coordination of events across multiple components with independent local time clocks. Such precise coordination is difficult, given that individual time clocks have differing notions of the value and rate of change of time. PTM is used in links/domains where the system needs its devices to have precise coordination. Good examples of systems that may take advantage of PTM include media processing, telecommunications, and scientific instrumentation.&lt;/p&gt;
&lt;h2 id="mcetoc_1jnas9vu43"&gt;PTM Theory and Operation&lt;/h2&gt;
&lt;p&gt;PTM enables components to calculate the relationship between their local times and a shared PTM Master Time: an independent time domain associated with a PTM Root.&lt;/p&gt;
&lt;p&gt;Each Upstream Port initiates PTM dialogs to establish the relationship between its local time and the PTM Master Time provided by the Root Port.&lt;/p&gt;
&lt;p&gt;PTM-capable components can make their PTM context available for inspection by software, enabling software to translate timing information between local times and the PTM Master Time. In turn, this capability enables software to coordinate events across multiple components with very fine precision.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PTM Requester&lt;/strong&gt; - A Function capable of using PTM as a consumer associated with an Endpoint or an Upstream Port.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PTM Responder&lt;/strong&gt; - A Function capable of using PTM to supply the PTM Master Time associated with a Port or an RCRB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time Source&lt;/strong&gt; - A local clock associated with a PTM Responder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PTM Root&lt;/strong&gt; - The source of PTM Master Time for a PTM Hierarchy. A PTM Root must also be a Time Source and is typically also a PTM Responder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jnasbqa14"&gt;PTM Link Protocol&lt;/h2&gt;
&lt;p&gt;A PTM dialog is defined as a matched pair of messages consisting of a PTM Request and the corresponding PTM Response or PTM ResponseD message.&lt;/p&gt;
&lt;p&gt;The timestamps captured during the PTM dialogs enable the calculation of the timing relationship between the PTM Requester and PTM Responder (please see the image below for reference). The value (t3-t2) measures the time consumed by the PTM Responder for a given PTM dialog. The time (t4-t1) is the time from request to response. Therefore, ((t4 - t1) - (t3 - t2)) effectively gives the round-trip message transit time between the two components, and that quantity divided by 2 approximates the Link delay - the time difference between t1 and t2.&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/2021.pastedimage1777407423831v1.png" /&gt;&lt;br /&gt;PTM Link Protocol&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;A PTM Requester must update its stored t1 timestamp when transmitting a PTM Request Message, even if that transmission is a replay.&lt;/li&gt;
&lt;li&gt;A PTM Responder must update its stored t2 timestamp when receiving a PTM Request Message, even if the received TLP is a duplicate.&lt;/li&gt;
&lt;li&gt;A PTM Responder must update its stored t3 timestamp when transmitting a PTM Response or ResponseD Message, even if that transmission is a replay.&lt;/li&gt;
&lt;li&gt;A PTM Requester must update its stored t4 timestamp when receiving a PTM Response Message, even if the received TLP is a duplicate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PTM Master Time field is a 64-bit value containing the value of PTM Master Time at the receipt of the PTM Request Message for the current PTM Dialog. In the shared image, for the 2nd PTM dialog, this is the PTM Master Time at time t2&amp;#39;.&lt;/p&gt;
&lt;p&gt;The Propagation Delay field is a 32-bit value containing the interval between the receipt of the PTM Request Message and the transmission of the PTM Response Message for the previous PTM dialog. In the shared image, for the second PTM dialog, this is the time interval between t2 and t3 captured during the first PTM dialog.&lt;/p&gt;
&lt;p&gt;In NFM, Timestamps must be based on the STP Symbol or Token that frames the TLP, as if observing the first bit of that Symbol or Token at the Port&amp;#39;s pins. The image below shows the PTM Request and Response Messages for Non-Flit Mode:&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/2021.pastedimage1777407467096v2.png" /&gt;PTM Request/Response Message - Non-Flit Mode&lt;/h5&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/5635.pastedimage1777407476646v3.png" /&gt;&lt;br /&gt;PTM ResponseD Message - Non-Flit Mode&lt;/h5&gt;
&lt;p&gt;In Flit Mode, timestamps for PTM messages are measured at the Flit level rather than at the TLP level. There is the bit &amp;quot;PTM Message contained in this Flit&amp;quot; in the Flit_Marker field, which signals the presence of a non-nullified PTM Message inside the Flit. The PTM timestamps must be based on the Flit_Marker field.&lt;/p&gt;
&lt;p&gt;The images below show the PTM Request and Response Messages for Flit Mode, and the Flit_Marker indicator:&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/5635.pastedimage1777407486115v4.png" /&gt;PTM Request/Response Message - Flit Mode&lt;/h5&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8358.pastedimage1777407519017v5.png" /&gt;PTM ResponseD Message - Flit Mode&lt;/h5&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8358.pastedimage1777407530491v6.png" /&gt;Flit_Marker&lt;/h5&gt;
&lt;h2 id="mcetoc_1jnastumg6"&gt;PTM Extended Capability Structure&lt;/h2&gt;
&lt;p&gt;The Extended Capability structure is required for any port of the Root-Complex that supports PTM and in only one function of the Endpoint. The images below show the PTM Capability and Control registers:&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8358.pastedimage1777407539964v7.png" /&gt;PTM Capability Register&lt;/h5&gt;
&lt;h5 style="text-align:center;"&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/7701.pastedimage1777407546427v8.png" /&gt;PTM Control Register&lt;/h5&gt;
&lt;p&gt;Enhanced Precision Time Measurement (ePTM) places additional requirements on PTM Devices. It must be implemented in all PTM devices that support Flit-Mode. Support for ePTM is indicated by the ePTM Capable bit.&lt;/p&gt;
&lt;h2 id="mcetoc_1jnasuir47"&gt;PTM Verification Challenges and Solutions&lt;/h2&gt;
&lt;p&gt;The PTM feature introduces the PTM Request and Response Messages, whose proper utilization requires careful coordination between the devices. The new Messages may be checked to avoid any violation of the reserved fields, time accuracy, and data precision. &lt;br /&gt;The PTM Extended Capability structure brings a new set of configuration registers. Verifiers must guarantee that the device&amp;#39;s capability register correctly indicates&amp;nbsp;feature support, that the control register is configured with the proper value, and that the feature is not enabled before the system is ready. Users can take advantage of VIP&amp;#39;s error messages to identify Spec&amp;#39;s violations more efficiently.&lt;/p&gt;
&lt;p&gt;Verifying the PTM dialog can be really challenging. The PCIe specification defines the exact gathering point for the timestamp values. But at the same time, the devices may hold a small to moderate delay for processing incoming data, which may compromise the timestamp gathering value. The PTM dialog verification requires precise timing analysis.&lt;/p&gt;
&lt;p&gt;Please refer to the VIP PCIe User Guide for more information on VIP PTM implementation and configuration.&lt;/p&gt;
&lt;h2 id="mcetoc_1jnat85ce8"&gt;Learn More&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For more information on how Cadence PCIe Verification IP and TripleCheck VIP enable users to confidently verify IDE, see our &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/pcie.html"&gt;VIP for PCI Express&lt;/a&gt;, &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/cxl.html"&gt;VIP for Compute Express Link&lt;/a&gt;, and &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/vip-tools/triplecheck-test-suite.html"&gt;TripleCheck for PCI Express&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For more information on PCIe in general, and on the various PCI standards, see the &lt;a href="https://pcisig.com/"&gt;PCI-SIG website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you have more feedback or need more information, reach out to us at &lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364110&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PCIe%2b6-0">PCIe 6.0</category></item><item><title>Unraveling Embedded Clock Mode in MIPI D-PHY: Simplifying High-Speed Serial Link</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/unraveling-embedded-clock-mode-in-mipi-d-phy-simplifying-high-speed-serial-link</link><pubDate>Thu, 23 Apr 2026 23:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:8d869c5c-e0bd-488a-96fc-0a9a292817e3</guid><dc:creator>ArupC</dc:creator><slash:comments>0</slash:comments><description>As flagship smartphones push camera sensors beyond 200 megapixels and display resolutions beyond 4K, and as automotive applications demand ever-higher bandwidth, the physical layer interfaces connecting these components must evolve in lockstep. The M...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/unraveling-embedded-clock-mode-in-mipi-d-phy-simplifying-high-speed-serial-link"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364106&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Clock%2bData%2bRecovery">Clock Data Recovery</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Embedded%2bclock%2bmode">Embedded clock mode</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MIPI%2bD_2D00_PHY">MIPI D-PHY</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PHY%2bVerification">PHY Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Struggling to Rewrite Functionality in PSS? Import Functions Streamlines</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/import_5f00_function_5f00_in_5f00_pss</link><pubDate>Thu, 23 Apr 2026 21:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:7ea1e089-4dda-4457-bf73-68a00301e3a0</guid><dc:creator>Siddh Virani</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One of the most powerful features of the &lt;a href="https://www.accellera.org/downloads/standards/portable-stimulus"&gt;Portable Stimulus Standard (PSS)&lt;/a&gt; is the ability to import functions from foreign languages like C or SystemVerilog. This capability is far more than a convenience; it solves a critical real-world challenge. A very common real-life use case is that many teams already have a substantial firmware/software API library (usually in C, sometimes SV), and they do &lt;em&gt;not&lt;/em&gt; want to re-model that realization layer purely in native PSS terms (e.g., PSS registers or native PSS functions). Instead, they want PSS to orchestrate and sequence existing firmware APIs as part of scenario realization. Imported functions are what make that layering possible.&lt;/p&gt;
&lt;p&gt;PSS models the &lt;em&gt;what&lt;/em&gt; (intent, ordering, constraints, coverage), while foreign functions implement the &lt;em&gt;how&lt;/em&gt; (actual FW calls and platform-specific behavior). This approach enables seamless integration of PSS scenarios with proven, production-quality code, ensuring code reuse, layered abstraction, and faster adoption (actual FW calls and platform-specific behavior).&lt;/p&gt;
&lt;p&gt;Imagine you&amp;#39;re developing a feature and realize the same functionality already exists in C or SystemVerilog. Instead of rewriting it in PSS, you can simply reuse that code&amp;mdash;saving time and reducing the risk of bugs. Or consider tackling a complex logic problem and thinking, &lt;em&gt;&amp;quot;If I could use XYZ language here, this would be easier.&amp;quot;&lt;/em&gt; That&amp;#39;s where PSS&amp;#39;s foreign language support shines. It is introduced in the&amp;nbsp;&lt;a href="https://www.accellera.org/images/downloads/standards/Portable_Test_Stimulus_Standard_v20.pdf"&gt;&lt;strong&gt;PSS 2.0 Language Reference Manual&lt;/strong&gt;&lt;/a&gt;. Import functions allow integration with languages like C and SystemVerilog, making it especially useful when connecting a UVM/SV testbench with a PSS environment. You can specify the target language and embed foreign code directly within the function body. This capability works seamlessly across both target and solve platforms, making it a powerful tool for engineers looking to streamline workflows and leverage existing assets.&lt;/p&gt;
&lt;p&gt;Please note that only &lt;em&gt;static&lt;/em&gt; functions can be imported via the foreign language interface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The sections below will help you with the following:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to use import functions on the Solving platform and the target platform&lt;/li&gt;
&lt;li&gt;How to use Perspec for the import function&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Import Function with Target Platform&lt;/h2&gt;
&lt;p&gt;In the PSS model, the Import function on the target platform can be declared as mentioned below.&lt;/p&gt;
&lt;h3&gt;Function Declaration&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;&lt;strong&gt;import target function&lt;/strong&gt; return_type function_name&lt;strong&gt;(&lt;/strong&gt; &lt;strong&gt;input&lt;/strong&gt;|&lt;strong&gt;output&lt;/strong&gt;|&lt;strong&gt;inout&lt;/strong&gt; &amp;nbsp;parameter &lt;strong&gt;);&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Function Definition&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;In the exec declaration block, the definition of the function can be provided as mentioned below:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;exec declaration &amp;lt;name_of_target_language&amp;gt; = &amp;ldquo;&amp;rdquo;&amp;rdquo; &lt;br /&gt;&amp;nbsp; &amp;nbsp; return_type function_name ( parameters ){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;functionality implementation in the C&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;ldquo;&amp;rdquo;&amp;rdquo;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Another option for C implementation is to create a separate external library and link that library with the Perspec-generated executable. Example 1.1 shows this approach.&lt;/p&gt;
&lt;h3&gt;Example 1.1: Import Function with Target Platform with a Separate External Library&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;PSS file:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;//--------------&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;//&lt;/span&gt;&amp;nbsp;dma_c&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;extend component dma_c&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;import&lt;/span&gt;&amp;nbsp;target static function void dma_program&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;channel_id&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;sml_addr_t src_addr&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;sml_addr_t dst_addr&lt;span style="font-weight:bold;"&gt;,int&lt;/span&gt;&amp;nbsp;size&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;import&lt;/span&gt;&amp;nbsp;target static function void dma_start&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;channel_id&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;import&lt;/span&gt;&amp;nbsp;target static function void dma_wait_for_completion&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;channel_id&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;import&lt;/span&gt;&amp;nbsp;target static function&amp;nbsp;&lt;span style="font-weight:bold;"&gt;bool&lt;/span&gt;&amp;nbsp;dma_is_done&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;channel_id&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; extend action transfer&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;exec&lt;/span&gt;&amp;nbsp;body&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;//&lt;/span&gt;&amp;nbsp;calling the user firmware routine&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comp&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;dma_program&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;channel&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;instance_id&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;in_buff&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;mem_seg&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;addr&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;out_buff&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;mem_seg&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;addr&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;in_buff&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;mem_seg&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;size&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comp&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;dma_start&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;channel&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;instance_id&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(!&lt;/span&gt;comp&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;dma_is_done&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;channel&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;instance_id&lt;span style="font-weight:bold;"&gt;))&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;yield;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;exec&lt;/span&gt;&amp;nbsp;post_solve&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_buff&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;data&lt;span style="font-weight:bold;"&gt;.bytes&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;in_buff&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;data&lt;span style="font-weight:bold;"&gt;.bytes;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;C_File: dma_functions.h&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#ifndef YAMM_STUB_DD_&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#define YAMM_STUB_DD_&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_program&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;span style="font-weight:bold;"&gt;*&lt;/span&gt;&amp;nbsp;src_buff&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;span style="font-weight:bold;"&gt;*&lt;/span&gt;&amp;nbsp;dst_buff&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;size&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_start&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_wait_for_done&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;dma_is_done&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="font-family:Calibri;font-size:11.0pt;margin:0in;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;strong&gt;C File:&amp;nbsp;dma_functions.c&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#include &amp;quot;dma_functions.h&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#include &amp;lt;stdint.h&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_program&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;span style="font-weight:bold;"&gt;*&lt;/span&gt;&amp;nbsp;src_buff&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;span style="font-weight:bold;"&gt;*&lt;/span&gt;&amp;nbsp;dst_buff&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;size&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;dma_program()\n&amp;quot;&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; chan_num = %d\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; src_buff = %p\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;src_buff&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; dst_buff = %p\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;dst_buff&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = %d\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;size&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;static long long&amp;nbsp;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;chan_end_time&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;2&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{-&lt;/span&gt;1&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;-&lt;/span&gt;1&lt;span style="font-weight:bold;"&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_start&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;dma_start()\n&amp;quot;&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; chan_num = %d\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yamm_rand_delay&lt;span style="font-weight:bold;"&gt;();&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chan_end_time&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;SLN_GET_TIME&lt;span style="font-weight:bold;"&gt;()&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;+&lt;/span&gt;&amp;nbsp;SLN_STABLE_RANDOM&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;500&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;700&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;0&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;void dma_wait_for_done&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(!&lt;/span&gt;dma_is_done&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;))&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;/*&lt;/span&gt;&amp;nbsp;busy wait&amp;nbsp;&lt;span style="font-weight:bold;"&gt;*/&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;dma_is_done&lt;span style="font-weight:bold;"&gt;(int&lt;/span&gt;&amp;nbsp;chan_num&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;int&lt;/span&gt;&amp;nbsp;result&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;SLN_GET_TIME&lt;span style="font-weight:bold;"&gt;()&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;=&lt;/span&gt;&amp;nbsp;chan_end_time&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;]);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;result&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;dma_is_done()\n&amp;quot;&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;quot;&amp;nbsp; chan_num = %d\n&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;chan_num&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;return&lt;/span&gt;&amp;nbsp;result&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-size:9.0pt;margin:0in;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;PSS model in Example 1.1 is calling the functions of the DMA c library, using the import target function, and its definitions are present in separate C files.&lt;/p&gt;
&lt;p&gt;Another example where a c implementation is present in the exec body. If you need the descramble_64bit_data functionality on the target platform and already have its implementation in C, there&amp;#39;s no need to redevelop it in PSS. You can directly reuse existing functionality available in C, as demonstrated in Example 1.2.&lt;/p&gt;
&lt;h3&gt;Example 1.2: Import Function on Target Platform&lt;/h3&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;PSS file:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;import std_pkg&lt;span style="font-weight:bold;"&gt;::*;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;component pss_top&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import target static function bit&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;64&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;descramble_64bit_data&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;bit&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;64&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;scrambled_data&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; action test&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rand bit&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;64&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;scrambled_data&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bit&lt;span style="font-weight:bold;"&gt;[&lt;/span&gt;64&lt;span style="font-weight:bold;"&gt;]&lt;/span&gt;&amp;nbsp;descrambled_data&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec body&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descrambled_data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;descramble_64bit_data&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;scrambled_data&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;LOW&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;quot;scrambled_data: %x, | descrambled_data: %x&amp;quot;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&amp;nbsp;scrambled_data&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&amp;nbsp;descrambled_data&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec declaration C&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short int lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;0xABCD&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char generate_prbs_bit&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;void&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The new bit is the XOR of the tap positions (16, 5, 4, 3)&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Note: Since lfsr_state is uint16_t, we use its bits directly.&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The tap positions are relative to the *output* bit in some designs.&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A more standard approach uses a shift register and taps the bits of the register.&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Standard Galois LFSR implementation for a 16-bit polynomial&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char new_bit&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;((&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;15&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;4&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;3&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;2&lt;span style="font-weight:bold;"&gt;))&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;1&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;nbsp;1&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;|&lt;/span&gt;&amp;nbsp;new_bit&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;lfsr_state&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;15&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;1&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&amp;nbsp;// The output bit is typically the MSB after shift in this form&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function to descramble 64 bits of data&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long long descramble_64bit_data&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;unsigned long long scrambled_data&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long long descrambled_data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;0&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;for&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;int i&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;0&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;lt;&lt;/span&gt;&amp;nbsp;64&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;++&lt;/span&gt;i&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char prbs_bit&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;generate_prbs_bit&lt;span style="font-weight:bold;"&gt;();&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Extract the i-th bit from the scrambled data&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char data_bit&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;scrambled_data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;i&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;1&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Descramble the bit (XOR with PRBS bit)&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char descrambled_bit&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;data_bit&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;prbs_bit&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Place the descrambled bit into the result&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;descrambled_bit&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descrambled_data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;|=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;((&lt;/span&gt;unsigned long long&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;1&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;nbsp;i&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;return&lt;/span&gt;&amp;nbsp;descrambled_data&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;quot;&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Composer View of Example 1.2: The Highlighted Part of the Snapshot Shows a Functional Call in the Generated C Code in the Perspec Composer Window&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8308.pastedimage1774961230174v1.png" /&gt;&lt;/h3&gt;
&lt;p&gt;The descramble_64bit_data function is declared within the PSS model. It accepts 64-bit scrambled data as input and returns the corresponding 64-bit descrambled data. Since this function is implemented specifically for a target platform, it can only be invoked inside target execution blocks. For this reason, it is called within the exec body.&lt;/p&gt;
&lt;p&gt;The exec declaration block contains the C implementation of descramble_64bit_data. Additionally, this function internally calls other C functions, which are also defined within the same exec declaration block.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight:bold;"&gt;Import Function on Solve Platform&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;In the PSS model, the import function on the solve platform can be declared as mentioned below.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:bold;"&gt;Function Declaration&lt;/span&gt;&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;import solve function&lt;/span&gt;&amp;nbsp;return_type function_name&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;input&lt;/span&gt;|&lt;span style="font-weight:bold;"&gt;output&lt;/span&gt;|&lt;span style="font-weight:bold;"&gt;inout&lt;/span&gt;&amp;nbsp;parameter&amp;nbsp;&lt;span style="font-weight:bold;"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Function definitions should be placed in a separate C file based on the target language. Use a dedicated .c file containing the function definition. This file must be precompiled and linked at solve time. &amp;nbsp;For example, a C file can be compiled with gcc using the command below.&lt;/p&gt;
&lt;h3 style="font-weight:bold;"&gt;Command to Generate .so File&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;gcc -shared &amp;lt;path_of_c_file&amp;gt;.c -o &amp;lt;path_of_so_file&amp;gt;.so -fPIC;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now the PSS file can be executed with the generated .so file using the&amp;nbsp;command below.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:bold;"&gt;Command to Run the PSS Model with the Generated .so File Using Perspec&lt;/span&gt;&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;perspec generate -pss_import_c_lib &amp;lt;path_of_so_file&amp;gt;.so -pss &amp;lt;path_of_pss_file&amp;gt;.pss &amp;ndash; top_action test&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:bold;"&gt;Command to Run the PSS Model with the Generated .so File Using the Perspec Composer GUI&lt;/span&gt;&lt;/h3&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;perspec compose -pss_import_c_lib &amp;lt;path_of_so_file&amp;gt;.so -pss &amp;lt;path_of_pss_file&amp;gt;.pss &amp;ndash; top_action test&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here -pss_import_c_lib loads the specified shared library file(s). These files are supposed to contain the precompiled C implementations for imported solve C functions, to be invoked as part of the solve exec blocks execution.&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take an example where the PSS model requires the logic for xor_scrambling, and you already have an implementation available in C, there&amp;rsquo;s no need to rewrite it from scratch. You can simply reuse the existing C code within the PSS model, as demonstrated in Example 2.1.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight:bold;"&gt;Example 2.1: Import Function on Solve Platform&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;PSS file:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;import std_pkg::*;&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;component pss_top{&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import solve static function bit[64]&amp;nbsp;xor_scramble&amp;nbsp;(bit[64]&amp;nbsp;data,&amp;nbsp;bit[64]&amp;nbsp;seed);&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; action perform_scrambling{&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rand bit[64]&amp;nbsp;data;&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rand bit[64]&amp;nbsp;seed;&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bit[64]&amp;nbsp;scrambled_data;&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec pre_body{&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scrambled_data&amp;nbsp;=&amp;nbsp;xor_scramble(data,&amp;nbsp;seed);&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(&amp;quot;Data: %x | Seed: %x \n&amp;quot;,&amp;nbsp;data,&amp;nbsp;seed);&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(&amp;quot;Scrambled data: %x \n&amp;quot;,&amp;nbsp;scrambled_data);&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin:0in;padding-left:30px;"&gt;&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;C file:&lt;/span&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;unsigned long long xor_scramble&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;unsigned long long data&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt;&amp;nbsp;unsigned long long seed&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // In a real implementation, &amp;#39;seed&amp;#39; would be generated by a more complex PRBS generator&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // For this example, we use a simple shift and XOR for demonstration&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long long prbs&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;seed&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;seed&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;7&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;seed&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;11&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt;seed&amp;nbsp;&lt;span style="font-weight:bold;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;31&lt;span style="font-weight:bold;"&gt;));&lt;/span&gt;&amp;nbsp;// Simplified feedback taps&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long long scrambled_data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt;&amp;nbsp;data&amp;nbsp;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt;&amp;nbsp;prbs&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;return&lt;/span&gt;&amp;nbsp;scrambled_data&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p style="color:black;font-family:Arial;margin:0in;padding-left:30px;"&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Composer View of Example 2.1: Highlighted Portion of Snapshot Showing Input Values and Output Value After Function Call at Perspec Composer Window&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/7750.pastedimage1774962362575v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;The import solve function xor_scramble is defined with input arguments like 64-bit data and a seed, and returns scrambled data. The xor_scramble function is declared on the Solve platform, and its C-language implementation is already available. This shows that any functionality previously developed in another programming language can be seamlessly reused.&lt;/p&gt;
&lt;p&gt;As shown in the above examples, if you want to reuse functionality that already exists in a foreign language and make it available on the target platform within a PSS model, you can achieve this by leveraging exec blocks and using functionality present in separate external libraries. These allow you to integrate and invoke platform-specific implementations, enabling seamless reuse of existing code without rewriting it from scratch.&lt;/p&gt;
&lt;p&gt;Annex D of the&amp;nbsp;&lt;a href="https://www.accellera.org/downloads/standards/portable-stimulus"&gt;Portable Stimulus Standard (PSS)&lt;/a&gt;&amp;nbsp;LRM has details of type mapping of PSS data types to C/SV.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The ability to import and integrate foreign language logic into PSS on both Target and Solve platforms opens powerful possibilities for code reuse and cross-language collaboration. This feature enables teams to leverage existing solutions written in other languages, reducing duplication of effort and accelerating development. By bridging the gap between PSS and external languages, we can now build a more flexible, scalable, and efficient verification flow. Perspec supports PSS import functions (all of the examples shown in this blog are supported by Perspec).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/software-driven-verification/perspec-system-verifier.html"&gt;PSS and the Cadence Perspec System Verifier.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364057&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Perspec">Perspec</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/System%2bDesign%2band%2bVerification">System Design and Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/perspec%2bsystem%2bverifier">perspec system verifier</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/import%2bfunction">import function</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/pss">pss</category></item><item><title>C-PHYv3.0 Verification, 35% Throughput Boost for Camera and Display Designs</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/c-phyv3-0-verification-35-throughput-boost-for-camera-and-display-designs</link><pubDate>Tue, 14 Apr 2026 04:54:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:89381c80-4564-4501-bb64-cd7bd7158a25</guid><dc:creator>Meet S Chauhan</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;With the evolution of advanced camera systems and higher-resolution displays for mobile devices, the challenges for MIPI (Mobile Industry Processor Interface) based systems are increasing for physical interfaces to operate efficiently over bandwidth-limited channels while supporting higher data rates, reliable signal integrity, lower power, and EMI sensitivity, along with minimal verification complexity. MIPI CPHY solution provides innovative three-phase symbol encoding methodology, enabling significant data rates with high throughput, designed specifically to connect peripherals such as displays and image sensors, with the added advantage of sharing pin-level coexistence with DPHY (&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-d-phy-c-phy-a-phy.html"&gt;Simulation VIP for MIPI D-PHY, C-PHY and A-PHY | Cadence&lt;/a&gt;), providing manufacturers the flexibility to build integrated devices that can support both interfaces without added silicon cost.&lt;/p&gt;
&lt;h2 id="mcetoc_1jljsbip50"&gt;Introduction to CPHY&lt;/h2&gt;
&lt;p&gt;MIPI CPHY is a trio-based embedded clock physical layer interface used to connect cameras and displays to application processors. Unlike DPHY, CPHY operates on three wire lanes (A, B, and C) encoding the protocol data through transitions between different wire states instead of direct voltage levels, eliminating the need for separate clock lanes. The key advantages of using CPHY include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ternary signaling architecture where each symbol is represented using one of the six valid wire states (while operating in 6-wire state mode), delivering 16 bits over seven symbols, producing a yield of 2.28 bits/symbol.&lt;/li&gt;
&lt;li&gt;Simplified clock recovery through timing retrieval from state transitions at symbol boundaries.&lt;/li&gt;
&lt;li&gt;Low Electro Magnetic Interference (EMI) due to the use of three-phase signaling, canceling common mode noise, making it an excellent candidate to be operated on with RF receivers on mobile SoCs.&lt;/li&gt;
&lt;li&gt;Low pin count, flexible lane allocation, and many more.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jljsbip51"&gt;Developments in CPHYv3.0&lt;/h2&gt;
&lt;p&gt;&lt;img class="align-right" style="float:right;max-height:479px;max-width:323px;" alt=" " src="https://community.cadence.com/resized-image/__size/646x958/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/cphy_5F00_v3_5F00_vip_5F00_diagram-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;p&gt;The new 18 wire state mode introduced in CPHYv3.0 opens the door to meet the demands for high-resolution display and image sensors, motion vector generators and complex compute platforms, all without adding more physical interconnects. With new encoding scheme introduced in version 3.0, we can now transport 32 bits over 9 symbols (3.556 bits/symbol) which is significant improvement in bits-per-symbol efficiency thus increasing overall performance by approximately 30-35% while maintaining proven industry leading characteristics and full backward compatibility.&lt;/p&gt;
&lt;p&gt;The 18 wire state mode is optional and implementations can continue to use 6 wire state mode without any changes giving designers the flexibility to adopt the new mode selectively in performance critical applications while keeping the existing proven design unchanged.&lt;/p&gt;
&lt;p&gt;In the traditional 6 wire state mode, each of three wires (A,B,C) were driven to one of three voltage levels creating constraint that at least one wire must always transition to next valid state, 18 wire state relaxes this constraint by introducing additional intermediate voltage levels and drive combinations where each symbol carries more information. The three wires still use the same physical pins but it creates challenges for transmitter and receiver across every layer of verification stack to support finer voltage discrimination and complex clock recovery logic.&lt;/p&gt;
&lt;h2 id="mcetoc_1jljsbip52"&gt;Key Verification Challenges&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Encoding/decoding complexity: The mapper and demapper become substantially complex, requiring rigorous stimulus to verify all state transitions.&lt;/li&gt;
&lt;li&gt;Clock recovery and timing: With more states, the CDR (clock-data recovery) circuit faces more complex symbol boundaries than earlier.&lt;/li&gt;
&lt;li&gt;Calibration and training sequences: Operating in 18-wire state mode requires resolving tighter voltage thresholds.&lt;/li&gt;
&lt;li&gt;Backward compatibility and mode negotiation: Newer implementations must be capable of interoperate with legacy devices and negotiating capabilities with link partners.&lt;/li&gt;
&lt;li&gt;Error detection and handling: Undetected error rate is potentially higher, resulting in silent data corruption.&lt;/li&gt;
&lt;li&gt;Protocol layer interaction: With an effective increase in data rate, flow control, and adaptation between the protocol and PHY layer must be verified under burst and sustained traffic patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The 18 wire state mode in CPHYv3.0 delivers a compelling throughput improvement, but it trades noise margins and operational complexity for bandwidth, making verification a true challenge for digital logic correctness, signal integrity, and protocol compliance at system level integration&lt;/p&gt;
&lt;h2 id="mcetoc_1jljsbip53"&gt;Simplifying 18-Wire State Mode with Cadence CPHY VIP&lt;/h2&gt;
&lt;p&gt;Cadence CPHY Verification IP (&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-d-phy-c-phy-a-phy.html"&gt;Simulation VIP for MIPI D-PHY, C-PHY, and A-PHY | Cadence&lt;/a&gt;) is built to address all the above-mentioned challenges, delivering a single, unified verification solution for CPHYv3.0 design adoption. It provides a golden reference model that can act as both primary and secondary in active/passive modes, fully compliant with the specification, supporting HS data burst with the 18-wire state mode, new ALP initialization, calibration for 18-wire state mode, PRBS mode 2, and all other features. Our Verification IP solution includes built-in protocol checks and assertions, functional coverage model, error injection and fault coverage with different levels of callbacks for scoreboarding, static and dynamic configuration support for complete simulation control, and pre-built sequences for constrained random stimulus generation with easier integration. Cadence VIP eliminates the verification gap, and customers can effectively validate their designs by leveraging these capabilities.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x782/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/cphy_5F00_v3_5F00_vip_5F00_diagram-_2800_1_2900_.png" /&gt;&lt;/p&gt;
&lt;p&gt;Learn more about Cadence C-PHY Verification IP, including key features, capabilities, and benefits, by visiting our product page &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-d-phy-c-phy-a-phy.html"&gt;Simulation VIP for MIPI D-PHY, C-PHY, and A-PHY | Cadence&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For more details, connect directly with Cadence Verification IP experts at&amp;nbsp;&lt;a id="" href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364078&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PHY%2bLayer">PHY Layer</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/CPHYv3-0">CPHYv3.0</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/18%2bWire%2bstate%2bMode">18 Wire state Mode</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Camera%2band%2bDisplay%2bInterface%2bDesign">Camera and Display Interface Design</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MIPI_2D00_CPHY">MIPI-CPHY</category></item><item><title>EUSB2 V2 Explained: Multi Gigabit Symmetric and Asymmetric Operation</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/eusb2-v2-explained-multi-gigabit-symmetric-and-asymmetric-operation</link><pubDate>Wed, 08 Apr 2026 09:32:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:5abcec4b-23ce-467d-8a02-aa50229adf8c</guid><dc:creator>WilsonKobalkar</dc:creator><slash:comments>0</slash:comments><description>&lt;h4&gt;eUSB2‑V2 is stepping into the spotlight at a time when hardware designers are being asked to do something that sounds simple but deliver more performance, in less space, with lower power, and without compromising reliability. eUSB2‑V2 represents a major evolutionary step for the USB 2.0 ecosystem.&amp;nbsp; In this blog, we&amp;rsquo;ll break down what&amp;rsquo;s new in eUSB2‑V2, how it achieves multi‑gigabit HSx operation, and why symmetric/asymmetric modes unlock new design possibilities. We&amp;#39;ll also explore the verification challenges that come with this leap&lt;/h4&gt;
&lt;p&gt;To set the stage, here&amp;rsquo;s a quick benchmark comparing&amp;nbsp;&lt;strong&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/usb/eusb.html"&gt;eUSB2 v1&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/usb/eusb2v2.html"&gt;eUSB2‑V2&lt;/a&gt;&lt;/strong&gt;, highlighting just how significant this upgrade really is.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/5226.pastedimage1775629779234v1.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Why eUSB2‑V2 Exists in the First Place&lt;/h2&gt;
&lt;p&gt;For years, &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/usb/usb.html"&gt;USB 2.0&lt;/a&gt; has been the dependable &amp;ldquo;workhorse&amp;rdquo; interface. It&amp;rsquo;s everywhere&amp;mdash;accessories, debugging ports, internal device links, and legacy compatibility layers. But as system‑on‑chip (SoC) platforms became more integrated, and as external connectors became less desirable inside tightly packed devices, traditional USB 2.0 wiring began to show its age. Designers needed something that could retain USB 2.0 software compatibility and ecosystem familiarity while better supporting advanced packaging, internal interconnects, and strict power constraints.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s where eUSB2 (embedded USB2) and its newer evolution, eUSB2‑V2, come in. It addresses the needs of internal, short‑reach connections where the &amp;ldquo;classic&amp;rdquo; USB 2.0 electrical assumptions&amp;mdash;cables, connectors, long routes, and noisy environments&amp;mdash;are no longer the norm. In short, eUSB2‑V2 is designed to let engineers keep the benefits of USB 2.0 while modernizing the physical layer for contemporary products.&lt;/p&gt;
&lt;h2&gt;&amp;ldquo;Multi Gigabit&amp;rdquo; &amp;mdash; What Does That Really Mean?&lt;/h2&gt;
&lt;p&gt;At face value, &amp;ldquo;multi-gigabit &amp;ndash; &lt;strong&gt;4.8 Gb/s&lt;/strong&gt;&amp;rdquo; is a throughput figure, and it immediately raises eyebrows because classic USB 2.0 High-Speed is known for&amp;nbsp;&lt;strong&gt;480 Mb/s&lt;/strong&gt;, not multiple gigabits. The point here is that eUSB2‑V2 is discussing&amp;nbsp;&lt;strong&gt;HSx data rates&lt;/strong&gt;, where &amp;ldquo;HSx&amp;rdquo; signals a high-speed extended mode that can scale significantly beyond the original 480 Mb/s signaling rate.&lt;/p&gt;
&lt;p&gt;Even if your final application won&amp;rsquo;t always run at the absolute peak rate, having a headroom ceiling in the gigabit range changes the design conversation. It can mean:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster internal transfers between modules&lt;/li&gt;
&lt;li&gt;More responsive accessory or peripheral interactions&lt;/li&gt;
&lt;li&gt;Better support for higher data-rate device functions without jumping to a completely different interface&lt;/li&gt;
&lt;li&gt;The ability to consolidate what previously required multiple links or parallel paths&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In many products, the limiting factor isn&amp;rsquo;t just raw compute it&amp;rsquo;s how quickly data can move between blocks. A higher-speed embedded link can relieve those bottlenecks.&lt;/p&gt;
&lt;h2&gt;Symmetric vs Asymmetric HSx Operation&lt;/h2&gt;
&lt;p&gt;One of the most distinctive strengths of eUSB2‑V2 is its ability to operate in either &lt;strong&gt;symmetric&lt;/strong&gt; or &lt;strong&gt;asymmetric&lt;/strong&gt; high‑speed modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HSSx (Symmetric):&lt;/strong&gt; Both upstream (device &amp;rarr; host) and downstream (host &amp;rarr; device) operate at the same HSx multiplier.&lt;br /&gt; Example: HSS10 = 4.8 Gb/s in both directions simultaneously.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSUx (Asymmetric Upstream):&lt;/strong&gt; Upstream runs at an HSx speed (up to 4.8 Gb/s), while downstream remains fixed at 480 Mb/s.&lt;br /&gt; Example: HSU10 = 4.8 Gb/s upstream + 480 Mb/s downstream.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSDx (Asymmetric Downstream):&lt;/strong&gt; Downstream is HSx, but upstream runs at 480 Mb/s.&lt;br /&gt; Example: HSD8 = 3.84 Gb/s downstream + 480 Mb/s upstream.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This asymmetric capability is not only unique but strategically significant. Many embedded peripherals&amp;mdash;such as cameras&amp;mdash;generate &lt;strong&gt;large upstream data flows&lt;/strong&gt; (e.g., image streams) but need only modest downstream control bandwidth. In such cases, the SoC can eliminate the need for a high‑speed receiver on the peripheral side, reducing power, die area, and bill‑of‑materials cost. The specification explicitly states that asymmetric operation reduces peripheral complexity by avoiding the need for a gigabit‑class receiver.&lt;/p&gt;
&lt;h2&gt;Symmetric Speed Examples (Both Directions Matched)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0841.pastedimage1775630560323v8.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Asymmetric Speed Examples (Directional Optimization)&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0841.pastedimage1775630583489v9.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Asymmetric Link Behavior: Implications for Verification&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Dynamic Link Speed Switching in eUSB2‑V2&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In eUSB2‑V2 asymmetric mode, the link doesn&amp;rsquo;t run at the same speed in both directions. Even though the speed is different, both directions share the same physical wires (half‑duplex). This means the PHY must constantly switch between a very fast data burst (HSx) and a much slower control/handshake packet (480 Mb/s). If this switching is not perfectly timed, the receiver may not recognize the start of the next packet. This results in Wrong interpretation of SYNC, Squelch mis‑detect, Missed packet boundaries, Protocol timeouts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Power‑State Interactions (L1/L2) Under Asymmetry&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After L1/L2 resume, links must return to pre‑configured HSx in the fast direction and 480 Mb/s in the slow direction, with correct HSx SYNC and squelch exit sequencing. The verification hurdle is ensuring the Frequency Locked Loop (FLL) or PLL on the receiver can re-acquire the high-speed clock sync immediately upon wake-up without dropping the first few packets of the data burst.&amp;nbsp;&lt;strong&gt;Cadence VIP &lt;/strong&gt;&lt;strong&gt;addresses each of these challenges.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maintains UI&amp;rsquo;s between packets:&amp;nbsp;&lt;/strong&gt;&lt;em&gt;Correct UI timing between packets is automatically enforced, preventing subtle timing violations that silicon might easily miss.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Signal‑level recovery (SYNC + squelch) is correct at the new rate:&amp;nbsp;&lt;/strong&gt;SYNC and squelch transitions are validated at every HSx rate, ensuring reliable signal‑level behavior during dynamic speed changes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduler visible timing (SOF/EOP) does not drift or misalign:&amp;nbsp;&lt;/strong&gt;&lt;em&gt;SOF/EOP timing accuracy are checked so that host scheduling remains stable even after resume, bursts, or asymmetric transitions.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PHY configuration is restored exactly as before suspend operation:&amp;nbsp;&lt;/strong&gt;&lt;em&gt;PHY state is tracked across suspend/resume cycles to guarantee the link reinitializes at the exact pre‑suspend configuration.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On‑the‑fly protocol checking:&amp;nbsp;&lt;/strong&gt;&lt;em&gt;Live traffic is monitored to flag protocol issues instantly, without requiring post‑processing or manual waveform inspection.&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style="list-style-type:none;"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cadence has a comprehensive Verification IP solution for the verification of various aspects of eUSB2 Version 2.0 (eUSB2v2), with capabilities provided to do a comprehensive verification of all features. You may contact the local Cadence account team to get more details on eUSB2v2 VIP.&lt;/p&gt;
&lt;p&gt;For more information on how Cadence eUSB2 V2 Verification IP enables users to confidently verify eUSB2 V2 designs, see our product pages on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/usb/eusb2v2.html"&gt;VIP for eUSB2V2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For more details, reach out to us at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a id="" href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364081&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/eUSB2v2">eUSB2v2</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/eUSB">eUSB</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Powering the Future of Memory-Centric Computing with CXL 4.0 VIP</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/announcing-the-next-era-of-memory-centric-computing-cxl-4-0-verification-ip</link><pubDate>Fri, 03 Apr 2026 04:18:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:57116ba4-e0ab-4903-bedd-9ff1566bf7ad</guid><dc:creator>Sangeeta Soni</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:150%;"&gt;CXL 4.0 Verification IP Now Available!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Empowering Advanced AI, HPC, and Data-Centric Workloads with Unmatched Bandwidth, Scalability, and System Flexibility&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As artificial intelligence (AI), high‑performance computing (HPC), and data‑intensive workloads continue to scale, traditional system architectures are hitting fundamental limits in memory capacity, bandwidth, and efficiency. Addressing these challenges, Compute Express Link (CXL) has emerged as the industry‑standard solution to meet this need. With the release of CXL 4.0&lt;span&gt; in &lt;/span&gt;&lt;span&gt;August 2025&lt;/span&gt;, the ecosystem takes a major leap forward in bandwidth, scalability, and system flexibility.&lt;/p&gt;
&lt;p&gt;CXL 4.0 specification aligns with PCIe 7.0 and doubles the per‑lane data rate to 128 GT/s, while preserving the standard and latency optimized flit mode introduced in CXL 3.x. With doubling link bandwidth from 64 GT/s to 128 GT/s, as per current claims, there is no added protocol latency observed, enabling dramatically higher throughput for memory‑intensive and accelerator‑heavy workloads. As with previous CXL versions of CXL2 and CXL3, CXL4 maintains backward compatibility. Additionally, CXL4 has introduced the concept of bundled ports, allowing multiple physical CXL links to be aggregated into a single logical attachment. This enables higher effective bandwidth and improved scalability without changing software enumeration models. We are yet to see how designs adopt different variants of bundles port to their advantage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verification Challenges &amp;ndash; Why CXL 4.0 Demands Advanced VIP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While CXL 4.0 unlocks unprecedented performance and scalability, it also introduces substantial verification complexity. Designs must validate semantics supported by design - CXL.io, CXL.cache, and CXL.mem as per end-application and ensure correct operation across complex fabrics and heterogeneous device types. In addition, high‑speed operation at 128 GT/s with standard and latency optimized flit mode and backward‑compatibility requirements significantly raise the bar for functional verification. Comprehensive CXL 4.0 Verification IP is therefore essential to reduce risk, accelerate compliance, and ensure first‑silicon success for next‑generation CXL‑based platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CXL 4.0 Verification IP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cadence announces CXL 4.0 Verification IP that provides a comprehensive and proven foundation for validating the most advanced CXL designs, enabling customers to confidently deploy next‑generation, memory‑centric architectures. Built on Cadence&amp;#39;s proven PCIe Gen7 Verification IP, the solution supports high‑speed 128GT/s operation and enables early, thorough validation from IP‑level through SoC and full system‑level verification. By addressing the complexity of CXL 4.0 designs upfront, Cadence CXL 4.0 Verification IP significantly reduces integration risk, accelerates debug, and shortens time‑to‑market for AI, HPC, and data‑center platforms.&lt;/p&gt;
&lt;p&gt;The snippet below shows a fully functional CXL4 Type3 configured VIP operating at Gen7 speed with M2S packets being transmitted:&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/3757.Picture1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CXL 4.0 Triplecheck&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In addition, Cadence Verification IP offers the &lt;strong&gt;TripleCheck&lt;/strong&gt; solution, which combines an extensive compliance test suite, a comprehensive coverage model, and a structured verification plan with clear traceability to the CXL specification. This enables fast, efficient, and compliance‑oriented verification. CXL TripleCheck support spans CXL 4.0, CXL 3.2/3.1/3.0, and CXL 2.0 specifications, and is available for both CXL Host and CXL Device DUTs. The test suite includes comprehensive compliance test cases with coverage directly annotated to the CXL specification, simplifying standards compliance and accelerating interoperability readiness.&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6472.Picture2.png" /&gt;&lt;/p&gt;
&lt;p&gt;For more information on how Cadence CXL Verification IP and TripleCheck VIP enable users to confidently verify CXL designs, see our product pages on &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/cxl.html"&gt;VIP for CXL&lt;/a&gt;, and &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/vip-tools/triplecheck-test-suite.html"&gt;TripleCheck&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more details, reach out to us at &lt;a href="mailto:vip_marketing@cadence.com"&gt;vip_marketing@cadence.com&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364066&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/CXL3-0">CXL3.0</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Cadence VLAB at the Embedded World 2026</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/cadence-vlab-at-the-embedded-world-2026</link><pubDate>Wed, 01 Apr 2026 18:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:aaabca5f-682c-4f8c-b5c1-dff0b3323def</guid><dc:creator>JEngblom</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Just like every year, the Embedded World took place in N&amp;uuml;rnberg in mid-March. It was a great show, and it felt busier than last year. That feeling was supported by the conference&amp;#39;s numbers, which show &lt;a href="https://www.embedded-world.de/en/press/press-releases/2026/03/embedded-world-2026-closing-report"&gt;13% more visitors&lt;/a&gt; than in 2025!&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:637px;" alt="Streams of people going to the conference on a sunny March morning" src="https://community.cadence.com/resized-image/__size/1274x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/to-the-entrance_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The increase in attendance was despite another year with travel difficulties. It seems the Embedded World cannot catch a break! Last year, an airport strike on the Monday before the show caused many people to get their trips canceled. This year, all train and car traffic to the Messe was stopped for a few hours at the start of the first day (Tuesday) due to a WWII ordinance being found close to the tracks (it was safely removed). At the end of the show, Lufthansa pilots went on strike, causing many issues with the return trips for attendees. I guess this latter problem might have increased attendance on the last day, though&amp;hellip; Better luck in 2027, I guess!&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4mudiv0"&gt;VLAB in the Cadence Booth&lt;/h2&gt;
&lt;p&gt;For the first time, VLAB was exhibiting at the Embedded World. VLAB had a demo pod in the Cadence booth, alongside demos of &lt;a href="https://www.cadence.com/en_US/home/solutions/automotive-solution.html"&gt;Cadence Automotive&lt;/a&gt; and &lt;a href="https://www.secure-ic.com/"&gt;hardware security solutions&lt;/a&gt;. We had some long days with an almost constant stream of visitors asking questions about &lt;a href="https://vlabworks.com/"&gt;VLAB&lt;/a&gt; and virtualization&amp;mdash;what it is, how it works, what it can do.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:640px;" alt="VLAB Demo pod in the Cadence booth." src="https://community.cadence.com/resized-image/__size/1280x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/VLAB-demo-pod-in-Cadence-booth_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;As usual, we had a professional barista in the Cadence booth, entertaining our guests with coffee made to order. You can spot him just behind the VLAB pod in the photo above. The &lt;a href="https://www.flowcad.com/en/home.htm"&gt;FlowCAD&lt;/a&gt; booth was on the other side of the &amp;quot;block&amp;quot;, just behind the barista.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:640px;" alt="Cadence FlowCAD Booth" src="https://community.cadence.com/resized-image/__size/1280x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/Flowcad_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4n0s701"&gt;Trendspotting&lt;/h2&gt;
&lt;p&gt;The show was so busy that it was hard to find time to walk the floor to see what was going on in the industry. But it was not hard to spot the main themes just from a brief walk around.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt; &amp;ndash; AI was everywhere. Most booths had demos featuring AI or machine learning. Any hardware can be made to run AI in some form. Tiny microcontrollers can run small models, while dedicated accelerators can host full-blown (local) LLMs. Software companies showed off ways to implement AI, as well as AI being used in tools to automate debug and coding.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:640px;" alt="Robot in the QNX booth" src="https://community.cadence.com/resized-image/__size/1280x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/robot_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Robots&lt;/strong&gt; &amp;ndash; Robots and robotics were just as common as AI. Some companies brought in full-size industrial arms, while others settled for small toy-level arms. Compared to previous years, there were fewer cars around the floor&amp;mdash;they were still there, just not as many. And make no mistake, &lt;strong&gt;automotive&lt;/strong&gt; is still a ubiquitous application area for tools and hardware. Several booths featured driving simulators.&lt;/p&gt;
&lt;p&gt;On the software side, &lt;strong&gt;RISC-V&lt;/strong&gt; is still hot. Tool companies showed debuggers and compilers for RISC-V, often combined with the &lt;strong&gt;Rust&lt;/strong&gt; programming language. There is a sense of robustness, safety, and security becoming more of a priority in embedded, and that brings with it the need not just for better tools but also better languages and methodologies. Rust fits well with that trend.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4n2cob2"&gt;VLAB Demos&lt;/h2&gt;
&lt;p&gt;The VLAB demo pod featured a few demos (obviously) of what VLAB can do and how you can use it for software testing and debug.&lt;/p&gt;
&lt;p&gt;The first demo demonstrated software testing using the &lt;a href="https://www.vector.com/int/en/products/products-a-z/software/canoe/sil-testing/"&gt;Vector SIL Adapter&lt;/a&gt; for software-in-the-loop (SIL) testing. The SIL Adapter runs the software under test on hardware (or virtual hardware) without requiring an operating system on the target or a network connection to communicate with the target. Test control and test data are provided to the target over a debugger connection.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/vlab_2D00_vector.png" /&gt;&lt;/p&gt;
&lt;p&gt;The exact same setup works on hardware boards and a VLAB virtual platform. Both setups, physical and virtual, run the same binary. Both setups use the same debugger backends (Lauterbach and Tasking) to communicate with the targets. From the perspective of the CANoe tool, the virtual and physical hardware look identical. The difference is hidden in the debugger layer, which uses either a physical debug probe or the MCD protocol to access the target system.&lt;/p&gt;
&lt;p&gt;The second demo showed agentic AI analyzing and fixing a software problem autonomously. The VLAB virtual ECU runs a charger-station demo from the Zephyr project, which requires a network connection to a management system. However, when the target system boots, networking fails to initialize, and the software does not work.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/vlab_2D00_ai_2D00_demo.png" /&gt;&lt;/p&gt;
&lt;p&gt;The AI agent accesses VLAB through the Visual Studio Code VLAB tools, investigating the problem from several angles. It examines the target system&amp;#39;s serial output, the target system&amp;#39;s hardware hierarchy, and the source code of the software. The issue, a misconfiguration in the device tree, is resolved, and the resulting changes are rebuilt and retested.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4n3vgp3"&gt;Tasking winIDEA and VLAB&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://www.tasking.com/"&gt;Tasking&lt;/a&gt; booth featured a demo with the &lt;a href="https://www.tasking.com/products/winidea/"&gt;winIDEA&lt;/a&gt; debugger and a VLAB model of a future Renesas Arm-based automotive SoC. The virtual SoC was shown alongside physical ECUs and debug probes, demonstrating the continuum from pre-silicon to post-silicon and production debug that is enabled by debugger connections from virtual platforms.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/harald_2D00_paschke_2D00_demo_2D00_edited_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;h5&gt;&lt;em&gt;Harald Paschke from Tasking, demonstrating debugging Arm code running on VLAB&lt;/em&gt;&lt;/h5&gt;
&lt;p&gt;WinIDEA is one of the debuggers used in the software testing demo discussed above. As already mentioned, it uses the MCD protocol to connect to VLAB. This enables all debugger features - including debug and tracing.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4n53064"&gt;AUMOVIO Functional Twins: V-ECU with VLAB&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.aumovio.com/"&gt;AUMOVIO&lt;/a&gt; showed a very different type of demo with VLAB. In this case, a VLAB model of an MCU was integrated into an ECU-level simulation that also included a model of an electronically resettable fuse. The ECU model, in turn, was integrated into a system-level model that included some (simulated) electrical components.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:451px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x902/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/aumovio_2D00_demo_2D00_overview_5F00_v2_2D00_2000x2000.jpg" /&gt;&lt;/p&gt;
&lt;h5&gt;&lt;em&gt;The AUMOVIO demo setup &amp;ndash; the simulation is shown on the right. It can be controlled from the touch-screen setup on the left (over a network bridge between the real world and the simulation).&lt;/em&gt;&lt;/h5&gt;
&lt;p&gt;The software on the ECU controls a windshield wiper. As the user selects different modes, the animation on the display on the right shows the wiper&amp;#39;s behavior. It is also possible to simulate an overload of the electric motor, at which point the electronic fuse would trigger and protect the system.&lt;/p&gt;
&lt;p&gt;The demo provides a good example of how a virtual ECU includes models of digital components, analog components, and the external world. Such a virtual ECU allows software to be tested in both nominal and exceptional situations.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl4n53065"&gt;Back Next Year!&lt;/h2&gt;
&lt;p&gt;The Embedded World is a perfect example of why physical trade shows matter. It is very efficient and effective to gather the industry in a single place for a few days to meet, demo, and discuss. We will be back next year with new innovations and technologies to showcase!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about Cadence&amp;#39;s &lt;a href="https://vlabworks.com/"&gt;VLAB&lt;/a&gt;,&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/solutions/automotive-solution.html"&gt;automotive&lt;/a&gt;, and &lt;a href="https://www.secure-ic.com/"&gt;hardware security solutions&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364061&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Automotive">Automotive</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/virtual%2bplatforms">virtual platforms</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/vlab">vlab</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Embedded%2bWorld">Embedded World</category></item><item><title>UCIe Manageability: The Hidden Control Plane of Chiplet Systems</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/ucie-manageability-the-hidden-control-plane-of-chiplet-systems</link><pubDate>Wed, 01 Apr 2026 09:44:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:df85428f-903d-46fb-a58f-04911c3aa567</guid><dc:creator>Mannan</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Chiplet-based architectures are quickly becoming the foundation of next-generation silicon systems. While most attention goes to high-bandwidth die-to-die links and data protocols like PCIe or CXL, an equally important layer operates quietly in the background: &lt;strong&gt;System Manageability&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Section 8 of the Universal Chiplet Interconnect Express (UCIe) Specification introduces the manageability architecture, which defines a standardized framework for discovering, configuring, and controlling chiplets inside a &lt;strong&gt;System-in-Package (SiP)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For system architects and verification engineers, this layer effectively functions as the control plane of a chiplet system, enabling firmware, debug tools, and system software to interact with chiplets using a consistent management infrastructure.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl1osqbe5"&gt;&lt;strong&gt;Why Manageability Matters in Chiplet Systems&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Unlike monolithic SoCs, chiplet-based systems often integrate dies from multiple vendors, each with different internal architectures. Without a common management framework, system-level operations such as configuration, monitoring, and debug would require vendor-specific solutions, complicating system integration.&lt;/p&gt;
&lt;p&gt;UCIe manageability addresses this by defining a management network spanning all chiplets within the package. Through this network, system firmware can perform essential operations including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chiplet discovery during system initialization&lt;/li&gt;
&lt;li&gt;Chiplet ID assignment and topology configuration&lt;/li&gt;
&lt;li&gt;Remote register access and telemetry collection&lt;/li&gt;
&lt;li&gt;Firmware loading and system configuration&lt;/li&gt;
&lt;li&gt;Debug and diagnostic access&lt;/li&gt;
&lt;li&gt;Security configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jl3r161f0"&gt;&lt;strong&gt;Core Components of Manageability Architecture&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;At a high level, UCIe manageability defines a distributed management infrastructure composed of several architectural elements.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/table1.png" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Conceptually, the architecture can be visualized as a management network connecting chiplets across the package:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/diag_5F00_1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jl1oonq92"&gt;&lt;strong&gt;How Management Communication Works&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;UCIe defines a dedicated Management Transport protocol that enables communication between management entities across chiplets.&lt;/p&gt;
&lt;p&gt;Each management entity is identified by a Management Network ID, composed of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chiplet ID&lt;/li&gt;
&lt;li&gt;Entity ID&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This addressing scheme allows management messages to be routed to any management element across the package.&lt;/p&gt;
&lt;p&gt;The transport packets carry requests and responses for different management protocols, including memory access operations and vendor-defined services.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl1op3tc3"&gt;&lt;strong&gt;A Key Capability: Cross-Chiplet Memory Access&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;One of the most useful capabilities enabled by the manageability architecture is the UCIe Memory Access Protocol (UMAP).&lt;/p&gt;
&lt;p&gt;UMAP allows software or firmware running on a management controller to read or write registers located inside remote chiplets.&lt;/p&gt;
&lt;p&gt;This capability enables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remote configuration of chiplet registers&lt;/li&gt;
&lt;li&gt;Firmware loading across chiplets&lt;/li&gt;
&lt;li&gt;Collection of telemetry data&lt;/li&gt;
&lt;li&gt;Debug access during validation and post-silicon bring-up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the protocol is standardized, system integrators can interact with chiplets from different vendors using a unified mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jl1opb4v4"&gt;&lt;strong&gt;The Bigger Picture&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;As chiplet ecosystems mature, manageability becomes essential for enabling interoperability, scalability, and lifecycle management.&lt;/p&gt;
&lt;p&gt;The architecture defined in the UCIe specification effectively creates a standardized control plane for chiplet systems, enabling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consistent system discovery&lt;/li&gt;
&lt;li&gt;Vendor-agnostic management services&lt;/li&gt;
&lt;li&gt;Scalable debug and telemetry infrastructure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For verification teams, this means that validating a UCIe system is no longer just about link correctness&amp;mdash;it also involves system-level management flows that span multiple chiplets and protocols. Key focus areas include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Management packet routing across chiplets&lt;/li&gt;
&lt;li&gt;Chiplet discovery and ID assignment during initialization&lt;/li&gt;
&lt;li&gt;Remote register access using UMAP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These topics deserve deeper exploration and will be covered in future posts. Stay tuned!&lt;/p&gt;
&lt;p&gt;Cadence has a mature Verification IP solution for the verification of various aspects of UCIe design, with verification capabilities provided to perform a comprehensive verification of chiplet designs. &lt;span data-teams="true"&gt;Manageability support in the VIP is currently evolving, with new features being added as we progress.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn how Cadence UCIe Verification IP accelerates compliance, interoperability, and system-level validation on the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/multi-die/ucie.html" data-outlook-id="f728cb1a-2d5a-4105-b7e6-c9e858e45619"&gt;Simulation VIP for UCIe&lt;/a&gt; page&amp;mdash;and explore how &lt;a href="https://www.cadence.com/en_US/home/solutions/chiplets.html" data-outlook-id="db5f8815-1c53-4d6d-a55c-d6fd0b4456ea"&gt;Cadence Chiplet Framework&lt;/a&gt; addresses the chiplet design, integration, and system lifecycle.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For more details, connect directly with Cadence Verification IP experts at &lt;a href="mailto:talk_to_vip_expert@cadence.com" data-outlook-id="fc352888-fc22-4ebc-9922-73b7025b2fd8"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364059&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ucie">ucie</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP">Verification IP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/multi_2D00_die">multi-die</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP">VIP</category></item></channel></rss>