使用 IEEE (1735) Verilog 标准机制进行 IP 保护

在跑仿真的时候,如果使用第三方IP,经常会遇到第三方IP中有加密代码,有时又会遇到同样的环境既可以用VCS跑,也可以用XRUN跑,我就好奇第三方IP如何支持两个公司的加解密方式的。

以前只是知道VCS使用`protect-`endprotect 来加密代码,XRUN使用如下格式

复制代码
// pragma protect
// pragma protect begin

需要加密的代码
// pragma protect end

两家好像是不兼容的,经过查阅VCS和XRUN的文档,最终发现了端倪,他们可以使用IEEE-1735 加密格式(具体语法这里不做介绍)。

The syntax of header_file is as follows:

复制代码
`protect data_method = "data_method"
复制代码
`protect key_keyowner="owner_name"
复制代码
`protect key_keyname="owner_key_name"
复制代码
`protect key_method="encryption_method_name"
复制代码
`protect key_public_key
复制代码
<content_representing_the_public_encryption_key>

VCS 官方给出如下步骤:

  1. 不是 VCS 用户(或没有 VCS 许可证)的 IP 供应商或团队希望提供 IEEE-1735 加密格式的 IP 用于 VCS 仿真。
  2. 已成为 VCS 用户的 IP 供应商或团队希望为 VCS 仿真提供 IEEE-1735 加密格式的 IP。

在这两种情况下,建议执行加密的 IP 供应商/团队遵循以下步骤,以提高最终用户的可用性。

  1. 联系 Synopsys (vcs_support@synopsys.com) 获取 VCS 公共加密密钥
  2. 使用获取的 VCS 公共加密密钥加密文件
  3. 将加密文件提供给客户/同行团队--VCS 终端用户

最终用户应能编译这些加密文件,而无需担心公开密钥或解密。

通过上述流程,(VCS)最终用户无需从 IP 提供商处获取任何密钥,IP 提供商也无需担心与所有客户共享 VCS 公钥。

因为他们使用的RSA加密算法,由公钥加密,私钥解密,公钥是公开的,私钥应该是内置在仿真器中,例如Synopsys有如下可以查到如下公钥:

复制代码
`pragma protect data_method = "AES128-CBC"
`pragma protect key_keyowner="Synopsys"
`pragma protect key_method="rsa"
`pragma protect key_keyname="SNPS-VCS-RSA-1"
`pragma protect key_public_key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjJMv7PI1V+DJDaHZuV
IFbAXvr6/tEpuM8cAKFuvpIoO6PE3DRqEwaHEJRyIsFnJnavVJ33+Kub54
Cr/9JCh6fnQhtAmKt/nAznESOLExCKO1tmjYNCXLJ+QqWFoCuDuI4QS8Ru
y1u3RwABCw7ESQwwIuVSZpOghOvjrPHzvlc0QIDAQAB
`pragma protect key_block

Cadence 有如下公钥:

复制代码
`pragma protect key_keyowner = "Cadence Design Systems.", key_method = "rsa", key_keyname = "CDS_RSA_KEY_VER_2"
`pragma protect key_public_key
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQADgA/y8ZoT7v4vKFrwcdrL/Tc2V+2Dczr6
oNnZchFp8c1O+Ja4bHceMRSqm8+N0d98q4nu6FW1ipNNaB4UlxbVvv4vNkXixb9CaenedZA/K2uA
uWZD+daC9QroUm8o8OIft0evdGfXQpy4WFA1Vs44WeHU5hO15F8ZzUxXINR/HXNZdeX4hfaTFhTE
uebeoBx9CwQII6o194UzBr/R35c4n8EwXuRLgjuY6gnirkRdI/fhhUDsvwNdruEJ03bYc91nHEhz
HarHnXt58KYZhjgCbgXlk0bPwQGMiSV+MQvcd0k1emyhsLc9ylLuIZJkv2zE3BNyXTCjaLqyuNwx
xtn1AgMBAAE=

我们将上面的内容添加在自己的代码中:

复制代码
module test();

`pragma protect version = 1
`pragma protect data_method = "AES128-CBC"
`pragma protect key_keyowner="Synopsys"
`pragma protect key_method="rsa"
`pragma protect key_keyname="SNPS-VCS-RSA-1"
`pragma protect key_public_key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjJMv7PI1V+DJDaHZuV
IFbAXvr6/tEpuM8cAKFuvpIoO6PE3DRqEwaHEJRyIsFnJnavVJ33+Kub54
Cr/9JCh6fnQhtAmKt/nAznESOLExCKO1tmjYNCXLJ+QqWFoCuDuI4QS8Ru
y1u3RwABCw7ESQwwIuVSZpOghOvjrPHzvlc0QIDAQAB
`pragma protect key_block

