Xilinx/Vivado

How to use Xilinx Encryption IP in Vivado

mouessee 2023. 6. 19. 12:48
728x90
반응형

 

 

 

 Introduction

 

 

일반적으로 Verilog, SystemVerilog 혹은 VHDL로 설계한 RTL Source file을 공개하고 싶지 않을 경우 Synthesis까지 진행된 Netlist File(DCP)을 이용하고 있습니다. 이 부분에 있어 Xilinx는 Netlist File(DCP)과 별개로 "IEEE-1735-2014 Version 2 compliant encryption"과 같은 RTL level의 암호화(Encryption) 기능을 제공합니다.

 

 

 

728x90
반응형

 

 

여기서는 Xilinx의 "IEEE-1735-2014 Version 2 compliant encryption"에 대하여 알아보겠습니다.

 

Test를 위한 PC 사용환경은 다음과 같습니다.

 

 

 

 License (IEEE-1735-2014 Version 2 compliant Encryption)

 

 

"IEEE-1735-2014 Version 2 compliant encryption"에 대하여 자주 하는 질문들을 정리하였습니다.

 

1.

Does encryption feature require license?

(Encryption feature에 대한 license가 필요한가요?)
Yes, encryption feature requires license, please see answer records on how to obtain a license.

AR# 68071 - Vivado - How do I enable IEEE-1735 Version 2 encryption in Vivado?

(네, Encryption feature에 대한 license가 필요합니다. Encryption feature에 대한 license 발급 관련 문의는 MAKUS (Xilinx 국내 대리점)로 문의하세요.)

 

 

2.

How much does encryption license cost?

(Encryption license의 가격은 얼마인가요?)
Encryption license is available at no cost to Xilinx customers.

(Encryption license는 Xilinx Customer에게 Free로 제공하고 있습니다.)

 

 

3.

Do my customers need license to use encrypted files?

(암호화(Encryption)된 File을 사용할 경우에 Encryption license가 필요한가요?)
No, decryption is not licensed so your customers do not need special license to use encrypted files.

(암호화(Encryption)된 File을 사용할 경우에는 Encryption license가 필요하지 않습니다. Verilog, SystemVerilog 혹은 VHDL로 설계한 RTL Source File을 암호화(Encryption)할 경우에만 Encryption license가 필요합니다.)

 

 

 

 Keyfile of Xilinx Encryption IP

 

 

1.

Vivado Design Suite 2020.2 기준으로,

Verilog, SystemVerilog file을 Encryption할 경우에는 "keyfile_ver.txt" file이 필요합니다.

 

keyfile_ver.txt
0.00MB

 

Vivado Design Suite 2020.2 기준으로,

VHDL file을 Encryption할 경우에는 "keyfile_vhd.txt" file이 필요합니다.

 

keyfile_vhd.txt
0.00MB

 

 

2.

"keyfile_vhd.txt"의 내용은 다음과 같습니다.

("keyfile_ver.txt"와 내용은 동일합니다. 주석이 "--" 인지 "##"인지의 차이만 있습니다.)

 

--This example file is for demonstration purpose only. Users must not use this keyfile to encrypt their sources. --It is strongly recommonded that users create their own key file to use for encrypting their sources.
`protect version = 2
`protect encrypt_agent = "XILINX"
`protect encrypt_agent_info = "Xilinx Encryption Tool 2020"
`protect begin_commonblock
`protect control error_handling = "delegated"
`protect control runtime_visibility = "delegated"
`protect control child_visibility = "delegated"
`protect control decryption=(activity==simulation) ? "false" : "true"
`protect end_commonblock
`protect begin_toolblock
`protect rights_digest_method="sha256"
`pragma protect key_keyowner = "Xilinx", key_keyname= "xilinxt_2020_08", key_method = "rsa", key_public_key
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuSiPySV9L7qdRMFs4KPj wY3HfqNHcbBs5p+OJeAvIdOpUkh1jYt0kNfMlAdF76Qp5aRfN69xo9kQJEbTJT5j DZ6jvABo7Vykt4wx/tawwsOfWS9zCpFZUhbwO7gjwYsnPipDsprTIonvxU7RgN8c T2s1YF6VU6Oo1UU1vlOXPCziZ1YuAutBtbvrHZpmaywPOumv9CGJDkeSlTsA0qPj fSog/ji5Q4CKbaj0wEENweljXu6OMr3dJBSjad1f6pNmPw2OWj5Rj4Pj1pJZ8+WM WVxVktfnuYZtvXMLCo3iZUS/ak6nbLxVYV7VXVpRUwxrdVKpYSp8fmkLr2lJK+61 KwIDAQAB
`protect control xilinx_configuration_visible = "false"
`protect control xilinx_enable_modification = "false"
`protect control xilinx_enable_probing = "false"
`protect control xilinx_enable_netlist_export = "false"
`protect control xilinx_enable_bitstream = "true"
`protect control xilinx_schematic_visibility="false"
`protect control decryption=(xilinx_activity==simulation) ? "false" : "true"
`protect end_toolblock = ""

 

위 내용 중 다음 특정 부분의 내용이 중요합니다.

 

