HSBIP打包器Skill hsb-ip-packetizer

该技能用于在 NVIDIA Holoscan 传感器桥接(HSB)的 Sensor RX 路径中,为 HOLOLINK_def.svh 选择或解释与打包器相关的宏字段(SIF_RX_PACKETIZER_EN、SIF_RX_VP_COUNT、SIF_RX_SORT_RESOLUTION、SIF_RX_VP_SIZE、SIF_RX_NUM_CYCLES)。它会根据接口数量和用户的数据重排、拆分、复制/直通意图,推导出合法且受 RTL 约束的打包器配置,并可独立生成 SystemVerilog 片段或提供 YAML overlay 交由 hsb-ip-def 整文件验证。同时支持字段含义、RTL 行为及打包器组合合法性的解释。关键词:HSB、Holoscan、Sensor Bridge、Sensor RX、打包器、Packetizer、HOLOLINK_def.svh、SystemVerilog、FPGA、虚拟端口、SIF_RX_PACKETIZER_EN、SIF_RX_VP_COUNT、SIF_RX_SORT_RESOLUTION、SIF_RX_VP_SIZE、SIF_RX_NUM_CYCLES、RTL、数据重排、直通。

传感器桥接(HSB) 0 次安装 1 次浏览 更新于 9/7/2026
名称 hsb-ip-packetizer
作者 “Holoscan 团队 holoscan-team@nvidia.com
描述 为 HOLOLINK_def.svh 选择或解释 HSB Sensor RX 打包器字段。不用于完整定义、验证或运行时 APB 编程。
版本 “0.1.0” tags: - holoscan - hsb - packetizer - systemverilog - fpga
开源协议 Apache-2.0 compatibility: 目标 HSB IP 修订版本 16’h2604;向后兼容 16’h2603。有实时 HSB IP 打包器源码时优先使用;对未知修订版本发出警告。设计为独立使用,或作为 hsb-ip-def 的配套。 metadata:
作者 “Holoscan 团队 holoscan-team@nvidia.com” team: holoscan domain: fpga vendor: nvidia tags: - holoscan - hsb - fpga - packetizer - systemverilog languages: - systemverilog artifact: HOLOLINK_def.svh hsb_ip_version: “16’h2604”

HSB IP 打包器技能

目的

为 NVIDIA Holoscan 传感器桥接的 Sensor RX 路径选择打包器相关的 HOLOLINK_def.svh 字段。

本技能只负责 HOLOLINK_def.svh 中的打包器部分:

  • SIF_RX_PACKETIZER_EN[]
  • SIF_RX_VP_COUNT[]
  • SIF_RX_SORT_RESOLUTION[]
  • SIF_RX_VP_SIZE[]
  • SIF_RX_NUM_CYCLES[]

使用 hsb-ip-def 来完成整文件的生成、验证、比较以及非打包器宏。

前置条件

  • 打包器字段生效前,必须定义 SENSOR_RX_IF_INST 且其值非零。
  • 需要每个 RX 接口的 SIF_RX_WIDTH[] 值和用户的数据处理意图后,才能推导启用的打包器值。
  • 优先使用实时打包器 RTL 进行与源码相关的论断;捆绑的参考资料覆盖已知修订版 16'h2604 和兼容修订版 16'h2603
  • 整文件生成与验证仍由 hsb-ip-def 负责。

