如何获取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获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

一文详解如何使用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