Description
Does each Speedster7t device have an identification number stored internally in the form of read-only data?
Answer
The Speedster7t family of devices contains a set of internal fuses that can be blown during production storing logical values that are then read only. One of these fuses stores a 32-bit sequence known as Device_DNA. The Device_DNA is similar to a serial number in that it is a value that uniquely identifies a specific part. This 32-bit sequence can be read from the fabric after the FPGA has been programmed. This device DNA register value is accessed by the fabric via IPINs.
The 32-bit data sequence contains the following information (listed in order from LSB to MSB):
- 7-bit Product Code (Bits 0-6) – indicates type of variation (speed, temp, encryption).
- 13-bit Unique ID (Bits 7-19) – this would be the maximum number of chips for a given product code that passed in any single day, which would be limited to 8K units.
- 12-bit Date Code (Bits 20-31) – encoded date using 3 bits for the year, 4 bits for the month, 5 bits for the day the chip passed testing. For example, 2021 has the value "101". January would have the value "0001" and the first day of the month "0_0001". As a result, January 1, 2021 would be represented as "1010_0010_0001".
Note: This chip could be manufactured through 2028 before the 3-bit year representation becomes an issue (in 2029 the three bit date will once again be 101).
ACE Placements to Read Device DNA
In order to connect the fabric inputs of Device_DNA to the IPINs, the following .pdc file must be input into an ACE project. To accommodate this .pdc file, the top-level core fabric design must include an input port bus of dna[31:0].
Note: In a future release of ACE, this pdc will be automatically generated.
set_placement -fixed -batch {p:dna[0]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile9.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[1]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile10.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[2]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile11.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[3]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile12.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[4]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile13.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[5]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile14.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[6]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile15.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[7]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile16.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[8]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile17.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[9]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile18.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[10]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile19.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[11]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile20.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[12]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile21.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[13]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile22.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[14]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile23.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[15]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile24.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[16]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile25.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[17]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile26.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[18]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile27.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[19]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile28.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[20]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile29.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[21]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile30.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[22]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile31.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[23]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile32.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[24]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile33.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[25]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile34.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[26]} {s:u_ic_west.u_ic_ew_lc00.u_ic_ew_luttile35.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[27]} {s:u_ic_west.u_ic_ew_lc01.u_ic_ew_luttile0.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[28]} {s:u_ic_west.u_ic_ew_lc01.u_ic_ew_luttile1.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[29]} {s:u_ic_west.u_ic_ew_lc01.u_ic_ew_luttile2.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[30]} {s:u_ic_west.u_ic_ew_lc01.u_ic_ew_luttile3.sg.slc27.ipin}
set_placement -fixed -batch {p:dna[31]} {s:u_ic_west.u_ic_ew_lc01.u_ic_ew_luttile4.sg.slc27.ipin}