把HDL模块用NGC格式加密并在其他项目中调用

前面创新网网友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只作为内部的一个部分,这就造成客户项目最终P&R失败。
防止NGC带有IOB、PAD的方法: 找到ISE中的Synthesize-XST,然后右键打开属性,在category的Xilinx Specific Op  TI ons中将下列两项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 + 4'h1),
.i2 (i2 + 4'h2),
.i1 (i1),
);
endmodule

客户项目的代码,加上我们制作的黑盒代码,一起载入到ISE项目中,然后运行XST综合即可得到新项目的网表,当然,因为我们提供的是黑盒,所以对应的设计结果也仍然是黑盒。那么什么时候来替换黑盒呢?

在这个阶段,是要真正替换黑盒的时候。其实要做的很简单。
我们把生成的NGC文件放到客户项目的工作目录内——工作就完成了。
P—R进行的时候,进行最终的黑盒替换,ISE会试图在工作目录或者其他指定的路径寻找黑盒的替代,所以我们把NGC放在了工作目录下。

接下来运行implementa  TI on,你会发现一路工作正常,太爽了~

把HDL模块用NGC格式加密并在其他项目中调用_设计制作_测量仪表
23
72
0
91

相关资讯

  1. 1、《最佳阵容》中超第三轮预测竞猜赢钻石382
  2. 2、“超能”继承青春动漫同样好玩4941
  3. 3、奇迹暖暖游光长廊主题搭配奇迹暖暖战争与和平攻略4792
  4. 4、李三郎从戎记之《一骑当千2》神装何处寻2437
  5. 5、狼人杀怎么火的多方面讲解火爆原因2280
  6. 6、《战姬天下》新版强势登陆女将军团跨服开战2908
  7. 7、SS来袭《世界2》2.2安卓新版本今日上线1990
  8. 8、《全民主公》新版本席卷乱世夺宝跨服迎中秋4630
  9. 9、志逐轩辕尽享国战乐趣《轩辕剑之汉之云》首测落幕3414
  10. 10、三生三世战沙城《原始传奇》手游转生系统微变革新443
全部评论(0)
我也有话说
0
收藏
点赞
顶部