Perhaps a picture would do a better job explaining what happened ... The good news is that regressions are now passing (again) following a simple fix (S/W change only) to move the sample clock earlier.
Today's bug of the week is a story. It starts with a commercial memory controller (built by yours truly), that passes all of its simulation tests. Reads tested, writes tested, WRAP tested, Exclusive access checked, etc.
Many, but not all components were formally verified.
Replying to @tadgirl23
Can you show me where AR changes while ARVALID && !ARREADY?
As for reset, there's no requirement on when it can or cannot be asserted. It can be asserted at any time, and the design needs to respond appropriately.
"Righteous lips are the delight of kings; and they love him that speaketh right." Prov 16:13
There's a cost to telling the truth--even when it's not convenient. There's a greater cost to not speaking.
Elon Musk was asked how he handles employees who disagree with him publicly.
His answer contradicts every leadership book written in the last 30 years.
"I'd rather have someone who argues with me and is right than someone who agrees with me and is wrong."
The room expected the diplomatic answer. That he values diverse perspectives. That healthy debate makes the team stronger. The standard CEO answer about psychological safety.
He went further. He said the most dangerous person in any company is the one who agrees with you to protect their job. Because that person will let you drive the company off a cliff rather than risk being fired for telling you the cliff is there. The yes-man isn't loyal. He's selfish. He's trading the company's survival for his own comfort.
He said SpaceX has a rule. If an engineer sees a problem and doesn't speak up, and the problem later causes a failure, the silence is treated as more serious than the mistake itself. The person who made the error was trying. The person who watched the error and said nothing was protecting themselves at the cost of the mission.
Think about what that inverts. In most companies, the person who stays quiet and avoids conflict is rewarded with job security. At SpaceX, silence is the fireable offense and disagreement is the job requirement.
Most leaders say they want honesty. Then they punish the first person who delivers it. He built a system where dishonesty through silence is the thing that gets punished. The culture didn't happen by accident. It was engineered to make agreement more dangerous than disagreement.
Here's another one of AMD (Xilinx)'s bugs.
You can't register AWREADY and set it unless you know (!BVALID || BREADY).
In my designs, I use a skidbuffer, and set the ready to the skidbuffer to (!BVALID || BREADY) && AWVALID && WVALID (and either AXI-Lite, or the burst is either over or on its last beat). The skidbuffer ensures the ultimate AWREADY can be registered (as required by the spec), while also guaranteeing a potential 100% throughput.
Further, their FSM only sets awready once the address and last data has been read. This is wrong. AWREADY should be set *ANY* time the design is idle--not just on the transition. That will keep you from getting stuck forgetting to set it properly.
The bug is in RDATA.
RDATA may only change (on the posedge of ACLK) if (!RVALID || RREADY). Practically, this forces it to be registered. AMD's design never registered RDATA, hence it changes contrary to the spec.
If they had just followed my published advice, they wouldn't still be having this problem ...
zipcpu.com/blog/2021/08/28/a…
Replying to @zipcpu
RData violation moment.
The data is not stable.
If I had to guess, a clock polarity inversion bug in the RTL?
















