首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Xilinx FPGA与VHDL学习手记(3)

Xilinx FPGA与VHDL学习手记(3)

3、NGC
功能:可以把HDL模块用NGC格式加密并在其他项目中调用。
方法:
给出一个实例。
先用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 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 + 4'h1),
  .i2 (i2 + 4'h2),
  .i1 (i1),
);
endmodule
这个代码,加上我们制作的黑盒代码,一起载入到ISE项目中,然后运行XST综合即可得到新项目的网表,当然,因为我们提供的是黑盒,所以对应的设计结果也仍然是黑盒。那么什么时候来替换黑盒呢?在这个阶段,是要真正替换黑盒的时候。其实要做的很简单。 我们把生成的NGC文件放到客户项目的工作目录内——工作就完成了。 P&R进行的时候,进行最终的黑盒替换,ISE会试图在工作目录或者其他指定的路径寻找黑盒的替代,所以我们把NGC放在了工作目录下。 接下来运行implementation,你会发现一路工作正常,太爽了!
注意加载NGC的方法:
EDIF and NGC macros files should not be added to a top level Schematic or HDL project. However, EDIF and NGC files that are instantiated in the design must be included in the project directory or in the macro search path. For details about the macro search path, see Translate Properties。
Translate properties:macro search path 加入.ngc文件路径即可。
返回列表