Intel® Quartus® Prime Pro Edition用户指南: 部分重配置

ID 683834
日期 5/11/2020
Public
文档目录

1.5.2. PR文件管理

通过观察以下PR工程文件管理方法之一,可以简化PR角色及其对应的源文件的管理。

方法1 (首选):指定每个角色的唯一实体和文件名

为了说明这些方法,请考虑一个包含两个PR区域的设计,每个区域都有可能的apple、orange和banana角色。
图 6. 包含两个PR区域和三个角色的设计示例

在PR文件管理方法1中,指定工程中每个角色的唯一实体和文件名对。例如:

  • apple.sv文件中定义apple角色
  • orange.sv文件中定义orange角色
  • banana.sv文件中定义banana角色
注: 对于成功的编译和PR操作,所有角色都必须要有完全相同的端口名称和宽度(在每个.sv文件中定义的)。

在基本PR revision RTL中,对两个PR区域指定"apple"为PR角色:

图 7. 将Base PR Persona设置成"apple"

通过将u_fruit_0u_fruit_1设置为PR分区和区域,将基本角色设置为 [apple, apple]时,通过使用Design Partitions Window中的Entity Rebinding (ENTITY_REBINDING)选项或者直接编辑.qsf很容易对占用PR区域的角色进行更改,如下例所示:

对PR实现(impl)修订版指定orange角色:

set_instance_assignment -name ENTITY_REBINDING orange -to u_fruit_0
set_instance_assignment -name ENTITY_REBINDING orange -to u_fruit_1

对PR实现(impl)修订版指定banana角色:

set_instance_assignment -name ENTITY_REBINDING banana -to u_fruit_0 set_instance_assignment -name ENTITY_REBINDING banana -to u_fruit_1

对每个PR区域指定不同的角色:

set_instance_assignment -name ENTITY_REBINDING orange -to u_fruit_0 set_instance_assignment -name ENTITY_REBINDING banana -to u_fruit_1

对于每个实现修订版,必须确保在工程中包含相应的源文件(Project > Add/Remove Files in Project)。

方法2:将单个文件参数化为PR Persona

在PR文件管理方法2中,使用一个封装(wrapper)文件和参数来参数化定义所有角色的单个文件。例如,考虑方法1描述的相同设计,其中有两个PR区域,每个PR区域都有三个可能的角色。

图 8. 单个文件中的wrapper和参数

在下列中,u_fruit_0u_fruit_1设置为基本编译中的PR分区和区域。值为0FRUIT_TYPE参数会生成这两个PR角色的apple实体。

然后,您可以通过更改参数值来更改角色。例如,对两个PR区域都指定orange角色,将FRUIT_TYPE参数设置为1 (FRUIT_TYPE=1)

除了对RTL的这些更改之外,在使用方法2更新.qsf时,还必须遵循以下这些额外步骤:

  1. 创建fruit.sv文件的一个副本。使用唯一的名称命名此文件,例如:x_fruit.sv。也要重命名实体以匹配.sv文件。
  2. FRUIT_TYPE的默认参数设置为一个Verilog macro,在这种情况下为`X_FRUIT_TYPE
    图 9. 另存为x_fruit.sv的fruit.sv的副本
  3. x_fruit.sv添加到工程中(Project > Add/Remove Files in Project)。
  4. 在Specify the following in the PR实现修订版的.qsf文件中指定以下设置:
    1. 添加下面的命令行,将`X_FRUIT_TYPE Verilog macro设置成1,对"fruit"指定适当的参数,例化正确的FRUIT_TYPE
      set_global_assignment -name VERILOG_MACRO "X_FRUIT_TYPE=1"
    2. 指定实体重新绑定assignment,将新的x_fruit实体与u_fruit_0u_fruit_1实例相关联:
      set_instance_assignment -name ENTITY_REBINDING x_fruit -to u_fruit_0
      set_instance_assignment -name ENTITY_REBINDING x_fruit -to u_fruit_1

      这些.qsf变更将orange设置为这两个PR区域的新角色。

  5. 方法2的一个缺点是.qsf文件中的设置的Verilog macro是全局的。因此,工程中的`X_FRUIT_TYPE的每个实例的默认值都为1。如果您希望两个PR角色都属于同一类型,那么此结果可能是合适的。然而,如果要在一个PR实现编译中对一个角色指定“orange”,对另一个角色指定“banana”,那么必须使用唯一名称和Verilog macro创建fruit.sv文件的另一个副本:
    图 10. Copy of x_fruit.sv Saved as y_fruit.sv
  6. 在PR实现修订版的.qsf文件中指定以下设置:
    1. 添加下面的命令行,将`X_FRUIT_TYPE Verilog macro设置成1,对"fruit"指定适当的参数,例化正确的FRUIT_TYPE
      set_global_assignment -name VERILOG_MACRO "X_FRUIT_TYPE=1" set_global_assignment -name VERILOG_MACRO "Y_FRUIT_TYPE=2"
    2. 指定实体重新绑定assignment,将新的x_fruit实体与u_fruit_0的实例相关联,将新的y_fruitu_fruit_1实例相关联:
      set_instance_assignment -name ENTITY_REBINDING x_fruit -to u_fruit_0
      set_instance_assignment -name ENTITY_REBINDING x_fruit -to u_fruit_1

      这些.qsf变更将orange指定为第一个PR区域的角色,将banana指定为第二个PR区域的角色。