作者:Evening
Xilinx每一個(gè)FPGA都有一個(gè)獨(dú)特的ID,也就是Device DNA,這個(gè)ID相當(dāng)于我們的身份證,在FPGA芯片生產(chǎn)的時(shí)候就已經(jīng)寫死在芯片的eFuse寄存器中,具有不可修改的屬性,因?yàn)槭褂玫氖?a target="_blank">熔斷技術(shù)。值得說明的是,在7系列及以前,這個(gè)ID都是57bit的,但是在Xilinx的Ultraslace架構(gòu)下是96bit。
FPGA的DNA我們一般的使用場(chǎng)景是用于用戶邏輯加密。一般來說,用戶在邏輯上可以通過特定的接口把這個(gè)Device DNA讀取出來,經(jīng)過一系列加密算法之后和預(yù)先在外部Flash存儲(chǔ)的一串加密后的字節(jié)串做比較,這個(gè)flash存儲(chǔ)的加密后的字節(jié)串也是由該DNA經(jīng)過加密后得到,fpga加載程序后可以先從flash讀出該段字節(jié)做比較,如果相同,則讓FPGA啟動(dòng)相應(yīng)的邏輯,如不同,則代表該FPGA沒有經(jīng)過用戶授權(quán),用戶邏輯上可以關(guān)閉FPGA的邏輯功能甚至可以通過一些手段讓硬件損壞。
如何獲取FPGA的Device DNA呢,下面我從JTAG和調(diào)用源語兩個(gè)方法說明,并開放核心代碼供大家參考。
第一種,通過JTAG獲取,這種方法在ISE的Impact或者vivado都可以實(shí)現(xiàn),下面介紹在Vivado下如何或者Device DNA,這個(gè)其實(shí)很簡(jiǎn)單,首先板卡通過JTAG連接PC,在Flow Navigator -> PROGRAM AND DEBUG 界面下,點(diǎn)擊對(duì)應(yīng)的FPGA的芯片,點(diǎn)擊Hardware Device Properties,在search中搜索dna,在REGISTER下可以找到Device DNA,在Impact下如何獲取DNA網(wǎng)上有相應(yīng)的文章,這里就不做進(jìn)一步介紹。
第二種,用戶邏輯通過調(diào)用源語獲取,至于源語是什么,這里跟大家分享一個(gè)技巧,一般我們使用源語的時(shí)候,往往記不住大量的源語定義,那么如何快速搜索到我們想要的源語呢,在Vivado中,有一個(gè)功能是Language Templates,在Flow Navigator可以找到,里面包含了基本所有的Xilinx提供的源語和一些語法用法,以DNA讀取為例,我們搜索DNA,就可以找到關(guān)于DNA的源語,由于博主用的是VU9P的片子,所以用的是DNA_PORTE2這個(gè)源語,針對(duì)7系列及以前,使用的是DNA_PORT源語,這兩個(gè)源語都可以在Language Templates找到。

接下來說一下這個(gè)源語和源語相關(guān)的使用方法,這個(gè)源語本質(zhì)上就是讀取FUSE寄存器表里面的FUSE_DNA寄存器,里面還包含了一個(gè)移位寄存器,源語中的接口本質(zhì)上都是操作移位寄存器,這個(gè)移位寄存器的長(zhǎng)度和器件類型有關(guān),是56或者96bit。源語里面的READ信號(hào),是用于把DNA的值裝載到移位寄存器里面,DIN是移位寄存器的輸入,DOUT是移位寄存器的輸出,SHIFT是移位寄存器的移位使能,CLK是移位寄存器的操作時(shí)鐘,官方提供的源語模型和時(shí)序圖如下,


對(duì)于用戶來說,調(diào)用這個(gè)源語,我們只需要按照操作移位寄存器的流程操作就好了,我們目的是讀出源語里面的移位寄存器的值,所以我們?cè)O(shè)計(jì)的思路應(yīng)該是首先拉高READ先讓移位寄存器裝載DNA的值,然后在時(shí)鐘上升沿使能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 end
else begin
dna_cnt 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
always @ (posedge sys_clk)
begin
dna_reg end
assign dna_read_dat = dna_reg;
assign dna_read_vld = dna_cnt == 8'd196;
endmodule
這是一個(gè)axis總線的模塊,在dna_read_rdy拉高表示外部準(zhǔn)備好接收數(shù)據(jù),這時(shí)候模塊讀取DNA的值,然后送出去給外部模塊,外部模塊收到數(shù)據(jù)和dna_read_vld信號(hào),則拉低dna_read_rdy,完成一次dna數(shù)值傳輸流程。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1660文章
22408瀏覽量
636218 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129964 -
Xilinx
+關(guān)注
關(guān)注
73文章
2200瀏覽量
131120
發(fā)布評(píng)論請(qǐng)先 登錄
Xilinx FPGA中IDELAYCTRL參考時(shí)鐘控制模塊的使用
AMD UltraScale架構(gòu):高性能FPGA與SoC的技術(shù)剖析
MarketsandMarkets FPGA行業(yè)報(bào)告,2026~2030 FPGA市場(chǎng)洞察
使用Xilinx 7系列FPGA的四位乘法器設(shè)計(jì)
Xilinx FPGA串行通信協(xié)議介紹
請(qǐng)問如何將蜂鳥E203移植到Xilinx NEXYS A7 FPGA 開發(fā)板上?
開源RISC-V處理器(蜂鳥E203)學(xué)習(xí)(二)修改FPGA綜合環(huán)境(移植到自己的Xilinx FPGA板卡)
一文詳解xilinx 7系列FPGA配置技巧
Altera Agilex? 3 FPGA和SoC FPGA
智多晶FPGA設(shè)計(jì)工具HqFpga接入DeepSeek大模型
XILINX XCZU67DR FPGA完整原理圖
使用gpif designer fx2lp在CTL0中生成波形來連接FPGA 以便從FPGA獲取數(shù)據(jù),為什么不能正常工作?
ZYNQ FPGA的PS端IIC設(shè)備接口使用
國(guó)產(chǎn)FPGA往事
關(guān)于Xilinx FPGA如何獲取FPGA的Device DNA
評(píng)論