(VCU118 DDR HarnessBinder)Fix data field width mismatch between DDR AXI and TileLink MemoryBus #1487
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When evaluating a RV32 design(just add
WithRV32
in theRocketVCU118Config
) on vcu118. The beatBytes is 4, and thereforedataBits
of the MemoryBus will be 32. However the AXI that goes to MIG core is predefined as 64bits wide. Therefore, there is a data field width mismatch here, causing the RV32 design can not access DDR4 of VCU118 successfully. See WithDDRMem HarnessBinder for vcu118 below:It turns out that this harness binder implementation breaks the diplomatic negotiation. It just conducts a chisel connection between two chisel bundles(
ddrClientBundle <> ports.head
) instead of diplomatic connection. Even though the width of the data field is normally determined by downwardTLManager
according toTLImp
. But this harness binder impl breaks that parameter propagation process from manager to client(there are two negotiation ends:memTLNode
inCanHaveMasterTLMemPort
andval ddrClient = TLClientNode(Seq(inParams.master))
inVCU118FPGATestHarness
), therefore the data field width mismatch occurs.This PR adds a
TLWidthWidget
to hide the width difference, I changedddrNode := ddrClient
to the following loc:ddrNode := TLWidthWidget(dp(XLen) / 8) := ddrClient
And the
WithRV32
configuration runs successfully on vcu118Related PRs / Issues:
#1481
Type of change:
Impact:
Contributor Checklist:
main
as the base branch?changelog:<topic>
label?changelog:
label?.conda-lock.yml
file if you updated the conda requirements file?Please Backport
?