【随笔】航空电子 FPGA 开发中的需求层级:从 PRD 到 HDD 一张图看懂
我的学记|刘航宇的博客

【随笔】航空电子 FPGA 开发中的需求层级:从 PRD 到 HDD 一张图看懂

刘航宇
3小时前发布 /正在检测是否收录...
电子信息类专业“一站式”考研-简历-就业宝藏分享 电子信息类专业“一站式”考研-简历-就业宝藏分享
摘要:本文介绍了航空电子FPGA开发中的需求层级,从PRD到HDD,通过一张图和通俗比喻,帮助读者理解这些文档在DO-254/ARP4754体系中的位置和作用,以及FPGA工程师在需求追溯中的角色和职责。

写给 FPGA 新人的话:刚入行航空电子时,相比新人会被一堆缩写搞懵了——SRD、ERD、HRD、HDD、PRD…… 本文试图用一张图和几个通俗比喻,帮你理清这些文档在 DO-254/ARP4754 体系中的位置和作用。

一、为什么要搞懂这些文档?(立住规矩)

在航空领域,FPGA 不是"写完了能跑就行"。适航标准(主要是 DO-254)要求你必须证明:每一个硬件功能都有明确的需求来源,每一个需求都被设计实现,每一个设计都被测试验证

这个过程叫做 需求追溯(Traceability)。而追溯的链条,就是靠一层层的需求文档串起来的。

pmzShTJ.png

二、需求层级全景图(自上而下)

如果把一架飞机比作一个人,需求分解的过程就像是从"这个人要做什么"逐步细化到"每个细胞怎么工作"。

flowchart TD
    classDef aircraft fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#000
    classDef system fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000
    classDef equipment fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#000
    classDef hardware fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px,color:#000
    classDef design fill:#fce4ec,stroke:#880e4f,stroke-width:2px,color:#000
    classDef fpgaRole fill:#fffde7,stroke:#f57f17,stroke-width:1px,stroke-dasharray: 5 5,color:#000

    A["🛫 飞机级需求<br/>Aircraft Level Requirements<br/>『飞机要能自动着陆』"]:::aircraft
    B["📋 SRD<br/>System Requirements Document<br/>系统需求文档<br/>ARP4754A 管辖<br/>『自动着陆系统接收 GPS/ILS 信号』"]:::system
    C["📦 ERD<br/>Equipment Requirements Document<br/>设备需求文档<br/>ARP4754A / DO-254 交界<br/>『导航计算机输出位置数据,20Hz』"]:::equipment
    D["🔧 HRD<br/>Hardware Requirements Document<br/>硬件需求文档<br/>DO-254 核心管辖<br/>『FPGA 实现 UART 115200 8N1』"]:::hardware
    E["💻 HDD<br/>Hardware Design Description<br/>硬件设计描述<br/>DO-254 实现层<br/>Verilog/VHDL、原理图、约束文件"]:::design

    P["📑 PRD<br/>Product/Project Requirements Document<br/>产品/项目需求文档<br/>公司内部定义(非 DO-254 标准术语)"]:::system
    R3["👤 FPGA 工程师<br/>✍️ 核心编写工作"]:::fpgaRole
    R4["👤 FPGA 工程师<br/>✍️ 核心设计实现"]:::fpgaRole

    A -->|"分解为"| B
    B -->|"分配到设备"| C
    C -->|"细化到硬件"| D
    D -->|"设计实现为"| E
    P -.->|"可能分解为"| C
    D -.-> R3
    E -.-> R4
    E -.->|"向上追溯"| D
    D -.->|"向上追溯"| C
    C -.->|"向上追溯"| B
    B -.->|"向上追溯"| A

三、各层级详解(FPGA 工程师视角)

1. SRD — System Requirements Document(系统需求文档)

这是谁写的? 系统工程师。
FPGA 工程师需要做什么? 读它,理解系统要做什么。

SRD 描述的是系统层面的功能和性能。比如"飞行管理系统(FMS)要能在 5 秒内完成航路计算"。这时候 FPGA 还只是系统框图里的一个"黑盒子",可能标注为"信号处理模块"。