`pragma protect key_keyowner = "Cadence Design Systems.", key_method = "rsa", key_keyname = "CDS_RSA_KEY_VER_2"
`pragma protect key_public_key
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQADgA/y8ZoT7v4vKFrwcdrL/Tc2V+2Dczr6
oNnZchFp8c1O+Ja4bHceMRSqm8+N0d98q4nu6FW1ipNNaB4UlxbVvv4vNkXixb9CaenedZA/K2uA
uWZD+daC9QroUm8o8OIft0evdGfXQpy4WFA1Vs44WeHU5hO15F8ZzUxXINR/HXNZdeX4hfaTFhTE
uebeoBx9CwQII6o194UzBr/R35c4n8EwXuRLgjuY6gnirkRdI/fhhUDsvwNdruEJ03bYc91nHEhz
HarHnXt58KYZhjgCbgXlk0bPwQGMiSV+MQvcd0k1emyhsLc9ylLuIZJkv2zE3BNyXTCjaLqyuNwx
xtn1AgMBAAE=
`pragma protect key_block

`pragma protect begin

要加密的代码
`pragma  protect end


endmodule

然后使用Synopsys或者Cadence提供的工具,就可以对代码就行加密了,加密后的代码就同时支持VCS和XRUN仿真了。

下面就Synopsys和Cadence的加密方法简单介绍:

有如下RTL代码:

复制代码
module m ();
wire r;
assign r = 1'b0;
`pragma protect begin

logic l;
assign l = 1'b1;
`pragma protect end
initial #10 $finish();
endmodule

VCS加密方式:

创建toolkeys文件

复制代码
//`pragma protect version = 1
`pragma protect data_method = "AES128-CBC"
`pragma protect key_keyowner="Synopsys"
`pragma protect key_method="rsa"
`pragma protect key_keyname="SNPS-VCS-RSA-1"
`pragma protect key_public_key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjJMv7PI1V+DJDaHZuV
IFbAXvr6/tEpuM8cAKFuvpIoO6PE3DRqEwaHEJRyIsFnJnavVJ33+Kub54
Cr/9JCh6fnQhtAmKt/nAznESOLExCKO1tmjYNCXLJ+QqWFoCuDuI4QS8Ru
y1u3RwABCw7ESQwwIuVSZpOghOvjrPHzvlc0QIDAQAB

执行如下命令

复制代码
vcs -full64 -lca test.sv -ipprotect toolkeys -ipopt=overwrite -ipopt=partialprotect

命令执行完会生成test.svp的文件

Cadence加密方式:

有如下RTL代码:

复制代码
module m ();
wire r;
assign r = 1'b0;

`pragma protect version = 1
`pragma protect data_method = "AES128-CBC"
`pragma protect key_keyowner="Synopsys"
`pragma protect key_method="rsa"
`pragma protect key_keyname="SNPS-VCS-RSA-1"
`pragma protect key_public_key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjJMv7PI1V+DJDaHZuV
IFbAXvr6/tEpuM8cAKFuvpIoO6PE3DRqEwaHEJRyIsFnJnavVJ33+Kub54
Cr/9JCh6fnQhtAmKt/nAznESOLExCKO1tmjYNCXLJ+QqWFoCuDuI4QS8Ru
y1u3RwABCw7ESQwwIuVSZpOghOvjrPHzvlc0QIDAQAB
`pragma protect key_block


