使用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.普通权利、特定权利、条件权利
序号 |
语法示例 |
含义 |
备注 |
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_handling和runtime_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的加密文件。
使用VIVADO LICENSE 加密VHDL/Verilog 文件(二)相关推荐
- Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...
- Vivado篇(一)Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...
- 以Vivado synthesis支持的Verilog结构来学习 Verilog语句可综合性
查Verilog结构是否可综合 查Verilog 系统task与function是否可综合 查Verilog 基本单元(原语)是否可综合 查Verilog 保留的关键词 文章目录 1 Verilog ...
- FPGA之道(30)编写自己的vhdl库文件
文章目录 前言 编写自己的vhdl库文件 Work库 记录数据类型 子程序介绍 函数 过程 子程序使用总结 程序包 自定义程序包范例 前言 本文节选自<FPGA之道>来一起学习下高阶Ver ...
- RTL设计推荐的各步骤 推荐工具 适合VHDL verilog
初学EDA时候,大家都在找工具而烦恼,有些工具不是没有license 就是不会设置,要不就是不会用,还担心这个以后有人用么? 所以,我通过自己的体会,推荐大家给大家一个学习时候的流程,和一个业界用流程 ...
- 共享文件夹加密专家_文件加密软件哪家靠谱?
软件加密行业,早已有许多类型的加密软件.公司文件需要做好保密措施,尤其需求文件加密软件.近些年来必不可少的文件加密软件发展非常的好,尤其随着技术的进一步提升,所能为文件管理实现的保障价值更全面和更完善 ...
- 【C 语言】文件操作 ( 文件加密解密 | 解密文件 )
文章目录 一.文件加密解密操作 1.解密整 4096 字节的数据 2.解密小于 4096 字节的数据 二.完整代码示例 1.文件加密操作 main.c 2.DES 加密解密头文件 des.h 3.第三 ...
- 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
文章目录 一.解压 apk 文件 二.加密生成 dex 文件 三.打包未签名 apk 文件 四.完整代码示例 五.文件解压缩相关代码 六.执行结果 参考博客 : [Android 安全]DEX 加密 ...
- vivado环境下用Verilog语言实现编码器
** vivado环境下用Verilog语言实现编码器 ** 编码器的分类 编码器通常分为两大类: 普通编码器和优先编码器. 其中,普通编码器对某一个给定时刻只能对一个输入信号进行编码的编码器, 它的 ...
最新文章
- substring和charindex的使用注意
- PHP教程-防止网站被刷票的小技巧
- android6.0源码分析之Activity启动过程
- 设计模式之依赖倒转原则
- oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)
- 95-235-065-源码-task-SourceStreamTask
- 2017java面试_2017 Java面试大全(一)
- windows清除记住的密码
- 速度上车,全网无损音乐,付费内容任你免费下载
- java输入数字金额输出汉字大写,java实现数字金额转换成汉字大写金额
- 正好股票开户有色金属应声大涨
- premiere直接使用计算机素材,Premiere使用技巧之视频捕捉 -电脑资料
- 解决redhat无法连接网络问题
- 针对TCP连接的网络监控平台—AINA Lyzer
- iPhone屏幕尺寸、statusBar、navigationBar、tabBar高度对比
- 推荐系统中的常用算法——基于Graph Embedding的GES和EGES
- MySQL的下载与安装详细教程
- python中图片绘制和输出相关库的原理详解
- 小程序版道歉文案自动生成 道歉神器源码分享
- linux 32位浏览器下载,Chrome 浏览器32位、64位下载地址大全