由于错误的嵌入式时序限制,您可能会在硬件中看到不正确的 DCFIFO IP 行为。
错误时序限制(嵌入在 DCFIFO 代码中)错误地为读写时钟域之间的灰色编码传输设定了false_path分配。
尽管硬件故障极为不可能,但这些灰色编码域传输的偏差可能会大到足以使接收时钟域发生损坏。
硬件故障的概率随着逻辑利用率和 DCFIFO 时钟速率的提高而提高。
如果您的设计受到影响,Altera建议采用以下解决方法。请注意,变通办法需要升级到 Quartus® Prime 软件 v15.1 以及更高版本。该变通办法仅适用于以下设备产品家族:
• Cyclone® V
• Arria® II GX
• Arria V 和 Arria V GZ
• Stratix® IV
• Stratix V
• MAX® 10
请按照以下步骤操作,以正确约束和优化灰色编码域传输:
1) 在 Quartus Prime 设置文件 (.qsf) 中应用以下分配:
set_global_assignment - 名称DISABLE_EMBEDDED_TIMING_CONSTRAINT开启
2) 确保没有用户创建clock_groups或false_path分配,以缩短跨这些时钟域的路径的时序。
使用"report_clock_transfers"报告来确定是否存在跨时钟域的false_path分配。
3) 应用以下时序限制:
对于 DCFIFO, = |dcfifo_component|*auto_generated
对于混合宽度 DCFIFO, = |dcfifo_mixed_widths_component|*auto_generated
设置from_node_rdptr_list [get_keepers |rdptr_g*]
设置to_node_rdptr_list [get_keepers |ws_dgrp|dffpipe*|dffe*]
set_max_skew -从 $from_node_rdptr_list - 到 $to_node_rdptr_list -get_skew_value_from_clock_period src_clock_period -skew_value_multiplier 0.8
set_net_delay -从 $from_node_rdptr_list - 到 $to_node_rdptr_list -max -get_value_from_clock_period dst_clock_period -value_multiplier 0.8
set_max_delay -从 $from_node_rdptr_list - 到 $to_node_rdptr_list 100
set_min_delay -从 $from_node_rdptr_list - 到 $to_node_rdptr_list -100
设置from_node_wrptr_list [get_keepers |delayed_wrptr_g*]
设置to_node_wrptr_list [get_keepers |rs_dgwp|dffpipe*|dffe*]
set_max_skew -从 $from_node_wrptr_list - 到 $to_node_wrptr_list - get_skew_value_from_clock_period src_clock_period -skew_value_multiplier 0.8
set_net_delay -从 $from_node_wrptr_list - 到 $to_node_wrptr_list -max -get_value_from_clock_period dst_clock_period -value_multiplier 0.8
set_max_delay -从 $from_node_wrptr_list - 到 $to_node_wrptr_list 100
set_min_delay -从 $from_node_wrptr_list - 到 $to_node_wrptr_list -100
设置from_node_mstable_ws_list [get_keepers |ws_dgrp|dffpipe*|dffe*]
设置to_node_mstable_ws_list [get_keepers |ws_dgrp|dffpipe*|dffe*]
set_net_delay -从 $from_node_mstable_ws_list - 到 $to_node_mstable_ws_list -max -get_value_from_clock_period dst_clock_period -value_multiplier 0.8
设置from_node_mstable_rs_list [get_keepers |rs_dgwp|dffpipe*|dffe*]
设置to_node_mstable_rs_list [get_keepers |rs_dgwp|dffpipe*|dffe*]
set_net_delay -从 $from_node_mstable_rs_list - 到 $to_node_mstable_rs_list -max -get_value_from_clock_period dst_clock_period -value_multiplier 0.8
4) 使用 TimeQuest II 时序分析器中的report_max_skew报告和report_net_delay报告验证时序已关闭。
对于 Arria 10 设备以及之后的更高版本,默认情况下检查"生成 SDC 文件和禁用嵌入式时序限制"参数。这允许您绕过在同步寄存器中使用set_false_path的嵌入式时序限制。当 DCFIFO 从 IP 目录实例化时,系统会自动生成用户可配置的 SDC 文件。使用由set_net_delay、set_max_skew、set_min_delay和set_ max_delay组成的新时序限制来正确限制设计。