FPGA DNA
DNA 是 FPGA 晶片的唯一標識, FPGA 都有一個獨特的 ID ,也就是 Device DNA ,這個 ID 相當於我們的身份證,在 FPGA 晶片生產的時候就已經固定在晶片的 eFuse 暫存器中,具有不可修改的屬性。在 xilinx 7series 和 7series 以前,ID 都是 57bit
的,但是在 Xilinx 的 Ultraslace 架構下是 96bit 。
The 7 series FPGA contains an embedded, 64-bit device identifier which is used to provide a 57-bit Device DNA value. The identifier is nonvolatile, permanently programmed by Xilinx into the FPGA, and is unchangeable making it tamper resistant. Each device is programmed with a 57-bit DNA value that is most often unique. However, up to 32 devices within the family can contain the same DNA value. The JTAG FUSE_DNA command can be used to read the entire 64-bit value that is always unique. Device DNA is
composed of bits 0 to 56 of the 64-bit FUSE_DNA value. External applications can access the Device DNA or FUSE_DNA values through the JTAG port, and FPGA designs can access the DNA only through a Device DNA Access Port (DNA_PORT).
意思是說JTAG可以拿到57bit的DNA_PORT和64 bit的FUZE_DNA,DNA_PORT值最多會有32個器件有相同的值,FUZE_DNA就是唯一的。而如果要透過FPGA資源區讀取,只能用DNA_PORT,也就是說你寫邏輯的話得用57bit的DNA_PORT。
如何讀取
JTAG
可以使用 JTAG 檢視當前 FPGA 的 DNA 碼。
其中 FUSE_DNA 即為我們要獲取的 DNA 編碼資訊,copy 即可。
程式碼獲取
呼叫DNA_PORT實現。https://fpga.eetrend.com/files-eetrend-xilinx/download/201408/7594-13761-ug4707seriesconfig.pdf
DNA_PORT #(
.SIM_DNA_VALUE(57'h123456789abcdef) // Specifies a sample 57-bit DNA value for simulation
)
DNA_PORT_inst (
.DOUT(dna_dout), // 1-bit output: DNA output data.
.CLK(sys_clk), // 1-bit input: Clock input.
.DIN(1'b0), // 1-bit input: User data input pin.
.READ(dna_read), // 1-bit input: Active high load DNA, active low read input.
.SHIFT(dna_shift) // 1-bit input: Active high shift enable input.
);
使用DNA_PORT獲取的DNA和JTAG讀取的DNA對比
參考
https://www.xilinx.com/support/answers/64178.html JTAG 獲取 DNA