部分重配置,既动态配置部分芯片时,芯片的其他部分可正常工作,且向芯片中下载部分
配置bit文件时,芯片的DONE脚不被拉低。
使用FPGA的这一特性,可实现对芯片的分时复用。
首先做部分重配置的FPGA内部必须要有TBUF,因为在部分可重配置中,重配置模块和其它模块的连接要使用由TBUF构成的总线宏(在设计中重配置模块不需要与其他模块连接的情况没考虑过)。SpartanII,
SpartanIIE, Virtex, Virtex2, Virtex2P, VirtexE 这些系列都可做部分重配置。
做部分重配置时生成的文件很多,所以目录的结构很重要。参考xilinx的应用文档,以只有一个重配置模块为例,实现部分重配置时使用如下目录结构:
总目录
|---ise_top 顶层设计的ISE工程
|---ise_top1 重配置后的顶层ISE工程
|---top
| |---initial 生成整体约束
| |---assemble
组合各个模块
|
|---top1
| |---initial
|
|---assemble
|
|---pims
各模块激活后发布在pims文件夹里
| |---子模块名
| |---.......
|
|---module 各模块激活过程使用的目录
|---子模块名
|---......
具体操作(基于模块的部分重配置):
1、在ise_top工程中输入设计的顶层文件top.vhd,各模块必须是以“黑盒子”的形式出现,既各模块只声明端口,内部没有具体实现。综合生成
top.ngc文件。
2、将上面生成的ngc文件拷贝到top文件夹中的initial文件夹中,在cmd中运行ngdbuild -modular
initial top.ngc生成ngd文件,再运行floorplanner
top.ngd用ISE中的工具floorplanner对top.ngd进行区域和管教约束。之后保存为ucf文件,在ucf文件中手动加入对总线宏的约束。运行ngdbuild
-modular initial -p xc2s50-5tq144 -uc top.ucf top。
3、在ise_top中综合各个模块,注意在综合时将综合属性对话框process properties中的xilinx specific options选项卡的
add i/o
buffers项后的钩取掉。将生成的ngc文件和做好的总线宏文件拷贝到目录module下的相应的文件夹中,在相应的文件夹目录下执行如下操作:
ngdbuild
-p xc2s50-5tq144 -modular module -active 子模块名 -uc ../../top/initial/top.ucf
../../top/initial/top.ngo,生成ngd文件。
map top.ngd,映射。
par -w top.ncd
top_routed.ncd,布局布线。
pimcreate -ncd top_routed.ncd -ngm top.ngm
../../Pims,发布到pims文件夹中。
如果是重配置模块还需执行bitgen -d -w -g ActiveReconfig:Yes
top_routed.ncd,生成可重配置的bit文件。
4、各模块发布完之后进行组合。将总线宏拷贝到top文件夹中的assemble文件夹中,在此文件夹中执行如下命令实现组合:
ngdbuild -p
xc2s50-5tq144 -modular assemble -pimpath ../../Pims -uc
../../top/initial/top.ucf ../../top/initial/top.ngo,生成整体的ngd文件。
map
top.ngd,映射。
par -w top.ncd top_routed.ncd,布局布线。
bitgen -w
top_routed.ncd,生成bit文件。
5、实现另一个重配置后的整体设计操作步骤与上同。
下载片子时,先下载整体的bit文件,之后再下载部分重配置的bit文件。
我做部分重配置时的步骤如上,最后生成的部分重配置bit文件竟然和整体bit文件大小一样(应该是部分重配置bit文件小于整体bit文件),且下载部分重配置bit文件时DONE脚被拉低了,显然是不对的,不知是哪里出了问题。思考......
后续博文中有
“补充”部分。
转自:http://blog.chinaaet.com/detail/9258.html
阅读(3558) | 评论(0) | 转发(0) |