如果要交付verilog,但是需要對方進行VCS仿真,那么可以用以下方法:
一、基于編譯指令的局部加密?
?適用場景?:需精確控制加密范圍(如僅加密核心算法或敏感邏輯)。
?實現步驟?:
- ?代碼標注?:在Verilog文件中用
protect128
和endprotect128
包裹需加密的代碼段。例如:`timescale 1ns/10ps module counter (input clk, output reg [3:0] count);`protect128always @(posedge clk) begincount <= count + 1;end`endprotect128 endmodule
- ?編譯命令?:使用
-protect128
參數編譯,生成.vp
加密文件:vcs +v2k -protect128 counter.v -putprotect128 [輸出目錄] # 可選參數指定輸出路徑[1,3](@ref)
- ?輸出結果?:加密后的代碼段會被替換為AES128加密的亂碼,僅保留非加密部分的結構(如模塊聲明)
?二、全自動加密(不同級別控制)??
?適用場景?:需快速對整個模塊加密,支持不同粒度控制。
?參數說明?:
- ?**
-autoprotect128
**?- ?作用?:加密整個模塊(包括端口列表),僅保留模塊名。
- ?示例?:
vcs -autoprotect128 counter.v # 生成僅含模塊名的加密文件[1,3](@ref)
- ?**
-auto2protect128
**?- ?作用?:保留端口列表,加密模塊內部邏輯(推薦常用)。
- ?示例?:
vcs -auto2protect128 counter.v # 加密后保留端口定義,便于接口調試[2,3](@ref)
- ?**
-auto3protect128
**?- ?作用?:保留端口列表及
parameter
參數定義,加密其余代碼。 - ?適用場景?:需保留參數配置的靈活性
- ?作用?:保留端口列表及
那么如果要交付spice網表供對方進行VCS+XA仿真呢。那就必須用synopsys自帶的加密工具了:
metaencrypt -i analog_core.sp -o analog_encrypted.inc -t randkey