-
Notifications
You must be signed in to change notification settings - Fork 121
Description
I run RapidWright and Vivado in Docker (but have run it in similar caching systems previously) which provides binary layer caching for the inputs and outputs to build stages. If the checksums for all of the inputs (files, arguments, etc.) don't change, intermediate stages can be cached and reused.
I have synth, opt, place, route build stages for a plain Vivado flow. In some builds, I use a RapidWright intermediate stage to manipulate Vivado DCPs.
If I run:
val dcp = Design.readCheckpoint("vivado.dcp")
dcp.writeCheckpoint("rapidwright1.dcp")
dcp.writeCheckpoint("rapidwright2.dcp")The emitted DCPs: rapidwright1.dcp and rapidwright2.dcp contain different binary data (and interestingly: on a 522MB Vivado DCP, the DCPs that RapidWright emits are only 356MB).
I assume a timestamp or something is getting inserted into the DCP output which is causing the file checksums to be different, breaking any kind of caching one might be using:
# sha256sum rapidwright*.dcp
3d88a165e38282320b92e8ac020b7ef4472fda2d1bc971f261b868dcdcbd8a31 rapidwright1.dcp
aa514d798478831d6ad232ddc75fdb6617670cefba4dd1cb1eb9abba77298ab1 rapidwright2.dcpI would love the ability for rapidwright1.dcp and rapidwright2.dcp to have the same binary contents and checksum - even if this means fixing or explicitly passing the timestamp or whatever is changing internally. It's okay if vivado.dcp and rapidwright1.dcp don't match, as I'm sure these are radically different codebases, DCP generation routines, etc., but successive RapidWright runs should be able to result in consistent outputs.