最近忙一个EDK的小工程,自己定义个用Create or Import Peripheral 定义了IP,在里面要用到ISE的IP.困扰了一段时间!经过群里、论坛上一些朋友的帮助 终于OK了,先分享下了(引用五十米阳光),这里面主要是用到了Black Box的设计
FPGA设计过程,很多时候在使用公司的或者第三方公司的IP核,那如何自己把自己的HDL代码变成可使用的IP呢。同时这样做也有很多好处:
将你的设计制作成BlackBox,也就是网表文件,这样别人看不到你的设计但是可以调用你的模块了。详细的参考信息如下:
1. 什么是BlackBox
-
一个大的设计中可以用到一系列网表文件作为输入的一部分而并不全部使用HDL文件。当综合这个大设计时综合器不需要知道这个网表文件是怎样实现的,而只需要知道它的输入输出接口就可以了。这样的网表就称为黑盒子,因为我们不需要看到它的内部情况。
- 通常付费IP都会以BlackBox的形式
2. 如何使用BlackBox
- BlackBox网表可以是EDIF或NGC文件。
-
每个BlackBox网表都需要有一个与之相对应的HDL文件来注明它的端口。这个HDL只说明BlackBox的端口信息,而不提供具体实现信息。这个只提供端口信息的HDL文件称为Wrapper。Wrapper的名字通常需要与BlackBox网表的名字相同。
- 在ISE工程中使用BlackBox时只需要将它的Wrapper添加到工程中。然后像普通的模块一样在其上层声明和例化就可以使用。
-
BlackBox网表文件可以放在ISE工程目录中,也可以放在其他任意文件夹内。当不放在ISE工程目录时,需要在Translate属性中将Macro
Search Path指向这个目录。多个目录使用"|"分割。
3. 如何制作BlackBox
- BlackBox只是普通网表而已。XST的综合结果就可以直接作为BlackBox使用。
- 通常BlackBox外部还会连接其他逻辑,所以BlackBox中一般不插入IOBUF。在XST属性中去除Insert IO
Buffer的选项
EDK中Custom IP Core如果需要引用网表,那么就需要在BBD文件中中声明需要使用的网表名称。
常用的BBD文件有两种形式:
1. 在所有情况下均使用相同的网表
2. 根据不同请款使用不同的网表
在情况1-使用相同网表时,可以使用CIP Wizard的import功能自动生成BBD文件,并且CIP
Wizard还会把网表文件放到相应的文件夹内(pcores//netlists)。
此时BBD文件的内容是
FILES
blackbox.ngc
在情况2-需要EDK自动选择相应网表时,就需要手动编写/修改BBD文件了。
比如我需要根据所使用的FPGA器件类型选择网表文件,那么就可以根据C_FAMILY参数来选择。BBD文件例子:
C_FAMILY FILES
virtex4 virtex4/blackbox1.ngc, virtex4/blackbox2.ngc
spartan3 spartan3/blackbox1.ngc, spartan3/blackbox2.ngc
文件夹层次则为:
│
├─data
│ .bbd
│ .mpd
│ .pao
├─hdl
│ └─vhdl
│
.vhd
│
.vhd
│ .vhd
│
└─netlist
├─spartan3
│
blackbox1.ngc
│ blackbox2.ngc
│
└─virtex4
blackbox1.ngc
blackbox2.ngc
【注意事项】
1. Core顶层VHDL需要有相应的Generic,Verilog需要有Parameter与用于选择的属性一致
2. C_FAMILY属性是EDK工程的内建属性,不需要在MHS中手动指定,它会自动传递到CustIP中。
3. 两个file name用逗号和空格隔开