如何获取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

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1