前面立异网网友Ricky Su发了篇博文《 说说FPGA中的黑盒子(BlackBox)》,学习了感觉很好用,最近在网上又找到一篇讲该方面内容的文章,感觉写的很好转发来与咱们同享,文章如下:
这个办法其实十分简略。给出一个实例。
先用HDL写出该模块,比方:
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
assign o1 = (i1 > i2)? i1: i2;
endmodule
这是一个比较巨细的模块。一看便知。
然后在ISE中树立项目,将该模块导入,作为规划文件,杂乱的规划进程也是相似的。然后运转XST进行归纳,归纳完成后,看看项目目录,就能发现这个NGC文件了。这个NGC文件是2进制加密的,所以,你也不必操心去研讨了。即使可以用ngc2edif将其转换成edif格局,可是关于杂乱规划,得到edif也是无法复原其原本的逻辑目的的。
到此为止,咱们得到NGC格局加密的规划文件。
留意,在制造NGC的时分,要避免把PAD或许IOB都包含进来,由于咱们的NGC是要被其他项目调用的,也便是说NGC这颗螺丝钉有必要能放到任何方位去,而一旦咱们把PAD和IOB也包含进来,则NGC将只能放在客户项目的鸿沟接口方位,这和实际情况是相反的,实际情况咱们的NGC只作为内部的一个部分,这就形成客户项目终究PR失利。
避免NGC带有IOB、PAD的办法: 找到ISE中的Synthesize-XST,然后右键翻开特点,在category的Xilinx Specific OpTIons中将下列两项disable掉。
– iobuf Add I/O Buffers
– iob Pack I/O Registers into IOBs (这个选NO即可)
好了,现在假定其他项目(咱们的客户项目)要调用这个加密模块,怎么做呢?
首要加密后的模块是2进制的,无法在归纳的时分运用,咱们的办法是制造一个等价的black box。所谓黑盒,其实便是一个只要接口,没有完成的模块。比方,上例的黑盒,便是这个姿态。
module my_comp(input [3:0] i1, input [3:0] i2, output [3:0] o1 );
endmodule
去掉中心的完成部分就可以了。
先给咱们供给一个客户项目的比如。
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
客户项目的代码,加上咱们制造的黑盒代码,一同载入到ISE项目中,然后运转XST归纳即可得到新项目的网表,当然,由于咱们供给的是黑盒,所以对应的规划成果也仍然是黑盒。那么什么时分来替换黑盒呢?
在这个阶段,是要真实替换黑盒的时分。其实要做的很简略。
咱们把生成的NGC文件放到客户项目的作业目录内——作业就完成了。
P—R进行的时分,进行终究的黑盒替换,ISE会企图在作业目录或许其他指定的途径寻觅黑盒的代替,所以咱们把NGC放在了作业目录下。
接下来运转implementaTIon,你会发现一路作业正常,太爽了~