Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A possible mismatch? #3387

Open
DecodeTheEncoded opened this issue Jun 15, 2023 · 0 comments
Open

A possible mismatch? #3387

DecodeTheEncoded opened this issue Jun 15, 2023 · 0 comments

Comments

@DecodeTheEncoded
Copy link

https://github.com/chipsalliance/rocket-chip/blob/69d92c2dedbeaeee325f8f2cf1e7388ad7d4645a/src/main/scala/tilelink/AtomicAutomata.scala#LL244C11-L244C66
I am going through TLAtomicAutomata module, and feel confused about the loc above. Should that be
in.d.bits.corrupt := d_cam_corrupt || out.d.bits.corrupt
Also, I wonder if TLAtomicAutomata supports handling of burst atomic messages? I went through the implementation and had trouble understanding it clearly. According to the code below:

        when (out.d.fire() && d_first) {//hjr todo why only d_first get cached into r.data?
          (d_cam_sel zip cam_d) foreach { case (en, r) =>
            when (en && d_ackd) {
              r.data := out.d.bits.data
              r.denied := out.d.bits.denied
              r.corrupt := out.d.bits.corrupt
            }
          }
          (d_cam_sel zip cam_s) foreach { case (en, r) =>
            when (en) {
              // Note: it is important that this comes AFTER the := GET, so we can go FREE=>GET=>AMO in one cycle --todo
              r.state := Mux(d_ackd, AMO, FREE)
            }
          }
        }

It seems that only the first beat of an AccessAckData(response to a transformed Get) will be cached into cam_d. Can anybody confirm this?
Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant