当前位置:首页 > 工业控制 > 工业控制
[导读]跨时钟域故障常在长时间运行后才暴露。FPGA设计不能把两级寄存器当成通用通行证:单个事件能否被看见,与一组数据能否属于同一时刻,是两种需要分别证明的条件。

跨时钟域故障常在长时间运行后才暴露。FPGA设计不能把两级寄存器当成通用通行证:单个事件能否被看见,与一组数据能否属于同一时刻,是两种需要分别证明的条件。

先看单比特事件。异步信号在接收寄存器的建立保持窗口附近变化,可能使输出进入亚稳态。后一级寄存器提供额外解析时间,降低异常电平继续传播的概率,但不会让概率严格归零。在器件参数与运行条件不变时,解析时间增加通常显著改善平均无故障时间;接收时钟越快、异步跳变越频繁,风险则可能增加。因此级数应由可靠性目标决定,不能只凭接口速率低就认定两级必然够用。

解析时间也不是完整的一个标称时钟周期。前级时钟到输出延迟、级间布线、后级建立要求及相关时钟偏差,都会占用可用窗口。同步链寄存器应通过厂商属性标识,让实现工具识别并靠近放置;首级输出也不应分叉到功能逻辑,否则不同接收点可能观察到不同结果。时序例外只负责表达分析关系,并不会创造同步硬件,更不能代替对同步链结构与布局的检查。

即使亚稳传播概率达到目标,窄脉冲仍可能完全落在两次接收边沿之间。将事件编码成翻转位,可使接收端通过前后状态差异检测事件,但两次翻转若发生在接收端可靠观察之前,依然可能互相抵消。不能停顿的高密度事件不适合直接套用这种方案;能够等待的控制事务则可加入确认,使下一次事件只在前次完成后发起。这里增加的是传输延迟与源端约束,换来的是可明确验证的事件边界。还应区分电平状态与事件数量:状态允许接收端略过中间变化,计数事件则不允许。若需求没有先说明是否允许合并,任何同步结构都无法替设计者决定丢掉一次变化是否算错误。

多比特传输要解决的不是同一个问题。计数值从二进制的多个低位全一变为进位后的新值时,各位传播与同步延迟不相同。给每一位都串上两级寄存器,只能分别降低亚稳传播概率,接收端仍可能拼出源端从未产生过的数值。对于低频参数更新,FPGA可以使用保持数据的握手快照:源端先把整组参数写入保持寄存器,再发出请求,并在收到确认前禁止改写。

请求经过控制同步链到达接收域后,接收端在规定的捕获边沿读取整组数据,再返回确认。方案成立的前提是数据路径在捕获之前已经稳定,而非总线天然没有时序要求。应结合所用宏的协议和路径约束,核对控制延迟是否覆盖数据的最大到达时间,必要时增加捕获等待周期。确认只能在实际捕获后产生;若确认过早,源端可能在接收端采样附近改写数据,原先的稳定窗口便失效。

握手还会限制可接受的更新频率。源端若在忙状态直接覆盖保持寄存器,接收端可能拿到后一个事务的数据,却把确认归给前一个事务。更稳妥的接口应明确忙时拒绝、排队或合并更新的规则,并用断言检查等待确认期间数据保持不变。两端独立复位也要定义请求与确认的初始关系,避免把初始化状态差异识别为新事务。验证应随机改变两域相位与频率,而不是只运行固定整数倍时钟。

跨域可靠性需要同时证明电平传播风险与事务语义。事件间隔、解析窗口和数据保持协议都落实后,仿真中的偶然通过才有机会转化为可持续的工程结果。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