<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>Cadence Functional Verification</title><link>https://community.cadence.com/cadence_blogs_8/b/fv</link><description></description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle/><item><title>Serial Wire Debug (SWD) Protocol: Efficient Debug Interface for Arm-Based System</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/serial-wire-debug-swd-protocol-efficient-debug-interface-for-arm-based-system</link><pubDate>Fri, 06 Mar 2026 12:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:e927b4ba-4629-4c2e-82ca-169245ee6441</guid><dc:creator>Divya Chawla</dc:creator><slash:comments>0</slash:comments><description>Modern embedded systems are becoming increasingly compact, power efficient, and feature rich. As SoCs integrate more functionality, developers need reliable debug access without increasing pin count or board complexity. Serial Wire Debug (SWD) addres...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/serial-wire-debug-swd-protocol-efficient-debug-interface-for-arm-based-system"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364022&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/SerialWireDebug">SerialWireDebug</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/SWD">SWD</category></item><item><title>Breaking Down UPLI: A Protocol-Level Perspective on UALink 200</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/breaking-down-upli-a-protocol-level-perspective-on-ualink-200</link><pubDate>Thu, 12 Feb 2026 03:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:7fba2549-18bb-4064-9126-bb08bbfa6ed9</guid><dc:creator>Jamdagni</dc:creator><slash:comments>0</slash:comments><description>In the evolving landscape of high-performance computing, particularly in AI and ML workloads, efficient interconnects between accelerators are critical. The Ultra Accelerator Link (UALink) 200 specification introduces a robust framework for scalable,...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/breaking-down-upli-a-protocol-level-perspective-on-ualink-200"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1363986&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/UAL">UAL</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/protocol%2blayer">protocol layer</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AI%2bAccelerator">AI Accelerator</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UALink">UALink</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UPLI">UPLI</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AI">AI</category></item><item><title>Validating UPLI Protocol Across Topologies with Cadence UALink VIP</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/validating-upli-protocol-across-topologies-with-cadence-ualink-vip</link><pubDate>Wed, 11 Feb 2026 04:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0107abd6-ff0b-48cb-939b-574ce8054960</guid><dc:creator>Jamdagni</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;strong&gt;UPLI (UALink Protocol Level Interface)&lt;/strong&gt; is a logical signaling interface that facilitates communication between devices&amp;mdash;specifically between &lt;strong&gt;originator devices&lt;/strong&gt; (which initiate transactions) and &lt;strong&gt;completer devices&lt;/strong&gt; (which respond to them). Each transaction comprises a &lt;strong&gt;request&lt;/strong&gt; and a corresponding &lt;strong&gt;response&lt;/strong&gt;, forming a complete communication cycle. &lt;strong&gt;Cadence UALink VIP&lt;/strong&gt; supports various topologies to verify UPLI layer of DUT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Standalone&lt;/strong&gt; UPLI topology enables users to verify UPLI originators and/or UPLI completers independently and would help user verify protocol layer functionality, bypassing lower layers and saving sim cycles.&lt;/p&gt;
&lt;p&gt;Cadence UALink VIP has three flavors to verify the standalone UPLI layer as shown below.&lt;/p&gt;
&lt;ol&gt;
&lt;li style="list-style-type:none;"&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DUT originator and VIP completer:&lt;/strong&gt;&amp;nbsp;In this topology the DUT is responsible for initiating transactions by issuing request messages such as reads, writes, or atomic operations. The verification focuses on ensuring the DUT correctly forms these requests, manages transaction tags for multiple outstanding transactions, and properly processes the corresponding responses returned by the VIP. The VIP acts as a target device that can respond to requests. Passive originator VIP agent receives and validates the format and legality of the Requests from the DUT. As a completer, the VIP must generate and transmit a valid response for every request it receives, as all requests require a response. The VIP can be configured to control responses and their timing to test the DUT&amp;#39;s ability to handle many outstanding transactions.&lt;br /&gt;&lt;br /&gt;&lt;br /&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; &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; &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; &amp;nbsp; &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/pastedimage1770618341299v1.png" /&gt;&lt;br /&gt;&lt;br /&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; &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; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VIP originator and DUT completer:&amp;nbsp;&lt;/strong&gt;The VIP generates a wide range of legal requests (commands) and sends them to the DUT. The VIP can create complex scenarios with multiple outstanding transactions using different transaction tags to stress the DUT&amp;#39;s processing capabilities. After issuing requests, the passive VIP agent monitors and validates the responses from the DUT. The DUT must be able to receive and process incoming requests from the VIP. Verification focuses on the DUT&amp;#39;s ability to correctly parse different command types,&amp;nbsp;perform the requested memory operations, and generate and send back a valid, properly tagged Response for each transaction.&lt;br /&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; &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; &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; &amp;nbsp; &amp;nbsp;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8664.pastedimage1770557548083v16.png" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DUT and VIP both has originator + completer pair (combined agent):&lt;/strong&gt;&lt;span&gt;&amp;nbsp;This setup verifies the DUT&amp;#39;s ability to manage simultaneous, bidirectional traffic. The DUT&amp;#39;s originator initiates transactions that are received by the VIP&amp;#39;s completer, while the DUT&amp;#39;s completer receives and processes transactions initiated by the VIP&amp;#39;s originator. This configuration can emulate the complex request and response paths found in a switched environment. For example, a request from the DUT&amp;#39;s originator might be received by the VIP&amp;#39;s completer, which then emulates a switch by re-issuing a new request from its originator back to the DUT&amp;#39;s completer. This verifies the DUT&amp;#39;s ability to handle the symmetrical, but opposite-direction flows of requests and responses that occur in multi-device UALink pods.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&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; &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; &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; &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;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&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; &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; &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; &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;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/8664.pastedimage1770557559276v17.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Full stack DUT with UPLI:&lt;/strong&gt;&amp;nbsp;This full-stack topology enables users to verify the entire UALink protocol stack, from the UPLI layer down to the physical layer, in a realistic and integrated environment. It ensures that end-to-end data integrity is maintained across the complete communication path, which is critical for validating correctness in real-world scenarios. By including both the originator and completer roles on both DUT and VIP sides, this setup allows for bi-directional traffic, simulating actual system behavior. Additionally, it helps verify real-time path delays, buffering behavior, and flow control across intermediate layers such as the transport, data link, and physical layers. These intermediate layers play a crucial role in flit conversion, CRC/FEC handling, and serialization, all of which must be validated to ensure protocol compliance and performance.&lt;/p&gt;
&lt;p&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; &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; &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; &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;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/8664.pastedimage1770556694308v12.png" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For more info on Cadence UALink Verification IP, please visit our product page&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/ua-link.html"&gt;Simulation VIP for UALink&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To know more about UALink specification and its updates, please visit the UALink consortium website.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363987&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/UAL">UAL</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/protocol%2blayer">protocol layer</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/UALink">UALink</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UPLI">UPLI</category></item><item><title>Cadence VLAB at the Automotive Software Frontier</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/cadence-vlab-at-the-automotive-software-frontier</link><pubDate>Tue, 10 Feb 2026 19:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:458c0bf1-1ee9-4e83-b22f-a03130cb946d</guid><dc:creator>JEngblom</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;a href="https://www.vlabworks.com"&gt;VLAB&lt;/a&gt; team at Cadence is participating in the 11th &lt;a href="https://academy.impress.co.jp/event/asf202602/index.html"&gt;Automotive Software Frontier 2026&lt;/a&gt; (ASF 2026) Online event, organized by Impress in cooperation with the &lt;a href="https://www.gremo.mirai.nagoya-u.ac.jp/en/"&gt;Global Research Institute for Mobility in Society Institutes of Innovation for Future Society&lt;/a&gt;, Nagoya University, Japan. It is an online-only event that runs from February 4 to March 18, 2026 (free with registration).&lt;/p&gt;
&lt;p&gt;The ASF 2026 explores the latest technological trends in the rapidly evolving automotive software domain, including SDV (Software-Defined Vehicles), use of AI, Over-the-Air (OTA) updates, and cybersecurity. Cadence VLAB supports software developers in all these areas and throughout the product life cycle.&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/asf_2D00_vlab_2D00_graphic.png" /&gt;&lt;/p&gt;
&lt;p&gt;VLAB helps software developers with everything from early software porting to a new platform, to debugging and testing software applications, to long-term software maintenance and continuous updating.&lt;/p&gt;
&lt;p&gt;The VLAB team will showcase our VLAB product capabilities along with several of our popular automotive virtual development machines (VDMs). VDMs will include RH850, Aurix, J7, and R-Car running various automotive software stacks.&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;and &lt;a href="https://www.cadence.com/en_US/home/solutions/automotive-solution.html"&gt;automotive&lt;/a&gt; solutions.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363989&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/vlab">vlab</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/virtual%2bplatform">virtual platform</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/embedded%2bsoftware">embedded software</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/event">event</category></item><item><title>Palladium – Power Estimation Efficiency from Days to Minutes</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/palladium-_2d00_-power-estimation-efficiency-from-days-to-minutes</link><pubDate>Fri, 23 Jan 2026 18:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:e2860d92-dae2-4cb2-bf9a-2cad65fdcd6d</guid><dc:creator>HSV Marketing</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In the competitive semiconductor industry, leading innovators consistently set the bar with high-performance and power-hungry silicon. Their latest multi-billion-gate designs exposed the practical limitations of traditional pre-silicon power estimation methods&amp;mdash;which were slow, unscalable, and posed risks to fully optimized power and performance for next-generation AI silicon.&lt;/p&gt;
&lt;p&gt;A major semiconductor customer used a gate-level power methodology that relied on traditional software tools, limited to a few million gates per job. Estimating power for very large blocks with real application workloads (billion+ gates and billion+ cycles) became impractical with traditional software power estimation methods.&lt;/p&gt;
&lt;p&gt;To overcome this, the customer adopted &lt;strong&gt;Cadence&amp;#39;s Palladium DPA&amp;#39;s Hardware-Native Power Estimation (HW-NPE)&lt;/strong&gt; technology. With this solution, multi-billion-gate designs were analyzed and power estimation performed across a few billion cycles in just hours&amp;mdash;accelerating development and reducing power estimation time in a significant way.&lt;/p&gt;
&lt;p&gt;Cadence partnered with key customers to measure power consumption and overcame scalability challenges using &lt;strong&gt;Cadence Palladium Platform&amp;#39;s Hardware-Native Power Estimation (HW-NPE)&lt;/strong&gt;, which leverages specialized hardware and a compiler-based methodology to efficiently measure and analyze application power at the gate level. Key features of HW-NPE include:&lt;/p&gt;
&lt;p&gt;&lt;img class="align-right" style="float:right;max-height:250px;max-width:250px;" alt=" " src="https://community.cadence.com/resized-image/__size/478x470/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/1207.2026_5F00_Blog1_5F00_Pic1.png" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next-Gen Estimation Engine:&lt;/strong&gt; Capable of processing over a billion gates and performing power calculations for billions of cycles in just hours, delivering a &lt;strong&gt;1000X or more improvement in turnaround time&lt;/strong&gt;, ideal for the most advanced power-intensive silicon.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High Accuracy:&lt;/strong&gt; Delivers results with up to &lt;strong&gt;97% accuracy&lt;/strong&gt; versus sign-off power tools, providing reliable power data for critical power/performance optimization decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unprecedented Visibility:&lt;/strong&gt; HW-NPE provides full visibility into power consumption across billions of cycles with real-world applications, something previously impossible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:600px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/1207.2026_5F00_Blog1_5F00_ResultPic.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;App1: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;A 1.26 billion-cycle application&amp;#39;s end-to-end power analysis completed in just &lt;strong&gt;42 minutes.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;App2: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;A multi-threaded, 3.83 billion-cycle application&amp;#39;s full power analysis was completed in &lt;strong&gt;85 minutes.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This cycle visibility graph illustrates that users can &amp;quot;get visibility for every cycle amidst billions of cycles of power,&amp;quot; a key feature for power profiling.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:600px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/5822.2026_5F00_Blog1_5F00_Pic2.png" /&gt;&lt;/p&gt;
&lt;p&gt;The Cadence Palladium DPA&amp;#39;s Hardware-Native Power Estimation solution is a game-changer, enabling semiconductor innovators to overcome the limitations of traditional methods and achieve ambitious goals. By combining specialized hardware, ultra-fast compile, and power streaming capabilities, the technology enables detailed power analysis previously unattainable for multi-billion-gate designs.&lt;/p&gt;
&lt;p&gt;With this newfound efficiency, engineering teams can focus on creating highly power-efficient designs, a strategic advantage that helps meet critical sustainability objectives. This methodology not only solves immediate challenges but also establishes a superior standard for gate-level power estimation in the semiconductor industry.&lt;/p&gt;
&lt;p&gt;Success with this technology underscores a core belief that innovation is driven by partnership. The adoption of the Cadence Palladium DPA&amp;#39;s HW-NPE helped deliver unprecedented precision in early-stage designs, enabling analysis across billions of cycles. This empowers companies to stay at the forefront of semiconductor innovation and set new standards for rapid, accurate power estimation.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re designing billion-gate AI/ML chips or GPU-accelerated applications and need early, accurate power modeling to boost energy efficiency and avoid costly design delays, connect with the &lt;strong&gt;Cadence Sales Support Team&lt;/strong&gt; to discover how Palladium DPA&amp;#39;s Hardware Native Power Estimation can help transform your development process&lt;/p&gt;
&lt;p&gt;Discover the full story behind this breakthrough&amp;mdash;visit the &amp;quot;Customers Stories&amp;quot; section at our &lt;a href="https://www.cadence.com/go/dynamicduo"&gt;Cadence Dynamic Duo Emulation and Prototyping&lt;/a&gt;&amp;nbsp;page.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363955&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/System%2bDesign%2band%2bVerification">System Design and Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Palladium">Palladium</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/SVG">SVG</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/dpa">dpa</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Power%2bAnalysis">Power Analysis</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/hsv">hsv</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>Cadence’s Training and Education Journey Through 2025</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/cadence-s-training-education-journey-through-2025</link><pubDate>Fri, 23 Jan 2026 09:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:03fc9f64-094d-48d8-8779-0db0f90512db</guid><dc:creator>ulrike</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span class="TextRun SCXW102388451 BCX0" lang="EN-GB" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;As we step into &lt;strong&gt;&lt;span style="color:#800000;"&gt;2026&lt;/span&gt;&lt;/strong&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;it&amp;#39;s&lt;/span&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;a great time&lt;/span&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;&amp;nbsp;to reflect on the most popular blogs and videos from the past year, and to review key developments in education throughout 2025.&lt;/span&gt;&lt;span class="NormalTextRun SCXW102388451 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP SCXW102388451 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="EOP SCXW102388451 BCX0" style="font-size:inherit;"&gt;&lt;span class="TextRun SCXW238668912 BCX0" lang="EN-GB" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;In &lt;strong&gt;&lt;span style="color:#800000;"&gt;202&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0" style="color:#800000;"&gt;5&lt;/span&gt;&lt;/strong&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;, we published&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW238668912 BCX0" lang="EN-GB" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;strong&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;9&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW238668912 BCX0" lang="EN-GB" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;of fresh&amp;nbsp;&lt;a href="https://community.cadence.com/search?q=training#serpsort=date%20desc&amp;amp;serpapplication=4dbd7f70-bfda-4206-b50e-a6db30d79274&amp;amp;serpcategory=blog" rel="noopener noreferrer" target="_blank"&gt;Training Blogs&lt;/a&gt;&lt;/span&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW238668912 BCX0" lang="EN-GB" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW238668912 BCX0"&gt;each unlocking secrets of&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification.html" rel="noopener noreferrer" target="_blank"&gt;System Design and Verification&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;We&amp;rsquo;d like to express our sincere appreciation to all our colleagues who consistently contribute insightful and engaging content&amp;mdash;sharing valuable teaching and learning resources with the community.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Below, you&amp;#39;ll find links to some of the most viewed &lt;a href="https://www.cadence.com/en_US/home/training/training-blogs.html" rel="noopener noreferrer" target="_blank"&gt;Blogs&lt;/a&gt;, &lt;a href="https://www.cadence.com/en_US/home/training/training-bytes.html" rel="noopener noreferrer" target="_blank"&gt;Training Byte videos&lt;/a&gt;,&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/training-webinars.html" rel="noopener noreferrer" target="_blank"&gt;Webinars&lt;/a&gt;&amp;nbsp;and &lt;a href="https://support.cadence.com/apex/Coveo_CommunitySearch#t=RapidAdoptionKits&amp;amp;language=en" rel="noopener noreferrer" target="_blank"&gt;RAKs&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;Among the Blogs, Two Stood Out Like Beacons for Learners Everywhere&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:inherit;"&gt;&lt;span style="color:#000000;"&gt;The blog about&amp;nbsp;&lt;/span&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/training-insights-tcl-scripting-course-for-beginner-and-advanced-users" rel="noopener noreferrer" target="_blank"&gt;a free online course on Tcl scripting that empowered both beginners and experts&lt;/a&gt;&amp;nbsp; &lt;span style="color:#000000;"&gt;which is a creation from the old combined &lt;strong&gt;Tcl/Tk course&lt;/strong&gt;. It has and audio transcript for self-paced learning. In the meantime, the&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86364.html" rel="noopener noreferrer" target="_blank"&gt;Introduction to Tk&lt;/a&gt;&amp;nbsp;training has also been released.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Apart of this there was a blog about &amp;nbsp;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/unlocking-efficient-debugging-with-verisium-waveminer" rel="noopener noreferrer" target="_blank"&gt;a deep dive into the art of debugging with Verisium WaveMiner&lt;/a&gt; &amp;mdash;a tool that became a hero for engineers chasing efficiency.&amp;nbsp;&lt;/span&gt;WaveMiner, part of the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/ai-driven-verification.html" rel="noopener noreferrer" target="_blank"&gt;Verisium Suite&lt;/a&gt;, transforms regression debugging. It pinpoints critical signals and timepoints, visualizes root causes, and dramatically reduces debug effort. For designers and verification engineers, that means higher efficiency and better outcomes. &lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP000000zAQf2AM&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Discover&lt;/a&gt; how WaveMiner can revolutionize your workflow.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;But the Learning Didn&amp;acute;t Stop There&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Videos brought concepts to life like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exploring the &lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O3w000009leAIEAY&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Protium Flow&lt;/a&gt; which gives high level steps to process a design to run on &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/emulation-and-prototyping/protium.html#x2" rel="noopener noreferrer" target="_blank"&gt;Protium system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP000000KIGv2AO&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Jasper FPV App&lt;/a&gt; -&amp;nbsp; this video shows how to run the Jasper tool using a TCL file, steps for design bring-up, and how to perform reset and clock analysis. You&amp;rsquo;ll also get an overview of FPV App features and learn to use key options in the FPV App GUI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;For Those Who Missed the Live Energy of Our Webinars&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;/span&gt;&lt;span style="font-size:inherit;"&gt;You can find the recording of the&amp;nbsp;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/training-webinar-on-protium-x3-using-fullvision-for-debugging" rel="noopener noreferrer" target="_blank"&gt;Training Webinar on Protium X3: Using FullVision for Debugging&lt;/a&gt;&amp;nbsp;stored&amp;nbsp;&lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP0000027ayq2AA&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;Discover how the Cadence &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/emulation-and-prototyping/protium.html" rel="noopener noreferrer" target="_blank"&gt;Protium X3&lt;/a&gt; simplifies your debugging process in this free technical Training Webinar. We&amp;#39;ll show you how FullVision on Protium X3 lets you dump all design signals at once, eliminating the need for multiple recompilations!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Additionally, we offered Streamlining Digital Front-End Design and Verification with Cadence Tools, &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;a two-part, extended&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/training-webinars.html" rel="noopener noreferrer" target="_blank"&gt;webinar&lt;/a&gt; series conducted on November 13 and 18.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;Day-1:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/streamlining-digital-front-end-design-and-verification-with-cadence-tools" rel="noopener noreferrer" target="_blank"&gt;Plan, Simulate and Debug with Cadence Tools&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;Day-2:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/streamlining-digital-front-end-design-and-verification-with-cadence-tools-1101652706" rel="noopener noreferrer" target="_blank"&gt;Regressions, Coverage Integration, and Verification Closure with Cadence Tools&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Topics include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SystemVerilog testbench development&lt;/li&gt;
&lt;li&gt;Metric Driven Verification (MDV) and first-phase planning&lt;/li&gt;
&lt;li&gt;UVM methodology for building verification infrastructure&lt;/li&gt;
&lt;li&gt;Simulation with Xcelium Logic Simulator&lt;/li&gt;
&lt;li&gt;Debugging with Verisium Debug&lt;/li&gt;
&lt;li&gt;Regression management, metrics, runs, vPlan analysis, and coverage aggregation with Verisium Manager&lt;/li&gt;
&lt;li&gt;Real-time progress monitoring and gap analysis&lt;/li&gt;
&lt;li&gt;Hardware acceleration and emulation with Palladium Z3&lt;/li&gt;
&lt;li&gt;Integrating simulation, formal, and emulation coverage in Verisium Manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Watch the &lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP000002JFbh2AG&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;recordings&lt;/a&gt;.&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;You&amp;rsquo;ll get essential insights as industry experts guide you through a complete, integrated verification flow, from initial design to coverage closure.&amp;nbsp; Learn about interactive features, experience live tool demonstrations, and much more.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Behind the scenes, the &lt;a href="https://support.cadence.com/" rel="noopener noreferrer" target="_blank"&gt;ASK portal&lt;/a&gt; transformed into something extraordinary. &lt;a href="https://community.cadence.com/cadence_blogs_8/b/cadence-support/posts/genai-powered-ask-ai-assistant-now-live-on-cadence-ask-portal" rel="noopener noreferrer" target="_blank"&gt;Powered by generative AI&lt;/a&gt;, the new &lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP000001JHZF2A4&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;ASK Assistant&lt;/a&gt; became a trusted guide, answering questions with intelligence and speed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;&lt;a href="https://support.cadence.com/apex/Coveo_CommunitySearch#t=RapidAdoptionKits&amp;amp;language=en" rel="noopener noreferrer" target="_blank"&gt;Rapid Adoption Kits (RAKs)&lt;/a&gt; continued to accelerate success, introducing advanced modeling techniques and debugging strategies that felt almost futuristic:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000006AkfHUAS&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Bidirectional WREAL Switch Modeling using $SIE_input Based SV-RNM Transmission Gate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP0000029L7J2AU&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Jasper Bound Signoff RAK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1OPP00000251FF2AY&amp;amp;pageName=ArticleContent" rel="noopener noreferrer" target="_blank"&gt;Verisium Debug Randomization Debugger 25.03 Rapid Adoption Kit (RAK)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;Digital Badges&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;We should definitely not forget to mention our &lt;a href="https://community.cadence.com/cadence_blogs_8/b/di/posts/it-s-the-digital-era-why-not-showcase-your-brand-through-a-digital-badge" rel="noopener noreferrer" target="_blank"&gt;digital badges&lt;/a&gt; as well - symbols of achievement, proof of mastery. Learners proudly displayed them, each one telling a story of persistence and growth, please find some of the newly created here:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&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/8662.pastedimage1767966843334v1.png" /&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/8662.pastedimage1767966850913v2.png" /&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/8662.pastedimage1767966858530v3.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;And the most popular in 2025&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&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/6114.pastedimage1767966885836v4.png" /&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/6114.pastedimage1767966893567v5.png" /&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/6114.pastedimage1767966900314v6.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;You can find an overview of all available Badges&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/digital-badges.html" rel="noopener noreferrer" target="_blank"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;For those craving more, Cadence always opens its doors for &amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/deliverymethod-classroom.html" rel="noopener noreferrer" target="_blank"&gt;&amp;quot;live training&amp;quot;&lt;/a&gt; sessions, &amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/deliverymethod-virtual.html" rel="noopener noreferrer" target="_blank"&gt;&amp;quot;Blended&amp;quot;&lt;/a&gt;&amp;nbsp;training and flexible &lt;a href="https://www.cadence.com/en_US/home/training/deliverymethod-online.html" rel="noopener noreferrer" target="_blank"&gt;online options&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;span style="color:#800000;"&gt;Find Some of Our Most Popular Online Trainings Here:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86070.html" rel="noopener noreferrer" target="_blank"&gt;SystemVerilog Accelerated Verification with UVM&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86305.html" rel="noopener noreferrer" target="_blank"&gt;Digital IC Design Fundamentals&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/82110.html" rel="noopener noreferrer" target="_blank"&gt;Verilog Language and Application&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;And Here Is Some More Interesting News from 2025&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Perhaps the most thrilling development was the launch of&lt;a href="https://www.cadence.com/en_US/home/training/accelerated-learning.html" rel="noopener noreferrer" target="_blank"&gt; Accelerated Learning&lt;/a&gt;. Imagine &lt;a href="https://community.cadence.com/cadence_blogs_8/b/cadence-support/posts/acceleratedlearning_2d00_part-2" rel="noopener noreferrer" target="_blank"&gt;skipping what you already know&lt;/a&gt;, diving straight into what matters most, and reaching your goals faster than ever before. &lt;a href="https://www.cadence.com/content/cadence-www/global/en_US/home/multimedia.html/content/dam/cadence-www/global/en_US/videos/training/cadence-accelerated-learning.mp4?mkt_tok=MDcwLUJJSS0yMDYAAAGb-aQ5p8hh6iBeaTkcc8LD0LuCVsL8k9e5lxhss_VxT6EFlO6ewy5_QJyHr8JlTWn6k1FtlG8yBvPszcBush5U5LrE9u8YHmO-xkqzFndu4dKShA" rel="noopener noreferrer" target="_blank"&gt;That dream became reality end of 2024&lt;/a&gt;, this option has been added to many more trainings during 2025, setting the stage for even more innovation in 2026.&amp;nbsp; A small choice of trainings for which this option is available:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size:inherit;"&gt;&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86218.html" rel="noopener noreferrer" target="_blank"&gt;Xcelium Simulator&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:inherit;"&gt;&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86136.html" rel="noopener noreferrer" target="_blank"&gt;Cadence RTL-to-GDSII Flow&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:inherit;"&gt;&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86330.html" rel="noopener noreferrer" target="_blank"&gt;Functional Safety Implementation and Verification with Midas&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:inherit;"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86379.html" rel="noopener noreferrer" target="_blank"&gt;Stratus-HLS Basic Training&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;Thank you for your incredible commitment! Let&amp;rsquo;s make the upcoming year a time of bold ideas and meaningful achievements together.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;Contact Us&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;For any questions, general feedback, or even if you want to suggest a future blog topic please leave a comment in the&amp;nbsp;&amp;nbsp;&lt;a href="https://community.cadence.com/cadence_technology_forums/f/functional-verification" rel="noopener noreferrer" target="_blank"&gt;Cadence Community Forum&lt;/a&gt;. You can also&amp;nbsp;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv" rel="noopener noreferrer" target="_blank"&gt;subscribe&lt;/a&gt;&amp;nbsp;to&amp;nbsp;the blog series to stay up to date about new trainings and training videos&amp;nbsp;available at our &lt;a href="https://www.cadence.com/en_US/home/training.html" rel="noopener noreferrer" target="_blank"&gt;Cadence Training&amp;nbsp;&lt;/a&gt;site.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#800000;font-size:150%;"&gt;&lt;strong&gt;Related Blogs&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/cadence-support/posts/frequently-asked-troubleshooting-questions-on-cadence-ask" rel="noopener noreferrer" target="_blank"&gt;Frequently Asked Troubleshooting Questions on Cadence ASK&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/cadence-support/posts/news-from-cadence-ask-portal" rel="noopener noreferrer" target="_blank"&gt;News from Cadence ASK Portal&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/di/posts/race-to-first-pass-rtl-improve-ppa-targets-using-stratus-hls" rel="noopener noreferrer" target="_blank"&gt;Race to First-Pass RTL: Improve PPA targets using Stratus&lt;span class="emoticon" data-url="https://community.cadence.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&amp;nbsp;HLS&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/don-t-let-bugs-slip-through-your-rtl-design-simulation-and-beyond-a-balanced-a" rel="noopener noreferrer" target="_blank"&gt;Don&amp;rsquo;t Let Bugs Slip Through Your RTL Design!&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/training-insight--unlocking-the-power-of-xcelium-simulator-a-deep-dive-into-digital-design-verification" rel="noopener noreferrer" target="_blank"&gt;Training Insight: Unlocking the Power of the Xcelium Logic Simulator&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/smarter-chips-faster-checks-gravityxr-leading-the-xr-verification-shift" rel="noopener noreferrer" target="_blank"&gt;Smarter Chips, Faster Checks: GravityXR Leading the XR Verification Shift&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/corporate-news/posts/faster-and-intelligent-customer-case-resolution-with-cadence-ask-portal" rel="noopener noreferrer" target="_blank"&gt;Faster and Intelligent Customer Case Resolution with Cadence ASK Portal&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363947&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/digital%2bbadge">digital badge</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/live%2btraining">live training</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/blended%2btraining">blended training</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/Protium">Protium</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/SVG">SVG</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/accelerated%2blearning">accelerated learning</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verisium">verisium</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Jasper">Jasper</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/webinar">webinar</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/training%2bbytes">training bytes</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Stratus">Stratus</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ask">ask</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/RAKs">RAKs</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/tcl">tcl</category></item><item><title>Virtual Platforms Keynote at RAPIDO 2026</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/virtual-platforms-keynote-at-rapido-2026</link><pubDate>Fri, 16 Jan 2026 17:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:7c6c921b-480c-4151-8766-b20d51408358</guid><dc:creator>JEngblom</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Jakob Engblom from Cadence will be presenting a keynote at the &lt;a href="https://rapidoworkshop.github.io/"&gt;RAPIDO&lt;/a&gt; (Rapid Simulation and Performance Evaluation for Design) workshop at the &lt;a href="http://www.hipeac.net/conference"&gt;HiPEAC 2026&lt;/a&gt; conference. The keynote title is &amp;quot;Virtual Platforms for System Architecture, Development, and Test&amp;quot; and it will draw on his long experience with virtual platforms in automotive and embedded.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:1000px;" alt=" " src="https://community.cadence.com/resized-image/__size/2000x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0385.2026_2D00_engblom_2D00_rapido_2D00_cadence_2D00_cover.png" /&gt;&lt;/p&gt;
&lt;p&gt;Virtual platforms, virtual prototypes, and adjacent simulation solutions are used throughout the life cycle of a system. From initial architecture, through to hardware and software implementation, validation, and eventually long-term maintenance.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:auto;max-width:1000px;" alt=" " src="https://community.cadence.com/resized-image/__size/2000x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0385.2026_2D00_rapido_2D00_themes_2D00_on_2D00_hex_2D00_grid.png" /&gt;&lt;/p&gt;
&lt;p&gt;Different abstractions and model types will be used at different times for different purposes. In general, solving a particular problem will involve integrating a range of models from different domains. The real world is complex and multifaceted, and our simulation solutions will necessarily reflect this. There is no single true model that makes sense across the entire life cycle.&lt;/p&gt;
&lt;p&gt;The RAPIDO workshop has been running since 2009, and this year&amp;#39;s edition takes place as part of the &lt;span&gt;&lt;a href="http://www.hipeac.net/conference"&gt;HiPEAC 2026&lt;/a&gt;&lt;/span&gt; conference in Krak&amp;oacute;w, Poland, from January 26 to 28. RAPIDO is on January 27. See you there!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363957&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/verification">verification</category></item><item><title>PSS Randomization Semantics and Numeric Expressions</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/pss-randomization-semantics-and-numeric-expressions</link><pubDate>Thu, 15 Jan 2026 23:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4c298052-2625-411c-8aa8-7bd5b0f87660</guid><dc:creator>OK202502201742</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img class="align-left" style="float:left;max-height:95px;max-width:200px;" alt=" " src="https://community.cadence.com/resized-image/__size/400x190/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6862.logo_2D00_portable_2D00_stimulus_2D00_200.png" /&gt;&lt;/p&gt;
&lt;p&gt;Understanding how &lt;a href="https://www.accellera.org/downloads/standards/portable-stimulus"&gt;PSS&lt;/a&gt; defines numeric expressions&amp;mdash;and how Perspec supports these rules is important when writing constraints that involve mixed types, limited bit widths, or signedness to make sure you get exactly what you meant and might save you debugging time.&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;The definition of numeric expression semantics is in the PSS 3.0 LRM, sections 8.7 (Expression Evaluation) and 8.8 (Type Conversion Rules). These rules precisely define how operand bit widths are determined, how signedness is propagated, and how overflows are handled.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Perspec&amp;rsquo;s support for the PSS &lt;/span&gt;&lt;i&gt;&lt;span data-contrast="auto"&gt;randomize&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; (procedural randomization) adheres to these standard rules. In other cases, support does not yet fully conform to the PSS LRM, but future updates will bring it into alignment.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;The following examples illustrate how PSS randomization semantics work, how Perspec applies them today in PSS &lt;/span&gt;&lt;i&gt;&lt;span data-contrast="auto"&gt;randomize, &lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt;and how users can make their intent explicit when needed.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;All the examples in this blog can be just copied into a PSS file and solved by Perspec.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jf0vvp4h0"&gt;&lt;strong&gt;Example 1: Operands with a Specific Bit Width &lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;This example demonstrates how PSS evaluates expressions involving operands of the same type when that type has a specific bit width.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div&gt;import&amp;nbsp;std_pkg::*;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;component&amp;nbsp;pss_top{&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;struct S {&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;rand&amp;nbsp;bit[2] a, b,&amp;nbsp;c;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;}&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;action test {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;exec&amp;nbsp;post_solve&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;S&amp;nbsp;my_struct;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;// Call&amp;nbsp;randomize&amp;nbsp;explicitly on the struct instance&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;my_struct.a&amp;nbsp;+&amp;nbsp;my_struct.b&amp;nbsp;==&amp;nbsp;my_struct.c;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;my_struct.a&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;my_struct.b&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;}&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Print the randomized values&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print (&amp;quot;Randomized values: a=%d, b=%d, c=%d\n&amp;quot;,my_struct.a,&amp;nbsp;my_struct.b,&amp;nbsp;my_struct.c);&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;According to the PSS standard rules:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="2" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The expression a + b is evaluated using the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;maximum&amp;nbsp;bit width of its operands&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;.&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="2" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Since both a and b are&amp;nbsp;bit[2], the result is also&amp;nbsp;bit[2].&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="2" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Arithmetic overflow is therefore possible and well-defined.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;For example:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="8" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;a = 3, b = 3 &amp;rarr; a + b = 6, truncated to 2 in 2 bits.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;When this&amp;nbsp;struct&amp;nbsp;is randomized&amp;nbsp;with&amp;nbsp;PSS&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="auto"&gt;randomize&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt;, Perspec applies&amp;nbsp;exactly&amp;nbsp;these standard semantics. As a result, valid solutions include combinations such as:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="9" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;a=3 b=3 c=2&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="9" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;a=2 b=3 c=1&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="9" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;a=3 b=1 c=0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;If&amp;nbsp;your&amp;nbsp;intent is instead to treat the computation as a wider (for example, 32-bit) operation, this can be made explicit using a cast:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.a&amp;nbsp;+&amp;nbsp;my_struct.b&amp;nbsp;==&amp;nbsp;(bit[32])my_struct.c;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.a&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.b&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;}//randomize&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Or, more explicitly:&amp;nbsp;&lt;/p&gt;
&lt;div&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(bit[32])&amp;nbsp;my_struct.a&amp;nbsp;+&amp;nbsp;(bit[32])my_struct.b&amp;nbsp;==&amp;nbsp;(bit[32])my_struct.c;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.a&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.b&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;}//randomize&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span data-contrast="auto"&gt;By making the bit width explicit, the constraint behavior becomes unambiguous and independent of automatic type propagation rules.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jf104j6v2"&gt;Example 2: Mixed Bit Widths in an Expression&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Consider a constraint that mixes operands of different bit widths:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;import&amp;nbsp;std_pkg::*;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;component&amp;nbsp;pss_top{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;struct S {&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;rand&amp;nbsp;bit[32] a,&amp;nbsp;b;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;rand bit&amp;nbsp;c;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;action test {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;exec&amp;nbsp;post_solve&amp;nbsp;{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;S&amp;nbsp;my_struct;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;// Call&amp;nbsp;randomize&amp;nbsp;explicitly on the struct instance&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;my_struct.a&amp;nbsp;+&amp;nbsp;my_struct.b=&amp;nbsp;my_struct.c;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&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&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;// Print the randomized values&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;print (&amp;quot;Randomized values: a=%d, b=%d, c=%d\n&amp;quot;,my_struct.a,&amp;nbsp;my_struct.b,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_struct.c);&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Per the PSS standard:&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;The expression is evaluated using the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;largest bit width among the operands&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;, which is 32 bits.&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="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The result of a + b is therefore a 32-bit value.&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;The 1-bit variable c must match the truncated result (either 0 or 1).&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;When this&amp;nbsp;struct&amp;nbsp;is randomized with&amp;nbsp;PSS&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="auto"&gt;randomize&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt;, Perspec correctly produces values such as:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="10" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;large 32-bit values for a and b&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="10" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;c equal to the least significant bit of their sum&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;If&amp;nbsp;your&amp;nbsp;intent&amp;nbsp;is&amp;nbsp;to restrict a and b to small values (for example, to mimic a narrower arithmetic model), this intent should be expressed explicitly:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (bit[32])&amp;nbsp;my_struct.a&amp;nbsp;+ (bit[32])my_struct.b&amp;nbsp;== (bit[32])my_struct.c;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.a&amp;nbsp; in [0..1];&amp;nbsp;&lt;/div&gt;
&lt;div&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;my_struct.b&amp;nbsp; in [0..1];&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;This makes the&amp;nbsp;constraint&amp;nbsp;semantics clear and avoids relying on implicit truncation effects.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jf1045vt1"&gt;Example 3: Signed Variables and Unsigned Range Bounds&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;This example illustrates how&amp;nbsp;signedness&amp;nbsp;is&amp;nbsp;determined&amp;nbsp;in set membership constraints.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;import&amp;nbsp;std_pkg::*;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;component&amp;nbsp;pss_top{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;struct S {&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;rand int&amp;nbsp;a;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;action test {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;exec&amp;nbsp;post_solve&amp;nbsp;{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;S&amp;nbsp;my_struct;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;// Call&amp;nbsp;randomize&amp;nbsp;explicitly on the struct instance&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;my_struct.a&amp;nbsp;in [0..0xffffffff];&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;}//randomize&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;// Print the randomized values&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;print (&amp;quot;Randomized values: a=%d&amp;quot;,&amp;nbsp;my_struct.a);&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;According to the PSS rules:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="6" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The presence of an&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;unsigned operand&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;(the literal 0xffffffff) causes the entire expression to be evaluated as unsigned.&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="6" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The signed variable a is therefore treated as an unsigned 32-bit value for the purpose of this constraint.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;As a result:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="11" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Both positive and negative values of a&amp;nbsp;may&amp;nbsp;satisfy the constraint, because negative values become large unsigned numbers.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;If&amp;nbsp;your&amp;nbsp;intent is to&amp;nbsp;restrict a to non-negative values, this must be&amp;nbsp;stated&amp;nbsp;explicitly:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_struct.a&amp;nbsp;in [0..0xffffffff];&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_struct.a&amp;gt;=0;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;}//randomize&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1jf105jsp3"&gt;&lt;span&gt;&lt;/span&gt;Example 4: Range Lists with Mixed Signed and Unsigned Bounds&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Consider a range with mixed signed and unsigned literals:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;import&amp;nbsp;std_pkg::*;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;component&amp;nbsp;pss_top{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;struct S {&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;rand int&amp;nbsp;a;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;action test {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;exec&amp;nbsp;post_solve&amp;nbsp;{&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;S&amp;nbsp;my_struct;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;// Call&amp;nbsp;randomize&amp;nbsp;explicitly on the struct instance&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;my_struct.a&amp;nbsp;in&amp;nbsp;[-256..0xff];&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;// Print the randomized values&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:90px;"&gt;&lt;span data-contrast="auto"&gt;print (&amp;quot;Randomized values: a=%d\n&amp;quot;,&amp;nbsp;my_struct.a);&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;}&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;According to the PSS rules:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="4" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The presence of the unsigned literal 0xff causes all operands to be treated as unsigned.&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="4" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The lower bound -256 becomes 0xffffff00 when interpreted as unsigned.&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="4" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;The resulting range is empty, since the lower bound is greater than the upper bound.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;An empty range produces a contradiction during procedural randomization.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;To express the intended signed range, the bounds should be made explicitly signed:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;randomize&amp;nbsp;my_struct&amp;nbsp;with {&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_struct.a&amp;nbsp;in [-256..(int)0xff];&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span data-contrast="auto"&gt;}//randomize&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;This ensures that all operands are treated consistently as signed values.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jf106l8l4"&gt;Summary and Best Practices&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PSS defines precise rules for numeric expression evaluation during randomization.&amp;nbsp;Perspec&amp;rsquo;s&amp;nbsp;support for&amp;nbsp;PSS&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="auto"&gt;randomize&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;(procedural&amp;nbsp;randomize)&amp;nbsp;follows these standard semantics, enabling predictable behavior that aligns with the LRM.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;However, when expressions involve&amp;nbsp;mixed bit widths,&amp;nbsp;mixed&amp;nbsp;signedness,&amp;nbsp;or implicit&amp;nbsp;type&amp;nbsp;promotion,&amp;nbsp;the resulting behavior may not always be intuitive at first glance.&amp;nbsp;Therefore, it is recommended to follow the following best practices:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="5" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Make bit widths explicit when overflow or truncation matters.&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="5" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Use casts to control&amp;nbsp;signedness&amp;nbsp;deliberately.&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="5" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Add explicit constraints when you want to restrict value ranges.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;By expressing intent clearly in the code, you avoid relying on implicit rules and ensure that your constraints behave exactly as intended during PSS randomization.&lt;/span&gt;&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;Cadence Perspec System Verifier &lt;/a&gt;and how it supports PSS.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363956&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/pss%2b3-0">pss 3.0</category><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/perspec%2bsystem%2bverifier">perspec system verifier</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/pss">pss</category></item><item><title>Don’t Let Bugs Slip Through Your RTL Design!</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/don-t-let-bugs-slip-through-your-rtl-design-simulation-and-beyond-a-balanced-a</link><pubDate>Tue, 16 Dec 2025 10:22:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4f249035-bdc3-40ba-81fd-004692e0d487</guid><dc:creator>Ankita Soni</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;To validate your RTL design, are you still relying solely on simulation? Is there anything else that needs to be done to validate it further?&lt;/p&gt;
&lt;p&gt;Simulation has been a cornerstone of hardware verification for decades. Its ability to generate random stimuli and validate RTL across diverse scenarios has helped engineers uncover countless issues and ensure robust designs. However, simulation is inherently scenario-driven, which means certain rare corner cases can remain undetected despite extensive testing.&lt;/p&gt;
&lt;p&gt;This is where formal verification adds significant value. Formal doesn&amp;rsquo;t just simply mathematically analyze the entire state space of your design; it checks every possible value and transition your design could ever encounter, providing exhaustive coverage that complements simulation. No corner case is left unchecked. No bug is left hiding. Together, they form a powerful verification strategy.&lt;/p&gt;
&lt;h2&gt;Why Formal Matters in Modern Validation&lt;/h2&gt;
&lt;p&gt;Any modern validation effort needs to take advantage of formal verification, where the apps in the Jasper Formal Verification Platform analyze a mathematical model of RTL design and find corner-case design bugs without needing test vectors. This can add value across the design and validation cycle. Let&amp;rsquo;s look at some standout Jasper applications: Jasper&amp;rsquo;s Superlint and Visualize can help designers to quickly find potential issues or examine RTL behaviors without formal expertise.&amp;nbsp;Jasper&amp;rsquo;s FPV (Formal Property Verification) allows formal experts to create a formal environment and signoff on the IP, delivering the highest design quality and better productivity than doing block level simulation. Jasper&amp;rsquo;s C2RTL is used to exhaustively verify critical math functions in CPUs, GPUs, TPUs, and other AI accelerator chips.&lt;/p&gt;
&lt;p&gt;Jasper enables thorough validation in various targeted domains, including low power, security, safety, SoC integration, and high-level synthesis verification.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The core benefit of formal exhaustive analysis is its ability to explore all scenarios, especially ones that are hard for humans to anticipate and create tests for in simulation.&amp;rdquo; &lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Why Formal? Why Now?&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s why formal verification matters now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No more test vectors or random stimulus.&lt;/strong&gt;&amp;nbsp;Formal, mathematically, and automatically explores all reachable states; verification can start as soon as RTL is available without the need to create a simulation testbench.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Powerful for exploring corner-case bugs&lt;/strong&gt;. Exhaustive formal analysis can catch corner case bugs that escape even the most creative simulation testbenches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Early design bring-up made easy.&lt;/strong&gt; Validate critical properties and interfaces before your full system is ready.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging is a breeze.&lt;/strong&gt; When something fails, formal provides a precise counterexample, often with the shortest trace, eliminating the need for endless log hunting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Perfect partnership with simulation.&lt;/strong&gt; Simulation and formal aren&amp;rsquo;t rivals; they are partners&lt;strong&gt;.&lt;/strong&gt; Use simulation for broad system-level checks, and Formal for exhaustive property checking and signoff of critical blocks. Merge formal and simulation coverage for complete verification signoff.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Not Sure Where to Start? We&amp;rsquo;ve Got You Covered!&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re new to formal, start with &lt;strong&gt;Cadence Online training&lt;/strong&gt; like the &lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86361.html"&gt;Jasper Formal Fundamentals Training&lt;/a&gt;. Whether you&amp;rsquo;re a designer, verification engineer, or just curious about formal, this course gives you hands-on experience with formal verification.&lt;/p&gt;
&lt;p&gt;After taking the Jasper Formal Fundamentals Course, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build a complete formal verification flow from spec to signoff.&lt;/li&gt;
&lt;li&gt;Write efficient, reusable SVA properties for formal tools.&lt;/li&gt;
&lt;li&gt;Set up, run, and analyze formal results with confidence.&lt;/li&gt;
&lt;li&gt;Understand all proof outcomes and debug counterexamples&lt;/li&gt;
&lt;li&gt;Handle formal complexities.&lt;/li&gt;
&lt;li&gt;Leverage formal coverage basics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This course gives you hands-on experience with formal verification labs.&amp;nbsp;&lt;span&gt;And don&amp;#39;t forget to obtain your&amp;nbsp;&lt;/span&gt;&lt;a href="https://www.cadence.com/en_US/home/training/become-cadence-certified.html#sdv" rel="noopener noreferrer" target="_blank"&gt;digital badge&lt;/a&gt;&lt;span&gt;&amp;nbsp;after completing the training!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:172px;max-width:172px;" alt=" " height="172" src="https://community.cadence.com/resized-image/__size/344x344/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/2055.pastedimage1765875358829v1.png" width="172" /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img style="max-height:172px;max-width:172px;" alt=" " height="172" src="https://community.cadence.com/resized-image/__size/344x344/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/2055.pastedimage1765875577173v3.png" width="172" /&gt;&lt;/p&gt;
&lt;h2&gt;Jasper University Page: Supercharge Your Formal Skills&lt;/h2&gt;
&lt;p&gt;Explore &lt;a href="https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O3w000009EwhCEAS&amp;amp;pageName=ArticleContent"&gt;Jasper University Page&lt;/a&gt;, the ultimate hub for expert-led training, hands-on labs, and industry-recognized certification from Cadence!&lt;/p&gt;
&lt;h2&gt;Related Trainings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/82165.html"&gt;SystemVerilog Assertions Training&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cadence.com/en_US/home/training/all-courses/86268.html"&gt;Jasper Formal Expert Training&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=1363923&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/FPV">FPV</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Formal%2bAnalysis">Formal Analysis</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/formal">formal</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/SoC">SoC</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Jasper%2bApps">Jasper Apps</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/SVA">SVA</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/assertions">assertions</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/simulation">simulation</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Formal%2bverification">Formal verification</category></item><item><title>Virtualization, Collaboration, and Software at SDV Europe</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/virtualization-collaboration-and-software-at-sdv-europe</link><pubDate>Mon, 15 Dec 2025 20:30:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:acc5048a-b4e9-46c8-a3bf-4c15e6fd64b6</guid><dc:creator>JEngblom</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;a href="https://www.software-defined-vehicles-conference.com"&gt;SDV Europe conference&lt;/a&gt; took place in Berlin (Germany) last week. It was a meeting of technical experts and business leaders from all over Europe, focusing on the current state of &lt;strong&gt;software-defined vehicle (SDV)&lt;/strong&gt; technology and applications. The conference mixed talks with structured interactive workshops, providing a platform for the exchange of ideas and plenty of time for networking and discussions. It was great fun!&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/3021.intro_2D00_image_2D00_as_2D00_cover_2D00_image_2D00_for_2D00_cadence.png" /&gt;&lt;/p&gt;
&lt;p&gt;The most important observation is that &lt;strong&gt;SDV is not just a buzzword.&lt;/strong&gt; As a speaker said, &amp;quot;The current message for SDV is &amp;#39;&lt;strong&gt;Let&amp;#39;s make it real.&lt;/strong&gt;&amp;#39;&amp;quot; And making it real requires changes to technology and tools&amp;mdash;as well as processes and organizations.&lt;/p&gt;
&lt;h2 id="mcetoc_1jchqomsj0"&gt;Collaboration&lt;/h2&gt;
&lt;p&gt;One thing that is clear is that SDV will require much &lt;strong&gt;closer collaboration&lt;/strong&gt; between suppliers and customers. Where traditionally companies would buy a complete point solution for a specific function or subsystem as a physically installable unit, with SDV, the emphasis shifts to software and its deployment on shared physical computers. This changes how deliveries and deliverables are handled&amp;mdash;moving towards something much more like traditional IT.&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/3021.collaboration-models.png" /&gt; &lt;br /&gt;SDV also requires &lt;strong&gt;faster collaboration&lt;/strong&gt;. In a traditional flow, based on requirements and deliverables, making a change to a component can take a considerable amount of time as bureaucracy and project planning get in the way. It is not unusual to hear about software fixes taking many months to get delivered. That does not work in an SDV world.&lt;/p&gt;
&lt;p&gt;Instead, as illustrated above, a more agile model can be used where a supplier sends a series of deliverables to the customer and gets feedback to guide the next delivery. This is better, but it still suffers from some friction. In the extreme, we might see companies working together in shared source code repositories.&lt;/p&gt;
&lt;p&gt;Note that the fact that we are talking about &lt;strong&gt;collaboration between companies&lt;/strong&gt; for SDV applications shows the maturity of SDV. Successful SDV projects used to require vertical integration inside a single OEM, but today SDV systems are being built from components from both commercial vendors and incorporating open-source software.&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/1362.open_2D00_source_2D00_collaboration.png" /&gt;&lt;/p&gt;
&lt;p&gt;Indeed, &lt;strong&gt;open source&lt;/strong&gt; is another hot topic in the automotive industry. Several open-source projects aim to build non-differentiating common software bases for the SDV. However, using open-source code in vehicles requires very careful consideration of licenses.&lt;/p&gt;
&lt;h2 id="mcetoc_1jchqpem41"&gt;Virtualization&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://vlabworks.com/"&gt;Virtualization&lt;/a&gt;&lt;/strong&gt; for software development and testing is a key supporting technology for SDVs. You cannot depend on hardware rigs for software testing&amp;mdash;they are never available in sufficient amounts, or early enough, or flexible enough. Automotive software developers need to be able to run and test code as soon as it is built, and this can only be realized by using virtualization, i.e., by simulating both the computer systems as well as the environment in which it is operating.&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/1362.ci_2D00_virtual.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://vlabworks.com/"&gt;VLAB&lt;/a&gt;&lt;/strong&gt; is commonly used to virtualize the ECU hardware for such setups, allowing the target software to run as-is, interacting with a simulation of the vehicle and the world in which it operates. The virtual test rigs complement the physical test rigs, allowing testing at scale without using physical test rigs except for final testing before release.&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/1362.virtualization_2D00_network.png" /&gt;&lt;/p&gt;
&lt;p&gt;In addition, it is not uncommon to virtualize a network of ECUs&amp;mdash;for example, zonal controllers alongside their geographical control nodes. Or zonal controllers connected to the vehicle&amp;#39;s main &amp;quot;HPC&amp;quot; nodes. Or multiple zones. Or an old-school ECU-rich network. Whatever the architecture of the vehicle happens to be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Virtualization&lt;/strong&gt; and &lt;strong&gt;collaboration&lt;/strong&gt; also combine nicely with &lt;strong&gt;cloud-based development &lt;/strong&gt;environments. It is much easier to collaborate on software when new software builds can be tested immediately in the same environment as the build&amp;mdash;and using pure software virtualization and simulation definitely makes that much easier than relying on physical hardware test rigs sitting in a lab somewhere.&lt;/p&gt;
&lt;h2 id="mcetoc_1jchqqcmh2"&gt;Artificial Intelligence&lt;/h2&gt;
&lt;p&gt;There were several talks and discussions on how &lt;strong&gt;AI&lt;/strong&gt; is used to &lt;strong&gt;implement vehicle features&lt;/strong&gt;. For example, using AI to create smart&lt;strong&gt; adaptive and learning user interfaces&lt;/strong&gt;, where the vehicle learns the habits and preferences of the driver/user and, as a result, gets more personalized over time.&lt;/p&gt;
&lt;p&gt;AI is also playing a huge role in how the industry is implementing &lt;strong&gt;autonomous driving&lt;/strong&gt;. The original idea was to explicitly program rules into the software stack, but that has been replaced by learning approaches&amp;mdash;i.e., teaching AI systems how to drive by example.&lt;/p&gt;
&lt;p&gt;Finally, AI is a&lt;strong&gt; tool for software developers&lt;/strong&gt; that creates automotive software, everything from standard copilot approaches to methods that create tests from natural-language specifications. Automotive software development can clearly benefit from developments in the &amp;quot;IT&amp;quot; world at large&amp;mdash;keeping in mind the safety requirements that are much stronger in automotive and aerospace compared to your average web application.&lt;/p&gt;
&lt;h2 id="mcetoc_1jchqr05k3"&gt;Unexpected Discoveries&lt;/h2&gt;
&lt;p&gt;Any good conference will bring up something novel or interesting or unexpected. In this case, my award for &amp;quot;most unexpected technology&amp;quot; goes to &lt;strong&gt;tire intelligence&lt;/strong&gt;. The key idea is that the tires are the only part of the car that touch the road&amp;mdash;and as a result, they can tell you a lot about what is going on.&lt;/p&gt;
&lt;p&gt;For example, the current actual friction between each tire and the surface is very useful for ABS brakes and other safety features. It can be done without &lt;strong&gt;tire-mounted sensors (TMS)&lt;/strong&gt;, but with TMS, much more precision and many more features are possible. Even a simple thing like tracking the total runtime and wear on a tire helps maintain safety (and enable predictive maintenance for fleets). Software is eating the world&amp;mdash;and reaching into every corner of the car, including something so obviously physical as tires.&lt;/p&gt;
&lt;p&gt;As an aside, a TMS is the epitome of an automotive-grade electronic component. They need to be reliable in extreme cold and heat, and the batteries inside need to last as long as the tire itself. Nobody would accept having to charge the car tires every week&amp;hellip; but we can build these things today!&lt;/p&gt;
&lt;h2 id="mcetoc_1jchrsadh4"&gt;What Can You Do with an API?&lt;/h2&gt;
&lt;p&gt;Implementing software-defined vehicles typically involves defining various hardware-independent APIs and accompanying middleware solutions. But which APIs should be made available? And how can the fundamental safety of a vehicle be guaranteed and certified when over-the-air updates and app stores add new software to the existing fleet?&lt;/p&gt;
&lt;p&gt;As an example, we discussed the concept of a motion API. In theory, such an API could let an app control where the car is going. It would allow new functionality to be delivered as pure software (just like we have physical aftermarket additions today). One obvious application could be an automated parking app&amp;mdash;give the app access to cameras and other sensors, and it will take care of parking your car for you. This already exists, but if we use the &amp;quot;car is a smartphone on wheels&amp;quot; analogy, it seems that there is always a market for slightly better versions of standard functions.&lt;/p&gt;
&lt;p&gt;A motion API could also be used for more unorthodox purposes. Imagine a novelty app that lets your car follow you as you walk, like a very large puppy. Big fluffy ears and giant bug eyes are included in the package! It could also enable slightly mad applications, such as an app that burns donuts for you autonomously.&lt;/p&gt;
&lt;p&gt;Then reality hit&amp;mdash;what would an OEM actually allow, and what would they be legally able to allow? The smartphone analogy is quite useful here, too. While applications can make use of the camera and microphone of a phone, access is usually controlled to some extent. However, when it comes to driving the wireless interfaces, applications are only allowed access to very high-level APIs that maintain the correct functionality of the wireless certification on the phone.&lt;/p&gt;
&lt;p&gt;On the topic of software updates, it is also worth noting that there must be room for software growth in the hardware. Memory and processing capacity need to be over-provisioned compared to the needs of the release software, and it makes perfect sense to ship a car with sensors that will only be used in later software releases.&lt;/p&gt;
&lt;p&gt;Such discussions are part of the fabric and point of conferences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about Cadence &lt;a href="https://vlabworks.com/"&gt;VLAB&lt;/a&gt; and &lt;a href="https://www.cadence.com/en_US/home/solutions/automotive-solution.html"&gt;automotive solutions&lt;/a&gt;.&lt;/strong&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/4186.jakob_2D00_with_2D00_f1_2D00_car_2D00_on_2D00_floor.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363921&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/software_2D00_defined%2bvehi">software-defined vehi</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/software%2bdevelopment">software development</category></item><item><title>What's New in PSS 3.0? Key Additions to the Portable Stimulus Standard</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/what-s-new-in-pss-3-0-key-additions-to-the-portable-stimulus-standard</link><pubDate>Mon, 15 Dec 2025 05:41:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4ba342b1-82f6-483a-8ac7-d4ab42ceffa3</guid><dc:creator>OK202502201742</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;a href="https://www.accellera.org/downloads/standards/portable-stimulus"&gt;Portable Stimulus Standard&lt;/a&gt; (PSS) Language Reference Manual (LRM) has evolved significantly since its introduction by Accelera in 2018. It has become a powerful language for creating portable and reusable stimulus specifications. The PSS LRM has matured to meet the complex needs of verification workflows while also incorporating essential language general-purpose elements like a robust type system and clear semantics.&lt;/p&gt;
&lt;p&gt;This blog explores the additions of the &lt;a href="https://www.accellera.org/images/downloads/standards/pss/Portable_Test_Stimulus_Standard_v3.0.pdf"&gt;PSS 3.0&lt;/a&gt;, released in August 2024, through these two parallel axes, focusing on Cadence Perspec support aspects and highlighting relevant planned additions for the next LRM version: PSS 3.1.&lt;/p&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupip"&gt;Language General-Purpose Additions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupiq"&gt;Collection of reference types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupir"&gt;Comments in template blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupis"&gt;&amp;ldquo;Sub-string operator&amp;rdquo; and string methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupit"&gt;Const parameters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupiu"&gt;Portable and Reusable Stimulus Aspects&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupiv"&gt;Address space group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupi10"&gt;Yielding control with cooperative multitasking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupi11"&gt;Enhanced support for platform qualifiers on function prototype declarations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupi12"&gt;Behavioral Coverage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#mcetoc_1jajkiupi13"&gt;PSS 3.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jajkiupip"&gt;Language General-Purpose Additions&lt;/h2&gt;
&lt;h3 id="mcetoc_1jajkiupiq"&gt;Collection of Reference Types&lt;/h3&gt;
&lt;p&gt;PSS reference types are described in PSS 2.1 already for special modeling types such as components and actions. In &lt;strong&gt;PSS 3.0&lt;/strong&gt; they get additional enhancement by the ability to declare collections of references.&amp;nbsp; These are polymorphic, meaning that, for example, the same list&amp;lt;ref C&amp;gt; can hold references to component instances of different subtypes of C. The main usage is for storing in advance references to register components and doing read/write operations on them within the exec body.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;array&amp;lt;&lt;em&gt;ref&lt;/em&gt; C,3&amp;gt;&amp;nbsp;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;list&amp;lt;ref C&amp;gt;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; array&amp;lt;list&amp;lt;array&amp;lt;&lt;em&gt;ref&lt;/em&gt; C,2&amp;gt;&amp;gt;,3&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perspec&lt;/strong&gt; supports collections (lists and arrays, including multi-dimensional) of component references from 24.06.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;PSS 3.1&lt;/strong&gt; it is expected that it will be possible to declare fields of reference types and also fields of collections of ref types in actions. This approach enhances the user&amp;#39;s flexibility by enabling the selection of registers at solve time.&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupir"&gt;Comments in Template Blocks&lt;/h3&gt;
&lt;p&gt;Target template exec and function blocks have been supported since PSS 1.0. Previously, all code within the target template was generated. However, there are scenarios where users may want to exclude certain code from generation. The main reason for this is the presence of mustache expressions that users prefer not to evaluate in specific cases.&lt;/p&gt;
&lt;p&gt;To address this need, PSS 3.0 introduces the ability to differentiate between code that should be included in the generated output and code that should remain excluded. This is achieved by using &lt;em&gt;{#..#} &lt;/em&gt;comments inside the template exec block.&lt;/p&gt;
&lt;p&gt;See the following example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;action my_action {&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;exec declaration C = &amp;quot;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//This comment will appear in the target code.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;{#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; This comment code.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;#}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;Perspec&lt;/strong&gt; has been supporting target template exec code since its early days and supports the new enhancement of &lt;em&gt;{#..#}&lt;/em&gt; comments since version 24.11.&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupis"&gt;&amp;ldquo;Sub-String Operator&amp;rdquo; and String Methods&lt;/h3&gt;
&lt;p&gt;String data type exists in the PSS LRM from version 1.0. In PSS 2.1, string formatting capability was added (similar to C printf()). Strings are usually used for messages and file content, but also for generating statements for the generated C code. However, de facto, it was very hard to use them till PSS 3.0.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;PSS 3.0&lt;/strong&gt;&amp;nbsp;the sub-string operator and a few string methods (such as &lt;em&gt;size(), find(), split(),&lt;/em&gt; etc.) were added, as well &lt;em&gt;join&lt;/em&gt;() and &lt;em&gt;str_from_chars&lt;/em&gt;(). &amp;nbsp;&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;string str = &amp;quot;hello Perspec&amp;quot;;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; int size_result = str.size(); // 13&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; list&amp;lt;int&amp;gt; find_all_result = str.find_all(&amp;quot;e&amp;quot;); // {1; 7; 11}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; int find_last_result = str.find_last(&amp;quot;e&amp;quot;, 8); // 7&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; string upper_result = str.upper(); // &amp;quot;HELLO PERSPEC&amp;quot;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; string lower_result = str.lower(); // &amp;quot;hello perspec&amp;quot;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; list&amp;lt;string&amp;gt; split_result = str.split(&amp;quot; &amp;quot;); // {&amp;quot;hello&amp;quot;; &amp;quot;Perspec&amp;quot;}&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; list&amp;lt;bit[8]&amp;gt; chars_result = str.chars(); // {104; 101; 108; 108; 111; 32; 80; 101; 114; 115; 112; 101; 99}&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt; string slice_result = str[2..7] // &amp;quot;llo Pe&amp;quot;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perspec&lt;/strong&gt; supports all of them starting from 25.08.&amp;nbsp;&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupit"&gt;&lt;span&gt;Const Parameters&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PSS 3.0&lt;/strong&gt; supports declaring function parameters as &lt;em&gt;const&lt;/em&gt;. This means that the value of such a parameter cannot be modified within the function body. It is mainly useful for parameters of aggregate types, which are passed by handle and therefore can be modified by the function. Declaring such a parameter as &lt;em&gt;const&lt;/em&gt; is supposed to guarantee that the content of the aggregate parameter will not be modified upon the return from the function. This will be supported by Perspec in a future version.&lt;/p&gt;
&lt;h2 id="mcetoc_1jajkiupiu"&gt;Portable and Reusable Stimulus Aspects&lt;/h2&gt;
&lt;h3 id="mcetoc_1jajkiupiv"&gt;Address Space Group&lt;/h3&gt;
&lt;p&gt;The PSS Core library, introduced in PSS 2.0, provides standard portable functionality and utilities for common PSS applications. This also includes utilities to manage memory allocation in a system. Among those are address spaces, which contain memory regions, allowing actions to claim memory from. Each address space is considered completely disconnected from all others.&lt;/p&gt;
&lt;p&gt;However, different IP PSS models may have different usage models for claiming address space storage atoms. Therefore, in &lt;strong&gt;PSS 3.0&lt;/strong&gt; an&amp;nbsp;&lt;em&gt;address space group&lt;/em&gt;&amp;nbsp;defines the union of multiple individual address spaces that share common storage elements. The PSS input model can allocate common storage elements for the exclusive use of certain behaviors. The usage model is determined by the address space trait type, the address space region types, etc.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;component chiplet {&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;&amp;nbsp; transparent_addr_space_c&amp;lt;subsys_1_trait&amp;gt; mem1; // 4 regions x 8MB, some shareable&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;&amp;nbsp; transparent_addr_space_c&amp;lt;subsys_2_trait&amp;gt; mem2; // 8 regions x 4MB, some secure&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;&amp;nbsp; addr_space_group_c mem_group;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;exec init_down {&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;// by being in the same group, the two address-spaces represent the same physical memory:&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem_group.add_addr_space(mem1);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;mem_group.add_addr_space(mem2);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;code&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perspec&lt;/strong&gt; supports it from 24.04.&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupi10"&gt;Yielding Control with Cooperative Multitasking&lt;/h3&gt;
&lt;p&gt;When a&amp;nbsp;&lt;em&gt;yield&lt;/em&gt;&amp;nbsp;statement is used in a target exec block or function, it pauses the current block, giving other parallel exec blocks on the same executor a chance to run.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perspec&lt;/strong&gt; has supported this functionality from early days, however, as a function (&lt;em&gt;yield ()&lt;/em&gt;) rather than a statement (&lt;em&gt;yield&lt;/em&gt;). Therefore, from 24.09, &lt;em&gt;yield&lt;/em&gt;() has been deprecated, and &lt;em&gt;yield&lt;/em&gt; has been introduced.&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupi11"&gt;Enhanced Support for Platform Qualifiers on Function Prototype Declarations&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Perspec&lt;/strong&gt; supports these from 24.10. Deprecations were added for the previous behavior where the restrictions were not enforced to enable backwards compatibility.&lt;/p&gt;
&lt;p&gt;Note that these qualifiers existed before PSS 3.0 but were redefined and improved in PSS 3.0.&lt;/p&gt;
&lt;h3 id="mcetoc_1jajkiupi12"&gt;Behavioral Coverage&lt;/h3&gt;
&lt;p&gt;Until PSS 3.0, the PSS LRM defined data coverage, covering value ranges and combinations, similar to UVM coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PSS 3.0&lt;/strong&gt; adds behavioral coverage, meaning coverage of scenarios. A scenario is defined as one or more actions that are expected to be observed. &lt;strong&gt;Perspec&lt;/strong&gt; has been supporting a proprietary solution called &lt;em&gt;Activity Based Coverage (&lt;/em&gt;using&lt;em&gt; monitor &lt;/em&gt;actions&lt;em&gt;)&lt;/em&gt;, which provides the same needs, but with different syntax.&lt;/p&gt;
&lt;h2 id="mcetoc_1jajkiupi13"&gt;PSS 3.1&lt;/h2&gt;
&lt;p&gt;The upcoming PSS 3.1 is expected to contain several new features and enhancements, such as: annotations, activity statement enhancements, component instantiation enhancements, core library enhancements (such as ability to share an address claim between overlapping actions, target time communication) and more.&lt;/p&gt;
&lt;p&gt;Some of these items are already supported by Perspec, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initialization of non-rand attributes in action handles:&amp;nbsp;Perspec supports it from 25.03.&lt;/li&gt;
&lt;li&gt;Defining component reference fields in actions (Perspec supports it from earlier versions).&lt;/li&gt;
&lt;li&gt;Triple-quoted string with mustache notation, in the solve platform. Perspec supports it from 24.03.&lt;/li&gt;
&lt;li&gt;PSS annotations have been supported since 22.02 in proprietary format and will soon be enhanced to align with the LRM definition.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With version 3.0, PSS has achieved a level of maturity that enables the language to effectively articulate system-level scenarios while also ensuring the model stability necessary for large teams and long-term design projects.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;While staying tuned for the upcoming release of PSS 3.1, check out the PSS 3.0 (and upcoming PSS 3.1) items supported by Perspec. Explore how these can enhance your current code and methodology.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363877&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/SoC%2bverification">SoC verification</category><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/SoC">SoC</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/pss">pss</category><enclosure length="4904942" type="application/pdf" url="https://www.accellera.org/images/downloads/standards/pss/Portable_Test_Stimulus_Standard_v3.0.pdf"/><itunes:explicit/><itunes:subtitle>The Portable Stimulus Standard (PSS) Language Reference Manual (LRM) has evolved significantly since its introduction by Accelera in 2018. It has become a powerful language for creating portable and reusable stimulus specifications. The PSS LRM has matured to meet the complex needs of verification workflows while also incorporating essential language general-purpose elements like a robust type system and clear semantics. This blog explores the additions of the PSS 3.0, released in August 2024, through these two parallel axes, focusing on Cadence Perspec support aspects and highlighting relevant planned additions for the next LRM version: PSS 3.1. Table of Contents Language General-Purpose Additions Collection of reference types Comments in template blocks &amp;ldquo;Sub-string operator&amp;rdquo; and string methods Const parameters Portable and Reusable Stimulus Aspects Address space group Yielding control with cooperative multitasking Enhanced support for platform qualifiers on function prototype declarations Behavioral Coverage PSS 3.1 Language General-Purpose Additions Collection of Reference Types PSS reference types are described in PSS 2.1 already for special modeling types such as components and actions. In PSS 3.0 they get additional enhancement by the ability to declare collections of references.&amp;nbsp; These are polymorphic, meaning that, for example, the same list&amp;lt;ref C&amp;gt; can hold references to component instances of different subtypes of C. The main usage is for storing in advance references to register components and doing read/write operations on them within the exec body. array&amp;lt;ref C,3&amp;gt;&amp;nbsp; list&amp;lt;ref C&amp;gt;&amp;nbsp; array&amp;lt;list&amp;lt;array&amp;lt;ref C,2&amp;gt;&amp;gt;,3&amp;gt; Perspec supports collections (lists and arrays, including multi-dimensional) of component references from 24.06. In PSS 3.1 it is expected that it will be possible to declare fields of reference types and also fields of collections of ref types in actions. This approach enhances the user&amp;#39;s flexibility by enabling the selection of registers at solve time. Comments in Template Blocks Target template exec and function blocks have been supported since PSS 1.0. Previously, all code within the target template was generated. However, there are scenarios where users may want to exclude certain code from generation. The main reason for this is the presence of mustache expressions that users prefer not to evaluate in specific cases. To address this need, PSS 3.0 introduces the ability to differentiate between code that should be included in the generated output and code that should remain excluded. This is achieved by using {#..#} comments inside the template exec block. See the following example: action my_action { exec declaration C = &amp;quot;&amp;quot;&amp;quot; //This comment will appear in the target code. &amp;nbsp; &amp;nbsp;{# &amp;nbsp; &amp;nbsp; &amp;nbsp; This comment code. &amp;nbsp; &amp;nbsp;#} &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;&amp;quot;; } &amp;nbsp;Perspec has been supporting target template exec code since its early days and supports the new enhancement of {#..#} comments since version 24.11. &amp;ldquo;Sub-String Operator&amp;rdquo; and String Methods String data type exists in the PSS LRM from version 1.0. In PSS 2.1, string formatting capability was added (similar to C printf()). Strings are usually used for messages and file content, but also for generating statements for the generated C code. However, de facto, it was very hard to use them till PSS 3.0. In PSS 3.0&amp;nbsp;the sub-string operator and a few string methods (such as size(), find(), split(), etc.) were added, as well join() and str_from_chars(). &amp;nbsp; For example: string str = &amp;quot;hello Perspec&amp;quot;; int size_result = str.size(); // 13 list&amp;lt;int&amp;gt; find_all_result = str.find_all(&amp;quot;e&amp;quot;); // {1; 7; 11}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int find_last_result = str.find_last(&amp;quot;e&amp;quot;, 8); // 7 string upper_result = str.upper(); // &amp;quot;HELLO PERSPEC&amp;quot; string lower_result = str.lower(); // &amp;quot;hello perspec&amp;quot; list&amp;lt;string&amp;gt; split_result = str.split(&amp;quot; &amp;quot;); // {&amp;quot;hello&amp;quot;; &amp;quot;Perspec&amp;quot;} list&amp;lt;bit[8]&amp;gt; chars_result = str.chars(); // {104; 101; 108; 108; 111; 32; 80; 101; 114; 115; 112; 101; 99} string slice_result = str[2..7] // &amp;quot;llo Pe&amp;quot; Perspec supports all of them starting from 25.08.&amp;nbsp; Const Parameters PSS 3.0 supports declaring function parameters as const. This means that the value of such a parameter cannot be modified within the function body. It is mainly useful for parameters of aggregate types, which are passed by handle and therefore can be modified by the function. Declaring such a parameter as const is supposed to guarantee that the content of the aggregate parameter will not be modified upon the return from the function. This will be supported by Perspec in a future version. Portable and Reusable Stimulus Aspects Address Space Group The PSS Core library, introduced in PSS 2.0, provides standard portable functionality and utilities for common PSS applications. This also includes utilities to manage memory allocation in a system. Among those are address spaces, which contain memory regions, allowing actions to claim memory from. Each address space is considered completely disconnected from all others. However, different IP PSS models may have different usage models for claiming address space storage atoms. Therefore, in PSS 3.0 an&amp;nbsp;address space group&amp;nbsp;defines the union of multiple individual address spaces that share common storage elements. The PSS input model can allocate common storage elements for the exclusive use of certain behaviors. The usage model is determined by the address space trait type, the address space region types, etc. For example: component chiplet { &amp;nbsp; transparent_addr_space_c&amp;lt;subsys_1_trait&amp;gt; mem1; // 4 regions x 8MB, some shareable &amp;nbsp; transparent_addr_space_c&amp;lt;subsys_2_trait&amp;gt; mem2; // 8 regions x 4MB, some secure &amp;nbsp; addr_space_group_c mem_group; exec init_down { // by being in the same group, the two address-spaces represent the same physical memory: &amp;nbsp;&amp;nbsp;&amp;nbsp; mem_group.add_addr_space(mem1); &amp;nbsp; &amp;nbsp;&amp;nbsp;mem_group.add_addr_space(mem2); } Perspec supports it from 24.04. Yielding Control with Cooperative Multitasking When a&amp;nbsp;yield&amp;nbsp;statement is used in a target exec block or function, it pauses the current block, giving other parallel exec blocks on the same executor a chance to run. Perspec has supported this functionality from early days, however, as a function (yield ()) rather than a statement (yield). Therefore, from 24.09, yield() has been deprecated, and yield has been introduced. Enhanced Support for Platform Qualifiers on Function Prototype Declarations Perspec supports these from 24.10. Deprecations were added for the previous behavior where the restrictions were not enforced to enable backwards compatibility. Note that these qualifiers existed before PSS 3.0 but were redefined and improved in PSS 3.0. Behavioral Coverage Until PSS 3.0, the PSS LRM defined data coverage, covering value ranges and combinations, similar to UVM coverage. PSS 3.0 adds behavioral coverage, meaning coverage of scenarios. A scenario is defined as one or more actions that are expected to be observed. Perspec has been supporting a proprietary solution called Activity Based Coverage (using monitor actions), which provides the same needs, but with different syntax. PSS 3.1 The upcoming PSS 3.1 is expected to contain several new features and enhancements, such as: annotations, activity statement enhancements, component instantiation enhancements, core library enhancements (such as ability to share an address claim between overlapping actions, target time communication) and more. Some of these items are already supported by Perspec, such as: Initialization of non-rand attributes in action handles:&amp;nbsp;Perspec supports it from 25.03. Defining component reference fields in actions (Perspec supports it from earlier versions). Triple-quoted string with mustache notation, in the solve platform. Perspec supports it from 24.03. PSS annotations have been supported since 22.02 in proprietary format and will soon be enhanced to align with the LRM definition. With version 3.0, PSS has achieved a level of maturity that enables the language to effectively articulate system-level scenarios while also ensuring the model stability necessary for large teams and long-term design projects.&amp;nbsp; While staying tuned for the upcoming release of PSS 3.1, check out the PSS 3.0 (and upcoming PSS 3.1) items supported by Perspec. Explore how these can enhance your current code and methodology.</itunes:subtitle><itunes:summary>The Portable Stimulus Standard (PSS) Language Reference Manual (LRM) has evolved significantly since its introduction by Accelera in 2018. It has become a powerful language for creating portable and reusable stimulus specifications. The PSS LRM has matured to meet the complex needs of verification workflows while also incorporating essential language general-purpose elements like a robust type system and clear semantics. This blog explores the additions of the PSS 3.0, released in August 2024, through these two parallel axes, focusing on Cadence Perspec support aspects and highlighting relevant planned additions for the next LRM version: PSS 3.1. Table of Contents Language General-Purpose Additions Collection of reference types Comments in template blocks &amp;ldquo;Sub-string operator&amp;rdquo; and string methods Const parameters Portable and Reusable Stimulus Aspects Address space group Yielding control with cooperative multitasking Enhanced support for platform qualifiers on function prototype declarations Behavioral Coverage PSS 3.1 Language General-Purpose Additions Collection of Reference Types PSS reference types are described in PSS 2.1 already for special modeling types such as components and actions. In PSS 3.0 they get additional enhancement by the ability to declare collections of references.&amp;nbsp; These are polymorphic, meaning that, for example, the same list&amp;lt;ref C&amp;gt; can hold references to component instances of different subtypes of C. The main usage is for storing in advance references to register components and doing read/write operations on them within the exec body. array&amp;lt;ref C,3&amp;gt;&amp;nbsp; list&amp;lt;ref C&amp;gt;&amp;nbsp; array&amp;lt;list&amp;lt;array&amp;lt;ref C,2&amp;gt;&amp;gt;,3&amp;gt; Perspec supports collections (lists and arrays, including multi-dimensional) of component references from 24.06. In PSS 3.1 it is expected that it will be possible to declare fields of reference types and also fields of collections of ref types in actions. This approach enhances the user&amp;#39;s flexibility by enabling the selection of registers at solve time. Comments in Template Blocks Target template exec and function blocks have been supported since PSS 1.0. Previously, all code within the target template was generated. However, there are scenarios where users may want to exclude certain code from generation. The main reason for this is the presence of mustache expressions that users prefer not to evaluate in specific cases. To address this need, PSS 3.0 introduces the ability to differentiate between code that should be included in the generated output and code that should remain excluded. This is achieved by using {#..#} comments inside the template exec block. See the following example: action my_action { exec declaration C = &amp;quot;&amp;quot;&amp;quot; //This comment will appear in the target code. &amp;nbsp; &amp;nbsp;{# &amp;nbsp; &amp;nbsp; &amp;nbsp; This comment code. &amp;nbsp; &amp;nbsp;#} &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;&amp;quot;; } &amp;nbsp;Perspec has been supporting target template exec code since its early days and supports the new enhancement of {#..#} comments since version 24.11. &amp;ldquo;Sub-String Operator&amp;rdquo; and String Methods String data type exists in the PSS LRM from version 1.0. In PSS 2.1, string formatting capability was added (similar to C printf()). Strings are usually used for messages and file content, but also for generating statements for the generated C code. However, de facto, it was very hard to use them till PSS 3.0. In PSS 3.0&amp;nbsp;the sub-string operator and a few string methods (such as size(), find(), split(), etc.) were added, as well join() and str_from_chars(). &amp;nbsp; For example: string str = &amp;quot;hello Perspec&amp;quot;; int size_result = str.size(); // 13 list&amp;lt;int&amp;gt; find_all_result = str.find_all(&amp;quot;e&amp;quot;); // {1; 7; 11}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int find_last_result = str.find_last(&amp;quot;e&amp;quot;, 8); // 7 string upper_result = str.upper(); // &amp;quot;HELLO PERSPEC&amp;quot; string lower_result = str.lower(); // &amp;quot;hello perspec&amp;quot; list&amp;lt;string&amp;gt; split_result = str.split(&amp;quot; &amp;quot;); // {&amp;quot;hello&amp;quot;; &amp;quot;Perspec&amp;quot;} list&amp;lt;bit[8]&amp;gt; chars_result = str.chars(); // {104; 101; 108; 108; 111; 32; 80; 101; 114; 115; 112; 101; 99} string slice_result = str[2..7] // &amp;quot;llo Pe&amp;quot; Perspec supports all of them starting from 25.08.&amp;nbsp; Const Parameters PSS 3.0 supports declaring function parameters as const. This means that the value of such a parameter cannot be modified within the function body. It is mainly useful for parameters of aggregate types, which are passed by handle and therefore can be modified by the function. Declaring such a parameter as const is supposed to guarantee that the content of the aggregate parameter will not be modified upon the return from the function. This will be supported by Perspec in a future version. Portable and Reusable Stimulus Aspects Address Space Group The PSS Core library, introduced in PSS 2.0, provides standard portable functionality and utilities for common PSS applications. This also includes utilities to manage memory allocation in a system. Among those are address spaces, which contain memory regions, allowing actions to claim memory from. Each address space is considered completely disconnected from all others. However, different IP PSS models may have different usage models for claiming address space storage atoms. Therefore, in PSS 3.0 an&amp;nbsp;address space group&amp;nbsp;defines the union of multiple individual address spaces that share common storage elements. The PSS input model can allocate common storage elements for the exclusive use of certain behaviors. The usage model is determined by the address space trait type, the address space region types, etc. For example: component chiplet { &amp;nbsp; transparent_addr_space_c&amp;lt;subsys_1_trait&amp;gt; mem1; // 4 regions x 8MB, some shareable &amp;nbsp; transparent_addr_space_c&amp;lt;subsys_2_trait&amp;gt; mem2; // 8 regions x 4MB, some secure &amp;nbsp; addr_space_group_c mem_group; exec init_down { // by being in the same group, the two address-spaces represent the same physical memory: &amp;nbsp;&amp;nbsp;&amp;nbsp; mem_group.add_addr_space(mem1); &amp;nbsp; &amp;nbsp;&amp;nbsp;mem_group.add_addr_space(mem2); } Perspec supports it from 24.04. Yielding Control with Cooperative Multitasking When a&amp;nbsp;yield&amp;nbsp;statement is used in a target exec block or function, it pauses the current block, giving other parallel exec blocks on the same executor a chance to run. Perspec has supported this functionality from early days, however, as a function (yield ()) rather than a statement (yield). Therefore, from 24.09, yield() has been deprecated, and yield has been introduced. Enhanced Support for Platform Qualifiers on Function Prototype Declarations Perspec supports these from 24.10. Deprecations were added for the previous behavior where the restrictions were not enforced to enable backwards compatibility. Note that these qualifiers existed before PSS 3.0 but were redefined and improved in PSS 3.0. Behavioral Coverage Until PSS 3.0, the PSS LRM defined data coverage, covering value ranges and combinations, similar to UVM coverage. PSS 3.0 adds behavioral coverage, meaning coverage of scenarios. A scenario is defined as one or more actions that are expected to be observed. Perspec has been supporting a proprietary solution called Activity Based Coverage (using monitor actions), which provides the same needs, but with different syntax. PSS 3.1 The upcoming PSS 3.1 is expected to contain several new features and enhancements, such as: annotations, activity statement enhancements, component instantiation enhancements, core library enhancements (such as ability to share an address claim between overlapping actions, target time communication) and more. Some of these items are already supported by Perspec, such as: Initialization of non-rand attributes in action handles:&amp;nbsp;Perspec supports it from 25.03. Defining component reference fields in actions (Perspec supports it from earlier versions). Triple-quoted string with mustache notation, in the solve platform. Perspec supports it from 24.03. PSS annotations have been supported since 22.02 in proprietary format and will soon be enhanced to align with the LRM definition. With version 3.0, PSS has achieved a level of maturity that enables the language to effectively articulate system-level scenarios while also ensuring the model stability necessary for large teams and long-term design projects.&amp;nbsp; While staying tuned for the upcoming release of PSS 3.1, check out the PSS 3.0 (and upcoming PSS 3.1) items supported by Perspec. Explore how these can enhance your current code and methodology.</itunes:summary><itunes:keywords>SoC verification, Perspec, SoC, pss</itunes:keywords></item><item><title>Smarter Chips, Faster Checks: GravityXR Leading the XR Verification Shift</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/smarter-chips-faster-checks-gravityxr-leading-the-xr-verification-shift</link><pubDate>Fri, 05 Dec 2025 20:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:4d890681-dc47-4f50-b011-61a35bb9172f</guid><dc:creator>HSV Marketing</dc:creator><slash:comments>0</slash:comments><description>As XR technology accelerates, complexity rises—but speed to market remains the ultimate differentiator. GravityXR is setting the standard with the Cadence Palladium Emulation Platform, delivering MHz-level emulation, automated debugging, and comprehensive system-level coverage. This breakthrough approach empowers teams to catch issues early, streamline workflows, and deliver high-quality XR chips with confidence. Discover how GravityXR is transforming verification and shaping the future of immersive technology.(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/smarter-chips-faster-checks-gravityxr-leading-the-xr-verification-shift"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1363903&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/performance">performance</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AVIP">AVIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/GravityXR">GravityXR</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/cadence">cadence</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/debug">debug</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Palladium">Palladium</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/hybrid">hybrid</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/XR">XR</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/testbench">testbench</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification">verification</category></item><item><title>VESA Adaptive-Sync V2 Operation in DisplayPort VIP</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/vesa-adaptive-sync-v2-operation-in-displayport-vip</link><pubDate>Thu, 04 Dec 2025 01:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:397f301e-4977-44d2-9f36-03e9b8243c8f</guid><dc:creator>Vaibhav Sirvi</dc:creator><slash:comments>0</slash:comments><description>&lt;h2 id="mcetoc_1jbfmcqot1"&gt;&lt;strong&gt;Need for Synchronization&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In a computer system, both the GPU as well as the monitor have a certain rate at which they&amp;nbsp;render or update an image, respectively. The rate is nothing but the frequency at which the image is refreshed (updated in the image it shows/displays), usually expressed in hertz, and can vary based on the content displayed on the screen.&lt;/p&gt;
&lt;p style="padding-left:30px;"&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/pastedimage1764684768004v8.png" /&gt;&lt;/p&gt;
&lt;h5 style="padding-left:120px;"&gt;Figure 1: Refresh rate requirements under different applications&lt;/h5&gt;
&lt;p&gt;For both the GPU as well as the monitor, it is mandatory that their rates should be in sync with one another, because when the display&amp;#39;s refresh rate is not synchronized with the content&amp;#39;s frame rate, then there are two scenarios t&amp;nbsp;can occur and can create undesirable effects for the user:&lt;/p&gt;
&lt;p&gt;Scenario &amp;ndash; I: When the GPU&amp;#39;s frame rate is higher than the display&amp;#39;s refresh rate, the user can experience screen tearing, i.e., parts of the screen display different frames at the same time.&lt;/p&gt;
&lt;p&gt;Scenario &amp;ndash; II: When the GPU&amp;#39;s frame rate is less than the display&amp;#39;s refresh rate, the user can experience screen stuttering, i.e., the frames will be either repeated or frozen.&lt;/p&gt;
&lt;p&gt;Now, to eliminate this, there are two options.&lt;/p&gt;
&lt;p&gt;Option &amp;ndash; I: The GPU dynamically adjusts its fps to always comply with the display&amp;#39;s refresh rate.&lt;/p&gt;
&lt;p&gt;Option &amp;ndash; II: The display&amp;#39;s refresh rate adjusts to the GPU&amp;#39;s variable fps.&lt;/p&gt;
&lt;p&gt;With Option-I, the GPU will be capped to the display&amp;#39;s maximum refresh rate and will not be used to its full extent, which will eventually eliminate screen tearing (Scenario - I), but the same GPU will also be forced to generate higher FPS above its capability to match the display&amp;#39;s refresh rate, which will eventually generate screen stuttering (Scenario-II).&lt;/p&gt;
&lt;p&gt;With Option-II, the display will always adapt to the GPU&amp;#39;s unpredictable fps and will eliminate both screens tearing as well as stuttering.&lt;/p&gt;
&lt;p&gt;Till now, we have already been using a&amp;nbsp;similar technology to Option-I known as &amp;quot;V-Sync&amp;quot;. But as this technology was not able to solve the problem of screen stuttering, a new technology was developed similar to Option-II, known as &amp;quot;Adaptive Sync,&amp;quot; which was developed by VESA.&lt;/p&gt;
&lt;h2 id="mcetoc_1jbfmd9sl2"&gt;&lt;strong&gt;Modes of Adaptive-Sync Operation&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The Adaptive Sync operation is divided into two parts, namely FAVT (Fixed Average VTotal) and AVT (Adaptive VTotal) where VTotal(Vertical Total) represents the total number of horizontal lines in a frame that consists of pixel information.&lt;/p&gt;
&lt;p&gt;The FAVT is typically meant for media playback, whereas the AVT is typically meant for games or other applications where the content&amp;#39;s frame rate is unpredictable.&lt;/p&gt;
&lt;p&gt;During both the operations, the VTotal is changed to indirectly increase/decrease the refresh rate. As the refresh rate is inversely proportional to frame duration, the increase in VTotal/Frame duration decreases the refresh rate and the decrease in VTotal/Frame duration increases the refresh rate. The VTotal is nothing but a summation of blanking lines and active lines (refer Figure &amp;ndash; 2.). The active lines are the ones that contain the actual pixel information that will be used to create the image that will be displayed on the screen and the blanking lines are used to share additional information (such as Secondary Data Packets, Mainstream Attributes, etc.) that are related to a frame.&lt;/p&gt;
&lt;p style="padding-left:30px;"&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/Pictorial-representation-of-Video-Frame-and-Active-Video-Image.png" /&gt;&lt;/p&gt;
&lt;h5 style="padding-left:90px;"&gt;Figure 2: Pictorial representation of Video Frame and Active Video Image&lt;/h5&gt;
&lt;p&gt;To change the VTotal, the blanking lines are increased/decreased by changing the relative position of Adaptive Sync SDP as described in Figure &amp;ndash; 3. This SDP is always sent with each frame before the &amp;quot;Start of Vertical Blanking&amp;quot;, resulting in the Actual Vtotal to be the summation of &amp;quot;AS SDP position (blanking lines before AS SDP) + VStart (Vertical blanking lines) + VHeight (active lines)&amp;quot; so that the source could calculate the successive frame parameters such as successive frame&amp;#39;s AS SDP position, VTotal and refresh rate.&lt;/p&gt;
&lt;p style="padding-left:180px;"&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/pastedimage1764685048087v9.png" /&gt;&lt;/p&gt;
&lt;h5 style="padding-left:180px;"&gt;Figure 3 - AS SDP Transmission Timing&lt;/h5&gt;
&lt;p&gt;The Adaptive Sync SDP is a secondary data packet sent during blanking regions that contains various header and payload bytes which defines their type and functionality such as its version, mode of operation i.e., FAVT or AVT and the refresh rate transition information whether the transition is bounded (might take more than one frame to achieve target refresh rate) or unbounded (target refresh rate is achieved in single frame boundary) and what will be the constraint (frame duration increase/decrease limit) for the transition during bounded scenario as described in Table-1 and Table-2.&lt;/p&gt;
&lt;table width="231" height="219"&gt;&lt;caption&gt;Table 1 - AS SDP Header Bytes&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Byte&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HB0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Secondary-data Packet-ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HB1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Secondary -data Packet Type&lt;br /&gt;&lt;br /&gt;22h = Adaptive sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HB2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4:0&lt;/td&gt;
&lt;td&gt;Version Number&lt;br /&gt;&lt;br /&gt;01h = Version 1&lt;br /&gt;02h = Version 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7:5&lt;/td&gt;
&lt;td&gt;RESERVED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HB3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5:0&lt;/td&gt;
&lt;td&gt;Number of Valid Data Bytes&lt;br /&gt;&lt;br /&gt;Version 1&lt;br /&gt;00h = No payload data bytes&lt;br /&gt;&lt;br /&gt;Version 2&lt;br /&gt;09h = Nine payload data bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7:6&lt;/td&gt;
&lt;td&gt;RESERVED&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table width="212" height="390"&gt;&lt;caption&gt;Table 2 - AS SDP Payload Bytes&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;VARIABLE_FRAME_RATE_DISABLE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Adaptive Sync Operation Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Adaptive Sync SDP Transmission Disable in PR Active State&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Remote Frame Buffer (RFB) Update in PR Active State&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7:4&lt;/td&gt;
&lt;td&gt;RESERVED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Minimum Vertical Total 7:0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Minimum Vertical Total 15:8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Target Refresh Rate 7:0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1:0&lt;/td&gt;
&lt;td&gt;Target Refresh Rate 9:8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4:2&lt;/td&gt;
&lt;td&gt;RESERVED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Target Refresh Rate Divider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Successive Frame Duration Increase Configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Successive Frame Duration Decrease Configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Duration Increase Constraint Value in ms Unit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Duration Decrease Constraint Value in ms Unit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Coasting VTotal 7:0 in PR Active State&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7:0&lt;/td&gt;
&lt;td&gt;Coasting VTotal 15:8 in Pr Active State&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DB9 through DB31&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;191:0&lt;/td&gt;
&lt;td&gt;RESERVED&lt;br /&gt;&lt;br /&gt;Read all 0s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="mcetoc_1jbfmg20c3"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The Cadence VIP Model supports both modes of operation for Adaptive-Sync i.e., FAVT(DB0[1] = 1) &amp;amp; AVT(DB0[1] = 0).&lt;/p&gt;
&lt;p&gt;During FAVT mode of operation, in case of bounded config the model increase/decrease the frame duration once per frame using the constraint values (DB5/DB6) until the on-panel frame duration matches the Target frame duration (inverted {DB4[1:0], DB3[7:0]}). In case the increase/decrease frame duration is unbounded the TRR is achieved across a single frame boundary.&lt;/p&gt;
&lt;p&gt;During AVT mode of operation the model increase/decrease the frame duration to reach minimum or maximum frame duration supported by Sink device. The Source will honor the frame duration constraint in case of bounded transition and in case of unbounded transition the Refresh Rate may transition to minimum/maximum frame duration across single frame boundary.&lt;/p&gt;
&lt;h2 id="mcetoc_1jbfmghmf4"&gt;&lt;strong&gt;Learn More&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cadence has a very mature Verification IP solution. Verification over many different configurations can be used with DisplayPort 2.1 and DisplayPort 1.4 designs, so you can choose the best version for your specific needs.&lt;/li&gt;
&lt;li&gt;The DisplayPort VIP provides a full-stack solution for Sink and Source devices with a comprehensive coverage model, protocol checkers, and an extensive test suite.&lt;/li&gt;
&lt;li&gt;More details available on &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/display/displayport.html"&gt;Simulation VIP for Display Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For more information on VESA&amp;#39;s DisplayPort in general. Visit the official website at&amp;nbsp;&lt;a href="https://vesa.org/"&gt;vesa.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you have more feedback or need more information, &lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;reach out to us&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=1363906&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/Target%2bRefresh%2bRate">Target Refresh Rate</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Screen%2bTearing">Screen Tearing</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VSync">VSync</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/GPU">GPU</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Adaptive%2bSync">Adaptive Sync</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/FAVT">FAVT</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Adaptive%2bSync%2bSDP">Adaptive Sync SDP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/display">display</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/DisplayPort">DisplayPort</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Gaming%2bContent">Gaming Content</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/GSync">GSync</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/FPS">FPS</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Monitor">Monitor</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Video%2bContent">Video Content</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Vertical%2bExpansion_2F00_Reduction">Vertical Expansion/Reduction</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VESA">VESA</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AVT">AVT</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Screen%2bStuttering">Screen Stuttering</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Frame%2bRate">Frame Rate</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VTotal">VTotal</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Video%2bFrame">Video Frame</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DisplayPort%2bVIP">DisplayPort VIP</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VRR">VRR</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/frame">frame</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Refresh%2bRate">Refresh Rate</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/FreeSync">FreeSync</category></item><item><title>ONFI 5.2: What’s new in Open NAND Flash Interface's latest 5.2 standard</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/onfi-5-2-what-s-new-in-open-nand-flash-interface-s-latest-5-2-standard</link><pubDate>Wed, 26 Nov 2025 06:00:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:c0ceb2bb-cfcb-4920-9517-653cdf24d4e3</guid><dc:creator>Shyam Sharma</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Non-volatile memories like Nand Flash are key components of most modern system-on-chip (SoC). The I/O speeds and bandwidth of these types of memories are seeing tremendous improvements and advances in the underlying technology are making&amp;nbsp;them increasingly used for a large variety of applications. These applications rely on not just the high density that traditionally has been the main benefit of flash memories, but throughput that can be comparable to DRAMs and other high data rate memory devices. Some of the most used applications of Nand flash devices include mobile/handhelds, data centers, automotive, gaming, and have found applications in memory intensive AI workloads.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;NAND Flash&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NAND Flash is one of the most popular types of storage technologies. It&amp;rsquo;s a non-volatile memory where the data is retained even when there is no power supplied to the device. NAND flash technology has evolved over the years to allow for higher density for the same number of memory cells. The initial generation of NAND Flash memory cell only stored a single bit per cell (SLC), which later evolved into multi-level cell (MLC that can store 2 bits per cell) and Triple Level Cell (TLC, where 3 data bits can be stored in each cell). Recent developments have NAND Flash devices using three-dimensional TLC cells and quad-level cells (QLC) to allow for even higher density than a planner TLC device would offer at the expense of additional complexity and cooling challenges. Traditionally, NAND Flash memory devices offered by different memory vendors have all differed in terms of pin interfaces, commands, and timings, to list a few variations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class="align-right" style="float:right;max-height:149px;max-width:239px;" alt=" " height="149" src="https://community.cadence.com/resized-image/__size/478x298/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/ONFI.jpg" width="239" /&gt;Open NAND Flash Interface Specification (&lt;strong&gt;ONFI&lt;/strong&gt;) started as an industry initiative to bring standardization to the I/O interface to NAND Flash based devices with more than 100 companies being part of this effort. The first ONFI 1.0 standard was published in 2006. The ONFI Specification has had multiple revisions since then to cater to the needs of higher performance, density, and power efficiency of today&amp;rsquo;s market.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;ONFI 5.2&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ONFI 5.2 is the latest generation of ONFI device standard, published in 2024. ONFI 5.2 devices have added several major features over previous generation ONFI standards. Some of the important changes are as follows:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Separate Command Address (SCA) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SCA protocol is a major change for ONFI 5.2 devices. SCA allows Hosts to optimize the command and data scheduling significantly to increase overall available bandwidth. It includes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Separate command/address (CA) and data busses &lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;ONFI 5.2 compliant devices have additional signals for command/address packet (CA[1:0]_x), command/address bus enable (CA_CEy_x_n), and command/address clock (CA_CLK_x). The host can use these to issue a new command to the device while the previous read or program command&amp;rsquo;s data transfer hasn&amp;rsquo;t been completed. Allowing the separation of commands and data transfers helps with concurrent command/address (CA) and data traffic improving NAND interface throughput. This is also used in other high-speed memory devices, such as DRAMs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;SCA Protocol Command Set&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;ONFI 5.2 defines a new SCA Protocol Command Set along with the Conventional Protocol Command Set supported by ONFI compliant devices until v5.1. The SCA Protocol Command Set can include a third cycle for operations such as multi-plane page program, page cache program, multiplane copyback program, etc.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Timing and signal requirements &lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;Other changes in the SCA protocol include new signal value requirements during power on reset initialization and additional timings requirements, such as tWLCEL_CA (CA_CLK low setup to first CE# low after SCA protocol has been enabled) that the host should follow.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Device Trainings &lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;SCA interface Device training for reads, writes and CA bus/training, etc., is recommended for the proper operation of an ONFI 5.2 device.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DC and Operating Conditions for Raw NAND&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ONFI 5.2 has higher values for read, program, standby, and active external supply voltage (Vpp). The LUN&amp;nbsp;Array Read and Program current depends on the operating speeds for ONFI 5.2 devices and can be up to 150 mA. The host must account for the additional current requirements while planning for the device power budget.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cadence VIP offers memory models for all generations of ONFI devices, including the recently released ONFI5.2 model. Cadence ONFI memory model is not only functionally accurate; but it also checks for specification compliance to all host requirements defined in the standard.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have any queries, contact us at &lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;More information on Cadence ONFI VIP is available at &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/memory-models/flash/onfi.html"&gt;Cadence VIP Memory Models Website&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363893&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/non_2D00_volatile%2bmemory">non-volatile memory</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/flash">flash</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ONFT5-2%2bVs%2bONFI5-1">ONFT5.2 Vs ONFI5.1</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ONFI">ONFI</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/memory%2bmodels">memory models</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ONFI5-2">ONFI5.2</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NAND">NAND</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/sca">sca</category></item><item><title>Powering Up Efficiency: A Deep Dive into CXL L0p and its Verification</title><link>https://community.cadence.com/cadence_blogs_8/b/fv/posts/powering-up-efficiency-a-deep-dive-into-cxl-l0p-and-its-verification</link><pubDate>Wed, 19 Nov 2025 11:49:00 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:5000a603-4b2a-4f07-b004-424c30f8026d</guid><dc:creator>Rajneesh Chauhan</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;Compute Express Link (CXL)&lt;/strong&gt;&amp;nbsp;is revolutionizing data center architecture, with power management emerging as a key area of innovation. Among its power-saving mechanisms, the&amp;nbsp;&lt;strong&gt;L0p (Low Power) state&lt;/strong&gt;&amp;nbsp;plays a pivotal role in reducing energy consumption during periods of low link activity. But what exactly does L0p mean for a CXL link, and how can we ensure its reliable implementation through comprehensive verification?&lt;/p&gt;
&lt;h2&gt;Understanding CXL L0p: The Path to Power Efficiency&lt;/h2&gt;
&lt;p&gt;L0p (short for &amp;quot;Low Power&amp;quot;) is a specialized sub-state of the L0 operational state in which the CXL link maintains partial lane activity. In this mode, some lanes remain active while the others transition to an electrical idle state. This is achieved by dynamically adjusting the link width&amp;mdash;downsizing to use fewer lanes during low demand, and upsizing to utilize more lanes when demand increases. Despite these adjustments, the link remains fully operational within the L0 state, ensuring efficient power management without compromising performance.&lt;/p&gt;
&lt;h2 id="mcetoc_1j5ge0q1f0"&gt;How L0p Works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Initiation&lt;/strong&gt;: Either side (root or endpoint) can initiate a lane width change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negotiation&lt;/strong&gt;: A new&lt;span&gt;&amp;nbsp;&lt;b&gt;L0p ALMP packet&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is used to send a request (e.g., downsize from x8 to x4).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acknowledgment&lt;/strong&gt;: The partner device responds with L0p ALMP ACK or NAK within a defined time (e.g., 1 &amp;micro;s).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lane transition&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Downsizing&lt;/strong&gt;: Inactive lanes send EIOSQ and go to electrical idle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upsizing&lt;/strong&gt;: New lanes are trained and brought online.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traffic continuity&lt;/strong&gt;: Active lanes continue transmitting FLITs during the transition.&lt;/li&gt;
&lt;/ol&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/Cadenece-L0p-ALMP-Handshake-flow.jpg" /&gt;&lt;/p&gt;
&lt;h2 data-complete="true" data-processed="true"&gt;The Verification Challenges: Making Sure L0p Always Works&lt;/h2&gt;
&lt;div data-complete="true" data-processed="true"&gt;Making sure CXL&amp;#39;s L0p feature works perfectly, especially with dynamic link width adjustments, comes with a few tricky parts:&lt;/div&gt;
&lt;ol class="VimKh" data-complete="true" data-processed="true"&gt;
&lt;li data-hveid="CAMIOhAA" data-complete="true" data-processed="true"&gt;&lt;span class="T286Pc" data-complete="true" data-processed="true"&gt;&lt;b class="Yjhzub" data-complete="true" data-processed="true"&gt;Complex steps and width changes:&amp;nbsp;&lt;/b&gt;&lt;span&gt;Entering and exiting the L0p (Low Power) state involves a series of precise operations, now further complicated by the dynamic addition or removal of active data lanes. These transitions must be validated across all aspects of the CXL link&amp;mdash;including data handling, link integrity, and physical layer signaling&amp;mdash;to ensure seamless and error-free operation.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-hveid="CAMIOhAB" data-complete="true" data-processed="true"&gt;&lt;strong&gt;Power efficiency vs. performance trade-off&lt;/strong&gt;&lt;span class="T286Pc" data-complete="true" data-processed="true"&gt;&lt;b class="Yjhzub" data-complete="true" data-processed="true"&gt;:&lt;/b&gt;&lt;span&gt; It is essential to verify that L0p mode delivers meaningful power savings by adjusting link width, without introducing significant latency or performance degradation during bandwidth ramp-up. This is particularly critical under fluctuating data traffic conditions, where responsiveness and efficiency must be balanced&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li data-hveid="CAMIOhAC" data-complete="true" data-processed="true"&gt;&lt;strong&gt;Cross-layer coordination&lt;/strong&gt;&lt;span class="T286Pc" data-complete="true" data-processed="true"&gt;&lt;b class="Yjhzub" data-complete="true" data-processed="true"&gt;:&lt;/b&gt;&lt;span&gt; Robust validation is required to ensure that all protocol layers&amp;mdash;Transaction Layer, Link Layer, ArbMux, and Physical Layer&amp;mdash;operate in harmony during L0p transitions. Any misalignment or delay across layers could compromise link stability or performance.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-hveid="CAMIOhAD" data-complete="true" data-processed="true"&gt;&lt;span class="T286Pc" data-complete="true" data-processed="true"&gt;&lt;b class="Yjhzub" data-complete="true" data-processed="true"&gt;Fault handling and recovery scenarios:&lt;/b&gt;&lt;span&gt; Testing must cover fault conditions such as errors, resets, or unexpected state changes during L0p operation. Special attention should be given to recovery entry and transitions into deeper power states, ensuring that the link can gracefully handle disruptions and resume normal operation without data loss or corruption.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;How Verification IP (VIP) Makes Testing L0p Easy&lt;/h2&gt;
&lt;p&gt;CXL Verification IP (VIP) is a super helpful tool for tackling these challenges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configurable L0p scenarios with dynamic link width control:&lt;/strong&gt; CXL VIP enables engineers to easily configure and execute a wide range of L0p scenarios, including precise control over link width scaling&amp;mdash;both downsizing and upsizing. This allows for thorough validation of component behavior during dynamic lane transitions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol-aware error detection:&lt;/strong&gt; Equipped with intelligent protocol monitoring, the VIP automatically detects violations in L0p operations, such as incorrect negotiation sequences or non-compliant link width transitions. This significantly reduces manual debugging effort and accelerates issue identification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fault Injection during transitions:&lt;/strong&gt; The VIP supports targeted error simulation during L0p transitions, including injecting unexpected protocol messages or faults during lane reduction or expansion. These tests help assess system robustness and recovery mechanisms under adverse conditions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance and power efficiency analysis:&lt;/strong&gt; Advanced metrics provided by the VIP allow for detailed analysis of L0p entry/exit latency, link width transition efficiency, and associated power consumption. These insights are critical for optimizing power-saving strategies without compromising performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive coverage across scenarios:&lt;/strong&gt; &lt;span&gt;CXL VIP offers exhaustive test coverage for all L0p-related conditions&amp;mdash;ranging from varying traffic loads and dynamic link width changes to error recovery paths. This ensures high confidence in the reliability and efficiency of L0p implementation&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;By using CXL VIP, teams can confidently build and test the clever L0p power-saving feature,&amp;nbsp;&lt;em&gt;including its dynamic link width capabilities&lt;/em&gt;. This means CXL systems will not only be fast but also incredibly energy-efficient for the powerful computing systems of today.&lt;/p&gt;
&lt;h2 id="mcetoc_1j5ge0q1f1"&gt;Learn More&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ip.cadence.com/ipportfolio/verification-ip/simulation-vip/other/vip-for-compute-express-link-cxl"&gt;VIP for Compute Express Link (CXL)&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/interconnect-beyond-pcie-cxl-and-the-ongoing-interconnect-battle"&gt;Interconnect Beyond PCIe: CXL and Cache Coherent Interconnect&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.cadence.com/cadence_blogs_8/b/whiteboardwednesdays/posts/whiteboard-wednesdays-coherent-interconnect-verification-challenges"&gt;Whiteboard Wednesdays - Coherent Interconnect Verification Challenges&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cadence.com/en_US/home/multimedia-secured.html/content/dam/cadence-www/global/en_US/videos/tools/system_design_verification/SVGSecured/cxl-verification-ip-system-level.mp4"&gt;CadenceTECHTALK: Boost Your CXL Verification From IP to System-Level&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1363792&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/CXL">CXL</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/performance">performance</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/Functional%2bVerification">Functional Verification</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/coherent">coherent</category><category domain="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/l0p">l0p</category></item></channel></rss>