打印

如何实现EDK中调用ISE里面的IP核

[复制链接]
4429|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wmsk|  楼主 | 2011-10-27 08:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
GoldSunMonkey| | 2011-10-27 08:20 | 只看该作者
以下方法仅供参考
将你的设计制作成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的选项
1.       一般收费的IP都是只提供网表供使用,自然对设计的保密是一大好处;
2.       IP都是验证好的模块,提供给外界接口,自然使用方便也是一大特点;
3.       以网表形式提供可以保持IP的内部时序完整性(即保存设计),类似于partition和smartguide。
接下来想说的是,把HDL代码封装成IP核(以网表形式提供使用,NGC format),根据使用的环境不同(在ISE和EDK中),有其各自的封装形式,但是大同小异,都是用的黑盒子方式,再加载网表,即可。
在ISE中封装HDL,并使用IP,设计分三大步:
第一步:像通常建立工程设计一样,先编写一个模块,如:
module add(a,b,c)
   Input a,b;
   output[1:0]
   assign c=a+b;
endmodule

设置综合选项,综合过程中不能加入IO buf和iob(考虑到跟外部模块接口问题):
在综合设置中,-iobuf不要勾选,-iob选 NO,综合,生成网表add.ngc;
第二步:制作一个blackbox模块(就是一个IP的wrapper封装设计),如下:
   module add(a,b,c)
   input a,b;
   output[1:0]
endmodule
只申明端口。
第三步:使用此IP,需要先把第二步的blackbox以v文件形式加入到工程,再调用这个模块,再把add.ngc文件加入到工程文件夹下即可(注意此过程在综合实现时候,要把第一步的两个选项选上)。
在EDK中封装自己的IP核方法(此处是指的是完全定制的IP核),
也是以黑盒子方式提供,需要自己编写相应文件,其文件结构如下:

├─data
│         .bbd // 记录NGC文件
│         .mpd //描述IP接口信息,属性等
│         .pao //说明IP核所有的源文件(HDL下的文件)
├─hdl
│└─verilog
│               .v //申明IP端口的V文件,相当于一个黑盒子
│               .v
│                .v

└─netlist//iP相应网表
         blackbox1.ngc
          blackbox2.ngc
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用逗号和空格隔开

使用特权

评论回复
评分
参与人数 2威望 +3 收起 理由
wmsk + 1
SuperX-man + 2
板凳
wmsk|  楼主 | 2011-10-27 08:29 | 只看该作者
先试试,回头再和您讨论,猴哥,谢谢啦。

使用特权

评论回复
地板
ifpga| | 2011-10-27 09:35 | 只看该作者
正需要,收下

使用特权

评论回复
5
AutoESL| | 2011-10-27 10:46 | 只看该作者
顶起来,这么详细....
lz试成功回来写后续结论和注意事项哈:D

使用特权

评论回复
6
AutoESL| | 2011-10-27 10:47 | 只看该作者
我本以为可以直接在ISE里面添加就可以了呢:lol

使用特权

评论回复
7
GoldSunMonkey| | 2011-10-27 12:58 | 只看该作者
谢谢X-MAN

使用特权

评论回复
8
GoldSunMonkey| | 2011-10-27 12:58 | 只看该作者
顶起来,这么详细....
lz试成功回来写后续结论和注意事项哈:D
AutoESL 发表于 2011-10-27 10:46

是呀:)

使用特权

评论回复
9
GoldSunMonkey| | 2011-10-27 12:59 | 只看该作者
我本以为可以直接在ISE里面添加就可以了呢:lol
AutoESL 发表于 2011-10-27 10:47

肯定不可以。

使用特权

评论回复
10
AutoESL| | 2011-10-27 13:01 | 只看该作者
为什么ISE不能添加ISE特有的IP呢?

使用特权

评论回复
11
GoldSunMonkey| | 2011-10-27 13:03 | 只看该作者
为什么ISE不能添加ISE特有的IP呢?
AutoESL 发表于 2011-10-27 13:01

是EDK

使用特权

评论回复
12
AutoESL| | 2011-10-27 13:13 | 只看该作者
lz不是说想用ISE特有的IP吗?

使用特权

评论回复
13
AutoESL| | 2011-10-27 13:13 | 只看该作者
我也是说用ISE直接添加不可以吗

使用特权

评论回复
14
GoldSunMonkey| | 2011-10-27 13:14 | 只看该作者
lz不是说想用ISE特有的IP吗?
AutoESL 发表于 2011-10-27 13:13

是呀啊

使用特权

评论回复
15
GoldSunMonkey| | 2011-10-27 13:16 | 只看该作者
13# AutoESL 当然不可以啊

使用特权

评论回复
16
AutoESL| | 2011-10-27 13:24 | 只看该作者
ISE也真奇怪,自己的特有的东西自己不能用;P

使用特权

评论回复
17
wmsk|  楼主 | 2011-10-27 13:25 | 只看该作者
搞定。谢谢啦,猴哥

使用特权

评论回复
18
woshidashitou| | 2011-10-27 19:02 | 只看该作者
1,刚刚开始学习,我也有疑问,ISE中自己的IP核,直接在工程中实现并调用就可以了么。
  2,猴老师提出的我理解似乎是将自己写的程序制作成一个IP核,然后自己再调用。
       是不是?谢谢

使用特权

评论回复
19
GoldSunMonkey| | 2011-10-27 19:57 | 只看该作者
1,刚刚开始学习,我也有疑问,ISE中自己的IP核,直接在工程中实现并调用就可以了么。
  2,猴老师提出的我理解似乎是将自己写的程序制作成一个IP核,然后自己再调用。
       是不是?谢谢 ...
woshidashitou 发表于 2011-10-27 19:02

1.是的
2.是的

使用特权

评论回复
20
ertu| | 2011-11-2 13:27 | 只看该作者
版主讲解的很到位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

411

帖子

1

粉丝