基于SPARTAN6的保密之DNA

文章介绍了在FPGA项目中如何进行保密,特别是小工作室如何防止设计被抄袭。Xilinx的FPGA具有独特的DNA,即DNAPort,可通过JTAG或原语读取。文中提供了通过Verilog代码读取并验证DNA的方法,以此来确保设备的合法性。
摘要由CSDN通过智能技术生成

摘要

        相信对于大家FPGA保密这块,都很头疼,特别是我们这种小工作室,更对于保密这块,忧心冲冲,相信谁也不敢想让自己辛辛苦苦调试的项目,在量产之后,被大厂摘桃子,付费买断就算是比较讲究了,有很多直接勾结PCB制造商,贴片商,直接复刻咱们的PCB,一点脾气也没有。

        在这种情况下,保密措施就很重要了,小公司有小公司的好处,对于量不大的产品,读取设备编号,那就是最好的解决办法。

设备DNA

        Xilinx 每一个 FPGA 都有一个独特的 ID,也就是 DNA Port,这个 ID 相当于我们的身份证,在 FPGA 芯片生产的时候就已经写死在芯片的 eFuse 寄存器中,具有不可修改的属性当前SPARTAN6的设备编号是57Bits的二进制数据。

        获取DNA的方法有两种,1、使用JTAG读取;2通过原语读取。

JTAG读取DNA

        打开ISE14.7软件IMPACT->查找设备->READ DNA命令,如图

        

 通过源语读取DNA

DNA_PORT #(
      .SIM_DNA_VALUE(57'h000000000000000)  // Specifies the Pre-programmed factory ID value
   )
   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
   );

功能有说明,值得注意的是,DIN没什么用,不用管他

应用&仿真

module SP6_DNA_CHECK #
(
	parameter			P_DEV_DNA = 57'h135DCD0A8CE26E7 
)
(
	input				I_SYSTEM_CLK	,
	input				I_SYSTEM_RSTN	,

	output				O_SYSTEM_FIFISH
);
	
	reg			[6:0]		r_dna_rcnt	;
	reg						r_dna_read	;
	reg						r_dna_shift	;
	reg			[56:0]		r_local_dna	;
	wire					w_local_dat	;
	
	always @(posedge I_SYSTEM_CLK)
		if(~I_SYSTEM_RSTN)
			r_dna_rcnt	<=	7'b0	;
		else if(r_dna_rcnt == 7'h7f)
			r_dna_rcnt	<=	r_dna_rcnt	;
		else
			r_dna_rcnt	<=	r_dna_rcnt + 1'b1	;
			
	always @(posedge I_SYSTEM_CLK)
	begin
		r_dna_read	<=	(r_dna_rcnt == 7'd10) ? 1'b1 : 1'b0 ;
		r_dna_shift <=	(r_dna_rcnt >= 7'd20 && r_dna_rcnt < 7'd77) ? 1'b1 : 1'b0 ;
	end
	
	always @(posedge I_SYSTEM_CLK)
		if(~I_SYSTEM_RSTN)
			r_local_dna	<=	57'b0	;
		else if(r_dna_rcnt < 78)
			r_local_dna	<=	{r_local_dna[55:0],w_local_dat} ;
		else
			r_local_dna	<=	r_local_dna ;



DNA_PORT #
(
      .SIM_DNA_VALUE(57'h135DCD0A8CE26E7)  // Specifies the Pre-programmed factory ID value
)
DNA_PORT_inst 
(
    .DOUT(w_local_dat),   // 1-bit output: DNA output data
    .CLK(I_SYSTEM_CLK),     // 1-bit input: Clock input
    .DIN(1'b0),     // 1-bit input: User data input pin
    .READ(r_dna_read),   // 1-bit input: Active high load DNA, active low read input
    .SHIFT(r_dna_shift)  // 1-bit input: Active high shift enable input
);

	assign	O_SYSTEM_FIFISH	=	(r_local_dna == P_DEV_DNA)? 1'b1 : 1'b0 ;

endmodule

 功能很简单,就是开机之后对比一下DNA,一致则继续执行,不一致非法状态

总结:

        虽然很麻烦,在每次写入前都要重复读取设备DNA然后写入到设备程序里面,再编译,下载。增加了工作了,但是保护了我们的知识产权,其中取舍还得看个人喜好以及实际使用情况,至于其他方法,也欢迎大家讨论。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eidolon_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值