在之前的“Xilinx 7系列FPGA部分重配置【1】”中已经较为详细地记录了分别在工程模式(Project Mode)和非工程模式(Non-Project Mode)下、使用7系列的Xilinx FPGA芯片创建部分重配置(Partial Reconfiguration,PR)项目、并生成相应的bit配置文件的流程。
前述流程是一个较为基本的PR项目操作流程、在UG947和UG909文档的示范例中都有说明,自己也按照前述的流程、参考UG文档、在Xilinx Arty评估板上(xc7a35ticsg324-1L)创建了两个简单的PR项目、对PR功能成功进行了实现和验证。评估板上的下载和调试接口是USB JTAG,对FPGA的下载和配置使用的是JTAG模式。根据UG470,FPGA的配置模式主要包含以下几种:
在粗略地整体浏览完UG470之后意识到,JTAG模式是一种健壮性相对比较好的配置模式。
而前段时间工作项目上、板上FPGA的型号为xc7a35tftg256-1、配置模式为从串模式、FPGA的配置文件由另外一个stm32芯片进行加载,并且整个PR项目的复杂度远非UG文档上的示例所可比拟(由于实际应用的需求,接手的FPGA工程的复杂度主要体现在user IO的使用率极高、几乎用完了全部可分配的管脚),所以按照前述PR项目的创建和配置文件生成流程进行操作之后、一直无法通过PR验证。
后来在仔细参考了当前项目之前的降级版本的项目片上FPGA的工程文件包之后、在VIVADO的批处理模式下(batch mode)、运行编写的TCL脚本、使用和之前一样的代码包作为源文件、重新生成了FPGA配置文件,在测试板上实验之后、PR功能验证通过。所以在这里将TCL脚本中、相对前述的操作流程作出更改的几个点进行记录,以便日后参考。
1、设计思路改变
自己在之前的PR操作中一直采取的思路是:
begin
分别生成顶层的逻辑综合dcp(末尾有RP(Reconfigurable Partition)黑盒子定义)、以及N种RM的综合dcp-
使用顶层+RM1拼接生成第一种全局配置-
挖空RP(updata_design -black_box)得到static.dcp-
打开static.dcp-
填入第二种RM-
实现第二个全局配置-
……
填入第N种RM-
实现第N个全局配置
end
而参考了前人的TCL脚本之后、现在采取的创建思路是:
begin
直接利用全部的.v文件生成第一种完整的配置(TOP.v文件末尾不包含对RP的黑盒子定义)-
将RP挖空(updata_design -black_box)、得到static.dcp-
综合第二中RM、执行reset_timing命令、保存为RM_2nd.dcp
填入第二种RM-
实现第二个全局配置-
……
填入第N种RM-
实现第N个全局配置
end
需要注意的是,在保存生成的第二个RM的综合dcp之前进行了一个reset_timing的命令,这在之前做的时候都是没注意过、也没采用过的。
2、综合命令选项
执行synth_design时需要指定的属性变量
如果对A模块做综合时、B模块中的参数需要通过A模块传递过去,那么在综合时可以使用-generic属性,格式如下:
-generic <name>=<value> - (Optional)
The value of a VHDL generic entity, or of a Verilog parameter. The -generic option can be used to override the assigned values of parameters in the RTL design sources. However it can only override parameters at the top level of the design. Repeat the -generic option multiple times in the synth_design command for each generic or parameter value to be defined.
在进行PR项目中还进行设置了的属性包括
-flatten_hierarchy <arg> - (Optional)
Flatten the hie