VCS仿真器加密代码方法

代码加密对于IP而言非常重要,起到保护知识产权的作用。VCS提供了代码加密功能,当然,使用VCS加密的代码只能在VCS中使用。

方法1:代码中加入编译器代码保护指令,指令之间的代码将被加密,VCS加密使用的是AES128算法。

对于Verilog代码而言,编译器指令为:`protect128/`endprotect128;VHDL则为--protect128/--endprotect128。方法1可以精确的对想要加密的代码进行控制。

以一个简单的计数器代码counter.v为例,加密前:

`timescale 1ns/10ps
module counter (
        input clk,
        input reset,
        input enable,
        output reg [3:0] count
        );
    `protect128
    always @(posedge clk or posedge reset)
    begin
        if(reset)
        begin
            count <=  4'b0;
        end
        else if(enable)
        begin
            count <= count+1'b1;
        end
    end
    `endprotect128
endmodule

使用VCS对源代码进行编译:

vcs +v2k -protect128 counter.v
#对于verilog代码,vcs可以用vlogan命令代替,VHDL代码,vcs可以用vhdlan代替

得到加密后的代码counter.vp,如下:

`timescale 1ns/10ps
module counter (
        input clk,
        input reset,
        input enable,
        output reg [3:0] count
        );
    `protected128
P=O!(8K9"Z(9U*$ XQ)X'(23XPS9D"AYL7"K@N(BI.XQ%KK3.&<_=A7B:YT<EXA,A
P>"O8>=H+5=.<//LJ2$JI3R*&C;3+?H589",?_8' U@(U2P[U!=I\/\K/'?BR9C_\
P[Y#N+KO$C'E=>6T6(MY>%A:0_MX^6 %5:J #7(6?- BVSM9&'#3\+07 2BH+?#0W
P^I"TKL,=P#FY17^U)PT?S3MO&FW/1IT#P(F)T2-IIV;*LV'CU/:,<>IT^2#0XA_'
P$([[6%!]KB"FQM-?!8SAA!M40]13*<F(<D0(15)[$]K"3>N\2IYQ=,1Z=X,4X]?P
`endprotected128

endmodule

默认情况下,.vp和源代码在同一目录下,可以使用 -putprotect128命令指令一个目录用于存储加密后的代码。

方法2:使用VCS命令参数:

-autoprotect128:加密整个模块的代码包括端口列表,只留有模块名,使用方法如下:

vcs +v2k -autoprotect128 counter.v

得到的加密代码为:

