如何获取FPGA的device DNA?(含源码)

本文转载自:FPGA入门到精通

每个FPGA芯片都有其独特的身份标识,这就像是设备的“DNA”。

了解如何获取FPGA的Device DNA,可以帮助我们识别芯片、验证真伪、甚至优化设计。

本文将带你深入了解如何获取FPGA的Device DNA。

一、什么是FPGA的Device DNA?

FPGA的Device DNA通常指的是芯片的唯一识别码,也被称为设备序列号(Device Serial Number)或设备ID。

这个序列号是制造商在生产过程中编程到芯片中的,用于标识每一个单独的FPGA芯片。它通常包含了制造商信息、生产批次、型号等关键信息。

Device DNA是非易失的,不可更改,只有只读属性。

二、为什么需要获取FPGA的Device DNA?

1、验证真伪

通过比对Device DNA,可以验证FPGA芯片是否为正品。

2、追踪管理

在批量生产中,Device DNA可以帮助追踪每个芯片的流向,便于质量控制和售后服务。

3、技术支持在寻求技术支持时,提供Device DNA可以帮助制造商或技术支持团队快速定位问题。

4、个性化配置

某些应用可能需要根据特定芯片的特性进行个性化配置,Device DNA是这一过程的关键。

5、用户逻辑加密

FPGA的Device DNA常用于加密用户逻辑。用户可通过特定接口读取DNA,并经过加密算法处理。处理后的结果与外部Flash中存储的加密字节串进行比较。若匹配,FPGA启动相应逻辑;若不匹配,表明FPGA未获授权,可关闭其逻辑功能。

三、如何获取FPGA的Device DNA?
1、通过Hardware Manager获取

在vivado中,打开Hardware Manager,鼠标点击选中FPGA芯片,可以在Property窗口中,找到FUSE_DNA,这个就是FPGA Device DNA。

2、通过verilog代码获取

DNA_PORTE2是一个Xilinx提供的Primitive,它允许用户在FPGA内部通过硬件逻辑访问Device DNA。这个Primitive主要用于UltraScale系列FPGA,其中Device DNA是96位的。

对于7系列及以前的FPGA,可以使用DNA_PORT Primitive,其Device DNA是57位的。

(1)DNA_PORT Primitive

xilinx 7系列可以通过DNA_PORT Primitive原语获取Device DNA。

Device DNA.png

操作时序:

操作时序.png

原语调用:
   DNA_PORT #(
      .SIM_DNA_VALUE(57'h000000000000000)  // Specifies a sample 57-bit DNA value for simulation
   )
   DNA_PORT_inst (
      .DOUT(DOUT),   // 1-bit output: DNA output data.
      .CLK(CLK),     // 1-bit input: Clock input.
      .DIN(DIN),     // 1-bit input: User data input pin.
      .READ(READ),   // 1-bit input: Active high load DNA, active low read input.
      .SHIFT(SHIFT)  // 1-bit input: Active high shift enable input.
   );


(2)、DNA_PORT 2 Primitive

Ultraslace系列可以通过DNA_PORT 2 Primitive 原语获取Device DNA。

Ultraslace系列.png

操作时序:

操作时序2.png

原语调用:

   DNA_PORTE2 #(
      .SIM_DNA_VALUE(96'h000000000000000000000000)  // Specifies a sample 96-bit DNA value for simulation
   )
   DNA_PORTE2_inst (
      .DOUT(DOUT),   // 1-bit output: DNA output data
      .CLK(CLK),     // 1-bit input: Clock input
      .DIN(DIN),     // 1-bit input: User data input pin
      .READ(READ),   // 1-bit input: Active-High load DNA, active-Low read input
      .SHIFT(SHIFT)  // 1-bit input: Active-High shift enable input
   );

(3)控制信号和端口

DNA_PORTE模块有几个关键的控制信号和端口:

CLK:时钟信号,用于驱动移位寄存器。
READ: 当这个信号有效时(通常是高电平),Device DNA信息会被加载到移位寄存器中。
SHIFT: 当这个信号有效且READ无效时,移位寄存器开始移位,Device DNA的位会从`DOUT`端口输出。
DIN: 移位寄存器的输入。
DOUT: 移位寄存器的输出,用于读取Device DNA信息

(4)读取Device DNA的步骤

需要设计一个状态机或逻辑来控制READ和SHIFT信号。
首先,通过设置READ信号为高电平,DNA信息会被加载到内部的移位寄存器中。
然后,通过设置SHIFT信号为高电平且READ信号为低电平,DNA数据会从DOUT端口输出按。
通过重复这个过程,你可以逐位读取整个DNA值。

四、获取Device DNA的注意事项
在读取Device DNA的过程中,电源的稳定性非常重要,不稳定的电源可能导致读取错误或损坏FPGA。

不同的FPGA制造商可能有不同的读取方法和步骤,务必遵循制造商提供的指南。

源码下载(7系列和UltraScale系列):

https://pan.quark.cn/s/de57a48a1c91

最新文章

最新文章