`pragma protect version = 1
//`pragma protect data_method = "AES128-CBC"
`pragma protect key_keyowner = "Mentor Graphics Corporation"
`pragma protect key_method = "rsa"
`pragma protect key_keyname = "MGC-VERIF-SIM-RSA-1"
`pragma protect key_public_key
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnJfQb+LLzTMX3NRARsv7A8+LV5SgMEJCvI
f9Tif2emi4z0qtp8E+nX7QFzocTlClC6Dcq2qIvEJcpqUgTTD+mJ6grJSJ+R4AxxCgvHYUwoT
80Xs0QgRqkrGYxW1RUnNBcJm4ZULexYz8972Oj6rQ99n5e1kDa/eBcszMJyOkcGQIDAQAB
`pragma protect key_block

`pragma protect version = 1
`pragma protect key_keyowner = "Cadence Design Systems.", key_method = "rsa", key_keyname = "CDS_RSA_KEY_VER_2"
`pragma protect key_public_key
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQADgA/y8ZoT7v4vKFrwcdrL/Tc2V+2Dczr6
oNnZchFp8c1O+Ja4bHceMRSqm8+N0d98q4nu6FW1ipNNaB4UlxbVvv4vNkXixb9CaenedZA/K2uA
uWZD+daC9QroUm8o8OIft0evdGfXQpy4WFA1Vs44WeHU5hO15F8ZzUxXINR/HXNZdeX4hfaTFhTE
uebeoBx9CwQII6o194UzBr/R35c4n8EwXuRLgjuY6gnirkRdI/fhhUDsvwNdruEJ03bYc91nHEhz
HarHnXt58KYZhjgCbgXlk0bPwQGMiSV+MQvcd0k1emyhsLc9ylLuIZJkv2zE3BNyXTCjaLqyuNwx
xtn1AgMBAAE=
`pragma protect key_block


`pragma protect begin

logic l;
assign l = 1'b1;
`pragma protect end
initial #10 $finish();
endmodule

执行如下命令:

复制代码
xmprotect simple_3vendor_keys.v -lang vlog -overwrite -messages

命令执行完会生成test.svp的文件

相关推荐
恒锐丰科技林技术员7 小时前
SS8812T 双通道 H 桥电机驱动芯片应用解析
经验分享·嵌入式硬件·硬件工程
黑马水牛10 小时前
Carla仿真系列:9_Carla 单目障碍物测距,四种方法原理与实测
经验分享·python·深度学习·计算机视觉·ros·传感器·carla仿真
德思特13 小时前
高校与科研机构如何利用GNSS模拟器进行基础研究与算法验证?
经验分享
沙盘客13 小时前
典型应用与趋势:作战实验、AI 决策与数字孪生
c++·人工智能·经验分享
luj_176814 小时前
变频技术核心原理揭秘
服务器·c语言·开发语言·经验分享·算法
恒锐丰科技林技术员16 小时前
SS8813T 双通道 H 桥电机驱动芯片:工业与消费设备电机控制优选方案
经验分享·嵌入式硬件·硬件工程
个 人 练 习 生17 小时前
数据结构链表:带头双向循环链表
c语言·数据结构·经验分享·学习·其他·链表
LaughingZhu1 天前
Product Hunt 每日热榜 | 2026-08-19
经验分享·深度学习·神经网络·百度·产品运营
智者知已应修善业1 天前
【51单片机数码管逐位显示1-8余位不亮】2024-10-23
c语言·经验分享·笔记·嵌入式硬件·51单片机
上海广测检测科技有限公司1 天前
AR眼镜欧盟CE认证详解:RED指令与近眼显示安全评估要点
经验分享·ar