获取Xilinx FPGA的DNA的两个方法

时间:2025-09-12  作者:Diven  阅读:0

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

获取Xilinx FPGA的DNA的两个方法

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,这样子就能让移位寄存器里面的值移位出来,下面是核心代码:

Module dna_read(

input sys_clk,

input dna_read_rdy,

output [95:0] dna_read_dat,

output dna_read_vld);

wire dna_dout;

wire dna_read;

wire dna_shift;

DNA_PORTE2 #(

.SIM_DNA_VALUE (96‘d0)

)DNA_PORTE2_inst(

.DOUT (dna_dout),

.CLK (sys_clk),

.DIN (dna_dout),

.READ (dna_read),

.SHIFT (dna_shift)

);

reg [95:0] dna_reg = 0;

reg [7:0] dna_cnt = 0;

always @ (posedge sys_clk)

begin

if(dna_read_rdy) begin

dna_cnt 《= dna_cnt + 1;

end

else begin

dna_cnt 《= 0;

end

end

// load dna data from the fuse dna register

assign dna_read = dna_cnt == 8’d63;

// for ultrascale

assign dna_shift = (dna_cnt 》= 8‘d100) && (dna_cnt 《= 195);

always @ (posedge sys_clk)

begin

dna_reg 《= {dna_dout,dna_reg[95:1]};

end

assign dna_read_dat = dna_reg;

assign dna_read_vld = dna_cnt == 8’d196;

endModule

这是一个axis总线的模块,在dna_read_rdy拉高表示外部准备好接收数据,这时候模块读取DNA的值,然后送出去给外部模块,外部模块收到数据和dna_read_vld信号,则拉低dna_read_rdy,完成一次dna数值传输流程。

猜您喜欢

达林顿管是应用于电子电路中的高增益晶体管,因其独特的结构和性能而受到青睐。根据不同的分类标准,达林顿管可以主要分为以下几类:从封装形式上看,达林顿管可分为表面贴...
2015-12-05 00:00:00

贴片电阻,顾名思义,就是贴在电路板表面的一种电阻器。它体积小巧,在如今电子产品轻薄化的趋势下应用广泛。那么,它究竟是如何工作的呢?简单来说,贴片电阻的原理基于欧...
2024-11-26 11:30:00

想知道一盘贴片电阻究竟有多少个?其实计算方法很简单!一般情况下,贴片电阻的包装方式是卷盘式,我们需要找到卷盘上的两个关键信息:料盘尺寸和元件间距。料盘尺寸通常标...
2024-11-26 11:29:44

1002贴片电阻,指的是尺寸为1.0mm x 0.2mm的表面贴装电阻,是目前市场上最小尺寸的贴片电阻之一。它的小巧身材使其在各种电子产品中都能找到身影,尤其是...
2024-11-26 11:29:31

光谱传感检测技术是科学研究和工业生产中广泛应用的一种光学分析技术,凭借其对物质光谱指纹的特异性辨识能力,在生物医药、遥感测绘、环境监测、智慧农业、工业自动化等领...
2023-11-08 09:06:00

监控式热成像仪是高科技设备,应用于安全监控、消防检查、设备维护等领域。其参数的选择直接影响到设备的性能和应用效果。分辨率是关键参数。高分辨率的热成像仪能够提供更...
2013-11-13 00:00:00

现代电子设备中,封装技术的选择对电路性能和整体设计非常重要。QFN(QuadFlatNo-lead)封装作为新兴的封装技术,因其优越的散热性能和小巧的体积而受到...
2025-04-24 06:31:44

贴片电阻是电子电路中不可或缺的元件,选择合适的阻值至关重要。这份常规贴片电阻阻值表旨在帮助您快速找到所需的电阻值。常见的贴片电阻封装尺寸包括0201、0402、...
2025-04-14 15:03:47

贴片电阻脱落是电子产品维修中常见的问题,通常由外力冲击、过热或焊接不良引起。 发现电阻脱落后,首先要判断其重要性。如果设备功能正常,且脱落电阻位于非关键电路,可...
2024-11-29 10:25:57

优点是体积小高集成产品。只需添加一个微处理器接口,外加两个外部 SMT 电容。专为大批量、成本敏感的 OEM 生产而设计,易于装配并与高速 SMT 装配件兼...
2023-07-20 10:48:00