第一部分 概述

(转载至https://blog.csdn.net/ladywn/article/details/84393123)

Xilinx每一个FPGA都有一个独特的ID,也就是Device DNA,这个ID相当于我们的身份证,在FPGA芯片生产的时候就已经写死在芯片的eFuse寄存器中,具有不可修改的属性,因为使用的是熔断技术。值得说明的是,在7系列及以前,这个ID都是57bit的,但是在Xilinx的Ultraslace架构下是96bit。

FPGA的DNA我们一般的使用场景是用于用户逻辑加密。一般来说,用户在逻辑上可以通过特定的接口把这个Device DNA读取出来,经过一系列加密算法之后和预先在外部Flash存储的一串加密后的字节串做比较,这个flash存储的加密后的字节串也是由该DNA经过加密后得到,fpga加载程序后可以先从flash读出该段字节做比较,如果相同,则让FPGA启动相应的逻辑,如不同,则代表该FPGA没有经过用户授权,用户逻辑上可以关闭FPGA的逻辑功能甚至可以通过一些手段让硬件损坏。

如何获取FPGA的Device DNA呢,下面我从JTAG和调用源语两个方法说明,并开放核心代码供大家参考。

第一种,通过JTAG获取,这种方法在ISE的Impact或者vivado都可以实现,下面介绍在Vivado下如何或者Device DNA,这个其实很简单,首先板卡通过JTAG连接PC,在Flow Navigator -> PROGRAM AND DEBUG 界面下,点击对应的FPGA的芯片,点击Hardware Device Properties,在search中搜索dna,在REGISTER下可以找到Device DNA,在Impact下如何获取DNA网上有相应的文章,这里就不做进一步介绍。

第二种,用户逻辑通过调用源语获取,至于源语是什么,这里跟大家分享一个技巧,一般我们使用源语的时候,往往记不住大量的源语定义,那么如何快速搜索到我们想要的源语呢,在Vivado中,有一个功能是Language Templates,在Flow Navigator可以找到,里面包含了基本所有的Xilinx提供的源语和一些语法用法,以DNA读取为例,我们搜索DNA,就可以找到关于DNA的源语,由于博主用的是VU9P的片子,所以用的是DNA_PORTE2这个源语,针对7系列及以前,使用的是DNA_PORT源语,这两个源语都可以在Language Templates找到。

接下来说一下这个源语和源语相关的使用方法,这个源语本质上就是读取FUSE寄存器表里面的FUSE_DNA寄存器,里面还包含了一个移位寄存器,源语中的接口本质上都是操作移位寄存器,这个移位寄存器的长度和器件类型有关,是56或者96bit。源语里面的READ信号,是用于把DNA的值装载到移位寄存器里面,DIN是移位寄存器的输入,DOUT是移位寄存器的输出,SHIFT是移位寄存器的移位使能,CLK是移位寄存器的操作时钟,官方提供的源语模型和时序图如下,

对于用户来说,调用这个源语,我们只需要按照操作移位寄存器的流程操作就好了,我们目的是读出源语里面的移位寄存器的值,所以我们设计的思路应该是首先拉高READ先让移位寄存器装载DNA的值,然后在时钟上升沿使能SHIFT,这样子就能让移位寄存器里面的值移位出来,下面是核心代码:

  1. module dna_read(
  2. input sys_clk,
  3. input dna_read_rdy,
  4. output [95:0] dna_read_dat,
  5. output dna_read_vld);
  6. wire dna_dout;
  7. wire dna_read;
  8. wire dna_shift;
  9. DNA_PORTE2 #(
  10. .SIM_DNA_VALUE (96'd0)
  11. )DNA_PORTE2_inst(
  12. .DOUT (dna_dout),
  13. .CLK (sys_clk),
  14. .DIN (dna_dout),
  15. .READ (dna_read),
  16. .SHIFT (dna_shift)
  17. );
  18. reg [95:0] dna_reg = 0;
  19. reg [7:0] dna_cnt = 0;
  20. always @ (posedge sys_clk)
  21. begin
  22. if(dna_read_rdy) begin
  23. dna_cnt <= dna_cnt + 1;
  24. end
  25. else begin
  26. dna_cnt <= 0;
  27. end
  28. end
  29. // load dna data from the fuse dna register
  30. assign dna_read = dna_cnt == 8'd63;
  31. // for ultrascale
  32. assign dna_shift = (dna_cnt >= 8'd100) && (dna_cnt <= 195);
  33. always @ (posedge sys_clk)
  34. begin
  35. dna_reg <= {dna_dout,dna_reg[95:1]};
  36. end
  37. assign dna_read_dat = dna_reg;
  38. assign dna_read_vld = dna_cnt == 8'd196;
  39. endmodule

第二部分 仿真及测试

参考上述博客内容,本人在Vivado2017.4以及Zynq板子(Zynq型号为7Z015,Device DNA为57bit)上分别进行了仿真测试和上板实测。

2.1测试代码

// An highlighted block
`timescale 1ns / 1ps
module dna_test(input CLK,input DIN,output [56:0] DNA_DOUT);wire SHIFT;wire READ;wire DOUT;reg [6:0] dna_cnt = 7'd0;reg [56:0] dna_reg = 57'd0;always@(posedge CLK)if(dna_cnt == 7'd103)dna_cnt <= dna_cnt;else dna_cnt <= dna_cnt + 1'b1;assign SHIFT = (dna_cnt>= 7'd45) && (dna_cnt <= 7'd101);assign READ = (dna_cnt == 7'd20);always@(posedge CLK)if(SHIFT)dna_reg[101-dna_cnt] <= DOUT;elsedna_reg <= dna_reg;assign  DNA_DOUT = (dna_cnt==7'd102) ? dna_reg : 57'd0;DNA_PORT #(.SIM_DNA_VALUE(57'h155550000005555)  // 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.);   endmodule

2.2仿真结果

在上述代码基础上,添加激励文件,并设置SIM_DNA_VALUE = 57'h155550000005555,测试结果如下图所示:

据图可知,激励文件的时序操作如下:首先拉高READ,让移位寄存器装载DNA的值,延时一段时间(注意若不延时会导致DNA首位出问题,无法正常读出),然后在时钟上升沿使能SHIFT,移位寄存器的值由MSB>>LSB依次移出。 DNA仿真结果表明:DOUT输出与设定的DNA值一致:

2.3上板测试结果

在7z015板卡上,运行该程序,并添加ILA观察分析运行结果,程序读出的DNA为008958a31e9085c,与JTAG读出的DNA_PORT = 008958A31E9085C一致。


Xilinx FPGA的Device DNA获取方法相关推荐

  1. Xilinx FPGA单端时钟设计方法

    1.1 Xilinx FPGA单端时钟设计方法 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Xilinx FPGA单端时钟设计方法: 5)结束语. 1.1.2 本节引 ...

  2. Appium真机运行Device Name获取方法

    转自https://blog.csdn.net/maryshine/article/details/52248389 开始接触Appium的时候,看网上的经验帖子一般都是用模拟器运行,但是模拟器运行的 ...

  3. Xilinx FPGA的程序加密方法

     更多精彩内容,请微信搜索"FPGAer俱乐部"关注我们. Xilinx所有的FPGA器件都有Device DNA,这是一个57bit的二进制序列,在器件生产的时候烧死到芯片里 ...

  4. Xilinx FPGA PLL输出不能直接连接IO解决方法

    1.1 Xilinx FPGA PLL输出不能直接连接IO解决方法 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4) Xilinx FPGA PLL输出不能直接连接IO解 ...

  5. Xilinx FPGA的配置

    http://blog.sina.com.cn/s/blog_98d98c7f0102v4ex.html http://www.cnblogs.com/aikimi7/p/3499633.html F ...

  6. xilinx芯片管脚使用限制_【转载】 Xilinx FPGA配置的一些细节

    0 参考资料 (1) Xilinx: Development System Reference Guide. dev.pdf, v10.1 在Xilinx的doc目录下有. (2) Xilinx: V ...

  7. Xilinx FPGA 将寄存器放入IOB中

    xilinx FPGA的资源一般指IOB,CLB,BRAM,DCM,DSP五种资源.其中IOB就是input/output block,完成不同电气特性下对输入输出信号的的驱动和匹配要求. IOB的作 ...

  8. 四、在Xilinx FPGA上使用Cortex M1 软核——固化Cortex-M1程序

    在Xilinx FPGA上使用Cortex M1 软核--固化Cortex-M1程序 本文的硬件(FPGA)工程和软件代码.脚本均参考ARM提供的例程. 本文使用的FPGA工程: https://do ...

  9. Xilinx FPGA时钟及I/O接口规划(一)

    引言:从本文开始,我们介绍Xilinx FPGA时钟及I/O接口规划设计.I/O和时钟规划是定义和分析FPGA和印刷电路板(PCB)之间连接的过程,并将各种互连信号分配给FPGA器件的物理管脚,正确的 ...

  10. 数据传输完整性_基于IBIS模型的FPGA信号完整性仿真验证方法

    人工智能与深度学习等领域的快速发展,使得FPGA等器件应用范围愈加广泛,同时也要求器件的开关速率加快.引脚数量增多.但陡峭的时钟边沿和增加的引脚数使得杂散.耦合.寄生电容电感会对器件产生诸多信号完整性 ...

最新文章

  1. Gut: 妊娠期糖尿病与孕妇及其新生儿微生物菌群失调有关(赵方庆作品)
  2. Fedora 33更新异常:Errors during downloading metadata for repository ‘updates‘
  3. bootstrap 模态 modal 小例子【转】
  4. 骆驼祥子大事件时间轴_骆驼中的事件处理
  5. 述职答辩提问环节一般可以问些什么_论文答辩一般会问什么问题?需要注意什么事项?...
  6. 基于alsa的音量控制代码
  7. pytorch Resnet
  8. 华北水利水电大学计算机研究生调剂,2017年华北水利水电大学考研调剂公告
  9. js中立即执行函数会预编译吗_浅析Vue的生命周期以及JS异步
  10. 【机器学习系列】变分推断第二讲:基于Mean Field的变分推断解法
  11. 迅雷bolt界面引擎
  12. 前端学习——页面布局
  13. itunes如何备份手机所有数据
  14. API 接口应该如何设计?如何保证安全?如何签名?如何防重?
  15. 一个项目的经验教训:关于打乱和拆分数据
  16. 视频剪辑没素材?一定要收藏这几个网站。
  17. MySQL拷贝表结构、表数据总结
  18. 苹果mac电脑重装系统,以及重装之后没有声音、热键不能使用的解决办法
  19. 计算机科技英语文章及翻译,计算机专业英语短文翻译.doc
  20. linux下 postgresql 安装 postgis 拓展

热门文章

  1. 计算机考研复试面试题专业知识整理
  2. MySQL 轻量级Online DDL工具 —— gh-ost
  3. 网络安全等级保护概述
  4. HWADDR配置错误导致network重启失败处理
  5. python 列表索引位置_python列表索引查找
  6. [bzoj4556][TJOIHEOI2016]字符串
  7. excel两个指标相关性分析_excel两组数据相关性分析
  8. IMPDP ORA-39125 / LPX-00241
  9. 股票大作手操盘术---到手的利润
  10. SQLite3 数据库全文搜索 - SQL Server - 红黑联盟