使用VIVADO LICENSE 加密VHDL/Verilog 文件(二)

        继上一次编写vivado加密文章之后,细读赛灵思 UG1118,进行详细学习整理如下文。如有疑问可自行阅读英文版本手册。

一、VIVADO加密的TCL命令

        Tcl命令在vivado的Tcl Console中输入,命令模板为:

        encrypt [-key <arg>] -lang <arg> [-quiet] [-verbose] [-ext <arg>] <files>...

各关键字说明:
        -key:秘钥可以存在于HDL源文件的行中,也可以放置在单独的秘钥文件中。-key指定秘钥信息的位置。
        -lang:指示需要加密的文件是使用verilog还是VHDL。
        -quiet:手册未介绍,直接忽略。
        -verbose:手册未介绍,直接忽略。
        -ext:使用该关键字,可以防止源文件被覆盖,将加密文件输出到新指定的文件名中。若不使用,则覆盖源文件,导致源文件丢失,建议提前复制保存源文件。
        Files:源文件

        Tcl命令示例:encrypt -lang verilog -ext .vp -key keyfile.txt myip.v

        其中,keyfile.txt为秘钥文件。命令运行后,即可生成尾缀为.vp的加密文件。

        需要注意,该方式只能加密verilog,systemveriloig,VHDL文件,其余文件不可加密

二、秘钥文件的生成
1.先展示一个完整秘钥文件的内容:

完整示例:

 `pragma protect version = 2

`pragma protect encrypt_agent = "XILINX"

`pragma protect encrypt_agent_info = "Xilinx Encryption Tool 2021"

`pragma protect begin_commonblock

`pragma protect control error_handling = "delegated"

`pragma protect control child_visibility = "delegated"

`pragma protect control decryption = (activity==simulation)? "false" :"true"

`pragma protect end_commonblock

`pragma protect begin_toolblock

`pragma protect rights_digest_method="sha256"

`pragma protect key_keyowner = "Xilinx", key_keyname= "xilinxt_2021_01", key_method = "rsa", key_public_key

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApgf7F4kYh0oSFzJBRoRb

nsrAqn24fVbI7xdNG2t9G8pouFfwIXGGmQgYqYZDSmUu0wrrj3ulLvUnjRtmtziJ

1RDOYdyko1SuBEyGT1frzUu9xNitAXxp29hOrVPeKO6kGU81XHJCRJ7uWh7rwoyf

HSUpreifLybt+UT5fyvHu21IxvOR6GHKWaQ4wdL7Txguuyf92XLJIZABEgmuVlPK

/NjJjVRK3c/vMuQLvbihNapkyCiLIWNwDbo9oWXr7NSo3we8u6IlFmP5V8WcOmXZ

/PZqp3QOkY2Jlm1yQt3O8PpU/8qzB7zcHjm3+Q+wB8yUYn/IMwN0t09l2AdBR37G

EwIDAQAB

`pragma protect control xilinx_configuration_visible = "false"

`pragma protect control xilinx_enable_modification = "false"

`pragma protect control xilinx_enable_probing = "false"

`pragma protect control xilinx_enable_netlist_export = "false"

`pragma protect control xilinx_enable_bitstream = "true"

`pragma protect control decryption = (xilinx_activity==simulation)?"false" : "true"

`pragma protect end_toolblock = ""

2.秘钥选择:

        用户可以选择赛灵思公用秘钥,也可以选择第三方提供的秘钥。因条件限制,目前只使用赛灵思公用秘钥,其存在于赛灵思安装路径下:<Install_Dir>/Vivado/<version>/data/pubkey/

        将文件中内容复制在`pragma protect begin_toolblock之后,参考上述标黄部分。

        `pragma protect rights_digest_method="sha256" `pragma protect key_keyowner = "Xilinx", key_keyname= "xilinxt_2021_01", key_method = "rsa"   是一组强制的编译指示语句,用于定义供应商的加密秘钥等相关属性,该部分语句放在特定权利开始(紧跟`pragma protect begin_toolblock之后)

        后面的乱码部分即具体的秘钥内容。

        另外需要注意的时,`pragma protect时加密verilog文件的关键字,如果要加密VHDL,秘钥文件中的`pragma protect需要变更为`protect

        秘钥选择完毕后,从上往下分别介绍。

3.普通权利、特定权利、条件权利

VIVADO中的IEEE 1735-2014 V2加密语法

序号

语法示例

含义

备注

1

`pragma protect version = 2

使用IEEE-1735-2014 V2版本

2

`protect encrypt_agent = “XILINX”

`protect encrypt_agent_info = “Xilinx Encryption Tool 2017"

标识加密工具

3