说明

  • 仅在定义 SENSOR_RX_IF_INST 时配置打包器字段。如果禁用 Sensor RX,则说明不需要打包器字段。
  • 首先将请求分类为独立 SVH、def 技能交接、解释或运行时 APB pattern-RAM。对于 def 技能交接,加载 references/handoff-contract.md,并在需要澄清后,将 packetizer_profile_overlay 作为第一个非空输出。
  • 每次只问一个用于收集数据描述事实的问题。优先从这些事实推导宏值,而不是逐个宏确认。
  • 使用与传感器无关的语言。说“传感器数据”、“数据字”、“流”、“带宽”和“打包”;只有用户说明数据是图像/摄像头数据后才使用摄像头特定语言。
  • 不要将启用的打包器字段静默设为默认值。根据用户说明的数据布局和处理意图推导,打印完整的字段集并在一个块中输出,然后解释所选设置支持什么以及它们编码了哪些假设。
  • 避免无依据的“典型”、“常见”、“大多数设计”或语料库频率论断。将说明锚定到 HSB 文档、RTL 行为或用户的明确需求。
  • 将运行时 APB pattern-RAM 编程排除在 v1 生成之外。HOLOLINK_def.svh 使能/设置硬件尺寸;运行时软件仍控制 pattern RAM、虚拟端口选择、排序控制、旁路、填充、复制和延迟。
  • hsb-ip-def 交接时,使用该 def 流程已知的事实。如果提示给出 RX 数量、使能/直通意图、通道或流宽度、虚拟流数量和周期窗口,则应直接发出 overlay,无需重新询问宏名或整文件细节。最终的合并与完整验证交给 hsb-ip-def

实时 HSB IP 源码策略

只要用户工作区提供实时 HSB IP 源码,就优先于捆绑的打包器参考资料使用它。捆绑参考资料描述已知修订版 16'h2604 和向后兼容的修订版 16'h2603;实时源码是已检出 IP 的权威来源。

当源码可用时:

  1. 定位 HOLOLINK_top.sv 以及打包器 RTL 文件:
    • <hsb-ip-root>/top/HOLOLINK_top.sv
    • <hsb-ip-root>/packetizer/packetizer_top.sv
    • <hsb-ip-root>/packetizer/packetizer.sv
    • <hsb-ip-root>/packetizer/virtual_port.sv
    • <hsb-ip-root>/packetizer/odd_even_gen.sv
  2. 当存在时,从 HOLOLINK_top.sv 读取 HOLOLINK_REVHOLOLINK_BACKWARD_COMPAT_REV
  3. 在做出与源码相关的论断前,验证 HOLOLINK_top 是否仍将文档中描述的五个 def 字段映射到 packetizer_top
  4. 如果版本较新、未知,或实时 RTL 与本技能的参考资料不一致,请指出不一致。若要给出解释,以实时 RTL 为准;避免不支持的假设,除非能从实时源码验证字段映射和 RTL 约束,否则不要输出启用的打包器 overlay。

当没有源码时,使用捆绑参考资料作为已知版本指南,并说明答案基于本技能支持的 HSB IP 修订版本。

参考资料加载

只加载用户任务所需的参考资料:

文件 何时加载
references/packetizer-def-fields.md 选择或解释 HOLOLINK_def.svh 打包器字段、数组长度规则、旁路占位符、RTL 派生约束,或独立 SVH 输出格式
references/packetizer-architecture.md 解释打包器模块、数据流、时钟、APB 寄存器、运行时与 def 的划分,或字段存在的原因
references/handoff-contract.md hsb-ip-def 生成 packetizer_profile_overlay YAML 或强制执行输出模式分离

工作流决策

  1. 如果用户正在 HOLOLINK_def.svh 生成流程中工作,则使用 Def 技能交接
  2. 如果用户要求添加行到现有/新的 HOLOLINK_def.svh,使用 独立 SVH
  3. 如果用户询问字段的作用、值为何重要或组合是否安全,使用 解释
  4. 如果用户要求 APB pattern-RAM 编程,则说明它是运行时配置,不在 v1 生成输出范围内;加载 references/packetizer-architecture.md 获取寄存器上下文。

需求发现

依次收集以下事实,跳过用户已提供的事实。一旦数据操作描述足够具体以推导出 profile,就停止提问。

  1. SENSOR_RX_IF_INST:Sensor RX 接口的数量。如果未定义或为零,则停止。
  2. SIF_RX_WIDTH[]:每个 RX 接口的输入宽度。这是每个打包器实例的 DIN_WIDTH
  3. 每个 RX 接口的打包器意图:直通、数据重排/操作、拆分到虚拟端口、复制/重复,或其他操作。
  4. 已启用接口的数据布局:通道/块宽度、输出虚拟流数量、操作是否在一个输入周期内完成或跨多个周期,以及是否有确切的排序/复制要求。

跳过诸如“确认 SIF_RX_VP_COUNT?”、“确认 SIF_RX_SORT_RESOLUTION?”、“确认 SIF_RX_VP_SIZE?”或“确认 SIF_RX_NUM_CYCLES?”之类的逐宏确认提示。询问缺失的数据形状事实,如“RX0 应拆分为多少个虚拟流?”或“重排的位粒度是多少?”

推导字段

获得所需事实后,一起推导所有打包器数组:

  • SIF_RX_PACKETIZER_EN[i] = 1 用于需要打包器硬件进行重排、拆分、复制或其他运行时控制数据操作的 RX 接口;直通接口为 0
  • SIF_RX_VP_COUNT[i] 等于该 RX 接口操作所需的虚拟输出流/端口数量。
  • SIF_RX_VP_SIZE[i] 是每个虚拟端口的数据大小/宽度(位)。将一个 SIF_RX_WIDTH[i] 输入字相等连续拆分为 N 个虚拟端口时,若 SIF_RX_WIDTH[i] / N 是正 2 次幂除数并符合用户意图,则使用该值。
  • SIF_RX_SORT_RESOLUTION[i] 是数据重排操作的位粒度。如果用户描述固定大小通道,则当该通道大小通过 RTL 派生约束时,使用通道大小。如果不需要排序操作且打包器仅用于连续拆分/复制,则在合法时使用 SIF_RX_WIDTH[i] 以在内部禁用排序网络。
  • SIF_RX_NUM_CYCLES[i] 是参与操作的输入传感器数据周期数。单周期重排/拆分/复制使用 1;当操作跨多个输入周期时,使用所述周期窗口。

如果在阅读数据描述后仍有多个 profile 看似合理,则问一个关于可区分行为或数据形状的澄清问题。不要退回到“典型”打包器值。

对于混合启用/禁用设计中的禁用条目,用匹配 RTL 旁路常量的忽略占位值填充对等数组:

  • SIF_RX_VP_COUNT[i] = 1
  • SIF_RX_SORT_RESOLUTION[i] = 2
  • SIF_RX_VP_SIZE[i] = 32
  • SIF_RX_NUM_CYCLES[i] = 1

输出字段格式

  • 使能数组必须始终恰好有 SENSOR_RX_IF_INST 个条目。
  • 如果任何使能条目为 1,则发出 4 个对等数组,长度恰好为 SENSOR_RX_IF_INST
  • 如果每个使能条目均为 0,则只发出 SIF_RX_PACKETIZER_EN[];对等数组不是打包器决策所必需的。
  • 对混合逐端口值使用位置数组语法。仅当每个条目都相同且该形式提高可读性时,使用 '{default:<value>}
  • 不要从本技能发出或修改 SENSOR_RX_IF_INSTSIF_RX_WIDTH[]DATAPATH_WIDTH、主机字段、时钟或任何非打包器宏。
  • 在输出块或 overlay 后,根据用户的输入数据和处理需求解释所选设置。将解释放在围栏输出之后,以便下游工具可以先消费块。

独立 SVH

当用户希望将打包器行添加到 HOLOLINK_def.svh 时使用。

步骤:

  1. 收集所需事实。
  2. 加载 references/packetizer-def-fields.md,以选择值、检查约束并使用规范的独立输出格式。
  3. 发出仅包含打包器局部参数的围栏 systemverilog 代码块。
  4. 解释该设置对用户数据处理允许什么:哪些 RX 接口使用打包器硬件、它们暴露多少虚拟流、每流宽度、数据重排粒度以及操作是单周期还是多周期。
  5. 添加简短说明:应使用 hsb-ip-def 或其 validate_def.py 进行整文件验证。

Def 技能交接

hsb-ip-def 在生成完整 HOLOLINK_def.svh 时调用本技能。

