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

2024-04-20 15:52
文章标签 dna 源码 fpga 获取 device

本文主要是介绍如何获取FPGA的device DNA?(含源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、什么是FPGA的Device DNA?

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

1、验证真伪

2、追踪管理

3、技术支持

4、个性化配置

5、用户逻辑加密

三、如何获取FPGA的Device DNA?

1、通过Hardware Manager获取

2、通过verilog代码获取

四、获取Device DNA的注意事项


每个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。

 

​操作时序:

 

原语调用:

   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。

 

操作时序:

 

原语调用:

  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


本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦

本文由FPGA入门到精通原创,有任何问题,都可以在评论区和我交流哦

公众号为“FPGA入门到精通”,关注领FPGA学习资料大礼包分享,github开源代码:“FPGA知识库”

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。

这篇关于如何获取FPGA的device DNA?(含源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920682

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值