ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Spyglass:跨时钟域同步(同步单元)

Spyglass:跨时钟域同步(同步单元)

相关阅读

Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm=1001.2014.3001.5482


简介

同步单元方案主要用于控制信号跨时钟域同步,该方案使用约束或参数将目标时钟域中的单元指定为同步单元,如图1所示。

图1 同步单元方案

图2是Ac_sync01规则提供的Spreadsheet,其中展示了跨时钟域相关细节。

图2 Ac_sync01规则提供的Spreadsheet

相关参数或约束

sync_cell约束

使用SGDC约束中的sync_cell命令可以指定某个模块为同步单元,还可以限制源/目标时钟(域)及其频率。需要注意的是,该规则只适用于控制信号跨时钟域而对数据信号跨时钟域无效,下面给出了一个例子。

// test.sgdc sync_cell -name "sync" -from_clk "cdc_example.clk_a" -to_clk "cdc_example.clk_b"

synchronize_cells参数

使用synchronize_cells参数可以设置某个模块为同步单元。需要注意的是,该规则只适用于标量控制信号跨时钟域而对数据信号跨时钟域无效,下面给出了一个例子。

// test.prj set_parameter synchronize_cells sync

synchronize_data_cells参数

使用synchronize_data_cells参数可以设置某个模块为同步单元。需要注意的是,该规则只适用于矢量控制信号跨时钟域而对数据信号跨时钟域无效,下面给出了一个例子。

// test.prj set_parameter synchronize_data_cells sync

allow_combo_logic参数

默认情况下,Spyglass允许通过组合逻辑跨时钟域,将allow_combo_logic参数设置为no可以禁止这种情况,下面给出了一个例子。

// test.prj set_parameter allow_combo_logic no

图3展示了这种情况下通过组合逻辑跨时钟域时出现Ac_unsync01错误(实际上,即使allow_combo_logic参数设置yes,也只是不出现Ac_unsync01错误,但Ac_glitch03错误可能会出现,即Spyglass识别到毛刺)。

图3 组合逻辑跨时钟域错误

最后顺带一提,该跨时钟域方案支持源对象为触发器或黑盒,目标对象为模块或黑盒,如果是模块,则要求该模块中跨时钟域信号的每一位都到达触发器(或者该模块就是来自单元库的触发器)。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进