步骤:

  1. 仅收集 def 流程尚未知道的打包器特定需求。
  2. 加载 references/handoff-contract.md
  3. 首先发出一个带标签的 YAML overlay。一旦需求已知,在 packetizer_profile_overlay 标签前不要写引言。def 技能直接消费扁平键。
  4. 在 overlay 后添加简要解释,说明设置对用户的数据描述和处理需求允许什么。

必需标签:

packetizer_profile_overlay

YAML 键:

  • sif_rx_packetizer_en
  • 仅当任何使能为 1 时,sif_rx_vp_count
  • 仅当任何使能为 1 时,sif_rx_sort_resolution
  • 仅当任何使能为 1 时,sif_rx_vp_size
  • 仅当任何使能为 1 时,sif_rx_num_cycles

示例形状:

packetizer_profile_overlay

sif_rx_packetizer_en: [1, 0]
sif_rx_vp_count: [4, 1]
sif_rx_sort_resolution: [16, 2]
sif_rx_vp_size: [128, 32]
sif_rx_num_cycles: [1, 1]

def 技能仍负责将此 overlay 合并到其 profile 中,生成最终 SVH,并运行完整验证。

解释

当用户询问某个打包器字段的作用、为何值重要,或某个打包器组合是否合适时使用。

步骤:

  1. 加载 references/packetizer-def-fields.md 获取字段级答案。
  2. 加载 references/packetizer-architecture.md 获取架构、数据流、时钟域或运行时 APB 行为。
  3. 解释 RTL 行为时,以 top/HOLOLINK_top.sv:1356-1362packetizer/packetizer.sv:69-85 形式引用源位置。
  4. 对于影响整个 HOLOLINK_def.svh 的合法性问题,说明打包器本地关注点,并告诉用户使用 hsb-ip-def 验证完整文件。

故障排除

  • Sensor RX 禁用:不发出任何打包器数组,并说明打包器硬件仅用于 Sensor RX 接口。
  • 数据形状事实缺失:在推导字段前,问一个关于流数量、通道宽度、周期窗口或排序的澄清问题。
  • 运行时 APB pattern-RAM 请求:说明运行时编程在 v1 生成输出之外,仅加载 references/packetizer-architecture.md 获取上下文。
  • 整文件合法性问题:说明打包器本地问题,并将验证导向回 hsb-ip-def

示例

  • 使用 hsb-ip-packetizer 为两个 Sensor RX 接口选择打包器字段。RX0 为 512 位,必须将每个输入字拆分为四个 128 位虚拟流;RX1 为直通。 视为“独立 SVH”,仅发出打包器局部参数:使能 [1, 0],虚拟端口数 [4, 1],排序分辨率 [512, 2](用于连续拆分的场景,无需通道重排),虚拟端口大小 [128, 32],周期数 [1, 1]。告诉用户使用 hsb-ip-def 执行完整文件验证。
  • hsb-ip-def 正在生成我的 HOLOLINK_def.svh,需要打包器值。RX0 应将 16 位通道重排为四个虚拟流;RX1 保持直通。 视为“Def 技能交接”,并先放置 YAML overlay:

packetizer_profile_overlay

sif_rx_packetizer_en: [1, 0]
sif_rx_vp_count: [4, 1]
sif_rx_sort_resolution: [16, 2]
sif_rx_vp_size: [16, 32]
sif_rx_num_cycles: [1, 1]

然后说明 hsb-ip-def 仍负责合并此 overlay、生成完整的 HOLOLINK_def.svh 并运行完整验证。

  • 如果我的 HOLOLINK_def.svh 中禁用了 SENSOR_RX_IF_INST,我是否需要 hsb-ip-packetizer? 解释打包器字段仅适用于 Sensor RX 接口,不发出打包器数组,并避免运行时 APB pattern-RAM 配置。

限制

  • 不要生成完整的 HOLOLINK_def.svh 文件。
  • 不要验证完整的 HOLOLINK_def.svh 文件。
  • 不要生成 v1 中的运行时 APB 写入或 pattern-RAM 内容。
  • 不要基于语料库频率或原型流行度选择打包器值。