Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Path
  • Cache Coherency Glossary
  • The Shared Course Model
  • Cache Coherency Revision Sheet
  • Why Coherence Exists8
  • States and Protocols12
  • Transactions12
  • Races and Controller Design8
  • Progress and the Fabric16
    • Virtual Networks and Progress
      • A Protocol Deadlock
      • Message Classes and Virtual Networks
      • Deadlock, Livelock, Starvation
      • Stating Progress Assumptions
    • Filtering and Snoop Pruning
    • Latency, Fairness and QoS
    • Hierarchical and Chiplet Coherence
  • Ordering and Synchronization12
  • Performance and Scalability12
  • Real Protocols12
  • SoC Integration12
  • Power, Clocking and Reliability12
  • Verification12
  • Debug and Bring-up12
  • Interview and Design Review17
  • Capstone: A Coherent Model Lab5
Loading lesson

‹Virtual Networks and Progress
  1. Topics
  2. Cache Coherency
  3. Progress and the Fabric
  4. Virtual Networks and Progress
  5. Message Classes and Virtual Networks

Part 5 · Progress and the Fabric · All levels

Message Classes and Virtual Networks

Map protocol dependencies to capacity and service guarantees rather than just message labels.

On this page

    Does naming a response network make it independent?

    Only if the resources its progress needs are available independently of blocked request work. A virtual channel is a separate buffer and credit set multiplexed on one physical link. A virtual network gives one message class its own virtual channels on every link and its own endpoint queues, end to end. Different names with the same full receive queue do not break the previous lesson's cycle.

    Class in this course

    Examples

    May wait on

    Dependency to inspect

    Requests

    GetS, GetM, PutS, PutE, PutM

    Forwards, responses

    Do they hold ingress while waiting for a pending entry or protected data storage?

    Forwards

    Inv, Fwd-GetS, Fwd-GetM

    Response egress only

    Can a cache with its own request outstanding still receive and answer them?

    Responses

    Inv-Ack, Data, Put-Ack

    Nothing

    Can they complete an existing transaction without resources held by new requests?

    These classes are the analysis the general rule needs, not a mandatory three-network implementation. PutM carries dirty data and can have different requirements from a clean release. Data can carry permission, payload or both. Inspect its role and destination before assigning it a class.

    Protocol deadlock versus routing deadlock

    A protocol deadlock is a cycle through endpoint resources, such as pending entries and ingress queues, created by dependencies between message classes. The P/Q cycle is one. It is broken by message classes, reservation and a separate virtual network per class.

    A routing deadlock is a cycle of packets each holding router buffers or channels while waiting for the next, around a loop in the topology. It is independent of what the messages mean. It is broken inside each virtual network by a deadlock-free routing function (for example dimension-order routing on a mesh) or by an escape channel.

    So the P/Q fix needs more than Qresp at H: X's response also needs response virtual channels on each hop from C0 to H. If it shared a router buffer with requests on the way, a full request buffer could block it before it reached Qresp.

    Workflow inventories resources and dependencies before choosing reservations or separate paths, then reviews service assumptions.
    Dependency analysis precedes a network partition, and continues through endpoints.

    Apply it to the two-core resource example

    Keep X's dirty value 1 at C0's egress slot T0 and Y's request in H's Qreq. A useful Qresp has reserved receive space, a protected destination, response virtual channels that can reach it, and service using X's existing pending entry. Its outgoing grant must also be kept under backpressure. Independent input capacity alone is insufficient if response processing blocks on the same unavailable downstream resource.

    Proposed change

    Breaks the identified cycle?

    Why

    Rename one message class response

    No

    Q is still occupied by the request.

    Two queues, no protected response destination

    Not established

    The data can still stall at the endpoint.

    Reserve response capacity and process under existing P

    Yes for the stated two-node resource graph

    The response no longer waits for Qreq or a new free P.

    Add fairness to a completely blocked cycle

    No

    No action is enabled to arbitrate.

    The corrected path completes under A1-A6 (assumptions), notably A5: for a full fabric the graph must include router channels, endpoint queues, transaction resources and any memory dependencies. A local acyclic graph is not automatically the global graph.

    Common pitfall

    Assuming a virtual-channel split removes all protocol and routing deadlocks. Routing cycles and endpoint transaction cycles can coexist, and finite shared storage can couple apparently separate channels.

    Interview

    Explain what independent means using capacity and service, not colours in a block diagram. Ask whether an accepted response needs resources retained by the request it is completing.

    Check yourself Can PutM always share the harmless clean-release path?

    Not without checking its data obligation. PutM may carry the only current value and needs protected acceptance capacity. Its dependencies can differ from PutS even though both are releases.

    Related topics

    • Shared course model

    • The concrete P/Q cycle

    Previous

    47 / 167

    Next: Deadlock, Livelock, Starvation

    Up next

    Up nextDeadlock, Livelock, Starvation

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Stating Progress Assumptions