`pragma protect key_keyowner = "Xilinx", key_keyname= "xilinxt_2020_08", key_method = "rsa", key_public_key
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuSiPySV9L7qdRMFs4KPj wY3HfqNHcbBs5p+OJeAvIdOpUkh1jYt0kNfMlAdF76Qp5aRfN69xo9kQJEbTJT5j DZ6jvABo7Vykt4wx/tawwsOfWS9zCpFZUhbwO7gjwYsnPipDsprTIonvxU7RgN8c T2s1YF6VU6Oo1UU1vlOXPCziZ1YuAutBtbvrHZpmaywPOumv9CGJDkeSlTsA0qPj fSog/ji5Q4CKbaj0wEENweljXu6OMr3dJBSjad1f6pNmPw2OWj5Rj4Pj1pJZ8+WM WVxVktfnuYZtvXMLCo3iZUS/ak6nbLxVYV7VXVpRUwxrdVKpYSp8fmkLr2lJK+61 KwIDAQAB

 

 

Vivado의 version에 따라 위 특정 부분의 내용이 다릅니다.

Vivado 2020.2의 경우, 다음의 경로에 있는 파일에 위 특정 부분의 내용이 있습니다.

 

C:\Xilinx\Vivado\2020.2\data\pubkey\xilinxt_2020_08_active.v
C:\Xilinx\Vivado\2020.2\data\pubkey\xilinxt_2020_08_active.vhd

 

VHDL의 경우, 사용하는 Vivado version에 있는 "xilinxt_2020_08_active.vhd" 파일의 내용을 copy하여 "keyfile_vhd.txt"에 있는 특정 부분에 overwrite하여 사용하여야 합니다.

 

Verilog의 경우, 사용하는 Vivado version에 있는 "xilinxt_2020_08_active.v" 파일의 내용을 copy하여 "keyfile_ver.txt"에 있는 특정 부분에 overwrite하여 사용하여야 합니다.

 

 

 

 How to use Xilinx Encryption IP

 

 

앞에서 "keyfile_vhd.txt / keyfile_ver.txt"을 만드는 방법에 대하여 설명하였습니다.

이제 이 Keyfile을 이용하여 RTL source code를 Encryption하는 방법을 설명하겠습니다.

(방법은 아주 간단합니다.)

 

 

1.

Source File( Verilog, SystemVerilog or VHDL )과 "keyfile_vhd.txt / keyfile_ver.txt"을 같은 폴더에 저장( 예를 들면 D:\XWork2\aaa_Enpt\project_1\source )합니다.

 

test.v
0.00MB

 

 

2.

Verilog의 경우는 Vivado의 TCL console에서 다음과 같이 실행합니다. ("test,v" 파일이 source code 입니다.)

cd {D:\XWork2\aaa_Enpt\project_1\source}
encrypt -lang verilog -ext .vp -key keyfile_ver.txt test.v

 

VHDL의 경우는 Vivado의 TCL console에서 다음과 같이 실행합니다. ("test,vhd" 파일이 source code 입니다.)

cd {D:\XWork2\aaa_Enpt\project_1\source}
encrypt -lang vhd -ext .vp -key keyfile_vhd.txt test.vhd

 

 

3.

위 실행 후, "D:\XWork2\aaa_Enpt\project_1\source" 폴더를 보면, 암호화된 "test.vp" 파일을 확인할 수 있습니다.

예를 들어 "tets.v" 파일이 다음과 같다면,

 

// Target Device : XC7K325TTFFG900-2
`timescale 1ns / 1ps
module test(
    input reset,
    input clock,
    input [3:0] datain,
    output [3:0] dataout
);

    reg [3:0] temp0;
    reg [3:0] temp1;
    reg [3:0] temp2;

    always @(posedge clock)
        if (reset) begin
            temp0 <= 1'b0;
            temp1 <= 1'b0;
            temp2 <= 1'b0;
        end else begin
            temp0 <= datain;
            temp1 <= temp0;
            temp2 <= temp1;
        end

    assign dataout = temp2;

endmodule

 

암호화된 "test.vp"는 다음과 같습니다.

 

