问题说明
ACE 8.0和更早版本使用的时序模型反映了所有LRAM输入引脚(时钟除外)以及配置了参数sync_mode = 1的BRAM FIFO的所有BRAM输入的最佳保持时间值。当使用具有参数sync_mode = 1的BRAM FIFO时,必须向LRAM输入引脚和BRAM输入引脚添加额外的保持裕度,以实现正常功能。此问题仅影响结构中的LRAM块,并且BRAM FIFO将sync_mode设置为1。
注意: 该勘误不适用于ATE向量。
受影响的设备
该勘误适用于所有具有LRAM和BRAM的Gen1 16nm Speedcore eFPGA IP,包括AC16tSC01HI01C。
局限性
LRAM输入引脚上需要额外的保持裕度,并且只会影响终止于LRAM输入引脚的路径。同样,如果使用sync_mode = 1的BRAM FIFO,则BRAM输入上需要额外的保持裕度,并且只会影响终止于BRAM输入的路径。如果这些路径限制了设计的性能,那么分辨率可能对设计的性能和QoR影响最小。
解析度
ACE 8.1设计工具中已解决此问题。请与Achronix联系以获得支持。
解决方法
计划使用较旧版本的ACE的客户可以使用以下两种解决方法之一:
1.添加额外的保证金
对设计中每个LRAM的所有输入(时钟除外)增加额外的40 ps保持裕度,并为每个具有sync_mode = 1的BRAM FIFO的所有输入增加60 ps保持裕度。
set_min_delay 0.04 -to \[get_pins $LRAM_INSTANCE_NAME/*\]
set_min_delay 0.06 -to \[get_pins $BRAM_INSTANCE_NAME/*\]
以下示例脚本可用于在设计中查找所有具有sync_mode = 1实例的LRAM实例和BRAM FIFO,并生成可添加到.acxprj文件的约束:
########################################################
# Example script to generate LRAM delay constraints
# and BRAM delay constraints
# and add them to an existing ACE project file
# Modify as needed
########################################################
if { $argc != 1 } {
puts "The generate_ram_constraints.tcl script requires one ACXPRJ project file path argument."
puts "For example, ace -batch -script_file generate_ram_constraints.tcl -script_args /path/to/my/project.acxprj".
puts "Please try again."
exit 1
}
set prj_file [lindex $argv 0]
set sdc_file "[file rootname $prj_file]_ram_delay.sdc"
restore_project $prj_file
run_prepare
set lram_insts [find * -filter {@type=LRAM} -no_prefix -insts]
set outfile [open $sdc_file w]
puts $outfile "# RAM delay file generated from generate_ram_constraints.tcl"
foreach i $lram_insts {
puts $outfile "set_min_delay 0.04 -to \[get_pins \{$i/*\}\]"
}
# NOTE: this matches sync_mode == "1" and no other variations like "1'b1"
set bram_insts [find * -filter {@type=BRAMFIFOi && @attribute=sync_mode:1} -no_prefix -insts]
foreach i $bram_insts {
puts $outfile "set_min_delay 0.06 -to \[get_pins \{$i/*\}\]"
}
close $outfile
add_project_constraints $sdc_file
save_project
exit 0
2.添加其他保留不确定性
给设计中的时钟增加了60 ps的保持不确定性。例如,如果设计使用两个时钟clk1和clk2,并且当前保持不确定性由$ HOLD_MARGIN定义,则将以下约束添加到SDC文件中:
set_clock_uncertainty -hold [$HOLD_MARGIN + 0.06] clk1
set_clock_uncertainty -hold [$HOLD_MARGIN + 0.06] clk2
注意: 尽管此解决方法可能更易于实现,但它将为所有路径增加额外的不确定性,并可能影响设计的性能和QoR。