`timescale 1ns/10ps
module counter
`protected128
PF4^7AB<L6->UPQ]O['E/8:^.!2P'7=\,)( X=_E0\NV;_"<Z&\35(=/HQCF#B>$U
PW7$?Y.'_O.8/X*ZQ.^YQW&7P2"BF94*_.M=/?EY:!?&THI\;>J)ZE[Z(\TFLT.UM
P!PJ]JI'Y1K"EK(91WE=O4W0'[VWSDB93N/N*V:/U+\/,!=F6(@J4TP&?/!L?"DS=
PB_ZV8CJ32'=:#10STRA4LV_^+(J_-.$3UVBII:@M,5-Y,*^;^_,,U%3WIG%HW*E=
P/:DNGO"U^ HUKYGT2;MWX[Q8JU*?YS%@=*$ZCW(HU0N8CC2K&+6+A&L%<<&-N]H/
PXO#E4,U0]27^AJ0_^0PT$-"#+$H6X6K+)E1^0JV%4;1F- 3ZA8+]GFDD0:L"LI[S
P- ZZ)TSFEKP84&A[P<W4PR7G&4N6J[,OG(L"++HO,];6W'K?%XC0JXVL&0#^*B,_
`endprotected128
endmodule

-auto2protect128:保留端口列表以及UDP,得到的加密代码如下:

`timescale 1ns/10ps
module counter (
        input clk,
        input reset,
        input enable,
        output reg [3:0] count
        );
    
    
`protected128
PD#47/!XJBA!*($N0S>G@YN)=CZ1LG,,-)LAXQ'I_X;/BT+YYN9T%8V\^ *GV@KRQ
P[-H_OW#E"^5+,&9>H+2=&II*Y?-AI5 !$NX)P;%I6;ZPZ==ONA4:,?R4YYJ\ ?DF
PL'$YOC%JO>)X5A0QS4./-Q(2.7Y^V@:L,I"Q>)QZW(9FOWK%<US>YX0=^P ^"@6U
P_YF6Z29DW4P#-$*,6(LJM04_-^='A\M;5%?V!_S?__WD>&12.>.OJ[9T_-MUT%#R
P0?><HEF(I?D=V$EY1DL1)+8+,WI&NY-U&M9&HJ4K9+ZT<$>PY J8FE+9>&8S"2=M
`endprotected128
endmodule

-auto3protect128:和-auto2protect128类似,只是还会保留verilog的parameter定义的参数。

 

转载于:https://www.cnblogs.com/lkiller/p/5059669.html

<think>好的,我现在需要帮助用户了解如何使用VCS编译加密的源代码。首先,我要回忆一下之前提供的引用内容,特别是引用[1]中提到的加密方法。用户可能想知道具体的步骤和注意事项。 根据引用[1],VCS支持通过编译器指令来加密代码,比如在Verilog中使用`protect128`和`endprotect128`包裹需要加密代码段。这可能意味着用户需要在源代码中插入这些指令,然后使用VCS进行编译。不过,用户可能不清楚具体操作步骤,比如是否需要额外的编译选项或者配置。 接下来,我需要确认VCS的编译选项是否有特别的要求。引用[2]和[5]提到VCS有编译选项,比如使用`-cm`或者`-debug`等,但不确定是否与加密相关。不过引用[1]提到加密后的代码只能在VCS中使用,所以可能不需要额外选项,只需正确放置保护指令即可。但需要确保VCS版本支持AES128加密算法。 另外,用户可能遇到的问题包括加密指令的格式是否正确,比如Verilog和VHDL的不同注释风格。例如,Verilog使用`//`,而VHDL使用`--`,所以必须正确书写保护指令,否则加密可能失败。 还需要考虑加密后的代码仿真时的行为,比如是否会影响调试功能。引用[5]提到生成32-bit可执行文件,但不确定是否与加密相关,可能需要忽略这部分,除非用户有特定环境需求。 最后,用户可能需要示例代码来说明如何插入保护指令。比如在Verilog文件中,将核心代码用`protect128`和`endprotect128`包裹,然后正常编译。同时,提醒用户注意加密后的代码不可逆,需备份原始文件。 总结步骤:1. 插入保护指令;2. 使用VCS编译命令;3. 处理可能的问题。还需要验证这些步骤是否符合引用中的信息,确保准确性。</think>### 如何使用VCS编译加密的源代码 #### 步骤说明 1. **在源代码中添加加密指令** - **Verilog**:使用`protect128`和`endprotect128`包裹需要加密代码段,例如: ```verilog // protect128 module counter (input clk, output reg [3:0] count); always @(posedge clk) begin count <= count + 1; end endmodule // endprotect128 ``` - **VHDL**:使用`--protect128`和`--endprotect128`包裹代码段,例如: ```vhdl -- protect128 entity counter is port (clk: in bit; count: out integer); end entity; -- endprotect128 ``` - **注意**:加密指令需严格遵循格式,否则可能导致编译失败[^1]。 2. **使用VCS编译加密代码** - 执行常规编译命令,无需额外加密选项。例如: ```bash vcs -full64 -sverilog counter.v ``` - 加密后的代码会被VCS自动识别并处理,生成可执行仿真文件[^2]。 3. **验证加密效果** - 加密后的代码仿真时功能正常,但直接查看生成的中间文件(如`simv`)将无法获取原始逻辑[^3]。 #### 注意事项 - **兼容性**:加密后的代码仅支持在VCS环境中使用,其他工具(如Xilinx Vivado)无法直接解析[^1]。 - **备份源码**:加密过程不可逆,需保留原始未加密文件以便后续修改[^1]。 - **调试限制**:加密代码可能影响调试功能(如波形查看),建议在加密前完成核心验证[^5]。 #### 示例完整流程 ```bash # 1. 编写加密后的counter.v(如步骤1所示) # 2. 编译 vcs -full64 -sverilog counter.v # 3. 运行仿真 ./simv ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值