关键认知:SRD 通常不会直接提到 FPGA 内部的寄存器或时序,它关心的是系统输入输出。


2. ERD — Equipment Requirements Document(设备需求文档)

这是谁写的? 设备/模块级工程师。
FPGA 工程师需要做什么? 参与评审,确认分配给 FPGA 的功能边界。

ERD 把 SRD 的系统功能分解到具体的设备(LRU,Line Replaceable Unit)。比如"导航计算机"作为一个设备,它要包含电源板、接口板、FPGA 处理板。

ERD 会定义:

  • 设备的物理接口(连接器型号、引脚定义)
  • 设备的性能指标(延迟、吞吐量)
  • 设备的环境要求(温度、振动)

对 FPGA 的意义:ERD 是你 FPGA 所在"盒子"的顶层约束。如果 ERD 说"接口延迟必须小于 1ms",你的 FPGA 设计就必须满足这个。


3. HRD — Hardware Requirements Document(硬件需求文档)

这是谁写的? 硬件工程师(就是你!)。
这是 DO-254 的 C 级审查核心。

HRD 把 ERD 中分配给 FPGA/硬件的功能进一步细化,变成可验证的硬件需求。HRD 里的每一条需求,最终都要在测试用例里被覆盖。

HRD 的典型内容:

需求 ID需求描述来源(追溯)
HRD_001FPGA 应实现 1 路 RS422 接收,波特率 115200,8N1ERD_042
HRD_002数据解析模块应在收到帧头后 10μs 内输出有效标志ERD_055
HRD_003内部 FIFO 深度应不小于 1024 字系统安全性分析

关键认知

  • HRD 必须用可验证的语言写。避免"高性能"、"快速"这种模糊词。
  • 每一条 HRD 都必须能向上追溯到 ERD/SRD。
  • DO-254 审查官会随机抽 HRD 条目,检查它是否有设计实现和测试覆盖。

4. HDD — Hardware Design Description(硬件设计描述)

pasted_1787295560129_x2nj6o.png
这是谁写的? 还是你,FPGA 工程师。
这是需求的"实现层"。

HDD 不是一份单独的"文档",而是所有设计产物的集合:

  • HDL 源代码(Verilog/VHDL)
  • 原理图和 PCB 布局
  • 时序约束文件(SDC/XDC)
  • 设计说明文档(模块划分、状态机描述、算法流程)

HDD 与 HRD 的关系

  • HRD 说"要什么"(What)
  • HDD 说"怎么做"(How)

DO-254 要求 HDD 能向下覆盖 HRD。简单说:HRD 里的每一条需求,你都要在 HDD 里找到对应的设计实现。


四、那 PRD 是什么?

在 DO-254 和 ARP4754A 的标准术语里,并没有 PRD 这个缩写。

但在实际项目中,你看到的 PRD 通常指以下几种之一:

可能的含义解释在层级中的位置
Product Requirements Document(产品需求文档)公司某款"产品"(如某型飞行控制计算机)的顶层需求,向下分解为多个 ERDERD 之上
Project Requirements Document(项目需求文档)某个具体项目/合同的交付要求,包含进度、合规、配置管理要求与 ERD 平行或之上
Process Requirements Document(过程需求文档)定义开发过程、工具链、编码规范等过程域,非功能需求

建议:如果你在公司文档里看到 PRD,先查一下公司的《术语表》或《需求管理计划》,确认具体定义。不同公司用法不同,不要假设。


五、FPGA 工程师的日常:需求追溯怎么落地?

作为 FPGA 工程师,你不需要写 SRD 和 ERD,但你要深刻理解它们。你的核心工作是在 HRD ↔ HDD ↔ 测试 之间建立闭环。

实际工作流示例

