Spyglass:跨时钟域同步(非循环复用器) 相关阅读Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482简介非循环复用器方案主要用于数据信号跨时钟域同步与循环复用器方案类似该方案将一个控制信号同步至目标时钟域并用其作为驱动目标触发器的多路复用器的选择信号如图1所示但拥有以下区别。1、多路复用器不使用循环的方式连接。2、多路复用器的数据输入端除了可以来自源时钟域还可以来自目标时钟域或连接到常量。图1 非循环复用器方案图2是Ac_sync01规则提供的Spreadsheet其中展示了控制信号跨时钟域相关细节如果该信号同步失败数据信号的同步也会失败。图2 Ac_sync01规则提供的Spreadsheet图3是Ac_sync02规则提供的Spreadsheet其中展示了数据信号跨时钟域相关细节注意到控制信号ee_ff2被识别为了Qualifier。图3 Ac_sync02规则提供的Spreadsheet除了图1所示的情况Spyglass允许多路复用器的选择信号的扇入中存在目标时钟域的触发器或输入端口但一定需要一个由源时钟域同步来的控制信号如图4所示。图4 非循环复用器方案相关参数或约束enable_sync_cell参数allow_combo_logic参数默认情况下Spyglass允许通过组合逻辑跨时钟域将allow_combo_logic参数设置为no可以禁止这种情况下面给出了一个例子。// test.prj set_parameter allow_combo_logic no图5展示了这种情况下通过组合逻辑跨时钟域时出现Ac_unsync02错误实际上即使allow_combo_logic参数设置yes也只是不出现Ac_unsync02错误但Ac_glitch03错误会出现即Spyglass识别到毛刺。图5 组合逻辑跨时钟域错误enable_mux_sync参数默认情况下Spyglass允许任意多路复用器的数据输入端连接到常量将enable_mux_sync参数设置为strict限制其不能全部连接到常量除了来自源时钟域外至少一个输入端连接目标时钟域下面给出了一个例子。// test.prj set_parameter enable_mux_sync strict图6展示了这种情况下多路复用器的数据输入端全部连接到常量时出现Ac_unsync02错误图中展示了二选一复用器的情况对于更多输入的复用器结果一样。图6 Ac_unsync02错误需要注意的是在例6中我们选择让数据输入端连接到常量1而不是常量0因为如果将其连接至常量0Spyglass会将其视为与门跨时钟域方案而不出现错误。默认情况下非循环复用器方案开启将enable_mux_sync参数设置为no时可以禁止该方案。最后顺带一提该跨时钟域方案支持源对象为触发器或黑盒目标对象必须为触发器。