| 名称 | 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 的权威来源。
当源码可用时:
- 定位
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
- 当存在时,从
HOLOLINK_top.sv读取HOLOLINK_REV和HOLOLINK_BACKWARD_COMPAT_REV。 - 在做出与源码相关的论断前,验证
HOLOLINK_top是否仍将文档中描述的五个 def 字段映射到packetizer_top。 - 如果版本较新、未知,或实时 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 或强制执行输出模式分离 |
工作流决策
- 如果用户正在
HOLOLINK_def.svh生成流程中工作,则使用 Def 技能交接。 - 如果用户要求添加行到现有/新的
HOLOLINK_def.svh,使用 独立 SVH。 - 如果用户询问字段的作用、值为何重要或组合是否安全,使用 解释。
- 如果用户要求 APB pattern-RAM 编程,则说明它是运行时配置,不在 v1 生成输出范围内;加载
references/packetizer-architecture.md获取寄存器上下文。
需求发现
依次收集以下事实,跳过用户已提供的事实。一旦数据操作描述足够具体以推导出 profile,就停止提问。
SENSOR_RX_IF_INST:Sensor RX 接口的数量。如果未定义或为零,则停止。SIF_RX_WIDTH[]:每个 RX 接口的输入宽度。这是每个打包器实例的DIN_WIDTH。- 每个 RX 接口的打包器意图:直通、数据重排/操作、拆分到虚拟端口、复制/重复,或其他操作。
- 已启用接口的数据布局:通道/块宽度、输出虚拟流数量、操作是否在一个输入周期内完成或跨多个周期,以及是否有确切的排序/复制要求。
跳过诸如“确认 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] = 1SIF_RX_SORT_RESOLUTION[i] = 2SIF_RX_VP_SIZE[i] = 32SIF_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_INST、SIF_RX_WIDTH[]、DATAPATH_WIDTH、主机字段、时钟或任何非打包器宏。 - 在输出块或 overlay 后,根据用户的输入数据和处理需求解释所选设置。将解释放在围栏输出之后,以便下游工具可以先消费块。
独立 SVH
当用户希望将打包器行添加到 HOLOLINK_def.svh 时使用。
步骤:
- 收集所需事实。
- 加载
references/packetizer-def-fields.md,以选择值、检查约束并使用规范的独立输出格式。 - 发出仅包含打包器局部参数的围栏
systemverilog代码块。 - 解释该设置对用户数据处理允许什么:哪些 RX 接口使用打包器硬件、它们暴露多少虚拟流、每流宽度、数据重排粒度以及操作是单周期还是多周期。
- 添加简短说明:应使用
hsb-ip-def或其validate_def.py进行整文件验证。
Def 技能交接
当 hsb-ip-def 在生成完整 HOLOLINK_def.svh 时调用本技能。
步骤:
- 仅收集 def 流程尚未知道的打包器特定需求。
- 加载
references/handoff-contract.md。 - 首先发出一个带标签的 YAML overlay。一旦需求已知,在
packetizer_profile_overlay标签前不要写引言。def 技能直接消费扁平键。 - 在 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,并运行完整验证。
解释
当用户询问某个打包器字段的作用、为何值重要,或某个打包器组合是否合适时使用。
步骤:
- 加载
references/packetizer-def-fields.md获取字段级答案。 - 加载
references/packetizer-architecture.md获取架构、数据流、时钟域或运行时 APB 行为。 - 解释 RTL 行为时,以
top/HOLOLINK_top.sv:1356-1362或packetizer/packetizer.sv:69-85形式引用源位置。 - 对于影响整个
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 内容。
- 不要基于语料库频率或原型流行度选择打包器值。