警惕FPGA外存带宽中的行冲突与服务空窗
外存引脚速率足够,采集通路仍可能周期性溢出。FPGA外存规划必须分别回答两个问题:平均能搬走多少有效数据,以及最长没有服务的时段需要多少片上空间,两项指标不能用峰值带宽代替。
有效带宽首先取决于地址序列。动态存储器需要在银行中激活目标行,才能对行内列执行访问;若下一笔请求命中已打开的行,部分开销可以摊薄,若不断切到同一银行的其他行,就要付出预充电与再次激活的时间。不同银行的操作可以在器件时序允许范围内交错,但仍受共享命令、数据总线及银行组等约束。因而相同字节数、相同总线频率,不同访问模式得到的吞吐可能明显不同。
突发长度也不是越长越好。较长连续请求有利于摊薄命令开销,但若算法每次只使用其中少量数据,额外搬运反而吞噬有效带宽。地址位如何映射到行、银行和列,决定了固定步长扫描会形成连续行命中,还是反复冲击少数银行。应根据控制器实际映射分析帧宽、行跨度和缓冲区基址,不能照着软件中的逻辑数组顺序推断物理访问规律。对齐填充有时会改变银行分布,但必须通过地址映射推导验证。
读写方向切换会增加另一类空耗。连续写与连续读各自可保持数据总线忙碌,而频繁交替通常需要满足总线转向间隔。调度器可把同方向请求聚集处理,改善总吞吐,却可能拉长另一方向的等待时间。面对显示读取和采集写入并存的通路,应在批量效率与请求时限之间设定边界,而非只追求测试程序里的最高平均值。测量时最好同时记录有效载荷、方向切换次数和各端请求等待分布。对实际应用,可分别运行连续地址、跨行步长及交替读写三组压力序列。若三者差距明显,应先定位命令空耗与地址热点,再考虑提高接口频率,否则频率提升可能只放大无效访问。
即使地址调度已经合理,刷新与其他主设备仲裁仍可能制造服务空窗。FPGA片上缓存至少应覆盖该区间内持续到来的数据,再加上已接受但尚未落入缓存的在途数据及实现余量。如果输入速率为每单位时间固定若干字节,无服务时长越长,必要容量便按比例增加。这里的时长必须覆盖控制器及系统能够承诺的最坏服务间隔,不能用示波器上恰好观察到的一次短暂停顿作为上界。
缓存只能吸收有限的时间错配,不能补偿长期带宽不足。恢复服务之后,外存可提供给该通道的有效处理速率必须高于持续输入速率,积压才会逐步下降。如果刚清掉一部分又遇到下一次停顿,就要分析连续多个服务窗口的净积压,而非只孤立计算单次刷新。控制器的刷新推迟策略、温度相关刷新要求及仲裁权重都会影响这一过程,具体数值应由目标器件和实际配置确定。
若另一个主设备能够无限期占用控制器,则不存在有限缓存可以提供永久无丢失保证。系统需要限制突发占用、设定公平或时限服务规则,或允许采集端降速与丢帧,并清楚区分这些契约。验证中应主动制造读写切换、行冲突和竞争负载,观测缓存高水位以及达到高水位时的调度状态。只运行单通道顺序访问,会把平均吞吐测试误当成持续采集的容量证明。
外存设计应先用地址模式核算有效吞吐,再用最长服务空窗确定缓存。只有长期收支与短期积压都满足边界,采集链路才不会靠偶然空闲维持运行。





