图2 具有两个可重构模块的设计布局图
4、总线宏的通讯
为了促进可重构模块之间的通信,需要保证穿过可重构模块边界的布线资源是完全固定而且必须是静态的,这就需要一种特殊的总线宏。如图3就是所需的这种总线宏。
其中,左边的A是一个模块,右边的B是另一个模块,A或者B是可重构模块,或者AB全是可重构模块。A和B中间的总线宏,就是支持AB之间通信的特殊总线宏。它保证AB间布线资源的不变性。也就是说当一个模块进行重构时模块内部信号用到的布线资源不能改变。如图3,总线宏是两个模块间的一个固定的布线桥。它是一个事先已经布线好的用来确定精确布线轨道的宏,并且在编辑改变的时候保持不变。对于每个不同的设计应用来说,它是一个绝对固定不变的总线宏。
图3 总线宏
目前使用的总线宏由八个三态缓冲器组成如图4。总线宏允许信息双向传递,一个比特的信息使用一个三态缓冲器的长线。Virtex器件的每一行支持一个总线宏的四个固定的通信。总线宏的信息通讯是双向的,既可以从左到右又可以从右到左。但是对于这个设计来说,一旦信息通信方向确定以后就不能再改变。
图4 总线宏的物理执行
5、基于差异的部分可重构
基于差异的部分可重构比较重构前后的电路差别,产生一个只包含重构前后设计差别的比特流。可以使用两种方法来改变设计、产生重构前后的差别,分别是前端改变(HDL描述)和后端改变(NCD文件)。使用前端改变,设计必须重新综合,创建新的NCD文件。后端改变只需直接修改NCD文件,不必重新综合,可通过FPGA Editor工具修改NCD文件。
在FPGA Editor中可以进行三种方式的修改:改变I/O标准、BRAM内容、LUT设计。其中可以选择的最小逻辑元素是slice。首先打开NCD文件,看到逻辑块后找到可选择的最小逻辑元素slice,打开slice的结构图窗口,可以分别将重构前的I/O标准、BRAM内容、LUT设计修改为重构后的形式,如图5所示。
图5 改变LUT设计
以上三种修改都符合有效的重构流程。除了这三种方式还有其他的修改方式,比如:颠倒极性、振荡器的初始化和重新设置值、上拉、下拉外部管脚或者RAM写方式。所有这些特性都能够在实际的slice、RAM逻辑块或IOB中修改。但是,最好不要进行任何有可能影响布线或者产生内部连接冲突的修改行为。
实现上述修改后,使用BitGen就可产生可下载的差异比特文件。可重构前后开关配置的改变非常迅速,比重新配置整个电路要快很多,就像差异比特流比整个电路的比特流小很多一样,所以能够迅速而简单的下载到电路中。
6、结论
当电路只需要修改比较少的内容时,往往选择基于差异的部分可重构。差异比特流比整个电路的比特流小很多,所以能够迅速下载到电路中。
但是如果电路功能比较复杂则差异文件会非常庞大,部分动态重构的优势并不十分明显。所以基于差异的部分可重构只适用于功能简单的电路,对于功能复杂的电路需要使用基于模块的部分可重构。
综上所述,基于差异和基于模块的部分动态重构都可以大大节省系统的硬件资源,加快文件的下载速度,提高资源利用率,相信会有广阔的研究和应用前景。