zynq实现动态加载(Partial Reconfiguration)

       上周没有写博客,我不会无辜不写,只因为有更重要的事情。

      首先说明下需求。在某些设计需求中,需要在更换bitstream时,要求一部分逻辑不能重新被加载。也就是说,要求实现FPGA的动态重配置。

      这里主要参考了ug909,上面对每一步操作具有十分详细的说明。但是对于初学者来时,那些晦涩难懂的专业名词是在令人挠头,所以这里把手册的内容进行了精简,并且用大家最喜欢的流水灯实验说明问题。哈哈哈。。。流水灯实验我从学习数字电路、单片机、arm、fpga。。。一直都是最好的伴侣。(大学实验室有个老师,在实验室学习stm32,结果流水灯闪了两年)。

      好了,现在也让我的流水灯闪起来。说明下,流水灯是这样闪烁的。一共两个LED。这里设为LED1和LED2,重配置以前,LED1和LED2以1HZ的频率进行闪烁。重配置以后,LED1以1HZ频率进行闪烁,LED2以2HZ速度进行闪烁。以上就是最终实现的效果,这里可能很多人会笑,这么简单,用三极管都能实现。在博弈论中,假设了人事聪明的并且人性本恶。这里我假设读者明白FPGA重配置的意义。

      zynq实现动态加载(Partial Reconfiguration)_第1张图片

上图为实现整个功能的block,这是初学者的水平,其实我也是初学者。哈哈

实现重配置我总结了以下17步,先罗列以下:

1、综合工程 (first module)

2、保存checkpoint

write_checkpoint -cell

3、综合工程(second module)

4、保存checkpoint

write_checkpoint -cell

5、注意:上面两部只能执行到综合,千万不能执行实现,否则重配置过程会出现place冲突

6、设置模块使其成为reconfigurable

set_property HD.RECONFIGURABLE 1 [get_cells ]

这步完成以后,就可以在模块的property看到“don't touch”

7、在device上画出reconfigurable区域。

8、在pblock properties 上使能 REST_AFTER_RECONFIGURATION

9、运行DRC检测

10、opt_design place_design route_design

11、保存checkpoint,此时为最后生成bitstream文件的第一个checkpoint

write_checkpoint

12、清除reconfigurable 分区

update_design -cell -black_box

13、锁定布线

lock_design -level routing

14、保存此时的checkpoint(保险起见,有把握直接略过)

15、把其他的reconfigurable 分区替换到black_box

a、read_checkpoint -cell

b、redo step 10 and 11

16、使用PR_verifying tool 验证几个文件是否匹配

pr_verify -initial -additional { }

17、生成bitstream 文件

open_checkpoint

write_bitstream -file

ok

做一下简单的解释:

       步骤1-4是为了保存两个checkpoint,一个为包含0.5SIP核的,另外一个为包含1S的checkpoint。其实每个checkpoint就是我们一会需要进行重配置的填充介质。

     步骤5是让我两天都没睡好觉的,读者一定要注意!!因为实现重配置很重要的就是在执行完综合以后,记住综合以后,然后重配置,最后进行布局布线!

     步骤6直接上图:

zynq实现动态加载(Partial Reconfiguration)_第2张图片

步骤七:

zynq实现动态加载(Partial Reconfiguration)_第3张图片

步骤8:

zynq实现动态加载(Partial Reconfiguration)_第4张图片

步骤9,10为常识;

步骤11,这时候会生成第一个用来生成bitstream的文件;

步骤12-15,这几部实现替换重配置区域内容的步骤。比较关键

下面就是生成bitstream。

不得不说今天写的有点简陋,因为我只是根据ug909实现了一个demo,时候会更新一个基于工程的Partial Reconfiguration。

好啦,开始读过愉快的周末夜晚

 

 

 

 

 

 

 

  

你可能感兴趣的:(FPGA)