|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
HDL模块用NGC格式加密并在其他项目中调用
9 \9 n4 J/ l Y4 X+ a
9 a. j( r6 w, c% ~- l- _& E- R这个方法其实非常简单。给出一个实例。
& J* s, L! P% \先用HDL写出该模块,比如:module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
* f4 c& Q( |; B) x2 z) Dassign o1 = (i1 > i2)? i1: i2;. v6 j q* X$ a; k1 q' I, c; ^1 L
endmodule A; N! ?3 l9 _( g( ~9 ~$ ?, h
这是一个比较大小的模块。一看便知。+ f9 @; f$ G- x& U& r7 M3 h1 L X
然后在ISE中建立项目,将该模块导入,作为设计文件,复杂的设计过程也是类似的。然后运行XST进行综合,综合完成后,看看项目目录,就能发现这个NGC文件了。这个NGC文件是2进制加密的,所以,你也不用费心去研究了。即便可以用ngc2edif将其转换成edif格式,但是对于复杂设计,得到edif也是无法还原其本来的逻辑意图的。
) ~6 ^ K6 y+ I5 v! D5 m: o5 ?) P5 J到此为止,我们得到NGC格式加密的设计文件。
. a' B, y* X: \9 r7 U5 {9 ~. }1 O注意,在制作NGC的时候,要防止把PAD或者IOB都包括进来,因为我们的NGC是要被其他项目调用的,也就是说NGC这颗螺丝钉必须能放到任何位置去,而一旦我们把PAD和IOB也包括进来,则NGC将只能放在客户项目的边界接口位置,这和实际情况是相反的,实际情况我们的NGC只作为内部的一个部分,这就造成客户项目最终P&R失败。
4 {" l$ D9 D2 z防止NGC带有IOB、PAD的方法: 找到ISE中的Synthesize-XST,然后右键打开属性,在category的Xilinx Specific Options中将下列两项disable掉。1 {$ o# q# Z) s/ f% w6 n) U
- iobuf Add I/O Buffers8 v* j4 P9 U; m8 P& k0 y# g7 [2 t
- iob Pack I/O Registers into IOBs (这个选NO即可)# G; Y( B; z; f' r. c' H5 b
好了,现在假设其他项目(我们的客户项目)要调用这个加密模块,怎么做呢?
9 e8 B+ r$ w) G7 ^* Q$ z- {: Q' x首先加密后的模块是2进制的,无法在综合的时候使用,我们的方法是制作一个等价的black box。所谓黑盒,其实就是一个只有接口,没有实现的模块。比如,上例的黑盒,就是这个样子。7 d3 y9 i9 c) }0 d7 P9 q
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 ); S4 H0 E' x" Q) t( j
endmodule
/ p. O6 t* D% f去掉中间的实现部分就可以了。9 b$ b5 v- @: P4 s) a
先给大家提供一个客户项目的例子。. i [: T3 Y, }
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
& C# A, z J+ ?" y& n5 [) A- [my_comp u1 (
" W. I' R0 {$ E; ~# Y1 x.i1 (i1 + 4'h1),- W8 j! p; G: u8 W
.i2 (i2 + 4'h2),
4 {( a! M* o" S. k3 i$ k4 }.i1 (i1),
% M3 P- [% I4 l' v4 O$ g# u( M);
0 _1 \, [- m% \1 sendmodule
% ]3 h, i$ A, _" N) n+ J7 c; M客户项目的代码,加上我们制作的黑盒代码,一起载入到ISE项目中,然后运行XST综合即可得到新项目的网表,当然,因为我们提供的是黑盒,所以对应的设计结果也仍然是黑盒。那么什么时候来替换黑盒呢?/ R% x" `# f* p8 Y: J8 b5 k+ P
在这个阶段,是要真正替换黑盒的时候。其实要做的很简单。
. t9 ?6 y8 m# X7 H我们把生成的NGC文件放到客户项目的工作目录内——工作就完成了。
]6 _) s, a3 D: {$ fP—R进行的时候,进行最终的黑盒替换,ISE会试图在工作目录或者其他指定的路径寻找黑盒的替代,所以我们把NGC放在了工作目录下。
% a8 G) D. [& ~接下来运行implementation,你会发现一路工作正常,太爽了~0 x j) |0 z8 L
* N2 s$ J: N5 [- G6 S) l
|
|