英特尔 Quartus Prime Pro Edition用户指南: 设计建议

ID 683082
日期 8/03/2023
Public
文档目录

1.4.4.2. 双时钟FIFO时序约束

如果您选择编写您自己的双时钟FIFO,那么您也必须使用Synopsis Design Constraints格式(.sdc)创建相应的时序约束。

通常,您可以使用set_clock_groups SDC命令将读和写时钟域设置为彼此异步。您通常在顶层.sdc文件中指定set_clock_groups命令。

通过偏斜和网络延迟约束来约束读写指针时钟域交叉。

偏斜约束确保了格雷编码指针值在时钟域之间正确传输。网络延迟约束限制两个时钟域之间的线路延迟,以帮助减少通过FIFO的延迟。

在上面的RTL示例中,在Synchronizer_ff_r2实体的两个实例中,指针在ff_launchff_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