`protect begin_commonblock

...

`protect end_commonblock

IEEE-1735-2014 V2中包括三种类型的权力,包括普通权利、特定权利、条件性权利,用以向不同客户提供加密文件不同范围的展示内容。

省略号内具体描述普通权利。

详见普通权利部分

4

`protect begin_toolblock

...

`protect end_toolblock=””

每个秘钥文件中至少有一个特定权利模块,秘钥存在于该部分内。

省略号内具体描述特定权利以及秘钥。

另外,特定权利可覆盖普通权利的内容。

详见特定权利部分

普通权利部分

名称

含义

默认值

可选值

赛灵思可选值

error_handling

允许展示错误信息?

“delegated”

“delegated” (委托工具)

“srcrefs” (秘密)

“plaintext” (纯文本)

“delegated”

runtime_visibility

运行时允许展示tcl或者输出报告?

“delegated”

“delegated”

interface_names

all_names

“delegated”

child_visibility

如果一个受保护的模块实例化了一个未受保护的子模块,那么应该如何在该子模块上处理error_handlingruntime_visibility

显示的消息可能会通过受保护区域公开路径名。

“delegated”

“delegated”

“allowed”

“denied”

“delegated”

“allowed”

Note: “delegated” =

“denied”

decryption

允许工具解密模块吗?这个功能一般用于条件性权利。

“delegated”

“delegated”

true

false

“delegated”

“true”

“false“

Note: “delegated” =

“true” 

特定权利部分

名称

含义

赛灵思可选值

默认值

xilinx_configuration_visible

LUT值是在查看器编辑器中是可见的吗?

“true”,“false”

“false”

xilinx_enable_modification

保护区域的网表信息可以被修改吗?

“true”,“false”

“false”

xilinx_enable_probing

用户可以在保护区域插入调试探针吗?

“true”,“false”

“false”

xilinx_enable_netlist_export

允许vivado导出保护区域的网表信息吗?

“true”,“false”

“true”

xilinx_enable_bitstream

允许vivado生成比特流吗?

“true”,“false”

“true”

xilinx_schematic_visibility

允许vivado展示保护区域的模块名称吗?

“true”,“false”

“false”

介绍一下IEEE-1735-2014 V2编译指示语法

普通权利和特定权利的语法:

模板:`protect control <right> = <rights_expression>

示例:`protect control error_handling = "delegated"

其中,control为指示权利访问的关键字,固定不变; <right>为上述表格中的名称; <rights_expression>为上述表格中的赛灵思可选值。

条件权利的语法

模板:`protect control <right> = <condition> ? <true_expression> : <false_expression>

示例:`protect control decryption = (xilinx_activity==simulation) ? "false" : "true"

其中,activity是IEEE 1735-2014 V2标准中的条件关键字,在赛灵思中替换为xilinx_activity

此示例表示,仅在simulation时,不加密,在synthesis和implementation时都进行加密。

条件权利部分

数值

含义

simulation

仿真

synthesis

综合

implementation

实现

 如示例中展示,条件权利语句可以在普通权利和特定权利范围内使用。

三、加密checkpoint

使用该命令,可以直接生成一个加密的.dcp文件,可以将此文件提供给客户,可以隐藏所有的HDL文件和IP核文件,具有很好的保密性。(.dcp文件实际为工程综合完成后的压缩文件,需要先综合完成后再输入命令生成.dcp文件)

模板:write_checkpoint [-key <arg>] -encrypt <file>

输出名称为file的dcp文件

示例1: write_checkpoint -encrypt my_ip.dcp

此示例中没有指定秘钥文件,因此使用赛灵思默认的设置: 

Common rights:

error_handling = "delegated"

Xilinx tool rights:

xilinx_configuration_visible = "false"

xilinx_enable_modification = "false"

xilinx_enable_probing = "false"

xilinx_enable_netlist_export = "false

示例2:write_checkpoint -key keyfile.txt -encrypt my_ip.dcp

指定使用秘钥文件keyfile.txt进行加密输出。

四、若需要加密多个.v文件到一个加密文件中,可以使用下面的方式

1、在控制台console上输入tcl命令切换到保存.v文件的目录下。

        比如:cd E:/tmp/Encryption_test/project_1/project_1.srcs/encryption

2、输入tcl命令,将此文件夹下所有的.v文件复制到一个文件中。

        比如:exec $env(COMSPEC) /c copy *.v all.v

3、对合成后的文件进行加密

        按照刚开始所讲的,使用秘钥加密即可。

        比如:encrypt  -key C:/Users/YDQ/Desktop/key_files_ydq.txt -ext .enctypt -lang verilog all.v

        将all.v加密输出名称为all.enctypt的加密文件。

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值