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 组合逻辑跨时钟域错误
最后顺带一提,该跨时钟域方案支持源对象为触发器或黑盒,目标对象为模块或黑盒,如果是前者,则要求该模块中跨时钟域信号的每一位都到达触发器(或者该模块本省就是来自单元库的触发器)。