在 FPGA 实现的硬实时控制系统中,误差传播的确定性是系统稳定性的核心前提。与通用计算场景不同,实时控制要求每一个信号从输入到输出的传播延迟都能被精确预测,这种可预测性不仅关系到控制环路的相位裕度,更直接决定了系统在极限工况下的行为边界。本文聚焦于周期精确的 RTL 实现方法,探讨如何在硬件层面构建确定性误差传播路径,并给出硬实时约束下的延迟参数配置方案。
控制环路的周期级时序建模
实时控制系统的设计起点是从被控对象的时序要求反推硬件架构。假设控制周期为 T_s(如 10 微秒),而最大允许的端到端环路延迟为 T_loop,max(如 3 微秒),这两个参数直接决定了后续 RTL 设计的时钟预算。在选定系统时钟频率 f_clk 后,总可用周期数为 N_loop 等于 T_loop,max 乘以 f_clk 向下取整。以 100 MHz 时钟为例,3 微秒对应 300 个时钟周期,这些周期需要在 ADC 接口、数字滤波器、控制律运算、PWM 生成以及安全诊断等各功能块之间进行分配。
每一级的延迟必须被显式定义为整数周期参数。以典型的电机控制环路为例,ADC 接口与时钟域同步需要 3 个周期,数字滤波器(全流水线 FIR 结构)需要 8 个周期,控制律运算(如 PI 控制器或 MPC)需要 6 个周期,PWM 生成与死区补偿需要 4 个周期,安全检查与限幅逻辑需要 2 个周期。累计总延迟为 23 个周期,对应 230 纳秒的绝对延迟,这一数值必须在系统设计阶段就被固定下来,并在整个运行期间保持不变。
确定性误差传播的 RTL 实现原则
误差传播的确定性意味着给定任意时刻的扰动,我们可以精确预测该扰动在多少个时钟周期后会影响系统的输出或控制决策。在 RTL 层面实现这一目标需要遵循若干核心原则。首先,所有数据通路必须采用全流水线结构,且流水线深度固定为常数。禁止在控制关键路径上使用数据依赖的提前退出或变长循环,这些动态行为会破坏延迟的可预测性。
其次,握手信号的使用需要被严格约束。虽然 AXI-Stream 等流式协议在数据通路中很常见,但在控制环路的实时路径上,应当将 tready 信号恒置为高,或者使用固定延迟的 FIFO 而非弹性缓冲区。任何引入动态背压的机制都会导致路径延迟随流量变化,从而破坏确定性假设。
第三,时钟域 - crossing(CDC)必须采用固定延迟的同步器方案。对于 ADC 采样输入和执行器输出等外设接口,应使用带有确定延迟的 strobe 信号进行同步,而非依赖异步 FIFO 的弹性行为。这意味着从 ADC 数据有效到进入本地时钟域的延迟应当是一个编译时可确定的常数。
误差注入点的周期级追踪
在确定性框架下,每一类误差源都可以被精确追踪。典型的误差来源包括:固定点运算的量化误差与舍入误差、饱和与限幅带来的非线性误差、传感器信号异常或通信错误、以及故障标志触发状态机转换产生的离散误差。对于每一种误差源,我们需要定义其注入点、注入时刻 k,以及该误差在多少个周期后会影响控制输出或安全动作。
以量化误差为例,假设误差在滤波器输出端产生,其到达控制输出端需要经历 L_CTRL 加上 L_OUT 个周期的延迟。如果滤波器输出到控制输出的延迟为 10 个周期,那么在该时间窗口内注入的任意量化误差都会在 10 个周期后体现在 PWM 占空比上。这一信息对于设计在线误差补偿逻辑至关重要,因为我们知道补偿操作必须在误差产生后的特定周期数内完成才能起到预期效果。
对于安全相关的误差,如过流故障信号从产生到 PWM 关断的延迟必须被严格界定。假设过流检测逻辑需要 2 个周期,故障标志传播到 PWM 模块需要 3 个周期,PWM 实际关断需要 1 个周期,那么从过流信号有效到执行器进入安全状态的最多延迟为 6 个周期。这一参数直接关系到硬件保护电路的设计规格。
RTL 参数化与设计模式
在 RTL 代码中,延迟参数应当被显式定义为可配置的常量或泛型参数。推荐使用 SystemVerilog 的 localparam 或 Verilog 的 parameter 来定义每一级的延迟常量,并在代码注释中清晰说明该延迟对应的功能块和时序含义。例如,localparam int L_CTRL = 6; 这样的定义使得设计文档与实现代码保持一致,也为后续的时序验证提供了明确的参考。
在具体的 RTL 写法上,应当避免使用 "wait until event" 这种动态等待模式,除非该等待具有明确的最大周期数上界。状态机的设计应当保证状态之间的转换在已知的最坏情况下完成。对于需要多周期完成的运算(如乘法器或矩阵运算),应当插入流水线级寄存器,并将流水线深度作为参数暴露给上层系统。
固定点运算的格式也应当被参数化定义。每一条数据通路上的信号都应指定其 Q 格式(如 Q1.15 表示 1 位整数部分和 15 位小数部分),这不仅关系到数值精度分析,也确保了综合工具能够正确推导位宽,避免意外的溢出或截断行为。
验证与监控策略
周期级确定性的验证需要在仿真和实际硬件两个层面进行。在仿真阶段,可以利用 SystemVerilog 断言来验证关键路径的固定延迟。例如,使用序列操作符 req |=> ##L_CTRL gnt 来断言从请求信号到响应信号的延迟恰好为 L_CTRL 个周期。对于故障响应时间,可以使用类似的断言来验证最大反应时间不超过指定阈值。
在 FPGA 硬件层面,建议将关键的内部信号引出到调试端口或 ILA(Integrated Logic Analyzer),通过注入已知的激励并测量输出响应来验证端到端延迟。测试激励应当具有确定性,最好使用 BRAM 存储预先设计的测试向量,以便在不同运行之间复现相同的输入模式。
对于包含软核处理器或 SoC 架构的更大系统,建议将实时控制环路放置在独立的时序岛中,使用专用的简单时钟,避免被共享总线或其他可变速率的外设所影响。处理器对控制环路的配置和监控应当通过双口 RAM 或影子寄存器来实现,确保这些访问不会阻塞实时数据通路。
工程化参数配置清单
基于上述分析,一个典型的 FPGA 实时控制系统应当暴露以下工程化参数供系统集成使用:控制环路周期 T_s 或等效的周期数 N_loop、各功能块的阶段延迟 L_ADC、L_FILT、L_CTRL、L_OUT、L_SAFE、安全故障的最大反应周期数 L_FAULT_X、各信号路径的固定点格式 Q_SIG,以及关键节点的数值误差上界 E_MAX。这些参数构成了硬件与软件之间的明确契约,使得软件层面的控制调度能够考虑到硬件引入的确定延迟。
通过在 RTL 设计阶段就确立这些延迟参数,并使用形式化方法或仿真断言进行验证,可以确保误差传播在整个系统生命周期内都保持可预测。硬实时系统的核心价值不在于追求最低延迟,而在于确保延迟的上界始终可知且可控。
资料来源:本文技术细节参考了 arXiv 关于低延迟 FPGA 控制系统架构的研究(arXiv:2512.15838)以及量子计算实时控制领域的确定性延迟设计实践。