Timestamp bitstreams with USR_ACCESS

Automatically inserting a timestamp into a bitstream is really easy with the USR_ACCESS primitive. All you need to do is include the following constraint in one of the XDC files that you are using:

  1. set_property BITSTREAM.CONFIG.USR_ACCESS timestamp [current_design]

Vivado will then automatically create a bitstream with the USR_ACCESS set to an 8 character hexadecimal code that represents the time that the .bit file was created. The time value is taken directly from the system of the computer on which the write_bitstream command is run.

The 32 bits of the timestamp are set out in the following format:

dddddd.MMMM.yyyyyy.hhhhh.mmmmmm.ssssss

  • ddddd 5 bits for 31 days in a month
  • MMMM 4 bits for 12 months in a year
  • yyyyyy 6 bits for the last two digits of the year, 2000 to 2063
  • hhhhh 5 bits for the hour in 24-hour format
  • mmmmmm 6 bits for the minutes
  • mmmmmm 6 bits for the seconds


You can check that the timestamp has been placed in the bitstream by consulting the Vivado implementation log, you should see a line like this:

Overwriting "timestamp" with "ED1F0296" for option USR_ACCESS

Once the FPGA has been programmed, you can see the timestamp by looking at the programmed device properties in Vivado Hardware Manager..



Figure 1: Timestamp displayed in Hardware Manager