把HDL模塊用NGC格式加密并在其他項(xiàng)目中調(diào)用
前面創(chuàng)新網(wǎng)網(wǎng)友Ricky Su發(fā)了篇博文《 說說FPGA中的黑盒子(BlackBox)》,學(xué)習(xí)了感覺很好用,最近在網(wǎng)上又找到一篇講該方面內(nèi)容的文章,感覺寫的很好轉(zhuǎn)發(fā)來與大家共享,文章如下:
這個(gè)方法其實(shí)非常簡單。給出一個(gè)實(shí)例。
先用HDL寫出該模塊,比如:
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
assign o1 = (i1 > i2)? i1: i2;
endmodule
這是一個(gè)比較大小的模塊。一看便知。
然后在ISE中建立項(xiàng)目,將該模塊導(dǎo)入,作為設(shè)計(jì)文件,復(fù)雜的設(shè)計(jì)過程也是類似的。然后運(yùn)行XST進(jìn)行綜合,綜合完成后,看看項(xiàng)目目錄,就能發(fā)現(xiàn)這個(gè)NGC文件了。這個(gè)NGC文件是2進(jìn)制加密的,所以,你也不用費(fèi)心去研究了。即便可以用ngc2edif將其轉(zhuǎn)換成edif格式,但是對(duì)于復(fù)雜設(shè)計(jì),得到edif也是無法還原其本來的邏輯意圖的。
到此為止,我們得到NGC格式加密的設(shè)計(jì)文件。
注意,在制作NGC的時(shí)候,要防止把PAD或者IOB都包括進(jìn)來,因?yàn)槲覀兊腘GC是要被其他項(xiàng)目調(diào)用的,也就是說NGC這顆螺絲釘必須能放到任何位置去,而一旦我們把PAD和IOB也包括進(jìn)來,則NGC將只能放在客戶項(xiàng)目的邊界接口位置,這和實(shí)際情況是相反的,實(shí)際情況我們的NGC只作為內(nèi)部的一個(gè)部分,這就造成客戶項(xiàng)目最終PR失敗。
防止NGC帶有IOB、PAD的方法: 找到ISE中的Synthesize-XST,然后右鍵打開屬性,在category的Xilinx Specific OpTIons中將下列兩項(xiàng)disable掉。
- iobuf Add I/O Buffers
- iob Pack I/O Registers into IOBs (這個(gè)選NO即可)
好了,現(xiàn)在假設(shè)其他項(xiàng)目(我們的客戶項(xiàng)目)要調(diào)用這個(gè)加密模塊,怎么做呢?
首先加密后的模塊是2進(jìn)制的,無法在綜合的時(shí)候使用,我們的方法是制作一個(gè)等價(jià)的black box。所謂黑盒,其實(shí)就是一個(gè)只有接口,沒有實(shí)現(xiàn)的模塊。比如,上例的黑盒,就是這個(gè)樣子。
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
endmodule
去掉中間的實(shí)現(xiàn)部分就可以了。
先給大家提供一個(gè)客戶項(xiàng)目的例子。
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
my_comp u1 (
.i1 (i1 + 4h1),
.i2 (i2 + 4h2),
.i1 (i1),
);
endmodule
客戶項(xiàng)目的代碼,加上我們制作的黑盒代碼,一起載入到ISE項(xiàng)目中,然后運(yùn)行XST綜合即可得到新項(xiàng)目的網(wǎng)表,當(dāng)然,因?yàn)槲覀兲峁┑氖呛诤?,所以?duì)應(yīng)的設(shè)計(jì)結(jié)果也仍然是黑盒。那么什么時(shí)候來替換黑盒呢?
在這個(gè)階段,是要真正替換黑盒的時(shí)候。其實(shí)要做的很簡單。
我們把生成的NGC文件放到客戶項(xiàng)目的工作目錄內(nèi)——工作就完成了。
P—R進(jìn)行的時(shí)候,進(jìn)行最終的黑盒替換,ISE會(huì)試圖在工作目錄或者其他指定的路徑尋找黑盒的替代,所以我們把NGC放在了工作目錄下。
接下來運(yùn)行implementaTIon,你會(huì)發(fā)現(xiàn)一路工作正常,太爽了~
評(píng)論