//This example file is for demonstration purpose only. Users must not use this keyfile to encrypt their sources.
//It is strongly recommonded that users create their own key file to use for encrypting their sources.
`pragma protect begin_protected
`pragma protect version = 2
`pragma protect encrypt_agent = "XILINX"
`pragma protect encrypt_agent_info = "Xilinx Encryption Tool 2020.2.2"
`pragma protect begin_commonblock
`pragma protect control error_handling = "delegated"
`pragma protect control runtime_visibility = "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_2020_08", key_method = "rsa", key_block QZfaOlgtAwsHc8R9nYuOG2iOaFcTqsWVjE+nhEj/3hVBrmMtj2mvSVQubNmYfUu5vZwHdzncI3kt LBEm93R0h9F+bYTaMGb4Xw+BwOGgrbQF0IeO84NyyPJkiC/i37j4GmY8gY4m+oXEsfopba+a6oVm XuHUcFxdDse1tJOlGmGy+wVL4jeZm7FLUscCuoc684yJ9JjjWoN1FijEeGVUnj8DObwZ33yIoQ+9 c3SE0Vr6jMUE4uZ34d8f6LrUCsVRGF9NIkereVXsG692qpVAfRuOGDRkf6CBbS6nqNEY8e7mciLa zZhcy/1ZYVQlcLodYmBJmlmjrvZCWsd6iO9N0g==
`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 xilinx_schematic_visibility="false"
`pragma protect control decryption=(xilinx_activity==simulation) ? "false" : "true"
`pragma protect end_toolblock="O/L0g0nt221c5FZdbU1qaGSNZENSryWTBYOeoFLl/5o="
`pragma protect data_method = "AES128-CBC"
`pragma protect encoding = (enctype = "BASE64", line_length = 76, bytes = 544)
`pragma protect data_block smsWZSKCbmHxNPG8bRRQP/cBigLbMc4owJYWRoOavReoa7oH3Qd7mBMc5VI2WaBXqqIgyHSF55mu yb5QMloJZ2JH7RqoXpAYbSlzaHvPE4wU5ZoW4HLiJkpkwHBrb2QT6Bo5waWAEY3PfoB+okQOGAEY o6xThQMaABJN2iBeAY8g/t0PK7QOBK9snuEDXW8dhVkcF/iNv0Vh/h63JFl1bjGF8z0r3h31A0cD gsSz+vCuX6xvhL0kVwxB/Tmx3XjJPGngk3RKOQoBJ4szc5Q5mTtpoN4y/PAZAHXFgSmZh4CLPcS1 Z8iftgXzRDuUI+eZe3zZryK4ukTOMPDvomnLA7mjBbx1l5BUCfcv4B/rXhBWRBY3HzvXun8zgOkO lVZo/eGwedvRWh497Vud8578IKcPI8KxoVdXbK4fi+vVI9gU1EywFXcJZPljCe5AvBy6bmn+GvKa z/PIkNpXM0r450BZzKZUlqQbnQKK1tdVt3RWBF2yi+S1CBn2B7iNo7qRlSxChuFz/qcyujW7C/Bt ebwQSQtUJzg7CZrJNI4liQqBbuP92bCrIWMLlX/SNpOe88xufHXxnka2RrC/ufNPfUuRlAcRYR+h TNTfZmkEMOjgg+qr6Ba/8jkir8QuCVphUJ6u8/eG9opMF7Zge13Zll8aYOxCYtLgXDCJ0LloN1ae tTdkpMQzoxD31LIkFDIs9WvX6tmer6dU+MVJIuHXxg==
`pragma protect end_protected

 

 

 

 How to use Xilinx Encryption IP

 

 

"keyfile_vhd.txt / keyfile_ver.txt"에 내용 중에서 일부 option을 수정하면 다양한 기능을 사용할 수 있습니다.

여기서는 Vivado Schematic View에 대한 option을 살펴보겠습니다.

Xilinx Vivado에서 Synthesis 후, 혹은 Implementation 후에 Source code에 대한 Schematic 을 확인할 수 있습니다.

 

 

1.

"keyfile_vhd.txt / keyfile_ver.txt"의 내용 중에서 다음과 같은 부분을 확인할 수 있습니다.

 

`protect control xilinx_schematic_visibility="false"

 

이 경우, 다음과 같이 Schematic을 확인할 수 없게 됩니다.

(간단한 로직이 아닌 로직 사이즈가 크고 조합회로가 있는 souce code일 경우에 회로의 구성을 확인하기가 더욱 더 어렵게 됩니다.)

 

Schematic

 

 

2.

이를 다음과 같이 수정 합니다.

 

`protect control xilinx_schematic_visibility="true"

 

이 경우는 다음과 같이 Schematic을 확인할 수 있습니다.

 

Schematic

 

 

3.

아래 링크 문서의 Table 6-1, Table 6-2를 보면 보다 다양한 option에 대한 설명을 확인할 수 있습니다.

Vivado Design Suite User Guide: Creating and Packaging Custom IP

 

 

 

 참고 자료

 

 

 

Using IP Encryption in Vivado Design Suite

 

www.xilinx.com

 

 

How to encrypt HDL IP

 

 

Quick Overview of HDL IP Encryption Usage using Xilinx's Vivado

 

 

 


지금까지 Xilinx "IEEE-1735-2014 Version 2 compliant encryption"의 사용법에 대하여 알아보았습니다.

여러분의 FPGA 설계에 조금이라도 도움이 되었으면 합니다.
오늘도 좋은 하루 되세요.

(공감, 구독, 댓글은 저에게 힘이 됩니다!)

 

 

 


September 16, 2020

Posted By: Mouessee

 

 

 

Xilinx 본사는 한국 내에 Corporate and Sales Distributor로 MAKUS를 두고 있습니다.
Xilinx 국내 Corporate and Sales Distributor인 MAKUS는 XIlinx FPGA Device를 기술영업을 통해 판매하며 기술지원이 가능합니다.
MAKUS www.makus.co.kr

 

 

 


관련 BLOG

------------------------------

------------------------------

 

 

 

 

 

728x90
반응형