4. 星载实时调度约束体系
星载FPGA上的实时调度,与地面嵌入式系统最大的区别在于:调度器不仅要满足任务的截止时间,还要在功耗、温度、辐射、通信窗口、存储容量、可靠性等多重物理约束下做出可行决策。这些约束并非彼此独立,而是相互耦合、动态变化,共同构成一个多维约束空间。理解这个约束体系,是设计任何星载调度算法的前提。
一、约束的分类与耦合关系
从调度器的视角看,约束可分为三类:资源型约束(功耗、存储、逻辑资源)、环境型约束(热、辐射、通信窗口)、任务型约束(优先级、安全关键等级、截止时间)。资源型约束决定"能不能同时做",环境型约束决定"什么时候能做",任务型约束决定"先做谁"。
这些约束之间存在明显的耦合。例如:提高FPGA工作频率可以缩短任务执行时间,但功耗上升导致结温升高,而高温又会加剧单粒子翻转(SEU)的敏感度,进而影响可靠性;通信窗口到来前需要把遥测数据写入存储区,若存储余量不足则必须提前压缩或丢弃低优先级数据。调度器必须在这些耦合关系中寻找可行解,而不是逐项独立优化。
二、功耗与热约束:动态电压频率调节的调度接口
星载FPGA的功耗约束通常以整星功率预算的形式下达。例如某低轨遥感卫星平台给FPGA载荷分配的功率上限为8W,其中静态功耗约1.5W,则动态功耗预算为6.5W。动态功耗与工作频率近似成正比:
P_dyn ≈ α · C_eff · V_core² · f_clk
示例参数(合理假设):
α·C_eff = 0.8 nF
V_core = 1.0 V
f_clk = 100 MHz
→ P_dyn ≈ 0.8n × 1.0² × 100M = 80 mW(单模块)
若同时运行 60 个等效模块 → 4.8 W,余量 1.7 W
调度器可用的调节手段包括:动态频率调节(DFS)、任务降采样、模块时钟门控。当预测到未来一个调度周期内功耗将超限时,调度器应优先降低低安全等级任务的执行频率,而非直接丢弃任务。
热约束与功耗紧密相关。FPGA结温 T_j 由热阻模型决定:T_j = T_case + P_total × θ_ja。若 θ_ja = 8°C/W,T_case = 45°C,P_total = 7W,则 T_j = 101°C,距125°C上限尚有24°C裕量。调度器应维护一个热预算表,当结温预测值超过阈值(如110°C)时,触发降频或任务迁移。
三、辐射环境约束:时空相关的可靠性窗口
辐射对调度的影响体现在两个层面。第一,单粒子翻转(SEU)会导致配置存储器或用户寄存器位翻转,调度器需要周期性地执行配置刷新(scrubbing),刷新任务本身占用逻辑资源和时间。第二,单粒子瞬态(SET)可能造成组合逻辑毛刺,关键任务需要三模冗余(TMR)或时间冗余,这会增加执行时间。
辐射环境具有时空相关性:南大西洋异常区(SAA)内质子通量显著升高,SEU率可增大一个数量级。调度器可结合轨道位置信息,在SAA期间自动提高刷新频率、降低非关键任务并发度,并优先保障安全关键任务。例如:
轨道位置判断(示例逻辑):
if (lat, lon) ∈ SAA_region:
scrub_interval = 2 s # 正常为 10 s
max_concurrent_tasks = 3 # 正常为 6
priority_boost = {A级: +2, B级: +1}
else:
scrub_interval = 10 s
max_concurrent_tasks = 6
四、通信窗口与存储约束:数据流的时空瓶颈
低轨卫星的测控与数传窗口通常每次持续5~12分钟,间隔约90分钟。调度器必须在这段窗口内完成遥测数据下传、遥控指令接收和软件上注。窗口约束的核心是数据积压与排空:在窗口到来前,存储区中积累的遥测数据量必须小于窗口可传输量,否则需要提前压缩或按优先级丢弃。
存储约束则表现为BRAM和外部DRAM的容量上限。以某示例任务为例:图像采集任务每帧产生2MB数据,存储区余量50MB,若窗口前还有3个采集周期,则预计新增6MB,余量充足;若同时有多个高优先级任务竞争存储,调度器需要按安全等级分配存储配额。建议为A级任务预留不低于30%的存储空间,B级不低于20%,C/D级共享剩余空间。
五、可靠性约束与任务优先级、安全关键等级的协同
可靠性约束要求调度器在任务执行过程中具备容错能力。常见手段包括:看门狗定时器监控任务超时、关键任务双机热备、执行结果校验与重试。调度器需要为每个任务定义最大重试次数和超时阈值,当重试耗尽仍失败时,触发降级策略。
任务优先级与安全关键等级是调度决策的最终依据。建议采用两级映射:安全关键等级(A/B/C/D)决定任务的不可剥夺性和资源预留比例;优先级数值决定同等级内的执行顺序。例如:A级任务不可被抢占,且预留20%的功耗和存储预算;B级任务可被A级抢占;C/D级任务采用尽力而为调度,在资源紧张时首先被降频或挂起。
六、约束体系的工程落地要点
在实际FPGA实现中,建议将上述约束抽象为一张约束描述表,由调度器在初始化时加载,并在运行中动态更新。表中每个任务记录:安全等级、优先级、最坏执行时间、功耗需求、存储需求、通信窗口依赖、最大重试次数、超时阈值。调度器每个周期读取当前功耗、温度、存储余量、窗口剩余时间,与约束表比对,输出任务执行序列和频率配置。
需要强调的是,约束之间可能存在冲突。例如提高刷新频率会占用逻辑资源并增加功耗,但降低刷新频率又可能增加SEU导致的可靠性风险。工程上通常采用加权代价函数进行折中:Cost = w1·功耗偏差 + w2·温度偏差 + w3·可靠性风险 + w4·任务超时惩罚,权重根据任务阶段和轨道位置动态调整。调度器的目标不是消除所有约束冲突,而是在冲突中寻找当前阶段最可接受的可行解。