mirror of https://github.com/openXC7/prjxray.git
Add lvb_long_mux minitest
Signed-off-by: Clifford Wolf <clifford@clifford.at> Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
parent
85d681e400
commit
c8188315f7
|
|
@ -0,0 +1,10 @@
|
||||||
|
/.Xil
|
||||||
|
/design/
|
||||||
|
/design_a.bit
|
||||||
|
/design_a.bits
|
||||||
|
/design_a.dcp
|
||||||
|
/design_b.bit
|
||||||
|
/design_b.bits
|
||||||
|
/design_b.dcp
|
||||||
|
/usage_statistics_webtalk.*
|
||||||
|
/vivado*
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
vivado -mode batch -source runme.tcl
|
||||||
|
../../tools/bitread -F $XRAY_ROI_FRAMES -o design_a.bits -zy design_a.bit
|
||||||
|
../../tools/bitread -F $XRAY_ROI_FRAMES -o design_b.bits -zy design_b.bit
|
||||||
|
python3 ../../utils/segprint.py design_a.bits INT_L_X12Y132 INT_L_X14Y132 INT_L_X16Y132
|
||||||
|
python3 ../../utils/segprint.py design_b.bits INT_L_X12Y132 INT_L_X14Y132 INT_L_X16Y132
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
create_project -force -part $::env(XRAY_PART) design design
|
||||||
|
|
||||||
|
read_verilog top.v
|
||||||
|
synth_design -top top
|
||||||
|
|
||||||
|
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports i]
|
||||||
|
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports o]
|
||||||
|
|
||||||
|
create_pblock roi
|
||||||
|
resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
|
||||||
|
|
||||||
|
set_property CFGBVS VCCO [current_design]
|
||||||
|
set_property CONFIG_VOLTAGE 3.3 [current_design]
|
||||||
|
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
|
||||||
|
|
||||||
|
place_design
|
||||||
|
source ../../utils/utils.tcl
|
||||||
|
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
|
||||||
|
set_property FIXED_ROUTE {} [get_nets o_OBUF]
|
||||||
|
route_design -unroute
|
||||||
|
|
||||||
|
route_via o_OBUF {
|
||||||
|
INT_L_X12Y144/LVB_L12 INT_L_X12Y132/LVB_L12
|
||||||
|
|
||||||
|
INT_L_X12Y120/SS6BEG2
|
||||||
|
INT_L_X14Y120/NN6END3
|
||||||
|
|
||||||
|
INT_L_X14Y132/LVB_L12 INT_L_X14Y144/LVB_L12
|
||||||
|
INT_L_X16Y144/LVB_L12 INT_L_X16Y132/LVB_L12
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
|
||||||
|
route_design
|
||||||
|
write_checkpoint -force design_a.dcp
|
||||||
|
write_bitstream -force design_a.bit
|
||||||
|
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
|
||||||
|
set_property FIXED_ROUTE {} [get_nets o_OBUF]
|
||||||
|
route_design -unroute
|
||||||
|
|
||||||
|
route_via o_OBUF {
|
||||||
|
INT_L_X12Y120/NN6END3
|
||||||
|
|
||||||
|
INT_L_X12Y132/LVB_L12 INT_L_X12Y144/LVB_L12
|
||||||
|
|
||||||
|
INT_L_X14Y144/LVB_L12 INT_L_X14Y132/LVB_L12
|
||||||
|
|
||||||
|
INT_L_X14Y120/SS6BEG2
|
||||||
|
INT_L_X16Y120/NN6END3
|
||||||
|
|
||||||
|
INT_L_X16Y132/LVB_L12 INT_L_X16Y144/LVB_L12
|
||||||
|
|
||||||
|
INT_L_X16Y144/EE4BEG2
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
|
||||||
|
route_design
|
||||||
|
write_checkpoint -force design_b.dcp
|
||||||
|
write_bitstream -force design_b.bit
|
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
module top (input i, output o);
|
||||||
|
assign o = i;
|
||||||
|
endmodule
|
||||||
|
|
@ -24,11 +24,45 @@ with open(sys.argv[1], "r") as f:
|
||||||
|
|
||||||
bitdata[frame][wordidx].add(bitidx)
|
bitdata[frame][wordidx].add(bitidx)
|
||||||
|
|
||||||
for arg in sys.argv[2:]:
|
def handle_segment(segname):
|
||||||
if arg in grid["tiles"]:
|
if ":" in segname:
|
||||||
segname = grid["tiles"][arg]["segment"]
|
seg1, seg2 = segname.split(":")
|
||||||
else:
|
|
||||||
segname = arg
|
if seg1 in grid["tiles"]:
|
||||||
|
seg1 = grid["tiles"][seg1]["segment"]
|
||||||
|
|
||||||
|
if seg2 in grid["tiles"]:
|
||||||
|
seg2 = grid["tiles"][seg2]["segment"]
|
||||||
|
|
||||||
|
seginfo1 = grid["segments"][seg1]
|
||||||
|
seginfo2 = grid["segments"][seg2]
|
||||||
|
|
||||||
|
frame1 = int(seginfo1["baseaddr"][0], 16)
|
||||||
|
word1 = int(seginfo1["baseaddr"][1])
|
||||||
|
|
||||||
|
frame2 = int(seginfo2["baseaddr"][0], 16)
|
||||||
|
word2 = int(seginfo2["baseaddr"][1])
|
||||||
|
|
||||||
|
if frame1 > frame2:
|
||||||
|
frame1, frame2 = frame2, frame1
|
||||||
|
|
||||||
|
if word1 > word2:
|
||||||
|
word1, word2 = word2, word1
|
||||||
|
|
||||||
|
segs = list()
|
||||||
|
|
||||||
|
for seg, seginfo in sorted(grid["segments"].items()):
|
||||||
|
frame = int(seginfo["baseaddr"][0], 16)
|
||||||
|
word = int(seginfo["baseaddr"][1])
|
||||||
|
if frame1 <= frame <= frame2 and word1 <= word <= word2:
|
||||||
|
segs.append((frame, word, seg))
|
||||||
|
|
||||||
|
for _, _, seg in sorted(segs):
|
||||||
|
handle_segment(seg)
|
||||||
|
return
|
||||||
|
|
||||||
|
if segname in grid["tiles"]:
|
||||||
|
segname = grid["tiles"][segname]["segment"]
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print("seg %s" % segname)
|
print("seg %s" % segname)
|
||||||
|
|
@ -49,3 +83,6 @@ for arg in sys.argv[2:]:
|
||||||
for bitidx in bitdata[frame][wordidx]:
|
for bitidx in bitdata[frame][wordidx]:
|
||||||
print("bit %02d_%02d" % (frame - baseframe, 32*(wordidx - basewordidx) + bitidx))
|
print("bit %02d_%02d" % (frame - baseframe, 32*(wordidx - basewordidx) + bitidx))
|
||||||
|
|
||||||
|
for arg in sys.argv[2:]:
|
||||||
|
handle_segment(arg)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,15 @@ proc pblock_tiles {pblock} {
|
||||||
return [get_tiles "$clb_tiles $int_tiles"]
|
return [get_tiles "$clb_tiles $int_tiles"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc lintersect {lst1 lst2} {
|
||||||
|
set rlst {}
|
||||||
|
foreach el $lst1 {
|
||||||
|
set idx [lsearch $lst2 $el]
|
||||||
|
if {$idx >= 0} {lappend rlst $el}
|
||||||
|
}
|
||||||
|
return $rlst
|
||||||
|
}
|
||||||
|
|
||||||
proc putl {lst} {
|
proc putl {lst} {
|
||||||
foreach line $lst {puts $line}
|
foreach line $lst {puts $line}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue