仅对英特尔可见 — GUID: mok1629933281688
Ixiasoft
1.4.4.2. 双时钟FIFO时序约束
如果您选择编写您自己的双时钟FIFO,那么您也必须使用Synopsis Design Constraints格式(.sdc)创建相应的时序约束。
通常,您可以使用set_clock_groups SDC命令将读和写时钟域设置为彼此异步。您通常在顶层.sdc文件中指定set_clock_groups命令。
通过偏斜和网络延迟约束来约束读写指针时钟域交叉。
偏斜约束确保了格雷编码指针值在时钟域之间正确传输。网络延迟约束限制两个时钟域之间的线路延迟,以帮助减少通过FIFO的延迟。
在上面的RTL示例中,在Synchronizer_ff_r2实体的两个实例中,指针在ff_launch到ff_meta寄存器路径处跨时钟域。
以下示例约束适用于上述RTL。您可以根据您实现的需要自定义-from和-to名称。
# Skew from read to write domain set_max_skew -from rd2wr|ff_launch[*] -to rd2wr|ff_meta[*] \ -get_skew_value_from_clock_period src_clock_period -skew_value_multiplier 0.8 # Skew from write to read domain set_max_skew -from wr2rd|ff_launch[*] -to wr2rd|ff_meta[*] \ -get_skew_value_from_clock_period src_clock_period -skew_value_multiplier 0.8 # Net delay from read to write domain set_net_delay -from rd2wr|ff_launch[*] -to rd2wr|ff_meta[*] \ -get_value_from_clock_period dst_clock_period -value_multiplier 0.8 -max # Net delay from write to read domain set_net_delay -from wr2rd|ff_launch[*] -to wr2rd|ff_meta[*] \ -get_value_from_clock_period dst_clock_period -value_multiplier 0.8 -max
在.sdc文件中写入偏斜和网络延迟约束后,指定一个实体绑定.sdc文件.qsf assignment,以将约束应用到您的FIFO的所有实例中的同步器寄存器路径。
在.qsf的实体绑定.sdc文件assignment中使用包含这些约束的.sdc文件的名称。还要提供应用约束的FIFO实体的名称。
以下.qsf assignment示例假定您将约束保存在您工程目录的fifo_synchronizer.sdc中,并且其中的约束应用于dcfifo_example实体:
set_global_assignment -name SDC_ENTITY_FILE fifo_synchronizer.sdc \ -entity dcfifo_example