如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)

原创 by DeeZeng [ Intel FPGA笔记 ]

Intel FPGA Quartus 软件中的 Qsys工具 也就是 Platform Designer 系统集成工具,可以

  1.  图形化界面操作
  2.  使用系统自带ip,自定义ip
  3.  系统自动生成 ip 间的连接
  4.  设计好的 qsys 系统 可作为模块给其他qsys系统调用

如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)

如果我们不对 qsys子模块进行设置,那在新的qsys中整合的时候,将只能使用qsys子模块中固定的设置。

那我们如何将 qsys 子系统设置成像自定义ip 一样有参数传入呢?

 我们可以通过 Instance Parameters 的方式实现,qsys子系统添加后效果如下图

 如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)

具体的步骤如下:

  1.  打开需要设置参数传入的 qsys
  2. 在 View -> Instance Parameters 打开 Instance Parameters 窗口
    • 如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)
  3.  在 Instance 窗口界面设置  参数传入

    •  如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)
  4.  在第3步骤 图章1 Instance Parameters 中: 设置 传入参数 名称,类型,范围,解释等
  5.  在第3步骤 图章2 Instance Script 中: 将参数通过写脚本绑定的 qsys 中的各个 ip。 比如上图中 是将 qsys 的DATA_WIDTH 传给了 dma_write_master_0的 DATA_WIDTH
  6.  如下附录了 比较完整的 Script 代码: 
# request a specific version of the scripting API
package require -exact qsys 16.1

# Set the name of the procedure to manipulate parameters
set_module_property COMPOSITION_CALLBACK compose


proc compose {} {
 set_instance_parameter_value dma_read_master_0 DATA_WIDTH [ get_parameter_value DATA_WIDTH ]
 set_instance_parameter_value dma_read_master_0 LENGTH_WIDTH [ get_parameter_value LENGTH_WIDTH ]
 set_instance_parameter_value dma_read_master_0 FIFO_DEPTH [ get_parameter_value FIFO_DEPTH ]
 set_instance_parameter_value dma_read_master_0 GUI_MAX_BURST_COUNT [ get_parameter_value GUI_MAX_BURST_COUNT ]
 set_instance_parameter_value modular_sgdma_dispatcher_0 DESCRIPTOR_FIFO_DEPTH [ get_parameter_value DESCRIPTOR_FIFO_DEPTH ]

 set_instance_parameter_value mm_clock_crossing_bridge_1 DATA_WIDTH [ get_parameter_value DATA_WIDTH ]
 set_instance_parameter_value mm_clock_crossing_bridge_1 MAX_BURST_SIZE [ get_parameter_value GUI_MAX_BURST_COUNT ]
 set_instance_parameter_value mm_clock_crossing_bridge_1 RESPONSE_FIFO_DEPTH [ get_parameter_value RESPONSE_FIFO_DEPTH]
 set_instance_parameter_value mm_clock_crossing_bridge_1 ADDRESS_WIDTH [ get_parameter_value LENGTH_WIDTH]

 set_instance_parameter_value mm_bridge_0 DATA_WIDTH [ get_parameter_value DATA_WIDTH ]
 set_instance_parameter_value mm_bridge_0 MAX_BURST_SIZE [ get_parameter_value GUI_MAX_BURST_COUNT ]
 set_instance_parameter_value mm_bridge_0 ADDRESS_WIDTH [ get_parameter_value LENGTH_WIDTH]
}

操作完如上6个步骤,将qsys 子系统保存好。

在另外的qsys中调用的时候,我们将可以看到:

如何将 qsys 子模块设置为参数可调的方式给另外的qsys 调用 (Instance Parameters)

  这样 我们的qsys 子系统,也能够进行参数设置了!类似于一个可设置参数的ip。