iob minitest: sweep misc parameters

Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
John McMaster 2018-11-28 19:37:55 -08:00
parent 661615a40a
commit 3fa5df7cb1
11 changed files with 210 additions and 1 deletions

9
minitests/iob/DRIVE.tcl Normal file
View File

@ -0,0 +1,9 @@
source "$::env(SRC_DIR)/template.tcl"
# set vals "0 4 8 12 16 24"
# ERROR: [Common 17-69] Command failed: Illegal DRIVE_STRENGTH value '0' for standard 'LVCMOS33'.
# Legal values: 4, 8, 12, 16
set prop DRIVE
set port [get_ports do]
source "$::env(SRC_DIR)/sweep.tcl"

View File

@ -0,0 +1,6 @@
source "$::env(SRC_DIR)/template.tcl"
set prop IOSTANDARD
set port [get_ports do]
source "$::env(SRC_DIR)/sweep.tcl"

View File

@ -1,4 +1,9 @@
all: build/env build/roi_roi_io.diff
all: build/env build/roi_roi_io.diff \
build/PULLTYPE/run.ok \
build/SLEW/run.ok \
build/DRIVE/run.ok \
build/IOSTANDARD/run.ok \
clean:
rm -rf build
@ -10,4 +15,18 @@ build/env:
build/roi_roi_io.diff:
$(MAKE) -f diff.mk OUT_DIFF=build/roi_io.diff PRJL=roi_io_a PRJR=roi_io_b
build/PULLTYPE/run.ok:
PROJECT=PULLTYPE bash runme_tcl.sh
diff build/PULLTYPE/design_{PULLDOWN,KEEPER}.bits || true
diff build/PULLTYPE/design_{PULLDOWN,PULLUP}.bits || true
diff build/PULLTYPE/design_{PULLDOWN,NONE}.bits || true
build/SLEW/run.ok:
PROJECT=SLEW bash runme_tcl.sh
build/DRIVE/run.ok:
PROJECT=DRIVE bash runme_tcl.sh
build/IOSTANDARD/run.ok:
PROJECT=IOSTANDARD bash runme_tcl.sh

View File

@ -0,0 +1,15 @@
source "$::env(SRC_DIR)/template.tcl"
set port [get_ports di]
set_property PULLTYPE "" $port
write_checkpoint -force design_NONE.dcp
write_bitstream -force design_NONE.bit
set vals "KEEPER PULLUP PULLDOWN"
foreach {val} $vals {
set_property PULLTYPE $val $port
write_checkpoint -force design_$val.dcp
write_bitstream -force design_$val.bit
}

View File

@ -0,0 +1,39 @@
# PULLTYPE
PULLTYPE 28 29 30
NONE X
KEEPER X X
PULLDOWN
PULLUP X X
# DRIVE
DRIVE A00 A02 A08 A10 B09 B01
0 FIXME
4 X X X
8 X X X
12 X X X
16 X X X
24 FIXME
# IOSTANDARD
Effects bits, TBD exactly how
Sample output:
diff LVCMOS33.bits LVTTL.bits
< bit_00020026_006_00
> bit_00020026_006_08
diff LVCMOS33.bits PCI33_3.bits
< bit_00020026_006_02
< bit_00020026_006_18
< bit_00020026_006_22
> bit_00020026_006_10
> bit_00020026_006_16
> bit_00020026_006_20
> bit_00020027_006_11
> bit_00020027_006_15

8
minitests/iob/SLEW.tcl Normal file
View File

@ -0,0 +1,8 @@
source "$::env(SRC_DIR)/template.tcl"
# set vals "SLOW MEDIUM FAST"
# ERROR: [Common 17-69] Command failed: Slew type 'MEDIUM' is not supported by I/O standard 'LVCMOS33'
set prop SLEW
set port [get_ports do]
source "$::env(SRC_DIR)/sweep.tcl"

11
minitests/iob/diff_tcl.mk Normal file
View File

@ -0,0 +1,11 @@
all: $(OUT_DIFF)
$(OUT_DIFF): build/$(PRJL)/design.bits build/$(PRJR)/design.bits
diff build/$(PRJL)/design.bits build/$(PRJR)/design.bits >$(OUT_DIFF) || true
build/$(PRJL)/design.bits:
PROJECT=$(PRJL) bash runme_tcl.sh
build/$(PRJR)/design.bits:
PROJECT=$(PRJR) bash runme_tcl.sh

View File

@ -0,0 +1,21 @@
#!/bin/bash
set -ex
: "${PROJECT:?Need to set PROJECT non-empty}"
# Create build dir
export SRC_DIR=$PWD
BUILD_DIR=build/$PROJECT
mkdir -p $BUILD_DIR
cd $BUILD_DIR
export TOP_V=$SRC_DIR/tcl.v
vivado -mode batch -source $SRC_DIR/$PROJECT.tcl
for x in design*.bit; do
${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o ${x}s -z -y $x
done
test -z "$(fgrep CRITICAL vivado.log)"
touch run.ok

22
minitests/iob/sweep.tcl Normal file
View File

@ -0,0 +1,22 @@
# Sweep all values of $prop on given I/O $port
# Write out bitstream for all legal values
set vals [list_property_value $prop $port]
foreach {val} $vals {
puts $val
# Not all listable properties are settable
# Its easiest to try setting and see if it sticks
set_property -quiet $prop $val $port
set got [get_property $prop $port]
if {"$got" != "$val"} {
puts " Skipping: wanted $val, got $got"
continue
}
if {[catch {write_bitstream -force design_$val.bit} issue]} {
puts "WARNING failed to write: $issue"
continue
}
# Only write checkpoints for acceptable bitstreams
write_checkpoint -force design_$val.dcp
}

39
minitests/iob/tcl.v Normal file
View File

@ -0,0 +1,39 @@
module top(input clk, stb, di, output do);
localparam integer DIN_N = 256;
localparam integer DOUT_N = 256;
reg [DIN_N-1:0] din;
wire [DOUT_N-1:0] dout;
reg [DIN_N-1:0] din_shr;
reg [DOUT_N-1:0] dout_shr;
always @(posedge clk) begin
din_shr <= {din_shr, di};
dout_shr <= {dout_shr, din_shr[DIN_N-1]};
if (stb) begin
din <= din_shr;
dout_shr <= dout;
end
end
assign do = dout_shr[DOUT_N-1];
roi
roi (
.clk(clk),
.din(din),
.dout(dout)
);
endmodule
module roi(input clk, input [255:0] din, output [255:0] dout);
assign dout = din;
endmodule
/*
module top (input i, output o);
assign o = i;
endmodule
*/

View File

@ -0,0 +1,20 @@
# Create a simple design with a few IOs
create_project -force -part $::env(XRAY_PART) design design
read_verilog $::env(TOP_V)
synth_design -top top -flatten_hierarchy none
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports clk]
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports stb]
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_02) IOSTANDARD LVCMOS33" [get_ports di]
set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_03) IOSTANDARD LVCMOS33" [get_ports do]
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
place_design
route_design