作者:Han Hong,ADM賽靈思工程師
在一些大型項(xiàng)目的設(shè)計(jì)中,可能會涉及多個公司或者同一公司多個部門之間的協(xié)作,在最終歸并完整設(shè)計(jì)時,你需要提交你負(fù)責(zé)的子模塊的設(shè)計(jì),可以以RTL源文件形式提交. 當(dāng)你希望對你的RTL源文件進(jìn)行加密,可以在Vivado中采用? IEEE-1735-2014 version 2 (V2)的標(biāo)準(zhǔn), 對RTL源文件進(jìn)行加密,允許對方將你的加密RTL源文件應(yīng)用到Vivado中進(jìn)行綜合,仿真或者實(shí)現(xiàn). 在這里我們會解釋一下在使用源文件加密時的一些基本概念以及一些常見的問題。
許可證(License):
使用IEEE-1735-2014 version 2標(biāo)準(zhǔn)加密需要獲得AMD-Xilinx授權(quán)的許可證。獲取免費(fèi)許可證的詳細(xì)流程可以參考AR-68071.
建議使用公司郵箱發(fā)送郵件,文本使用英語,并告知你使用的Vivado版本.
68071 - Vivado - How do I enable IEEE-1735 Version 2 encryption in Vivado? (xilinx.com)
公開的密鑰(Key)
在Vivado的安裝目錄下可以找到公開的密鑰:
?
加密命令 encrypt:
加密使用的Vivado中的encrypt命令,可以在GUI下執(zhí)行,也可以在命令行下執(zhí)行
?GUI下執(zhí)行encrypt命令:
?? 1.打開Vivado界面
?? 2.在TCL CONSOLE中cd 到目標(biāo)路徑
?? 3.在TCL CONSOLE中鍵入encrypt命令,按回車執(zhí)行
? ??
?在命令行下執(zhí)行encrypt命令:
?? 1. 打開命令行界面,設(shè)置Vivado環(huán)境
?????? C:\Xilinx\Vivado\2022.1\settings64.bat
?? 2. cd 到目標(biāo)路徑
?????? cd C:\test\Examples_2022.1\Examples
?? 3. 啟動Vivado TCL模式
????? vivado -mode tcl
?? 4. 在Vivado的提示符下執(zhí)行encrypt命令
????? vivado% encrypt -key ./keyfile_ver.txt -lang verilog Example.v
- key 選項(xiàng)用來指定加密文件,如果密鑰嵌在源文件中,可以不使用-key選項(xiàng).
- lang 選項(xiàng)用來指定加密文件的類型,systemverilog和Verilog 都選擇verilog即可(vhdl | verilog )
如果不希望原來的源文件被生成的加密文件覆蓋,可以使用-ext選項(xiàng),指定新生成的加密文件的后綴,這樣原來的源文件在加密后會依然保留:
? x:encrypt -key ./keyfile_ver.txt -lang verilog Example.v -ext .vp
在原目錄下的文件:? Example.v -> Example.v + Example.vp
如何理解密鑰文件的內(nèi)容
以下是一個實(shí)際的Key文件
`pragma protect version = 2
#用的是IEEE-1735-2014 V2
`pragma protect encrypt_agent = "XILINX"
`pragma protect encrypt_agent_info = "Xilinx Encryption Tool 2022"
#加入一些關(guān)于Key自身的識別信息
`pragma protect begin_commonblock
…
`pragma protect begin_commonblock
#其中包含的內(nèi)容是常規(guī)權(quán)力定義
‘protect begin_toolblock
...
‘protect end_toolblock=””
#其中包含的內(nèi)容是工具特有的權(quán)力定義
密鑰部分可以直接替換成安裝目錄下的公鑰
以下是幾個Xilinx-AMD定義的,特有的權(quán)力定義
xilinx_configuration_visible
是否顯示綜合之后的網(wǎng)表中LUT的配置信息
拒絕的話,只能看到LUT的連接,這些LUT的功能是什么無法看到.
xilinx_enable_modification
是否允許使用 Vivado 工具修改受保護(hù)區(qū)域內(nèi)的網(wǎng)表信息(層次結(jié)構(gòu)、連接、LUT 等)
xilinx_enable_probing
是否允許客戶在受保護(hù)區(qū)域中插入或?qū)嵗疺ivado 探針工具
xilinx_enable_netlist_export
Vivado是否允許導(dǎo)出受保護(hù)區(qū)域的網(wǎng)表
xilinx_enable_bitstream
是否允許Vivado 工具導(dǎo)出比特流文件
xilinx_schematic_visibility
Vivado是否允許在原理圖或?qū)哟谓Y(jié)構(gòu)查看器中顯示受保護(hù)區(qū)域的模塊名稱
選擇不可見的話,受保護(hù)的cell在原理圖和時序報(bào)告中統(tǒng)一顯示為
有條件的權(quán)力定義
?`protect control
讓加密的文件只在特定的步驟中可以被工具解密讀取.
Ex: `protect control decryption = (xilinx_activity==simulation) ? "false" : "true"
代表在Vivado仿真時,條件為true,總的結(jié)果是false,所以相關(guān)文件只能綜合實(shí)現(xiàn),無法用于仿真.
?
直接把密鑰嵌入到RTL源文件中
允許客戶直接把密鑰的內(nèi)容直接貼到RTL源文件中protect begin和protect end之間的內(nèi)容就是用戶原始RTL里的內(nèi)容.
之前提過嵌入密鑰內(nèi)容后,不再需要-key的選項(xiàng).
`pragma protect begin
User RTL content
`pragma protect end
預(yù)約直播《與大咖一起探討RTOS發(fā)展趨勢》
