mirror of https://github.com/openXC7/prjxray.git
virtex7: 053-pip-ctrlin / 055-pip-gnd — 2*N tile reservation
Both fuzzers crashed in Vivado with 'ERROR: [Common 17-69] Missing name/value pair in -dict argument' at the set_property -dict 'LOC ... BEL ...' line. Cause: generate.tcl reserves 3*todo_lines INT tiles via randsample_list (utils.tcl), which samples without replacement and pads with empty strings once exhausted. The off-edge virtex7 ROI holds only ~150 INT_L/INT_R tiles, but 053 has 64 todo lines, so 3*64=192 > 150 and the tail of the sample is empty entries; high-idx todo lines (tile_idx = idx*3) get empty tiles -> empty driver_site -> odd-length -dict -> error. Reduce the per-todo-line retry window from 3 to 2 (set tiles expr 2*todo_lines, tile_idx idx*2, retry limit tries>=2). 2*64=128 fits comfortably in ~150 pool. Other pip fuzzers use a different indexing pattern; only these two use idx*K. For larger-ROI families the pool still exceeds 2*N as it did 3*N, so no regression. Verified: 053 single-specimen run reaches all 64 todo lines (idx 63 previously died at 50), emits segdata_int_l/r; 055 likewise. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
88f6f61d10
commit
5347c5152d
|
|
@ -65,8 +65,11 @@ for {gets $fp line} {$line != ""} {gets $fp line} {
|
|||
}
|
||||
close $fp
|
||||
|
||||
# each run can fail up to three times so we need to prepare 3*todo_lines tiles to work on
|
||||
set tiles [expr 3 * [llength $todo_lines]]
|
||||
# Each todo line gets a 2-tile window for routing retries, so reserve
|
||||
# 2*todo_lines tiles. The off-edge Virtex-7 ROI holds fewer INT tiles than the
|
||||
# 3*N the upstream fuzzer assumed (randsample_list then padded the list with
|
||||
# empty entries, breaking the -dict below); 2*N fits this ROI.
|
||||
set tiles [expr 2 * [llength $todo_lines]]
|
||||
|
||||
set int_l_tiles [randsample_list $tiles [filter [pblock_tiles roi] {TYPE == INT_L}]]
|
||||
set int_r_tiles [randsample_list $tiles [filter [pblock_tiles roi] {TYPE == INT_R}]]
|
||||
|
|
@ -84,7 +87,7 @@ for {set idx 0} {$idx < [llength $todo_lines]} {incr idx} {
|
|||
|
||||
set tries 0
|
||||
while {1} {
|
||||
set tile_idx [expr $tries + [expr $idx * 3]]
|
||||
set tile_idx [expr $tries + [expr $idx * 2]]
|
||||
incr tries
|
||||
|
||||
if {$tile_type == "INT_L"} {set tile [lindex $int_l_tiles $tile_idx]; set other_tile [lindex $int_r_tiles $tile_idx]}
|
||||
|
|
@ -121,7 +124,8 @@ for {set idx 0} {$idx < [llength $todo_lines]} {incr idx} {
|
|||
route_design -unroute -nets $mynet
|
||||
|
||||
# sometimes it gets stuck in specific src -> dst locations
|
||||
if {$tries >= 3} {
|
||||
# 2-tile window per todo line (see tile reservation above)
|
||||
if {$tries >= 2} {
|
||||
error "ERROR: failed to route net after $tries tries"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,8 +35,11 @@ for {gets $fp line} {$line != ""} {gets $fp line} {
|
|||
}
|
||||
close $fp
|
||||
|
||||
# each run can fail up to three times so we need to prepare 3*todo_lines tiles to work on
|
||||
set tiles [expr 3 * [llength $todo_lines]]
|
||||
# Each todo line gets a 2-tile window for routing retries, so reserve
|
||||
# 2*todo_lines tiles. The off-edge Virtex-7 ROI holds fewer INT tiles than the
|
||||
# 3*N the upstream fuzzer assumed (randsample_list then padded the list with
|
||||
# empty entries, breaking the -dict below); 2*N fits this ROI.
|
||||
set tiles [expr 2 * [llength $todo_lines]]
|
||||
|
||||
set int_l_tiles [randsample_list $tiles [filter [pblock_tiles roi] {TYPE == INT_L}]]
|
||||
set int_r_tiles [randsample_list $tiles [filter [pblock_tiles roi] {TYPE == INT_R}]]
|
||||
|
|
@ -65,7 +68,7 @@ for {set idx 0} {$idx < [llength $todo_lines]} {incr idx} {
|
|||
|
||||
set tries 0
|
||||
while {1} {
|
||||
set tile_idx [expr $tries + [expr $idx * 3]]
|
||||
set tile_idx [expr $tries + [expr $idx * 2]]
|
||||
incr tries
|
||||
|
||||
if {$tile_type == "INT_L"} {set tile [lindex $int_l_tiles $tile_idx]; set other_tile [lindex $int_r_tiles $tile_idx]}
|
||||
|
|
@ -93,7 +96,8 @@ for {set idx 0} {$idx < [llength $todo_lines]} {incr idx} {
|
|||
route_design -unroute -nets $mynet
|
||||
|
||||
# sometimes it gets stuck in specific src -> dst locations
|
||||
if {$tries >= 3} {
|
||||
# 2-tile window per todo line (see tile reservation above)
|
||||
if {$tries >= 2} {
|
||||
error "ERROR: failed to route net after $tries tries"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue