Verifying the Home Node: what AMBA CHI taught me about coherence
AMBA CHI is what a bus grows up into. Instead of masters and slaves sharing wires, CHI is a packet-based coherent interconnect: request nodes (the CPUs and accelerators), the interconnect fabric, and — at the center of my internship at COEP — the Home Node, the point of coherence. Every request to a cache line goes home first: the Home Node decides who currently holds the line, orchestrates snoops to the caches that do, resolves the responses, and talks to memory when nobody has a clean copy. It is, in effect, the referee that keeps every cache's view of memory honest.
Verifying a full CHI system is not a two-to-three-month project, and pretending otherwise would have produced a shallow pass over everything. So we scoped deliberately: verification IP for the Home Node alone — its request/snoop/response ordering, its state tracking, its corner cases. Writing the verification plan taught me more than the testbench did: to verify a protocol you must first restate it as a set of promises, and every ambiguity you find in your own restatement is a bug you almost shipped.
The thing that surprised me most, coming from software: coherence protocols are concurrency control, the same problem as two users booking one hotel room at the same instant — except here the "users" are caches, the "database" is memory, and the transaction monitor is etched in silicon. The question that pulled me into system design years ago turns out to live at every layer of the stack.
A longer review of the AMBA protocol family — AHB to AXI to CHI — is in writing, aimed at a conference submission.