We currently use the usr_access field in the bitstream to identify different versions of bitstreams (e.g. bitstreams with different ROMs or OTPs spliced in) when programming. By default, it contains the timestamp of the Vivado build, and currently, when we splice in different components, we update usr_access to contain the timestamp of the splicing operation.
The problem is that when Bazel splices multiple bitstreams simultaneously, these operations can end within one second of one another, leading to multiple spliced bitstreams with the same value. This can cause tests to fail due to opentitantool skipping the bitstream programming when it observes identical usr_access values.
There are a couple approaches we are considering to resolve this in the long run:
Use a 32-bit hash of the bitstream (with the usr_access field zeroed out) as the new usr_access.
Maintain the use of the time stamp for "official"/released bitstreams (i.e. RMA with testROM/ROM), and we force the usr_access values for the other bitstreams to be 0 (and set the rom_kind field in cw310_params to None to force a bitstream reprogramming).
We currently use the
usr_access
field in the bitstream to identify different versions of bitstreams (e.g. bitstreams with different ROMs or OTPs spliced in) when programming. By default, it contains the timestamp of the Vivado build, and currently, when we splice in different components, we updateusr_access
to contain the timestamp of the splicing operation.The problem is that when Bazel splices multiple bitstreams simultaneously, these operations can end within one second of one another, leading to multiple spliced bitstreams with the same value. This can cause tests to fail due to opentitantool skipping the bitstream programming when it observes identical
usr_access
values.There are a couple approaches we are considering to resolve this in the long run:
usr_access
field zeroed out) as the newusr_access
.rom_kind
field incw310_params
to None to force a bitstream reprogramming).