flowchart TD
    %% ========== 样式定义 ==========
    classDef read fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#000
    classDef write fill:#fff8e1,stroke:#f9a825,stroke-width:2px,color:#000
    classDef design fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#000
    classDef test fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000
    classDef review fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px,color:#000
    classDef trace fill:#e0f2f1,stroke:#00695c,stroke-width:1px,stroke-dasharray: 5 5,color:#000
    classDef milestone fill:#ffebee,stroke:#b71c1c,stroke-width:3px,color:#000

    %% ========== 步骤 1:读需求 ==========
    S1["📖 Step 1:读 SRD / ERD<br/>理解系统要求"]:::read
    S1_Detail["每秒处理 1000 个雷达回波<br/>(系统级指标)"]:::read

    %% ========== 步骤 2:写 HRD ==========
    S2["✍️ Step 2:写 HRD<br/>硬件需求文档"]:::write
    S2_Detail["FPGA 雷达接口模块<br/>以 1MHz 速率接收 ADC 采样数据"]:::write
    T1["🔗 追溯至 ERD_xxx"]:::trace

    %% ========== 步骤 3:写 HDD(设计)==========
    S3["💻 Step 3:写 HDD<br/>硬件设计描述"]:::design
    S3_Detail["module adc_interface<br/>SPI 接收 + FIFO 缓冲 + 状态机"]:::design
    T2["🔗 追溯:HRD_xxx 由<br/>adc_interface 实现"]:::trace

    %% ========== 步骤 4:写测试 ==========
    S4["🧪 Step 4:写 Test Cases<br/>测试验证"]:::test
    S4_Detail["Testbench 注入 1MHz 数据<br/>检查 FIFO 不溢出"]:::test
    T3["🔗 追溯:覆盖 HRD_xxx<br/>测试通过 ✓"]:::trace

    %% ========== 步骤 5:审查 ==========
    S5["🔍 Step 5:适航审查"]:::review
    S5_Q["审查官:HRD_xxx 这条需求<br/>设计在哪?测了吗?"]:::review
    S5_A["出示 HDD 代码 + 测试报告<br/>链路闭合 ✓"]:::review
    DONE["🎉 DO-254 需求追溯闭环"]:::milestone

    %% ========== 流程连接 ==========
    S1 --> S1_Detail
    S1_Detail -->|"分解"| S2
    S2 --> S2_Detail
    S2_Detail --> T1
    T1 -->|"驱动"| S3
    S3 --> S3_Detail
    S3_Detail --> T2
    T2 -->|"验证"| S4
    S4 --> S4_Detail
    S4_Detail --> T3
    T3 -->|"审查"| S5
    S5 --> S5_Q
    S5_Q --> S5_A
    S5_A --> DONE

    %% ========== 双向追溯示意 ==========
    DONE -.->|"向上追溯<br/>Trace Up"| T3
    T3 -.-> T2
    T2 -.-> T1
    T1 -.->|"追溯到源头"| S1_Detail

六、新手容易踩的坑

pasted_1787295645472_ckx8zi.png

为什么危险怎么办
HRD 写得太像设计把"用什么算法"写进需求,导致设计变更时必须改需求HRD 只写"要什么",不写"怎么做"
需求没有唯一 ID无法追溯,审查时找不到对应关系所有需求必须有全局唯一编号(如 HRD_FPGA_001)
需求不可验证"处理速度尽量快"——怎么算通过?用数字说话:"延迟 ≤ 5μs"
忽略 ERD 的接口定义FPGA 引脚分配错误,导致板子改线早期就冻结接口需求,与硬件/结构对齐

七、一句话总结

SRD 定义系统做什么,ERD 定义设备做什么,HRD 定义 FPGA 做什么,HDD 定义 FPGA 怎么做。PRD 可能是你们公司的"产品需求",先查内部定义。DO-254 的核心就是:每一层都能向上追溯、向下覆盖、中间有验证。

参考标准

  • DO-254:《Design Assurance Guidance for Airborne Electronic Hardware》
  • ARP4754A:《Guidelines for Development of Civil Aircraft and Systems》

如有错误,欢迎指正交流。

© 版权声明
THE END
喜欢就支持一下吧
点赞 2 分享 赞赏
评论 抢沙发
取消