<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Verification</title><subtitle type="html" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/atom</id><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv" /><link rel="self" type="application/atom+xml" href="https://community.cadence.com/cadence_blogs_8/b/fv/atom" /><generator uri="http://telligent.com" version="13.0.4.37021">Telligent Community (Build: 13.0.4.37021)</generator><updated>2026-06-19T11:11:00Z</updated><entry><title>When the Bug Is in the Waveform, the UALink Story Should Be There Too</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/why-a-protocol_2d00_aware-waveform-debugger-is-quietly-becoming-the-fastest-path-from-failure-to-fix-in-ualink-verification" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/why-a-protocol_2d00_aware-waveform-debugger-is-quietly-becoming-the-fastest-path-from-failure-to-fix-in-ualink-verification</id><published>2026-07-31T13:30:00Z</published><updated>2026-07-31T13:30:00Z</updated><content type="html">&lt;p class="deck"&gt;Real design debug often ends in the same place: a waveform window full of DUT signals, a failing transaction, and a room of engineers trying to reconstruct what the protocol really did.&lt;/p&gt;
&lt;p&gt;This is not a niche problem. It is one of the most common patterns in complex SoC and protocol bring-up. Logs, checkers, scoreboards, and coverage all matter, but when the bug becomes subtle, the debug conversation usually moves to the waveform. Designers want to see the DUT. Verification engineers want to see protocol intent. The hard part is making both views meet in one timeline.&lt;/p&gt;
&lt;p&gt;A request disappears. A response arrives late. A credit counter looks suspicious. A link state moves at the wrong moment. Everyone can see the signals, but the real question is still open: which protocol event caused this behavior, and where did the packet actually go wrong?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;span style="background-color:#ffcc99;"&gt;&lt;b&gt;The mass problem is not waveform visibility.&lt;/b&gt;&amp;nbsp;Designers already have visibility. The problem is that raw visibility is not the same as protocol understanding.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jurfpoim0"&gt;&lt;span style="color:#1861ab;"&gt;The Debug Scene We All Know&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Picture a late bring-up failure. The test times out after a transaction that looked legal at the top level. The first error message is not enough. The team loads resets, clocks, interface pins, internal state, VIP signals, and selected DUT hierarchy. The waveform has everything, but it does not explain itself.&lt;/p&gt;
&lt;p&gt;Someone now has to decode fields by hand, jump between log timestamps and waveform cursors, remember protocol rules, and keep a mental model of the packet as it moves through the stack. One missed tag, credit class, sequence number, or state transition can send the debug down the wrong path.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1785482576247v5.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jurg2kuo5"&gt;&lt;span style="color:#1861ab;"&gt;&lt;/span&gt;&lt;span style="color:#1861ab;"&gt;Where Waveform Debugger Changes the Story&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Waveform Debugger (WD) changes this from a signal-hunting exercise into a protocol story. The VIP already understands the protocol: callbacks, fields, ports, layers, credits, state, and packet movement. WD brings that intelligence into the waveform as time-aligned transaction streams.&lt;/p&gt;
&lt;p&gt;The designer still sees raw RTL behavior. The verification engineer still sees protocol meaning. But now both are looking at one correlated debug view. Instead of asking, &amp;ldquo;Which signal transition maps to this protocol event&amp;quot;? the team can ask a better question: &amp;ldquo;What happened to this packet at each layer&amp;quot;?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/3021.pastedimage1785480665686v1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jurgra18a"&gt;&lt;span style="color:#1861ab;"&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/1362.Screenshot-2026_2D00_07_2D00_31-123730.png" /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jurfpoim2"&gt;&lt;span style="color:#1861ab;"&gt;A UALink Example: One Transaction, Four Layers&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/ua-link.html"&gt;UALink&lt;/a&gt; makes this need very clear because a single transfer naturally crosses multiple layers. A transaction may begin at UPLI as intent: a read, write, atomic, or response with tags and credit context. TL turns that into 64-byte flits. DL packs data into 640-byte flits with headers, CRC, sequencing, and replay behavior. PHY carries the activity through lanes, FEC, alignment, and link behavior.&lt;/p&gt;
&lt;p&gt;Without Waveform Debugger (WD), the user may bounce between VIP logs, packet tracker output, register dumps, and raw waveforms. With WD, the same debug becomes a time-correlated path: UPLI intent, TL packing, DL flit movement, PHY activity, and DUT signal behavior around each step.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/4186.pastedimage1785480705927v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jurfpoim3"&gt;&lt;span style="color:#1861ab;"&gt;Why the VIP Side Is the Right Place&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;The DUT owns the implementation, but the VIP owns protocol interpretation. That is why Waveform Debugger (WD) is powerful from the VIP side. It does not replace the waveform. It makes the waveform more useful by adding the protocol lens that the designer otherwise has to reconstruct manually.&lt;/p&gt;
&lt;p&gt;That lens matters in real customer debug, where the issue is rarely &amp;ldquo;I cannot see the signal.&amp;rdquo; The issue is usually &amp;ldquo;I can see too many signals, and I do not know which transition matters.&amp;rdquo; WD helps separate noise from meaning: which transaction is this, which layer touched it, which port did it use, and what happened just before the failure?&lt;/p&gt;
&lt;div class="callout"&gt;&lt;span style="background-color:#ffcc99;"&gt;&lt;b&gt;The pitch is simple:&lt;/b&gt;&amp;nbsp;Waveform Debugger does not ask designers to leave their natural debug environment. It brings VIP protocol intelligence into that environment.&lt;/span&gt;&lt;/div&gt;
&lt;div class="callout"&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1jurfpoin4"&gt;&lt;span style="color:#1861ab;"&gt;The Takeaway&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Waveform debug is not going away. It is where designers correlate evidence, challenge assumptions, and finally understand what went wrong. The opportunity is to make that environment smarter.&lt;/p&gt;
&lt;p&gt;Real design debug is collaborative. A protocol-aware waveform gives RTL, VIP, and testbench owners a shared object to reason about. That is the difference between visibility and productivity: visibility shows everything; productivity shows the right thing at the right time.&lt;/p&gt;
&lt;p&gt;Waveform Debugger turns VIP from a checker that reports protocol behavior into a debug companion that explains protocol behavior in the waveform. It connects packet flow, register state, and DUT signals in one timeline. For real design debug, that is the difference between staring at transitions and following the story.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;h2 id="mcetoc_1jurfpoin4"&gt;&lt;span style="color:#1861ab;"&gt;Explore UALink Debug with Cadence&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="color:#1861ab;"&gt;&lt;/span&gt;&lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;Cadence&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;UALink&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;VIP&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;Waveform&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;Debugger&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;is&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;designed&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;for&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;exactly&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;this&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;challenge,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;bringing&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;protocol-aware,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;flit-accurate,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;and&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;cross-layer&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;visibility&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;directly&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;into&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;the&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;waveform.&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;By&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;connecting&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;activity&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;across&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;UPLI,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;TL,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;DL,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;and&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;PHY&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;on&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;a&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;common&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;timeline,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;it&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;helps&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;engineers&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;move&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;faster&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;from&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;a&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;visible&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;failure&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;to&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;an&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;understood&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;root&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;cause.&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;To&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;discuss&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;how&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;it&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;fits&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;your&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;verification&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;environment,&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;contact&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;Cadence&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;Support&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;or&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;visit&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;the&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;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;product&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;page.&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;You&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;can&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;also&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;explore&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;Cadence&lt;/span&gt; &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip.html"&gt;Simulation VIP&lt;/a&gt;&amp;nbsp;&lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;solutions&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;for&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;broader&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;protocol&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;VIP&lt;/span&gt; &lt;span class="___xxxjie0 f1w7gpdv f1gqqdtu"&gt;support.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;The waveform already has the truth. Waveform Debugger helps it tell the protocol story.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364277&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Sandeep Grover</name><uri>https://community.cadence.com/members/sandeep-grover</uri></author><category term="bug" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/bug" /><category term="waveform" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/waveform" /><category term="UALink" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UALink" /><category term="Verisium Debug" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verisium%2bDebug" /><category term="debugging" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/debugging" /><category term="verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification" /></entry><entry><title>AMBA AXI5 Memory Tagging Extension: Making Memory Safety Observable on the Bus</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/amba-axi5-memory-tagging-extension-making-memory-safety-observable-on-the-bus" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/amba-axi5-memory-tagging-extension-making-memory-safety-observable-on-the-bus</id><published>2026-07-23T12:08:00Z</published><updated>2026-07-23T12:08:00Z</updated><content type="html">&lt;p&gt;Memory safety remains one of the most persistent challenges in modern computing systems. Issues such as buffer overflows, use-after-free errors, and heap corruption can lead to serious security vulnerabilities, especially in systems built using large C/C++ codebases. As Arm-based SoCs continue to grow across mobile, automotive, datacenter, and IoT applications, there is a need for a hardware-supported mechanism that can detect memory misuse with minimal runtime overhead.&lt;/p&gt;
&lt;p&gt;Arm Memory Tagging Extension enables this by associating a small allocation tag with each memory granule and checking every pointer access against the expected tag. When a stale, out-of-bounds, or incorrect pointer is used, the mismatch can be detected before the access causes data corruption or security breach. For this mechanism to work across the full memory hierarchy, the tag information must be transported and verified through the interconnect fabric, which is where the AMBA AXI5 MTE protocol extension becomes important.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qmj6g0"&gt;Overview of Memory Tagging Extension&lt;/h2&gt;
&lt;p&gt;Arm MTE provides hardware-enforced memory tagging by introducing dedicated tag storage, tag manipulation instructions, and automatic tag checking on memory accesses. Each 16-byte memory granule is associated with a 4-bit Allocation Tag, while the pointer carries a Logical Tag in its upper address bits. During memory access, hardware compares the Logical Tag with the stored Allocation Tag and raises a fault when they do not match.&lt;/p&gt;
&lt;p&gt;This approach helps detect common memory safety issues such as buffer overflows and use-after-free access.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qq6vj0"&gt;Why AXI5 Needs MTE Support&lt;/h2&gt;
&lt;p&gt;MTE tag operations such as tag reads and writes must travel through caches, interconnects, memory controllers, and DRAM without losing tag information. Without explicit AXI-level support, tag data would either need to be carried as normal data, which wastes bandwidth and affects atomicity, or it could be lost at cache boundaries.&lt;/p&gt;
&lt;p&gt;The AXI5 MTE extension addresses this by adding dedicated signals and transaction qualifiers for tag-aware transfers. These additions allow tags to be transferred along with data, moved independently as tag-only transactions, updated selectively, and checked for correctness within the memory subsystem.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qrufg1"&gt;AXI5 MTE Protocol Architecture&lt;/h2&gt;
&lt;p&gt;AXI5 MTE extends the standard AXI protocol with new signals across the address, data, and response channels. AWTAGOP and ARTAGOP to identify whether a transaction is normal access, a tag-and-data transfer, or a tag-only transfer. WTAG and RTAG carry allocation tag values, while WTAGUPDATE indicates which tags must be written to memory when AWTAGOP is Update. There is 1 bit per 4 bits of tag.&lt;/p&gt;
&lt;p&gt;The protocol also defines response and error indicators such as separate, fail, and pass responses using the BTAGMATCH signal. The waveform below provides a step-by-step view of AXI5 MTE transactions, showing how allocation tags are transferred alongside data, fetched independently through tag-only operations, and validated through tag match checking on write accesses.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/wavedrom.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qt3mg2"&gt;Key Protocol Features&lt;/h2&gt;
&lt;p&gt;AXI5 MTE supports two important transaction types: Tag-and-Data and Tag-Only. Tag-and-Data transactions transfer application data and the corresponding allocation tags together, which is useful when memory and tag state must be initialized or fetched in a single operation. Tag-Only transactions transfer only tag information and are typically used for instructions that update or read allocation tags without modifying data memory.&lt;/p&gt;
&lt;p&gt;The tag width depends on the AXI data bus width. Since each 16-byte granule requires a 4-bit tag, the tag bus width scales with the number of granules in each data beat. Tags are packed in address order, with the lowest bits corresponding to the lowest-addressed granule in the beat.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qv6883"&gt;Detecting Real Memory Safety Issues&lt;/h2&gt;
&lt;p&gt;One of the key values of MTE is its ability to detect buffer overflow conditions before they silently corrupt adjacent memory. In the documented example, a buffer is allocated with one tag, while the neighboring allocation has a different tag. When a buggy access crosses into the neighboring granule, the Logical Tag does not match the Allocation Tag, allowing the system to detect the overflow before corruption occurs.&lt;/p&gt;
&lt;p&gt;MTE also helps detect use-after-free errors. When memory is freed and later reallocated with a new tag, an older stale pointer still carries the previous Logical Tag. Any access using that stale pointer results in a tag mismatch, allowing the system to detect and contain the invalid access.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qvdmf4"&gt;Functional Verification Challenges&lt;/h2&gt;
&lt;p&gt;Verifying AXI5 MTE is more complex than verifying standard AXI transactions because tag correctness becomes an additional dimension of protocol behavior. Verification must ensure not only that data transfers are correct, but also that tag transfers, tag updates, tag operation responses, and tag error reporting are legal and consistent.&lt;/p&gt;
&lt;p&gt;At the IP level, important checks include AxTAGOP encoding legality, BTAGMATCH consistency, WTAGUPDATE behavior, Tag-Only fetch handling, separate tag response correctness, ordering rules, and interactions with exclusive accesses. These checks require protocol-aware monitors, transaction correlation, and tag state modeling.&lt;/p&gt;
&lt;p&gt;At the SoC level, verification must cover end-to-end tag correctness across the CPU, caches, interconnect, memory controller, and DRAM. Key challenges include cache hierarchy tag coherency, tag writeback ordering, snoop tag forwarding, context-switch tag save/restore, OS tag memory management, DMA interaction with tagged memory, and security-state isolation.&lt;/p&gt;
&lt;h2 id="mcetoc_1ju4qvn5k5"&gt;Cadence AXI5 VIP Solution&lt;/h2&gt;
&lt;p&gt;Cadence AXI/ACE Verification IP provides a comprehensive solution for verifying AXI5 MTE functionality at both the IP and system levels. The solution includes a protocol-compliant BFM, monitor and protocol checker, coverage model, and built-in building block sequences for generating MTE scenarios.&lt;/p&gt;
&lt;p&gt;Cadence AXI5 VIP helps verify all key MTE transaction types, configurable tag patterns, error injections, protocol rule enforcement, coverage closure, and complex scenarios generation using the built-in building block sequences. This allows verification teams to validate both protocol compliance and end-to-end memory tagging behavior across the SoC fabric.&lt;/p&gt;
&lt;p&gt;Cadence AXI5 VIP accelerates MTE verification closure by providing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ready-to-use MTE transaction generation using the build block sequences&lt;/li&gt;
&lt;li&gt;Protocol checks for AXI5 MTE signal legality and consistency&lt;/li&gt;
&lt;li&gt;Tag state and error behavior validation&lt;/li&gt;
&lt;li&gt;Coverage for MTE protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1ju4r00al6"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;AXI AMBA5 MTE provides a practical hardware mechanism for detecting memory safety violations with low overhead. The AXI5 MTE protocol extension makes this capability visible at the bus level by transporting tag information, supporting tag-only and tag-and-data transactions, and enabling in-fabric tag error reporting.&lt;/p&gt;
&lt;p&gt;As MTE adoption grows in Arm-based SoC designs, verifying correct tag movement, tag checking, ordering, coherency, and error reporting becomes essential. Cadence AXI5 VIP provides the protocol checks, coverage model, scenario generation, and system-level verification support needed to ensure AXI5 MTE implementations are complete, compliant, and robust.&lt;/p&gt;
&lt;p&gt;For more information on Cadence AXI/ACE VIP for AMBA AXI5 MTE verification, users can visit the Cadence Functional Verification community or contact the Cadence VIP team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For any additional clarification or technical assistance, users are encouraged to reach out through&amp;nbsp;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For more information, please visit&amp;nbsp;&amp;nbsp;&lt;a title="Cadence Simulation VIP Product Page" href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip.html" rel="noopener noreferrer" target="_blank"&gt;Cadence Simulation VIP Product Page&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364263&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Ravi Vora</name><uri>https://community.cadence.com/members/ravi-vora</uri></author><category term="Memory Security" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Memory%2bSecurity" /><category term="MTE" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MTE" /><category term="Memory Tag" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Memory%2bTag" /><category term="AXI5" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AXI5" /><category term="AMBA Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/AMBA%2bVerification%2bIP" /></entry><entry><title>MIPI M‑PHY v6.0: Evolution of ADAPT for Ultra‑High‑Speed Interfaces</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/mipi-m-phy-v6-0-evolution-of-adapt-for-ultra-high-speed-interfaces" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/mipi-m-phy-v6-0-evolution-of-adapt-for-ultra-high-speed-interfaces</id><published>2026-07-22T23:30:00Z</published><updated>2026-07-22T23:30:00Z</updated><content type="html">&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/8540.Designer-_2800_9_2900_.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Simulation VIP for MIPI M-PHY" href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-m-phy.html"&gt;MIPI M-PHY&lt;/a&gt; has evolved to support higher data rates with the introduction of &lt;b&gt;HS-G4 and beyond&lt;/b&gt;. This has created signal integrity challenges such as Inter-Symbol Interference (ISI), channel loss, and noise. To ensure reliable communication over these high-speed links, the&amp;nbsp;&lt;b&gt;ADAPT (Adaptive Equalization Training)&lt;/b&gt; feature was introduced in M-PHY. ADAPT is a training mechanism that enables us to analyze channel characteristics and refine its equalization settings before high-speed data transmission begins.&lt;/p&gt;
&lt;p&gt;ADAPT works by transmitting a known training pattern from the transmitter to the receiver. Using this pattern, the receiver can tune its equalizer to compensate for channel impairments and improve the quality of received data. This process reduces bit errors, increases signal robustness, and enhances interoperability between devices operating at high data rates.&lt;/p&gt;
&lt;p&gt;Originally introduced in M-PHY v4.1 for HS-G4, ADAPT continues to be used in HS-G5 and HS-G6. In M-PHY v6.0, where PAM-4 signaling is used with HS-G6 having 46.7 Gbps speed per lane, ADAPT becomes even more critical to maintain reliable link performance under increasingly challenging channel conditions.&lt;/p&gt;
&lt;h2&gt;Key Enhancements in M-PHY v6.0&lt;/h2&gt;
&lt;p&gt;In earlier M-PHY versions, ADAPT was defined only for HS-G4 and HS-G5 NRZ operation. With M-PHY v6.0, the ADAPT mechanism extends to support &lt;b&gt;HS-G6 PAM4 signaling&lt;/b&gt;, where each symbol carries two bits of information. The eye openings for PAM-4 are significantly smaller than in NRZ signaling. This increases susceptibility to channel impairments, noise, and ISI, making equalization training far more critical. The enhanced ADAPT process with different pattern sequences enables the receiver to accurately characterize channel behavior and establish optimal operating parameters before data transmission, ensuring reliable communication at speeds up to 46.7 Gbps per lane.&lt;/p&gt;
&lt;p&gt;&lt;a title="Simulation VIP for MIPI M-PHY" href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-m-phy.html"&gt;M-PHY v6.0&lt;/a&gt; introduces &lt;b&gt;Transmitter Equalization&lt;/b&gt;, enabling the transmitter to pre-condition the signal before transmission using techniques such as &lt;b&gt;pre-emphasis&lt;/b&gt; and &lt;b&gt;de-emphasis&lt;/b&gt;. It helps to compensate for frequency-dependent channel losses at the source and preserves signal quality as it propagates through the channel. During link training, optimal transmitter equalization settings can be selected based on channel characteristics, maximizing eye opening, and improving data recovery at the receiver. When combined with receiver equalization, Tx EQ provides an end-to-end signal integrity solution that enables robust and reliable operation at ultra-high PAM4 data rates.&lt;/p&gt;
&lt;table border="1.5" data-tablestyle="MsoTable15Grid4Accent1" data-tablelook="1184"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th style="text-align:center;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#333399;"&gt;Aspect&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th style="height:10px;text-align:center;vertical-align:middle;" scope="row" data-celllook="4369"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#333399;"&gt;HS-G4/G5&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th style="height:10px;text-align:center;vertical-align:middle;" scope="row" data-celllook="4369"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#333399;"&gt;HS-G6&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Encoding &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;8b10b &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;PAM-4 (1b1b) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Pattern &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;MK0 + PRBS9 (511+1 bits) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;PRBS9 + PRBS15&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Total Length &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;650 bits (65 symbols &amp;times; 10) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;512 + 32768 symbols&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Polynomial &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;X⁹ + X⁵ + 1 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;X⁹ + X⁵ + 1 &amp;amp; X&amp;sup1;⁵ + X&amp;sup1;⁴ + 1 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Phases &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Single phase &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Two phases (L0_L3, L0_L1_L2_L3) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Levels &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;2 (NRZ) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="height:10px;vertical-align:middle;" data-celllook="4369"&gt;
&lt;p&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;4 (PAM-4) &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In conclusion, ADAPT plays a critical role in enabling reliable high‑speed operation in M‑PHY by ensuring robust link establishment even over challenging channel conditions. Through well‑designed training patterns, precise timing control, and coordinated protocol mechanisms, it supports signal integrity and stability at advanced data rates like HS‑G6. At the same time, its design preserves backward compatibility, ensuring seamless operation across both legacy and newer speed grades.&lt;/p&gt;
&lt;p&gt;With the availability of the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-m-phy.html"&gt;Cadence Verification IP for M-PHY&lt;/a&gt;, adopters can start working with these specifications immediately, ensuring compliance with the standard and achieving the fastest path to IP and SoC verification closure. Incorporating the latest protocol updates, the mature and comprehensive Cadence Verification IP (VIP) for the M-PHY protocol provides a complete bus functional model (BFM), integrated automatic protocol checks, and coverage model. Designed for easy integration into testbenches at IP, system-on-chip (SoC), and system levels, the VIP for M-PHY helps you reduce the time to evaluate, accelerate verification closure, and ensure end-product quality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more at &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/mipi/mipi-m-phy.html"&gt;Simulation VIP for MIPI M-PHY&lt;/a&gt; product page or reach out to &lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;Cadence&amp;#39;s Verification IP experts&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364253&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Sugandha Bansal</name><uri>https://community.cadence.com/members/sugandha-bansal</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="MIPI Alliance" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MIPI%2bAlliance" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="MIPI" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MIPI" /><category term="MPHY" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MPHY" /></entry><entry><title>PSS 3.1 Channels: The Game Changer for Target-Time Communication</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/pss-3-1-channels-the-gamechanger-for-target-time-communication" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/pss-3-1-channels-the-gamechanger-for-target-time-communication</id><published>2026-07-16T18:17:00Z</published><updated>2026-07-16T18:17:00Z</updated><content type="html">&lt;p style="text-align:justify;"&gt;&lt;a href="https://www.accellera.org/downloads/standards/portable-stimulus"&gt;Portable Stimulus&lt;/a&gt; models already feature powerful language constructs to describe scenario intent. Activities, constraints, resources, buffers, streams, and states let the Perspec solver build a legal action schedule before the test runs. That is the right layer for planned action relationships: which action produces data, which action consumes it, which operations may run in parallel, and which resources must be shared or locked. Build a legal action schedule before the test runs. That is the right layer for planned action relationships: which action produces data, which action consumes it, which operations may run in parallel, and which resources must be shared or locked.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;The tests generated also need to coordinate while they are running. A target-side interrupt may arrive after a device finishes work. A service loop may need to wait for requests from another running exec block. One execution context may need to send several values to another before either action completes. These situations are not just solver scheduling relationships; they are target-time communication between realization code that is already executing.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;The upcoming PSS 3.1 channel addresses this gap. A channel is a component type defined inside the core library sync_pkg package; it is designed to carry typed values at the target time. It provides blocking get() and put() methods, nonblocking try_get() and try_put() methods, FIFO ordering up to the declared depth, and thread-safe behavior for concurrently running realization code. PSS 3.1 channels are a standardized feature that replaces a Perspec proprietary implementation known as ps_event.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Why Channels Are Different from Flow Objects&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Buffers and streams are scenario-layer flow objects. They make dependencies visible to the solver. A buffer says the producer must finish before consumers start. A stream says producer and consumer actions are scheduled concurrently. These are powerful constructs, but they describe relationships in the solved action graph.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Channels operate inside target execution. An action can remain active, loop, compute a value from target-time state, put that value into a channel, wait for a completion value, and continue. Communication does not need to be exposed as a separate solver-visible flow object for every runtime exchange.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Use flow objects when the relationship should shape the generated scenario. Use channels when the running target code needs FIFO communication or blocking synchronization after execution has started.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Basic Example: Runtime Request and Completion&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;The following example models a simple client and service that exchange multiple requests and completions while both exec bodies are running. The client sends a request, waits for the matching completion, then sends the next request. The service waits for each request and returns to completion.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;import std_pkg::*;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; import sync_pkg::*;&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; const int NUM_REQUESTS = 4;&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; struct request_s : packed_s&amp;lt;&amp;gt; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; bit[16] addr;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; bit[8] data;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; struct completion_s : packed_s&amp;lt;&amp;gt; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; bit[8] status;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; bit[8] observed_data;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; component pss_top {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; channel_c&amp;lt;request_s, 2&amp;gt; requests;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; channel_c&amp;lt;completion_s, 2&amp;gt; completions;&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; action client {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec body {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat (i:NUM_REQUESTS) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request_s req;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; completion_s done;&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.addr = (bit[16])(0x1000 + i);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.data = (bit[8])(0x40 + i);&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message(LOW, &amp;quot;client sends request addr=0x%x data=0x%x&amp;quot;, req.addr, req.data);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comp.requests.put(req);&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; done = comp.completions.get();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (done.status != 0) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error(&amp;quot;request failed with status %d&amp;quot;, done.status);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (done.observed_data != req.data) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error(&amp;quot;completion data mismatch expected=0x%x actual=0x%x&amp;quot;, req.data, done.observed_data);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; action service {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec body {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat (i:NUM_REQUESTS) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request_s req;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; completion_s done;&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req = comp.requests.get();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message(LOW, &amp;quot;service handles request addr=0x%x data=0x%x&amp;quot;, req.addr, req.data);&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; done.status = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; done.observed_data = req.data;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comp.completions.put(done);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt; &lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; action runtime_request_completion {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activity {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parallel {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do client;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do service;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This is not just a producer-consumer stream. A stream would make the producer and consumer relationship part of the solved scenario. Here, the interesting behavior is the target-time request/completion loop inside the running exec bodies. The two actions stay active, exchange several values, and block only when the channel operation requires it. That is the kind of runtime coordination channels were designed to express.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This example was generated successfully with Cadence&amp;rsquo;s Perspec version 26.06.001 using the below command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;perspec generate -pss runtime_request_completion.pss -top_action pss_top::runtime_request_completion&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Interrupt Modeling Is an Important Use Case&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Interrupt-driven flows are a common place where channels are useful. A test may start a device operation, continue running target code, and then wait until an interrupt handler confirms that the hardware has completed the operation.&lt;/p&gt;
&lt;p&gt;A typical structure is:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;import sync_pkg::*;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; extend component uart_c {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; channel_c&amp;lt;bit&amp;gt; tx_irq;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; channel_c&amp;lt;bit&amp;gt; rx_irq;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; target function void Isr() {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uart_ctrl_ua_cisr_reg_s status;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = regs.ua_cisr.read();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status.tempty == 1) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool put_status = tx_irq.try_put(1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (put_status == false) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message(LOW, &amp;quot;TX interrupt indication could not be queued&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status.rtrig == 1) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool put_status = rx_irq.try_put(1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (put_status == false) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message(LOW, &amp;quot;RX interrupt indication could not be queued&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; extend action rx_uart_data {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec body {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bit[32] fifo_data;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comp.rx_irq.get();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fifo_data = comp.regs.ua_rfifo.read().data;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check or process the received data here.&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;The ISR uses try_put() because interrupt handlers should avoid blocking when possible. If the channel is full, the return value makes overflow handling explicit. The waiting action uses get() because it should stop at that point until the interrupt indication is available.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This mirrors real interrupt-driven software more naturally than a purely solved dependency. The action is not merely ordered after another action. It is waiting for a runtime condition observed by the target code.&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Executors and Target Execution Units&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;PSS already uses the term executor for a target thread or processing context that can run exec code. A generated test may also have a larger packaging boundary: a target program or image that contains one or more executors. In the current Perspec flows this packaging boundary is called an executable. In the upcoming PSS 3.1 terminology, this concept is expected to be called a target execution unit.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This distinction matters for channels because target-time communication may happen between exec blocks that are placed in different ways:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;On the same executor,&lt;/li&gt;
&lt;li&gt;On different executors in the same target execution unit,&lt;/li&gt;
&lt;li&gt;Or on executors that belong to different target execution units.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;The PSS source code should not need to change for each placement. The model says put(), get(), try_put(), or try_get() on a channel. The tool then chooses the appropriate generated implementation for the target platform.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;When both sides of the channel are local to the same generated C image, the implementation can use local generated storage and a local mailbox-style synchronization mechanism. When the channel crosses target execution units, the implementation must use a communication mechanism both sides can access. In the HSI example, Perspec generated two C files:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;One C file runs on the simulation side and drives the SystemVerilog environment through DPI, while another embedded C file executes on the OpenRISC RTL.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;For channel communication that crosses that boundary, Perspec generated a shared memory mailbox plus a doorbell-style notification mechanism.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This is one of the main benefits of channels. The model captures the target-time communication intent once, while the tool handles whether the generated implementation is local, shared-memory based, or mapped to another platform-specific synchronization mechanism.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;When to Use Channels&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Use channels when:&lt;/p&gt;
&lt;ul style="text-align:justify;"&gt;
&lt;li&gt;Communication happens while exec code is running.&lt;/li&gt;
&lt;li&gt;The producer and consumer are long-running target-side behaviors rather than single solved action endpoints.&lt;/li&gt;
&lt;li&gt;Runtime code needs FIFO ordering with a declared depth.&lt;/li&gt;
&lt;li&gt;Blocking or nonblocking synchronization is needed between concurrently running realization code.&lt;/li&gt;
&lt;li&gt;An interrupt handler or callback needs to notify model code that is waiting at the target time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;Do not use channels just to replace flow objects. If the dependency should be visible to the solver, use buffers, streams, states, resources, and constraints. Channels are for target-time communication in the realization layer.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;PSS 3.1 channels add a standard way to describe target-time communication between running realization code. They complement, rather than replace, solver scheduling and flow objects. Flow objects shape the scenario before execution; channels coordinate execution after the generated test is already running.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Interrupt modeling is one of the most common uses, but it is not the only one. Request/completion loops, service-style target code, callbacks, and communication across execution contexts all benefit from the same abstraction. Channels let the model express the intent portably while leaving the implementation details to the PSS tool and target platform. While PSS LRM 3.1 is expected to be officially published in October&amp;ndash;November 2026, users can start leveraging channel functionality today with &lt;a href="http://downloads.cadence.com/"&gt;Perspec version 26.06.001&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364251&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Siddh Virani</name><uri>https://community.cadence.com/members/siddh-virani</uri></author><category term="PSS 3.1" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PSS%2b3-1" /><category term="Perspec" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Perspec" /><category term="System Design and Verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/System%2bDesign%2band%2bVerification" /><category term="channels" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/channels" /><category term="perspec system verifier" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/perspec%2bsystem%2bverifier" /><category term="target time communication" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/target%2btime%2bcommunication" /></entry><entry><title>Why 10BASE-T1S Automotive Ethernet SoC Verification Needs More Than Simulation?</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/why-10base-t1s-automotive-ethernet-soc-verification-needs-more-than-simulation" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/why-10base-t1s-automotive-ethernet-soc-verification-needs-more-than-simulation</id><published>2026-07-14T04:05:00Z</published><updated>2026-07-14T04:05:00Z</updated><content type="html">Cadence Multi-Platform Verification improves functional coverage and verification time
The recent advancements in the automotive industry, such as ADAS/AV, and infotainment all depend on reliable in-vehicle communication. To keep up with the high-spe...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/why-10base-t1s-automotive-ethernet-soc-verification-needs-more-than-simulation"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364230&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Vinod Khera</name><uri>https://community.cadence.com/members/vinod-khera</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="Emulation" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Emulation" /><category term="simulation" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/simulation" /></entry><entry><title>Understanding PCIe 6.0 Power States: L0p vs L0s vs L1</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-pcie-6-0-power-state-l0p-vs-l0s-vs-l1" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-pcie-6-0-power-state-l0p-vs-l0s-vs-l1</id><published>2026-07-13T06:09:00Z</published><updated>2026-07-13T06:09:00Z</updated><content type="html">&lt;p&gt;&lt;span data-contrast="none"&gt;PCI Express has always focused on a single goal: maximizing performance while minimizing power. However, with PCIe 6.0, maintaining this balance has become far more challenging. With PAM4 signaling in PCIe 6.0, link power is no longer a secondary concern&amp;mdash;it is now a first-order design constraint. The PHY consumes significantly more energy, and modern workloads generate traffic patterns characterized by bursts of multiple flits rather than continuous transfers.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;This is where PCIe 6.0 introduces a major shift in power-state strategy: the real battle is no longer between L0 and L1&amp;mdash;it is between L0p, L0s, and L1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-contrast="none"&gt;In this blog, we explore how these states differ, why PCIe 6.0 changes the rules, and which one matters most moving forward.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;span class="TextRun MacChromeBold SCXW54158574 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW54158574 BCX0"&gt;Why Power States Matter More in PCIe&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW54158574 BCX0"&gt;6.0&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW54158574 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;PCIe 6.0 doubles bandwidth compared to PCIe 5.0. While PCIe 5.0&amp;nbsp;relies&amp;nbsp;on NRZ signaling, PCIe 6.0 adopts&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;PAM4&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="none"&gt;, along with &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;Forward Error Correction (FEC)&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="none"&gt; and &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;FLIT mode&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="none"&gt; to achieve higher throughput.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;However, these advancements come at a cost:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="21" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="none"&gt;Increased PHY power consumption&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="21" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="none"&gt;Higher equalization complexity&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="21" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="none"&gt;Greater idle-to-active power overhead&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;In this environment,&amp;nbsp;remaining&amp;nbsp;in L0 (fully active) during idle gaps becomes inefficient. Yet, modern workloads, especially in accelerators, AI, and storage systems consist&amp;nbsp;in &lt;/span&gt;&lt;span data-contrast="none"&gt;frequent micro-idle periods&lt;/span&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;Therefore, PCIe 6.0 requires power states capable of responding &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="none"&gt;within microseconds&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="none"&gt;, without compromising throughput or latency.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;span class="TextRun MacChromeBold SCXW198337323 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW198337323 BCX0"&gt;PCIe Link Power-State Landscape&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW198337323 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span class="EOP Selected SCXW198337323 BCX0"&gt;&lt;span class="TextRun SCXW58250102 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW58250102 BCX0"&gt;PCIe defines multiple link states within the &lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun MacChromeBold SCXW58250102 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW58250102 BCX0"&gt;LTSSM (Link Training and Status State Machine)&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW58250102 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW58250102 BCX0"&gt;. The most relevant states for active and idle operation are:&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW58250102 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table data-tablestyle="MsoNormalTable" data-tablelook="1184"&gt;&lt;caption&gt;&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;State&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Meaning&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Depth&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Wake Latency&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Fully active&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;None&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L0s&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Shallow standby&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Light sleep&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Low&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L1&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Deep idle&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Heavy sleep&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Higher&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L0p&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Low-power active (6.0+)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;New hybrid&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Near-zero&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size:inherit;"&gt;&lt;span class="EOP Selected SCXW54158574 BCX0"&gt;&lt;span class="TextRun SCXW125988689 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW125988689 BCX0"&gt;PCIe 6.0 introduces &lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun MacChromeBold SCXW125988689 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW125988689 BCX0"&gt;L0p&lt;/span&gt;&lt;/span&gt;&lt;span class="TextRun SCXW125988689 BCX0" lang="EN-US" data-contrast="none"&gt;&lt;span class="NormalTextRun SCXW125988689 BCX0"&gt; because neither L0s nor L1 alone can effectively handle modern workload demands.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW125988689 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span lang="EN-US" data-contrast="auto"&gt;L0s: The Legacy &amp;ldquo;Quick Idle&amp;rdquo; State&lt;/span&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L0s&amp;nbsp;was&amp;nbsp;introduced as a fast idle state for short inactivity periods.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;In L0s, the transmitter may stop sending symbols, the receiver stays partially&amp;nbsp;ready,&amp;nbsp;and the link is still logically active.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;But Why Did&amp;nbsp;L0s Work&amp;nbsp;in Older&amp;nbsp;Generations?&amp;nbsp;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Because in&amp;nbsp;previous&amp;nbsp;generations the&amp;nbsp;PHY power was manageable, the traffic/data patterns&amp;nbsp;were&amp;nbsp;simpler,&amp;nbsp;and the wake latency requirements were relaxed. L0s provided moderate savings without much complexity.&amp;nbsp;But L0s turn out to be limited&amp;nbsp;to&amp;nbsp;PCIe 6.0.&amp;nbsp;At PAM4 as the equalization must remain stable, the continuous readiness becomes&amp;nbsp;expensive. So&amp;nbsp;L0s does not reduce enough PHY power to justify its use.&amp;nbsp;So,&amp;nbsp;the&amp;nbsp;PCIe 6.0, L0s becomes less effective.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;How About L1?&amp;nbsp;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Let us&amp;nbsp;understand L1&amp;nbsp;now.&amp;nbsp;L1 is a&amp;nbsp;deeper,&amp;nbsp;low-power idle state.&amp;nbsp;In L1, most of the link circuitry powers&amp;nbsp;down,&amp;nbsp;and the exit requires a more involved wake sequence. Though&amp;nbsp;it&amp;rsquo;s&amp;nbsp;beneficial in terms of significant power savings&amp;nbsp;and is ideal for long idle durations,&amp;nbsp;it&amp;nbsp;has higher&amp;nbsp;exit latency&amp;nbsp;and can disrupt low-latency fabrics (e.g., CXL)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span class="TextRun SCXW88442263 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;The m&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;odern PCIe traffic&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;which consists of b&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;urst transfer&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;and m&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;icro-idle gap&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;If the link enters L1 too&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;aggressively,&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;the w&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;ake overhead&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;will&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;hurt&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;performance&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;and will cause the l&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;atency-sensitive traffic&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;to suffer&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;. So&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;PCIe 6.0&lt;/span&gt;&lt;span class="NormalTextRun SCXW88442263 BCX0"&gt;&amp;nbsp;needs something between L0 and L1.&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW88442263 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Hence L0p Was Introduced&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;L0p (Low Power L0) is a new PCIe&amp;nbsp;6.0&amp;nbsp;link state designed to reduce power while keeping the link operational and responsive.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;It is best described as:&amp;nbsp;&lt;/span&gt;&lt;span data-contrast="none"&gt;&amp;ldquo;Active mode, but PHY-optimized.&amp;rdquo;&lt;/span&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;L0p sits between:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="12" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;L0 (full activity)&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="12" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;L1 (deep sleep)&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;In L0p,&amp;nbsp;the&amp;nbsp;link&amp;nbsp;remains&amp;nbsp;logically active, some portions of the PHY can be powered down, lane width may be reduced&amp;nbsp;dynamically,&amp;nbsp;and the exit latency is near-zero compared to L1. This&amp;nbsp;makes L0p ideal for short idle gaps.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;span class="TextRun MacChromeBold SCXW251092773 BCX0" lang="EN-US" data-contrast="auto"&gt;&lt;span class="NormalTextRun SCXW251092773 BCX0"&gt;L0p vs L0s vs L1:&amp;nbsp;&lt;/span&gt;&lt;span class="NormalTextRun SCXW251092773 BCX0"&gt;Key Comparison&lt;/span&gt;&lt;/span&gt;&lt;span class="EOP Selected SCXW251092773 BCX0"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style="font-weight:400;" data-tablestyle="MsoNormalTable" data-tablelook="1184"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Feature&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;L0s&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;L1&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;L0p&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Introduced&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Earlier PCIe gens&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PCIe baseline&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PCIe&amp;nbsp;6.0&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Target Idle Duration&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Very short&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Long&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Short-to-medium&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Power Savings&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Low-&amp;nbsp;moderate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;High&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Moderate-&amp;nbsp;high&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Exit Latency&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Low&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;High&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Very low&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PHY Power Reduction&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Limited&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Strong&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Significant&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Best for&amp;nbsp;6.0&amp;nbsp;PAM4?&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Not really&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Sometimes&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Absolutely&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Supports Burst Workloads&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Partial&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Poor&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td data-celllook="4369"&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;Excellent&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One unique&amp;nbsp;PCIE 6.0&amp;nbsp;capability is that L0p may&amp;nbsp;support&amp;nbsp;dynamic link width changing.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;L0p&amp;nbsp;supports:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="18" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;x16 &amp;rarr; x8 &amp;rarr; x4 downsizing during idle&amp;nbsp;gaps.&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="18" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Maintaining at least one active lane&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="18" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Restoring full width instantly when traffic returns&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;This is a major step toward&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;span data-contrast="none"&gt;power&amp;nbsp;aware of&amp;nbsp;PCIe fabrics&lt;/span&gt;&lt;span data-contrast="auto"&gt;.&amp;nbsp;So,&amp;nbsp;in PCIe&amp;nbsp;6.0&amp;nbsp;systems, the emerging hierarchy is&amp;nbsp;that&amp;nbsp;L0 for full traffic,&amp;nbsp;L0p for burst idle gaps,&amp;nbsp;L1 for extended&amp;nbsp;inactivity,&amp;nbsp;and&amp;nbsp;L0s becomes increasingly&amp;nbsp;irrelevant.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="auto"&gt;PCIe&amp;nbsp;6.0&amp;nbsp;changed the&amp;nbsp;power management&amp;nbsp;equation.&amp;nbsp;L0 is too expensive to stay in during idle&amp;nbsp;gaps;&amp;nbsp;L1 saves power but adds&amp;nbsp;latency,&amp;nbsp;and&amp;nbsp;L0s is no longer sufficient for PAM4 PHY power. Hence&amp;nbsp;L0p fills the critical missing middle.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;L0p is not just another low-power state.&amp;nbsp;&lt;/span&gt;&lt;span data-contrast="auto"&gt;As PCIe evolves toward Gen 6.0 and forward&amp;nbsp;and on CXL fabrics, L0p will become foundational for&amp;nbsp;more output for&amp;nbsp;less power.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-contrast="none"&gt;To learn more about Cadence solutions for PCIe and CXL verification, explore these resources:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li data-font="Symbol" data-listid="24" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/pcie.html"&gt;VIP for PCI Express&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-font="Symbol" data-listid="24" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span&gt;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/vip-tools/triplecheck-test-suite.html"&gt;TripleCheck Test Suite&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;For more information on PCIe in general, and on the various PCI standards, see the&amp;nbsp;&lt;/span&gt;&lt;a href="https://pcisig.com/"&gt;&lt;span data-contrast="none"&gt;PCI-SIG website&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span data-contrast="none"&gt;If you have more feedback or need more information, reach out to us at&amp;nbsp;&lt;/span&gt;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;&lt;span data-contrast="none"&gt;talk_to_vip_expert@cadence.com&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364247&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>mrana</name><uri>https://community.cadence.com/members/mrana</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="PCIExpress" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PCIExpress" /><category term="PCIe 6.0" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PCIe%2b6-0" /></entry><entry><title>From Pacemakers to ADAS: Verifying Systems Before Tapeout</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/from-pacemakers-to-adas-verifying-systems-before-tapeout" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/from-pacemakers-to-adas-verifying-systems-before-tapeout</id><published>2026-07-07T14:30:00Z</published><updated>2026-07-07T14:30:00Z</updated><content type="html">&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt="Pacemaker to ADAS" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/8132.Pacemaker_5F00_to_5F00_ADAS_5F00_2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Imagine discovering a critical bug in a heart pacemaker, not after deployment, not during final qualification testing, but months before the chip itself exists.&lt;/p&gt;
&lt;p&gt;At first glance, that sounds impossible. After all, how can engineers validate a system that has not yet been manufactured? Yet this question sits at the center of modern semiconductor development, where the challenge is no longer simply building silicon. Increasingly, the real challenge is proving that the software, algorithms, interfaces, and system behavior will function correctly long before the first wafer reaches the fab.&lt;/p&gt;
&lt;p&gt;As systems become more software-defined, the traditional development model is being pushed to its limits. Medical devices, automotive safety systems, and intelligent robotics platforms all depend on increasingly sophisticated SoCs that integrate hardware, firmware, operating systems, communication stacks, sensors, and application software. Waiting for first silicon before beginning meaningful validation is no longer practical. Development cycles are too short, software stacks are too large, and the cost of finding problems late in the process is simply too high.&lt;/p&gt;
&lt;p&gt;This shift is driving a new approach to verification: one that enables software bring-up, system validation, and large-scale testing months before physical hardware is available. Platforms such as Cadence Palladium Emulation System and Protium Enterprise Prototyping System are helping engineering organizations make that transition by allowing teams to validate complex systems earlier, iterate faster, and reduce risk throughout development.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdv7is6"&gt;Different Industries. The Same Verification Challenge.&lt;/h2&gt;
&lt;p&gt;A pacemaker.&lt;/p&gt;
&lt;p&gt;An ADAS controller.&lt;/p&gt;
&lt;p&gt;A humanoid robot.&lt;/p&gt;
&lt;p&gt;At first glance, they seem to have little in common.&lt;/p&gt;
&lt;p&gt;One monitors heart rhythms.&lt;/p&gt;
&lt;p&gt;Another helps prevent vehicle accidents.&lt;/p&gt;
&lt;p&gt;The third navigates the physical world through sensors, perception, and motion control.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;margin-left:auto;margin-right:auto;max-height:480px;max-width:640px;" alt="Silicon Nodes in Mission critical devices" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0207.Silicon_5F00_Nodes_5F00_in_5F00_Devices.png" /&gt;&lt;/p&gt;
&lt;p&gt;Yet beneath the surface, they share the same engineering reality. All three depend on increasingly sophisticated SoCs that combine hardware, firmware, operating systems, communication interfaces, sensor processing, and application software.&lt;/p&gt;
&lt;p&gt;And all three must answer the same question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you validate system behavior before the hardware exists?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Traditional simulation remains essential, but as designs grow larger and software stacks become more complex, simulation alone often becomes the bottleneck. Teams need environments that can execute real workloads, run longer test scenarios, and support software development months before first silicon arrives.&lt;/p&gt;
&lt;p&gt;That is where hardware-assisted verification changes the equation.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdvpd37"&gt;When a Pacemaker Needs Years of Confidence&lt;/h2&gt;
&lt;p&gt;&lt;img class="align-left" style="float:left;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/4812.Image_5F00_Medical_5F00_V01.png" /&gt;Consider a modern implantable cardiac device. The algorithms inside these systems continuously analyze physiological signals and make decisions that directly impact patient safety. Testing them is not simply a matter of running a handful of unit tests. Engineers must evaluate thousands of signal variations, operating conditions, and edge cases to build confidence that the system will behave correctly over years of operation. For many organizations, the challenge is compounded by the fact that relatively small hardware teams must support large, globally distributed software organizations working on multiple product variants simultaneously.&lt;/p&gt;
&lt;p&gt;In these environments, the bottleneck is often not engineering expertise but access to realistic hardware platforms. Cloud-based prototyping environments help remove that constraint by allowing software teams to begin algorithm validation, firmware development, and long-duration testing long before silicon becomes available. Instead of compressing validation into the final stages of development, teams can start earlier, test longer, and uncover issues when they are far less expensive to fix.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdul2e1"&gt;ADAS: Where &amp;quot;Almost Correct&amp;quot; Is Not Good Enough&lt;/h2&gt;
&lt;p&gt;&lt;img class="align-left" style="float:left;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/2364.Automotive.png" /&gt;The automotive industry faces a different but equally demanding challenge. Advanced Driver Assistance Systems (ADAS) must interact reliably with sensors, communication networks, safety mechanisms, and vehicle control systems while operating under strict functional safety requirements. Here, verification is not simply about proving that software runs correctly. It is about proving that the entire system behaves correctly under realistic operating conditions.&lt;/p&gt;
&lt;p&gt;A software model may suggest everything is working as intended, but real-world behavior is often influenced by interface timing, protocol interactions, and system-level effects that only emerge when hardware and software execute together. This is why many automotive teams use emulation platforms to perform large-scale hardware verification and regression testing before transitioning to hardware-accurate prototyping environments for software validation. The goal is not merely faster execution. It is confidence that the complete system will behave as expected when exposed to real interfaces, real workloads, and real operating conditions.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdul2e2"&gt;Accelerating the Learning Loop in Robotics&lt;/h2&gt;
&lt;p&gt;&lt;img class="align-left" style="float:left;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/5078.Robotics.png" /&gt;Robotics introduces yet another layer of complexity. Every movement a robot makes depends on a constant stream of data flowing through sensors, vision systems, accelerometers, motion controllers, and software algorithms. What appears effortless from the outside is the result of thousands of iterative development cycles. A robot attempts a movement, fails, the software is adjusted, and the process repeats. Innovation depends on how quickly teams can complete that loop.&lt;/p&gt;
&lt;p&gt;Traditional simulation often becomes a bottleneck because realistic robotics workloads require long-running execution and continuous interaction between hardware and software. Hardware-assisted verification environments allow engineers to run larger workloads, validate software against realistic hardware behavior, and iterate faster without waiting for physical silicon. The result is not simply accelerated verification, it is accelerated learning, which often becomes the difference between a promising concept and a viable product.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdul2e3"&gt;The Bigger Shift: Verification Is Becoming a Continuous Workflow&lt;/h2&gt;
&lt;p&gt;Across all three industries, the most important transformation is not technological. It is organizational. Historically, software teams waited for hardware. Today, software development often begins months before silicon arrives. Historically, validation happened late in the project schedule. Today, it starts much earlier and continues throughout development. Historically, verification resources were tied to physical labs and limited infrastructure. Today, cloud-enabled environments allow globally distributed teams to access sophisticated verification platforms from virtually anywhere.&lt;/p&gt;
&lt;p&gt;This shift is changing how engineering organizations operate. Small hardware teams can support much larger software organizations. Verification scales more effectively with growing design complexity. Development no longer stalls while teams wait for physical hardware to arrive. Most importantly, organizations gain confidence earlier in the lifecycle, when design changes are easier to make and risks are easier to manage.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdul2e4"&gt;Why This Matters More Than Ever&lt;/h2&gt;
&lt;p&gt;As semiconductor systems continue to grow in complexity, this capability is becoming increasingly important. Medical devices are becoming smarter. Vehicles are becoming more autonomous. Robots are becoming more capable. Every advancement introduces more software, more interfaces, more sensors, and more opportunities for failure. The traditional approach of waiting for silicon before validating complete system behavior simply cannot keep pace.&lt;/p&gt;
&lt;p&gt;The organizations pulling ahead are not necessarily those building the most advanced chips. They are the ones finding ways to validate reality earlier. They are reducing iteration cycles, enabling hardware and software teams to work in parallel, and creating development environments that closely mirror real-world operation long before tapeout.&lt;/p&gt;
&lt;p&gt;That is why hardware-assisted verification platforms such as Palladium and Protium matter. They are not simply tools for running tests faster. They are helping redefine when validation happens, how teams collaborate, and how confidence is built throughout the development process.&lt;/p&gt;
&lt;h2 id="mcetoc_1jstdul2e5"&gt;Final Takeaway&lt;/h2&gt;
&lt;p&gt;The most compelling lesson from mission-critical semiconductor development is surprisingly simple: the earlier you can validate reality, the fewer surprises you encounter later. Whether the product is a pacemaker, an ADAS controller, or a humanoid robot, the objective remains the same: find issues earlier, validate longer, and move faster without sacrificing confidence.&lt;/p&gt;
&lt;p&gt;For engineering leaders navigating increasingly complex SoC development, that may be one of the most important competitive advantages emerging in modern verification.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Want to hear the full discussion?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click &lt;a href="https://events.cadence.com/hub/events/65e9ed9e-9b69-4c45-a097-430307ecd86a/sessions/8d8442f7-8902-471e-bae8-d06e092364ac?autoPlay=true"&gt;here&lt;/a&gt; to listen to the complete discussion by &lt;em&gt;Lance Tamura, product management director&lt;/em&gt; and see how leading teams are accelerating software and system validation before first silicon.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364236&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Reela Samuel</name><uri>https://community.cadence.com/members/reela-samuel</uri></author><category term="Automotive" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Automotive" /><category term="Protium" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Protium" /><category term="Palladium" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Palladium" /><category term="medical" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/medical" /><category term="robotics" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/robotics" /><category term="verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification" /></entry><entry><title>DFI 6.0 Key Highlights of the Latest DFI Specification</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/dfi-6-0-key-highlights-of-the-latest-dfi-specification" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/dfi-6-0-key-highlights-of-the-latest-dfi-specification</id><published>2026-07-07T09:23:00Z</published><updated>2026-07-07T09:23:00Z</updated><content type="html">&lt;p&gt;The &lt;strong&gt;DDR PHY Interface (DFI)&lt;/strong&gt; protocol specifies the signals, timing parameters, and configurable options necessary for the transfer of command information and data across the DFI, facilitating communication between the DDR memory controller (MC) and the DDR PHY (PHY). Programmable parameters are system-defined or provided by either the MC or PHY and are set within the MC an&lt;img class="align-right" style="float:right;max-height:231px;max-width:441px;" alt=" " src="https://community.cadence.com/resized-image/__size/882x462/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1783365587181v1.png" /&gt;d/or PHY as required. The DFI 6 protocol is applicable to DDR5, DDR5 RDIMM, DDR5 LRDIMM, DDR5 MRDIMM, LPDDR5, LPDDR6, and HBM4 DRAM technologies.&lt;/p&gt;
&lt;p&gt;DFI 6.0.1 (also referred to as &lt;strong&gt;DFI 6.0&lt;/strong&gt; in the rest of the blog) is the latest standard of the DFI specification. It removes support for earlier DDR/LPDDR generations, adds support for LPDDR6 and HBM4, adds/modifies low-power features, reorganizes WCK and memory-error handling, removes the disconnect protocol, and adds support for 1:3 and 1:6 DFI ratios.&lt;/p&gt;
&lt;p&gt;Highlights of the DFI 6.0 standard (as compared to DFI 5.2):&lt;/p&gt;
&lt;h2&gt;Supported Memory Standards&lt;/h2&gt;
&lt;p&gt;DFI 6.0 narrows the legacy scope and re-centers the specification on newer memories, while adding explicit support for LPDDR6 and HBM4. DFI 6.0 also removed DDR/2/3/4 and LPDDR/2/3/4 support that were supported until DFI 5.2 specification.&lt;/p&gt;
&lt;p&gt;DFI 6.0 includes LPDDR6 and HBM4 while describing various DFI bus operations like CA bus mapping, functional-use sections, and figures for specific device timing.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Command Bus Signal Naming Change&lt;/h2&gt;
&lt;p&gt;The command/address signaling was updated in DFI 6.0 from a dfi_address in v5.2 to a dfi_cmdaddr to better align with the current protocols. There is no functional impact of this change. While DFI 5.2 describes CA mapping onto the dfi_address&amp;nbsp;bus, including detailed mapping text for LPDDR2/3/4/5 and DDR5,&amp;nbsp;in DFI 6.0, the contents and functional timing examples refer to mapping the CA bus to the dfi_cmdaddr&amp;nbsp;bus, and the LPDDR6 timing figures explicitly use dfi_cmdaddr&amp;nbsp;fields such as dfi_cmdaddr_p0[3:0]&amp;nbsp;and dfi_cmdaddr_p1[3:0].&amp;nbsp;DFI 6.0 also adds command bus enable dfi_cmd_en, to allow selective command sampling that can be used for runtime power optimization for command path.&lt;/p&gt;
&lt;h2&gt;Disconnect Protocol Removed&lt;/h2&gt;
&lt;p&gt;DFI 5.2&amp;nbsp;includes support for the &amp;ldquo;disconnect protocol&amp;rdquo; that can be used to break up a handshake between two DFI signals. This information is conveyed through the dfi_disconnect_error signal. DFI 6.0 doesn&amp;rsquo;t have any explicit &amp;ldquo;disconnect protocol&amp;rdquo;. However, DFI6.0 does allow using existing handshake signals in a different way to allow for ending early.&lt;/p&gt;
&lt;h2&gt;Error Handling Reorganized and Expanded&lt;/h2&gt;
&lt;p&gt;DFI 6.0 presents error reporting in a more explicit memory-oriented structure than DFI 5.2.&amp;nbsp; DFI 5.2 specification includes an &amp;ldquo;error interface&amp;rdquo; and an &amp;ldquo;error signaling&amp;rdquo; section.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In DFI 6.0, the contents include &amp;ldquo;memory errors/interrupts&amp;rdquo; under the command interface and a dedicated &amp;ldquo;memory error/interrupt reporting&amp;rdquo; chapter with explicit examples for dfi*errmode = 0&amp;nbsp;and dfi*errmode = 1, as well as command, write-data, and read-data error timing parameters.&lt;/p&gt;
&lt;h2&gt;Low-Power and Sleep Enhancements&lt;/h2&gt;
&lt;p&gt;The DFI 6.0 added and modified low-power features. DFI 6.0&amp;nbsp;adds explicit top-level status and functional use sections for sleep, including &amp;ldquo;sleep request protocol,&amp;rdquo; and specifically calls out corrections to the frequency change and sleep protocols.&amp;nbsp;DFI 6.0 also removed the disconnect protocol from all handshakes&lt;/p&gt;
&lt;p&gt;By contrast, 5.2&amp;nbsp;has low-power-control handshaking and frequency-change sections, but it does not have a standalone top-level sleep section in the table of contents.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Frequency Ratio Support Expanded&lt;/h2&gt;
&lt;p&gt;DFI 5.2 matched-frequency and frequency-ratio systems include 1:2, 1:4, or 1:8 ratios, and their figures show 1:2 and 1:4 phase definitions.&amp;nbsp;DFI 6.0 added support for 1:3 and 1:6 DFI ratios. All ratios are optional, and what is supported is an implementation decision.&lt;/p&gt;
&lt;h2&gt;Data Path Extensions&lt;/h2&gt;
&lt;p&gt;DFI 6.0 adds new capabilities to data path, which includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write data parity (HBM4)&lt;/li&gt;
&lt;li&gt;Read data parity along with valid separation (HBM4)&lt;/li&gt;
&lt;li&gt;Data severity signaling (rddata_sev) (HBM4)&lt;/li&gt;
&lt;li&gt;Expanded ECC coverage (HBM4 + LPDDR6)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These improvements align with the reliability requirements for HBM4 and LPDDR6-based memory subsystems.&lt;/p&gt;
&lt;h2&gt;Legacy 3DS Content Removed with Older DDR Support&lt;/h2&gt;
&lt;p&gt;DFI 5.2&amp;nbsp;contains a dedicated &amp;ldquo;3DS stack support&amp;rdquo; section, including &amp;ldquo;3DS addressing with dfi_cid and dfi_cs for DDR3&amp;rdquo; and &amp;ldquo;for DDR4.&amp;rdquo;&amp;nbsp; DFI&amp;nbsp;6.0 no longer supports&amp;nbsp;&lt;span&gt;dfi_cid and dfi_cs pins as the standard&amp;nbsp;&lt;/span&gt;removes DDR3 and DDR4 support.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is a tabular &lt;strong&gt;summary&lt;/strong&gt; of the differences between &lt;strong&gt;DFI 5.2 vs DFI 6.0&lt;/strong&gt; standard:&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Feature&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;DFI 5.2&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;DFI 6.0&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;3DS stack pin support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;No (no separate dfi_cid)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Frequency ratio support&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;include 1:2, 1:4, or 1:8 ratios&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;include 1:2, 1:3, 1:4, 1:6 and 1:8 ratios&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Power states&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;No sleep support but does support low-power-control handshaking and frequency-change&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;adds Sleep Protocol Support&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Error handling&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;Basic&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;PHY error + data/command split + severity&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Data reliability&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;ECC/CRC/DBI&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;Added HBM4 Parity/severity&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Command bus signal naming change&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;dfi_address-centric description&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;dfi_cmdaddr-centric description&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="208"&gt;
&lt;p&gt;Supported memory standards&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;No support for LPDDR6 and HBM4. Supports DDR/2/3/4/5 and LPDDR/2/3/4/5.&lt;/p&gt;
&lt;/td&gt;
&lt;td width="208"&gt;
&lt;p&gt;Added LPDDR6 and HBM4 support and dropped DDR/2/3/4 and LPDDR/2/3/4 support.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cadence provides DFI Memory Controller, PHY, and monitor Verification IP for all generations of DFI standards that work with all of the recent generation of DRAM devices like LPDDR4/LPDDR5/LPDDR6, DDR4/DDR5/DDR5 DIMM, HBM3/HBM4, and GDDR6/GDDR7. Cadence also offers industry-leading VIPs for all generations of DRAMs and non-volatile (Flash/cards) memory solutions.&lt;/p&gt;
&lt;p&gt;Reach out to&amp;nbsp;Cadence Verification IP experts at&amp;nbsp;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;More information on Cadence DFI VIPs is available at &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/memory-models/dram/dfi.html"&gt;Cadence VIP DFI VIP Website&lt;/a&gt;, and Cadence&amp;#39;s offered memory models can be found at &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/memory-models.html"&gt;Cadence Memory Model Website&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364235&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Shyam Sharma</name><uri>https://community.cadence.com/members/shyam-sharma</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="memory controller" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/memory%2bcontroller" /><category term="PHY" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PHY" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="hbm4" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/hbm4" /><category term="DFI" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DFI" /><category term="DRAM" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DRAM" /><category term="DFI 5.2" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DFI%2b5-2" /><category term="DFI 6.0" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/DFI%2b6-0" /><category term="memory models" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/memory%2bmodels" /><category term="Lpddr6" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Lpddr6" /></entry><entry><title>UALink Under the Hood: Why Full-Stack Verification Wins</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/ualink-under-the-hood-why-full-stack-verification-wins" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/ualink-under-the-hood-why-full-stack-verification-wins</id><published>2026-07-06T06:52:00Z</published><updated>2026-07-06T06:52:00Z</updated><content type="html">Inside the UALink stack: How 640 bytes travel from intent to wire, and why full-stack verification catches what layer testing misses.(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/ualink-under-the-hood-why-full-stack-verification-wins"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364231&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Sandeep Grover</name><uri>https://community.cadence.com/members/sandeep-grover</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="UAL" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UAL" /><category term="verification strategy" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification%2bstrategy" /><category term="System Design and Verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/System%2bDesign%2band%2bVerification" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="UALink" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/UALink" /><category term="verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification" /></entry><entry><title>NVMe 2.0 Explained: What’s New and Why It Matters</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/nvme-2-0-explained-what-s-new-and-why-it-matters" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/nvme-2-0-explained-what-s-new-and-why-it-matters</id><published>2026-07-01T11:18:00Z</published><updated>2026-07-01T11:18:00Z</updated><content type="html">&lt;p&gt;&lt;span&gt;Non-Volatile Memory Express (NVMe)&lt;/span&gt; has become the dominant protocol for high-performance storage across client SSDs, enterprise drives, and hyperscale data centers. With NVMe 2.0, the specification expands beyond traditional block-based SSD access with new command sets, broader media support, improved transport organization, and enhancements for modern deployments. This post explores what is new in NVMe 2.0, why these additions matter, and how they impact storage architects, implementers, and verification teams.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:326px;max-width:600px;" alt="Diagram showing NVMe 2.0 modular specification architecture with Base Specification at the center, connected to three Command Sets (NVM Block, ZNS, KV) and three Transports (PCIe, RDMA, TCP), alongside NVMe-MI for management. Four key enhancements are highlighted: Simple Copy, Rotational Media, Vendor Command Sets, and Persistent Memory Region. A Who Benefits section lists Cloud/Hyperscale, Database/KV, Storage Vendors, Enterprise IT, and Automotive/Edge." src="https://community.cadence.com/resized-image/__size/1200x652/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/4846.NVMe2_5F00_Cadence_5F00_Blog_5F00_640px.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jr8222um0"&gt;Why Was NVMe 2.0 Needed?&lt;/h2&gt;
&lt;p&gt;NVMe 1.4, while powerful, centered on &lt;strong&gt;a largely monolithic base specification&lt;/strong&gt;&amp;nbsp;- a single large document covering the PCIe transport, queuing model, admin and I/O commands, and command-set behavior together. As the ecosystem expanded beyond SSDs into new domains (computational storage, key-value stores, zoned namespaces), the single-spec model became unsustainable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Specification bloat:&lt;/strong&gt; Adding every new feature to one document made it unwieldy for implementers who only needed a subset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New transport needs:&lt;/strong&gt; NVMe was no longer PCIe-only. Fabric transports such as RDMA and TCP had grown important enough to require separate, dedicated NVMe transport specifications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diverse command sets:&lt;/strong&gt; As NVMe evolved, emerging command sets such as Zoned Namespaces (ZNS) and Key-Value (KV) storage required independent specifications and lifecycle management rather than being maintained as extensions within a single evolving specification family.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industry velocity:&lt;/strong&gt; Cloud, edge, automotive, and AI/ML workloads demanded faster iteration on specific features without revising the entire specification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jr8222un1"&gt;Some Key Enhancements in NVMe 2.0&lt;/h2&gt;
&lt;h3 id="mcetoc_1jr8222un2"&gt;1.&amp;nbsp;Modular Specification Architecture&lt;/h3&gt;
&lt;p&gt;NVMe 2.0 breaks the monolithic spec into a family of focused documents:&lt;/p&gt;
&lt;table border="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="background-color:#182f57;"&gt;&lt;strong&gt;&lt;span style="color:#ffffff;"&gt;Document&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style="background-color:#182f57;"&gt;&lt;strong&gt;&lt;span style="color:#ffffff;"&gt;Purpose&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe Base Specification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Core architecture, admin commands, queuing model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe Command Set Specifications&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NVM (block), ZNS, KV command sets - each independent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe Transport Specifications&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PCIe, RDMA, TCP - each independent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVMe Management Interface (NVMe-MI)&amp;nbsp;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Out-of-band device management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; An implementer building a ZNS SSD over TCP can focus primarily on the Base specification, ZNS command set, and TCP transport specification instead of navigating one large monolithic document. Under NVMe 1.4, a single errata or feature addition required revising the entire specification, coordinating across all stakeholders. &lt;br /&gt;Under 2.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A new transport&lt;/strong&gt; can be standardized as an independent document instead of being folded into one monolithic specification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A new command set&lt;/strong&gt;, such as computational storage or other emerging models, can evolve through its own specification.&lt;/li&gt;
&lt;li&gt;Spec revisions are &lt;strong&gt;scoped&lt;/strong&gt; - a change to ZNS doesn&amp;#39;t require re-review of the NVM command set or TCP transport.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un3"&gt;2. Zoned Namespaces (ZNS) -&amp;nbsp;Independent Command Set&lt;/h3&gt;
&lt;p&gt;ZNS evolved through the NVMe technical proposal process and became an independent command set specification in the NVMe 2.0 family.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exposes the internal zone structure of flash to the host.&lt;/li&gt;
&lt;li&gt;Reduces write amplification and over-provisioning.&lt;/li&gt;
&lt;li&gt;Gives the host direct control over data placement.&lt;/li&gt;
&lt;li&gt;Result: Higher endurance, reduced write amplification, more predictable latency, and potentially lower cost per GB for suitable workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un4"&gt;3. I/O Command Set Independence and Namespace Types&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVMe 2.0 formalizes the concept of I/O command sets as independent, pluggable modules.&lt;/li&gt;
&lt;li&gt;Each namespace is now associated with a specific command set identifier (NVM, ZNS, KV).&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Controllers can advertise support for multiple command sets simultaneously.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Enables future command sets to be added without revising the base specification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un5"&gt;4. Simple Copy Command&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Enables offloaded data copy within a namespace without host-side data movement.&lt;/li&gt;
&lt;li&gt;Reduces host CPU and memory usage during copy-heavy tasks such as garbage collection, deduplication, and snapshots.&lt;/li&gt;
&lt;li&gt;The device performs the copy operation without requiring the host to read and rewrite the payload data across PCIe.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un6"&gt;5. Rotational Media Support&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVMe 2.0 broadens the architecture so that rotational media such as HDDs can be represented within the NVMe ecosystem.&lt;/li&gt;
&lt;li&gt;Helps enable a more common NVMe-based command interface across flash and rotational media.&lt;/li&gt;
&lt;li&gt;Helps simplify software stacks by using a more consistent NVMe-based interface across different media types.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un7"&gt;6. Vendor-Specific I/O Command Sets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVMe 2.0&amp;rsquo;s command set model provides a cleaner path for vendor-specific or future command-set extensions.&lt;/li&gt;
&lt;li&gt;Vendors can introduce proprietary capabilities while maintaining alignment with the broader NVMe architecture.&lt;/li&gt;
&lt;li&gt;Keeps the ecosystem open while allowing differentiation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jr8222un8"&gt;7. Persistent Memory Region (PMR) Enhancements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NVMe 2.0 carries forward and refines Persistent Memory Region support.&lt;/li&gt;
&lt;li&gt;Defines clearer behavior for host access to controller-side persistent memory.&lt;/li&gt;
&lt;li&gt;PMR can be used by software designed to exploit controller-resident persistent memory for applications such as metadata acceleration, journaling, or write-ahead logging.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jr8222un9"&gt;Who Benefits from NVMe 2.0?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud and hyperscalers:&lt;/strong&gt; ZNS reduces TCO through lower write amplification and over-provisioning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database and KV Stores:&lt;/strong&gt; Native KV command support reduces unnecessary block-layer translation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage vendors:&lt;/strong&gt; Modular spec allows focused implementation and faster time-to-market.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise IT:&lt;/strong&gt; Modular specifications and command-set flexibility simplify the adoption of new NVMe capabilities while maintaining long-term scalability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automotive and edge:&lt;/strong&gt; Leaner implementations by adopting only the needed command set and transport.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jr8222una"&gt;Verification Challenges&lt;/h2&gt;
&lt;p&gt;NVMe 2.0 adds verification complexity because the protocol is no longer tied to one monolithic specification or one block-oriented command model. A controller may support different combinations of base functionality, command sets, namespace types, transports, multipath behavior, and optional features, so verification must cover both individual features and their interactions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command set selection:&lt;/strong&gt; Ensuring the controller correctly advertises and enables supported I/O command sets such as NVM, ZNS, and vendor-specific command sets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namespace association:&lt;/strong&gt; Verifying that each namespace is mapped to the correct command set identifier and that unsupported commands are rejected with the appropriate status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ZNS behavior:&lt;/strong&gt; Checking zone state transitions, sequential write rules, zone append handling, reset behavior, and error cases for invalid zone operations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature interaction:&lt;/strong&gt; Covering combinations such as Simple Copy, PMR behavior, and rotational media support across different controller configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cadence&amp;rsquo;s NVMe Verification IP addresses these challenges with configurable host and subsystem models, protocol checkers, constrained-random traffic, error injection, coverage, and debug support. The VIP helps teams validate NVMe 2.0 features such as command set independence, namespace management, ZNS behavior, PRP/SGL handling, and transport-specific scenarios across IP, SoC, and system-level environments. In addition, the NVMe VIP testsuite provides reusable building blocks that make it easier for users to create targeted verification scenarios, configure traffic patterns, exercise feature-specific behavior, and inject error conditions as needed for their environment. As NVMe evolves toward modular, workload-specific storage architectures, comprehensive verification support is essential for compliance, interoperability, and faster time-to-market.&lt;/p&gt;
&lt;p&gt;More information on Cadence NVMe Verification IP is available at &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/nvme.html" rel="noopener noreferrer" target="_blank"&gt;Simulation VIP for NVMe | Cadence&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Reach out to Cadence Verification IP experts at &lt;a href="mailto:talk_to_vip_expert@cadence.com" rel="noopener noreferrer" target="_blank"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;&amp;nbsp;with any questions.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364202&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Vishal Patel</name><uri>https://community.cadence.com/members/vishal-patel</uri></author><category term="NVMe 2.0" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVMe%2b2-0" /><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="non-volatile memory" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/non_2D00_volatile%2bmemory" /><category term="NVM Express" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVM%2bExpress" /><category term="NVMe" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVMe" /><category term="Non-Volatile Memory Express" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Non_2D00_Volatile%2bMemory%2bExpress" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="Zoned Namespaces" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Zoned%2bNamespaces" /><category term="NVMe Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVMe%2bVerification%2bIP" /><category term="NVMe specification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/NVMe%2bspecification" /><category term="ZNS" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ZNS" /></entry><entry><title>Understanding USB4 Retimers and Their Role in Gen2 and Gen3 - Link Training</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-usb4-retimers-and-their-role-in-gen2-and-gen3---link-training" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-usb4-retimers-and-their-role-in-gen2-and-gen3---link-training</id><published>2026-07-01T04:30:00Z</published><updated>2026-07-01T04:30:00Z</updated><content type="html">&lt;p&gt;USB4 systems rely on retimers to enable reliable high-speed communication across complex topologies where maintaining signal integrity over extended channels is a significant challenge. Retimers act as intermediate elements that restore signal quality at each hop by performing clock and data recovery (CDR) and retransmitting a clean, regenerated signal.&lt;/p&gt;
&lt;p&gt;The USB4 link bring-up process follows a structured sequence from initial connectivity to high-speed operation. The process begins with lane initialization, where routers establish connectivity with the link partner through sideband communication. During this phase, the required parameters for link operation are exchanged and configured. Once initialization is complete, the router drives the transition into link training, where the link progresses toward stable high-speed communication.&lt;/p&gt;
&lt;p&gt;The retimer operates based on its channel state machine, which follows router lane initialization and link training and performs corresponding state transitions based on link conditions on both sides.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq8iuqon1"&gt;Router: Lane Initialization&lt;/h2&gt;
&lt;p&gt;USB4 lane initialization is divided into five phases, where routers control link configuration and parameters synchronization across the topology.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;height:371px;margin-left:auto;margin-right:auto;max-height:371px;max-width:383px;" alt=" " height="371" src="https://community.cadence.com/resized-image/__size/766x742/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1780552368190v2.png" width="382" /&gt;&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;Figure 1: Five-stage lane initialization&lt;/h5&gt;
&lt;ul&gt;
&lt;li style="text-align:left;"&gt;Phase 1 and Phase 2 &amp;ndash; Electrical Initialization: Sideband signaling is used to establish USB4 mode, lane orientation, polarity, and electrical readiness. Retimers forward these signals to maintain continuity across the link.&lt;/li&gt;
&lt;li style="text-align:left;"&gt;Phase 3 &amp;ndash; Capability Exchange (Router Controlled): Routers exchange capability information such as supported link speeds, lane bonding configuration, and adapter capabilities. During this phase, the retimer does not actively participate in protocol decision-making and remains transparent, forwarding sideband transactions without modification.&lt;/li&gt;
&lt;li style="text-align:left;"&gt;Phase 4 &amp;ndash; Parameter Distribution (Broadcast RT): Routers distribute final link parameters using Broadcast RT transactions, including link speed and lane configuration. Retimers update their internal configuration based on these broadcasts and propagate them across their upstream and downstream ports to ensure consistency across the topology. When a Retimer detects an LT_Resume Transaction on any USB4 Port, it shall transition to phase 5.&lt;/li&gt;
&lt;li style="text-align:left;"&gt;Phase 5 &amp;ndash; Equalization (TxFFE Negotiation): Equalization is performed using addressed RT transactions between directly connected link partners. TxFFE parameters are negotiated independently for each segment, allowing per-hop optimization before high-speed training.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Retimers detect the receiver SLOS symbol and begin transmitting CL_WAKE1.X using a local clock once Rx Active is detected. After completing training across all segments and meeting the required clock switch conditions, the retimer transitions from the local clock to the recovered clock. It then stops generating training symbols and begins forwarding the received bit stream, moving the link into steady-state data operation.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq8j4u6j2"&gt;Retimers: Channel State Machine&lt;/h2&gt;
&lt;p&gt;The retimers follow a channel state machine that aligns with the router-driven link initialization and training flow, tracking receiver activity and adapting as the link progresses. They align with the incoming signal and transition toward stable data transfer as training completes. As shown in the figure below, this sequence ensures proper synchronization before steady-state data forwarding.&lt;/p&gt;
&lt;p&gt;&lt;img style="display:block;height:331px;margin-left:auto;margin-right:auto;max-height:331px;max-width:413px;" alt=" " height="331" src="https://community.cadence.com/resized-image/__size/826x662/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1780552508002v3.png" width="412" /&gt;&lt;/p&gt;
&lt;h5 style="text-align:center;"&gt;Figure 2: Retimer channel state machine&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;CLd (Channel Detect): State where retimers wait for receiver activity and detect the presence of a valid signal on the channel.&lt;/li&gt;
&lt;li&gt;Bit Lock: Retimers enter this state once activity is detected on the receiver side. In this state, the receiver achieves clock/data recovery (CDR) and ensures reliable sampling of the incoming data, enabling proper Rx equalization and further link training progression.&lt;/li&gt;
&lt;li&gt;Bit Forwarding: In this state, retimers use the recovered clock and forward the received bit stream directly from receiver to transmitter without modifying the data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jq8j7nd53"&gt;Training Sequence Flow: Retimers&lt;/h2&gt;
&lt;p&gt;The table illustrates the packet flow during link initialization and transition into link training between two routers with two retimers present in the path.&lt;/p&gt;
&lt;table border="1" width="403" height="218"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Step&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Router A&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Retimer 1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Retimer 2&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;Router B&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Broadcast RT-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Update-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Update-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-Update&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-Update&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-Broadcast RT&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;LT_Resume-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Forward-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Forward-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Detect&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Detect&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-Forward&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-Forward&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-LT_Resume&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;SLOS1 -&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;CL_WAKE1.1-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;CL_WAKE1.2-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-CL_WAKE1.2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-CL_WAKE1.1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;CL_WAKE1.2-&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-CL_WAKE1.2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;SLOS1 -&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;SLOS1 -&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;SLOS1 -&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&amp;lt;-SLOS1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;&lt;strong&gt;11&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Link Training&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;(forwarding state)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Link Training&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;(forwarding state)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Link Training&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;(forwarding state)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:75%;"&gt;Link Training&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;(forwarding state)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&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; Table 1: Packet flow in retimers&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Steps 1 &amp;ndash; 2 (RT Broadcast and Update propagation): Router A initiates link bring-up by broadcasting RT packets. Retimers receive these packets and update the information before propagating it toward Router B. The same update flow is mirrored back from Router B toward Router A.&lt;/li&gt;
&lt;li&gt;Steps 3 &amp;ndash; 4 (LT_Resume handshake and detection): Router A sends LT_Resume to trigger link initialization. Retimers transparently forward this signal, enabling Router B to detect link activity. The acknowledgment follows the reverse path through retimers.&lt;/li&gt;
&lt;li&gt;Steps 5 &amp;ndash; 8 (CL_WAKE exchange through retimers): CL_WAKE ordered sets are generated by the retimer with each retimer, sending CL_WAKE1 corresponding to its retimer index. This stage ensures link partners are synchronized before progressing further.&lt;/li&gt;
&lt;li&gt;Steps 9 &amp;ndash; 10 (SLOS1 exchange): SLOS1 ordered sets are transmitted and propagated across both retimers without modification. At this stage, retimers primarily act in forwarding mode, maintaining the integrity of training sequences.&lt;/li&gt;
&lt;li&gt;Step 11 (Transition to Link Training): Once ordered set exchanges are complete, all components (routers and retimers) transition into link training. Retimers operate in forwarding mode, directly passing received bits to the transmitter without alteration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jq8jcpgm4"&gt;Verification Challenges for the Retimers&lt;/h2&gt;
&lt;p&gt;Verification of USB4 retimer topologies presents challenges in ensuring the correct propagation of training sequences across multiple segments. Each retimer must receive, regenerate, and forward sequences while maintaining signal integrity and timing alignment.&lt;/p&gt;
&lt;p&gt;Retimer identification and topology discovery ensure correct mapping of logical indices across the chain. Any mismatch can lead to incorrect targeting of training transactions.&lt;/p&gt;
&lt;p&gt;Lack of proper verification of retimer behavior can lead to link instability or failure in multi-retimer topologies. If such issues are identified post-silicon, time-to-market is impacted due to the additional effort required for debug and re-verification.&lt;/p&gt;
&lt;p&gt;Cadence has a mature verification IP solution for the verification of various topologies of retimers in a USB4 design, with verification capabilities provided to do a comprehensive verification of these topologies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learn more about &lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/archive/2026/06/04/understanding-usb4-retimers-and-their-role-in-gen2-and-gen3---link-training/edit/Simulation%20VIP"&gt;Simulation VIP&lt;/a&gt; or reach out to our &lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;Cadence Verification IP experts&lt;/a&gt; for further information.&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364188&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>SS202605248717</name><uri>https://community.cadence.com/members/ss202605248717</uri></author><category term="USB4 VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/USB4%2bVIP" /><category term="usb4" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/usb4" /><category term="retimers" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/retimers" /></entry><entry><title>The Infineon Automotive Ecosystem Summit 2026</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/the-infineon-automotive-ecosystem-summit-2026" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/the-infineon-automotive-ecosystem-summit-2026</id><published>2026-06-30T17:30:00Z</published><updated>2026-06-30T17:30:00Z</updated><content type="html">The 2026 &lt;a href="https://www.infineon.com/our-stories/ecosystem-summit"&gt;Infineon Automotive Ecosystem Summit&lt;/a&gt; took place in late June at the Infineon headquarters at am Campeon in Munich. The event brought together the ecosystem around &lt;a href="https://www.infineon.com/applications/automotive"&gt;Infineon&amp;#39;s automotive microcontrollers&lt;/a&gt;, with a particular emphasis on software...(&lt;a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/the-infineon-automotive-ecosystem-summit-2026"&gt;read more&lt;/a&gt;)&lt;img src="https://community.cadence.com/aggbug?PostID=1364226&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>JEngblom</name><uri>https://community.cadence.com/members/jengblom</uri></author><category term="Automotive" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Automotive" /><category term="Infineon" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Infineon" /><category term="vlab" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/vlab" /><category term="Digital Twins" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Digital%2bTwins" /></entry><entry><title>Demystifying Address Translation Services (ATS) in PCIe 6.0</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/demystify-address-translation-services-ats-in-pcie-6-0" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/demystify-address-translation-services-ats-in-pcie-6-0</id><published>2026-06-23T10:50:00Z</published><updated>2026-06-23T10:50:00Z</updated><content type="html">&lt;p&gt;Address Translation Services (ATS) is one of the toughest verification problems to solve as it is the fast lane for PCIe memory access, cutting delays by caching address translations directly on the device. It keeps software behavior consistent across both PCIe Devices and RC Integrated Endpoints, making performance gains simple to adopt.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;u&gt;Key Features Updated for ATS&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Translation Agent (TA)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Central entity&lt;span&gt;,&lt;/span&gt; which is responsible for translating virtual addresses to physical addresses that validates and returns translated addresses to requesting devices&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Address Translation Cache (ATC)&lt;/strong&gt;: Cache within a PCIe Function to store translated addresses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Address Translation and Protection Table (ATPT)&lt;/strong&gt; &amp;ndash; Optional feature contains the set of address translations accessed by a TA to process PCIe requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AT Field in TLPs&lt;/strong&gt;: Indicates whether a memory address in a transaction is translated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for Multi-Function Devices&lt;/strong&gt;: ATS can be implemented per Function
&lt;ul&gt;
&lt;li&gt;Shared ATC resources must behave consistently with independent ATCs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shadow Functions&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ATS supports Shadow Functions, which share ATC and translation resources with a main Function&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;Here is a diagram illustrating the interaction flow of Address Translation Services (ATS) in PCI Express:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:193px;max-width:408px;" alt=" " height="193" src="https://community.cadence.com/resized-image/__size/816x386/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1782191803911v2.png" width="408" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Translation Request /Completion exchange &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Address translation and caching are performed with the help of Memory Request transmitted from ATC to TA. Upon reception of the Translation Request, TA determines whether the translation can be provided to the function and indicates the success or failure of the request by generating a translation completion with the right response status.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Invalidate Request/Completion exchange&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When a translation changes, the TA sends an Invalidation Request, so the ATC stays in sync with the ATPT. This request is a MsgD transaction that tells the ATC to remove specific address-range entries.&lt;/p&gt;
&lt;p&gt;The Invalidate Completion message includes tags from the original request, so the TA can identify which function finished the invalidate operation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Page Request/PRG Response message exchange&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Page Request helps a PCIe endpoint (like a storage device) to request a page in a specific virtual memory address by transmitting a Msg TLP to RC. To notify a Function that the page request(s) associated with the corresponding PRG has (have) been satisfied with a PRG Response Message is a PCIe Message Request that is Routed by ID back to the requesting Function.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;u&gt;Basic Rules and Requirements&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Translation Validity&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;A Function must not issue TLPs with the AT field set unless the address was obtained via ATS. ATC entries must only be populated using the ATS protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordering and Routing&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ATS Translation Requests follow standard PCIe routing and ordering rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access Permissions&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Translated addresses must have appropriate permissions (Read, Write)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Shared ATC implementations must behave as if each Function has an independent ATC. Shadow Functions must be treated identically to their main Function by the TA&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;&lt;u&gt;Advance requirements with other features&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ATS and PASID (Process Address Space ID)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ATS works with PASID to translate a process&amp;rsquo;s virtual addresses into physical addresses. An ATS Translation Request can carry a PASID to identify the target process address space. The ATS response then returns both the translation and the allowed access rights (Read, Write, Execute) for that PASID.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ATS and IDE (Integrity and Data Encryption)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ATS interacts with IDE to ensure that address translations and memory access remain secure by following all rules mentioned in the IDE section.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Key Interactions:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDE TLPs and ATS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ATS must ensure that translations used in IDE TLPs are valid and not tampered with&lt;/li&gt;
&lt;li&gt;IDE Streams must be configured to reject TLPs with invalid or misrouted translations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enforcement&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ATS must comply with IDE&amp;rsquo;s security model, especially when used with&amp;nbsp;Selective IDE Streams, which allow TLPs to pass through switches&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;strong&gt;ATS and segments&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;All standard segment rules apply to ATS-related TLPs. This is especially important for Invalidate Request/Completion and Page Request/PRG Response TLPs, since they are Msg TLPs with OHC-A4 and include a destination segment. If these TLPs are IDE encrypted, it must also follow Requester Segment rules, and IDE-specific Segment Base rules.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;strong&gt;&lt;u&gt;Randomization considerations&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Randomization testing always helps to catch corner case scenarios. The main parameters that can be tested are:&lt;/p&gt;
&lt;table width="672"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;Parameter&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Description / Validation Consideration&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;Address&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Overlapping address ranges or duplicate Requester IDs can lead to undefined behavior.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;Size&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Translation Requests can be random in size, so ATC and ATPT should be initially implemented with sufficient capacity to accommodate variability.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;TLP types&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Validation should test MRd Translation Requests and Translated Requests of type MWr, MRd, UIOMWr, and UIOMRd.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;Exe, Priv&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Permissions can be randomly assigned and determine how the responder returns data for a request.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;Ordering&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;Translation Requests can be transmitted with random ordering; corresponding responses must follow specification-defined ordering rules.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="90"&gt;
&lt;p&gt;PASID&lt;/p&gt;
&lt;/td&gt;
&lt;td width="582"&gt;
&lt;p&gt;ATS Requests/Completions may include PASID, which can take random values.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&lt;strong&gt;&lt;u&gt;ATS verification challenges and solutions&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;table width="642"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Verification approach&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;Challenge&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;ATS coexistence with other capabilities (e.g., IDE optional)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Verify ATS behavior remains consistent with and without optional capabilities enabled.&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;Requires multiple test environments/configurations.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;ATS testing with and without PASID&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Execute ATS flows for each TLP type with PASID off/on and randomized PASID values; check all PASID-related rules.&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;Rule space increases significantly with PASID combinations.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;Reset scenarios clearing ATC (Detect, HotReset, FLR, etc.)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Prove ATC is correctly invalidated after each reset type.&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;Carefully monitor system behavior before and after reset.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;Random Completion Count (TC/VC mapping)&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Validate completion distribution/count correctness under randomized TC/VC mappings.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;Randomization can make debug harder unless seed/logging is strong.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="198"&gt;
&lt;p&gt;Negative scenarios marked &amp;ldquo;undefined behavior&amp;rdquo;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="228"&gt;
&lt;p&gt;Define practical verification strategy for undefined-behavior cases.&lt;/p&gt;
&lt;/td&gt;
&lt;td width="216"&gt;
&lt;p&gt;It is difficult to assert deterministic expected result from spec.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cadence PCIe VIP verification test suite is built to solve challenges like the ones described above, by delivering a verification solution in terms of test cases and coverage model. It provides a golden reference that can fully verify any specification defined feature by applying randomization and cross feature verification. Our test suite includes self-checks or protocol checks, error injections, checker evaluation, callback verification, user configurable parameters and coverage model to make sure the feature is thoroughly verified. Cadence test suite eliminates the verification gap, and customers can effectively validate their design by using the provided test suite.&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;PCIe Express VIP Verification testbench architecture&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:157px;max-width:329px;" alt=" " height="157" src="https://community.cadence.com/resized-image/__size/658x314/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/pastedimage1782191629750v1.png" width="329" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;More information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For more info on how Cadence PCIe Verification IP and TripleCheck VIP enable users to confidently verify PCIe 6.0, see our&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/pcie.html"&gt;VIP for PCI Express&lt;/a&gt;,&amp;nbsp;&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/pcie/cxl.html"&gt;VIP for Compute Express Link&lt;/a&gt;&amp;nbsp;and&lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/verification-ip/simulation-vip/vip-tools/triplecheck-test-suite.html"&gt;&amp;nbsp;TripleCheck for PCI Express&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;See the PCI-SIG website for more details on PCIe in general and the different PCI standards.&lt;/li&gt;
&lt;li&gt;For more details, connect directly with Cadence Verification IP experts at&amp;nbsp;&lt;a href="mailto:talk_to_vip_expert@cadence.com"&gt;talk_to_vip_expert@cadence.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364215&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Anupriya K</name><uri>https://community.cadence.com/members/anupriya-k</uri></author><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="PCIe 6.0" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/PCIe%2b6-0" /><category term="ATS" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ATS" /><category term="verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/verification" /></entry><entry><title>Enhancing Ethernet Security with MACsec</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/enhancing-ethernet-security-with-macsec" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/enhancing-ethernet-security-with-macsec</id><published>2026-06-22T05:13:00Z</published><updated>2026-06-22T05:13:00Z</updated><content type="html">&lt;div&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Understanding MACsec in Today&amp;rsquo;s Ethernet World&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today, Ethernet is being widely adopted across domains ranging from high-performance computing (HPC) and cloud data centers to automotive systems, where security has become a critical requirement. If network security is compromised, sensitive data can be modified, intercepted, or stolen, leading to serious reliability and privacy concerns. Ethernet was originally designed for high-speed data transfer and interoperability between devices. However, traditional Ethernet does not provide built-in mechanisms for securing data traffic, such as encryption or authenticity protection. This is where MACsec comes into the picture.&amp;nbsp; Media Access Control Security (MACsec) helps bridge this security gap by identifying and preventing the security threats at Data Link Layer (Layer 2) of Ethernet communication.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;MACsec ensures data confidentiality, integrity, and authenticity for Ethernet communication. MACsec uses the Advanced Encryption Standard with Galois/Counter Mode (AES-GCM), which enables both encryption and integrity protection with high performance. Unlike security protocols such as Transport Layer Security and Internet Protocol Security, which operate at upper layers of the networking stack, MACsec is implemented directly at the Ethernet port level. This allows Ethernet links to be secured transparently at the Data Link Layer without requiring modifications to higher-layer protocols such as IP, TCP, UDP, or application software. MACsec is standardized under IEEE 802.1AE and is widely adopted in systems where secure and reliable Ethernet communication is essential.&lt;/p&gt;
&lt;p&gt;Today, MACsec is widely deployed in environments where both high-speed communication and strong security are essential. In cloud data centers and enterprise networks, MACsec helps secure traffic between switches, routers, and servers against unauthorized access and packet tampering. In 5G infrastructure, MACsec protects fronthaul and backhaul communication carrying massive amounts of network traffic. The growing adoption of Automotive Ethernet has also increased the importance of MACsec, where secure communication between Electronic Control Units (ECUs) is critical for vehicle reliability and safety. Similarly, in HPC systems and secure chip-to-chip communication, MACsec provides hardware-level link security while maintaining high throughput and low latency.&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Inside a MACsec Frame&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Before MACsec protection is applied, a standard Ethernet frame contains the Destination MAC address, Source MAC address, EtherType field, payload, and Frame Check Sequence (FCS).&amp;nbsp;&lt;span&gt;As shown below.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6114.Screenshot-2026_2D00_06_2D00_19-160554.png" /&gt;&lt;/p&gt;
&lt;p&gt;When the frame enters the MACsec processing engine, MACsec modifies the frame structure by inserting a Security Tag (SecTAG) after the Source MAC address and appending an Integrity Check Value (ICV) before the frame check sequence (FCS). As shown below.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/6114.Screenshot-2026_2D00_06_2D00_19-160829.png" /&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s first look at the SecTAG. It carries control and security-related information such as the Packet Number (PN), Association Number (AN), Tag Control Information (TCI), Short Length (SL), and optionally the Secure Channel Identifier (SCI). These fields help the receiving device identify the secure channel, detect replay attacks, and process the frame correctly.&lt;/p&gt;
&lt;p&gt;After the SecTAG is inserted, MACsec encrypts the Ethernet payload using AES-GCM. Encryption ensures that sensitive information carried within the Ethernet frame cannot be read by unauthorized devices while traversing the network.&lt;/p&gt;
&lt;p&gt;Once encryption is completed, MACsec generates an Integrity Check Value (ICV), which acts as a cryptographic integrity tag appended near the end of the frame. The receiving device uses the ICV to verify that the frame has not been modified or tampered with during transmission.&lt;/p&gt;
&lt;p&gt;MACsec inserts a dedicated EtherType value of 0x88E5 after the Source MAC address to identify a MACsec‑protected frame, while the original EtherType is preserved inside the encrypted payload.&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;How MACsec Secures Communication&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Before secure communication begins, both devices must first authenticate each other and establish encryption keys. MACsec uses the MACsec Key Agreement (MKA) protocol to manage this process. MKA authenticates peers using the CAK and derives Secure Association Keys (SAKs) used by MACsec for frame encryption.&lt;/p&gt;
&lt;p&gt;The communicating devices share a secret key called the Connectivity Association Key (CAK), which is used by MKA to authenticate peers. Once authentication is successful, MKA derives and distributes Secure Association Keys (SAKs) that are used by MACsec for frame encryption.&lt;/p&gt;
&lt;p&gt;After the secure connection is established, MACsec starts encrypting Ethernet frames using AES-GCM. Each transmitted frame also carries a Packet Number (PN) inside the SecTAG. When replay protection is enabled, the receiving device validates the Packet Number to detect duplicated or replayed packets.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s how MACsec provides&amp;nbsp;data authenticity, confidentiality, integrity, and replay protection.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;MACsec Verification with Cadence VIP&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;With the availability of the Cadence Verification IP for Ethernet MACsec, adopters can start working with these specifications immediately, ensuring compliance with the standard and achieving the fastest path to IP and SoC verification closure. Incorporating the latest protocol updates, the mature and comprehensive Cadence Verification IP (VIP) for the Ethernet protocol provides a complete bus functional model (BFM), integrated automatic protocol checks, and coverage model. Designed for easy integration in test benches at IP, system-on-chip (SoC), and system levels, the VIP for Ethernet helps you reduce the time to test, accelerate verification closure, and ensure end-product quality. The VIP for Ethernet runs on all major simulators and supports System Verilog and e-verification languages and associated methodologies, including the Universal Verification Methodology (UVM).&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364213&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Harinee Rathod</name><uri>https://community.cadence.com/members/harinee-rathod</uri></author><category term="MACsec Verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MACsec%2bVerification" /><category term="Ethernet VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bVIP" /><category term="Ethernet Security" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bSecurity" /><category term="IEEE 802.1AE" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/IEEE%2b802-1AE" /><category term="VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/VIP" /><category term="Cadence VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Cadence%2bVIP" /><category term="Ethernet" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet" /><category term="MacSec" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/MacSec" /></entry><entry><title>Ethernet Auto-Negotiation: Enabling Seamless Link Optimization</title><link rel="alternate" type="text/html" href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/ethernet-auto-negotiation-enabling-seamless-link-optimization" /><id>https://community.cadence.com/cadence_blogs_8/b/fv/posts/ethernet-auto-negotiation-enabling-seamless-link-optimization</id><published>2026-06-19T11:11:00Z</published><updated>2026-06-19T11:11:00Z</updated><content type="html">&lt;p&gt;Ethernet has evolved significantly from 10 Mbps shared media to today&amp;rsquo;s multi-hundred gigabit high-speed links. One foundational feature that has enabled this scalability and ease of deployment is &lt;strong&gt;Auto-Negotiation (AN)&lt;/strong&gt;. Defined in multiple IEEE 802.3 clauses, Auto-Negotiation allows two connected devices to automatically determine the best possible operating parameters for a link, eliminating manual configuration and ensuring optimal performance.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv0"&gt;Why Auto-Negotiation Is Required&lt;/h2&gt;
&lt;p&gt;In early Ethernet deployments, link parameters such as speed and duplex mode had to be manually configured on both ends of the link. This approach led to frequent issues, the most common being duplex mismatch, where one device operates in full-duplex and the other in half-duplex, causing severe performance degradation.&lt;/p&gt;
&lt;p&gt;Auto-Negotiation addresses these challenges by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatically selecting the highest common speed and mode: This ensures both devices operate at the best mutually supported configuration&lt;/li&gt;
&lt;li&gt;Avoiding configuration errors: Eliminates manual mismatches that can lead to packet loss and poor throughput&lt;/li&gt;
&lt;li&gt;Supporting feature compatibility: Modern Ethernet requires negotiation of additional capabilities such as:
&lt;ul&gt;
&lt;li&gt;Flow control (pause frames)&lt;/li&gt;
&lt;li&gt;Forward Error Correction (FEC)&lt;/li&gt;
&lt;li&gt;Energy Efficient Ethernet (EEE)&lt;/li&gt;
&lt;li&gt;Link training for high-speed channels&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Providing scalability for future standards: As speeds increase, negotiation becomes essential to decide lane counts, encoding, and error correction mechanisms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, Auto-Negotiation ensures &lt;strong&gt;plug-and-play interoperability&lt;/strong&gt; across diverse devices and generations of Ethernet technology.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv1"&gt;Auto-Negotiation Clauses and Applicable Speeds&lt;/h2&gt;
&lt;p&gt;Different IEEE 802.3 clauses define how Auto-Negotiation works for various physical layers and speeds:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Applicable Speeds/Media&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Key Characteristics&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 98&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;MultiGig BaseT1&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Classic Auto-Negotiation using Fast Link Pulses (FLPs); negotiates speed and duplex&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 37&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1000BASE-X (fiber), SGMII&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Uses ordered sets instead of FLPs; supports gigabit links&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Clause 73&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;10G to upto 1.6T (KR/CR/backplane)&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Advanced AN with base + next pages; supports FEC, link training, multi-lane speeds&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Key trend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lower speeds &amp;rarr; Simple negotiation&lt;/li&gt;
&lt;li&gt;Mid speeds (1G) &amp;rarr; PHY-specific signaling&lt;/li&gt;
&lt;li&gt;High speeds (10G and above) &amp;rarr; Multi-stage negotiation with extended capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv2"&gt;Top-Level Overview: How Auto-Negotiation Works&lt;/h2&gt;
&lt;p&gt;At a high level, Auto-Negotiation is a structured handshake between two link partners. The process is similar across clauses, with increasing complexity at higher speeds.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv3"&gt;Step 1: Capability Advertisement&lt;/h2&gt;
&lt;p&gt;Each device advertises its supported capabilities using a structured data format called a link code word (LCW).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Clause 98: Sent using fast link pulses&lt;/li&gt;
&lt;li&gt;In Clause 37/73: Sent using encoded ordered sets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Information is exchanged through base/next pages. &lt;span&gt;Base/next page c&lt;/span&gt;ontains core capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supported speeds&lt;/li&gt;
&lt;li&gt;Duplex modes (for lower speeds)&lt;/li&gt;
&lt;li&gt;Link types (e.g., KR, KX)&lt;/li&gt;
&lt;li&gt;FEC support&lt;/li&gt;
&lt;li&gt;Advanced speeds (e.g., 25G, 50G)&lt;/li&gt;
&lt;li&gt;Link training capability&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv4"&gt;Step 2: Acknowledgment Handshake&lt;/h2&gt;
&lt;p&gt;Once a device receives its partner&amp;rsquo;s base page, it sets an ACK bit and continues transmitting its own advertisement.&lt;/p&gt;
&lt;p&gt;Both partners must confirm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They have received each other&amp;rsquo;s capabilities&lt;/li&gt;
&lt;li&gt;The information is stable (not corrupted)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This ensures synchronization before proceeding further.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv5"&gt;Step 3: Extended Capability Exchange (Next Pages)&lt;/h2&gt;
&lt;p&gt;For modern Ethernet (Clause 73), Auto-Negotiation continues with the exchange of next pages.&lt;/p&gt;
&lt;p&gt;These pages are used to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Negotiate Forward Error Correction (FEC)&lt;/li&gt;
&lt;li&gt;Indicate support for link training (clause 72)&lt;/li&gt;
&lt;li&gt;Advertise newer speed modes beyond base page limitations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A toggle bit mechanism ensures that new pages are distinguished from retransmissions.&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv6"&gt;Step 4: Resolution of Link Parameters&lt;/h2&gt;
&lt;p&gt;A deterministic priority resolution function selects the final link mode based on the common capabilities of both devices.&lt;br /&gt;Typical rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highest speed wins (e.g., 25G over 10G)&lt;/li&gt;
&lt;li&gt;Compatible lane configuration selected&lt;/li&gt;
&lt;li&gt;FEC enabled only if both sides support/request it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jrfp48lv7"&gt;Key Takeaway&lt;/h2&gt;
&lt;p&gt;Auto-Negotiation is far more than just speed selection is a multi-stage protocol that ensures compatibility, reliability, and optimal operation across Ethernet links. At lower speeds, AN selects which link to use. At higher speeds (clause 73), it also decides how the link operates (FEC, training, lanes).&lt;/p&gt;
&lt;h2 id="mcetoc_1jrfp48lv8"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Auto-Negotiation is a critical feature that underpins Ethernet&amp;rsquo;s flexibility and backward compatibility. From simple duplex selection in early networks to complex multi-parameter negotiation in high-speed systems, AN has evolved to meet the demands of modern communication.&lt;/p&gt;
&lt;p&gt;For engineers working with high-speed Ethernet, especially clause 73, understanding the interplay between base pages, next pages, and the state machine is essential for debugging and ensuring robust link bring-up.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-11/0638.Designer.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;With the availability of the &lt;a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification.html"&gt;Cadence Verification IP&lt;/a&gt; for Ethernet, adopters can start working with these specifications immediately, ensuring compliance with the standard and achieving the fastest path to IP and SoC verification closure. Incorporating the latest protocol updates, the mature and comprehensive Cadence Verification IP (VIP) for the Ethernet protocol provides a complete bus functional model (BFM), integrated automatic protocol checks, and coverage model. Designed for easy integration in test benches at IP, system-on-chip (SoC), and system levels, the VIP for Ethernet helps you reduce the time to test, accelerate verification closure, and ensure end-product quality. The VIP for Ethernet runs on all major simulators and supports SystemVerilog and e-verification languages and associated methodologies, including the Universal Verification Methodology (UVM).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.cadence.com/aggbug?PostID=1364212&amp;AppID=11&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</content><author><name>Krunal Patel</name><uri>https://community.cadence.com/members/krunal-patel</uri></author><category term="Ethernet 800G" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2b800G" /><category term="Verification IP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Verification%2bIP" /><category term="uvm" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/uvm" /><category term="Ethernet VIP" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bVIP" /><category term="Functional Verification" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Functional%2bVerification" /><category term="Ethernet" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet" /><category term="Ethernet UEC" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/Ethernet%2bUEC" /><category term="ethernet 1600G" scheme="https://community.cadence.com/cadence_blogs_8/b/fv/archive/tags/ethernet%2b1600G" /></entry></feed>