From 661615a40a5784a9440181cb568fca534a91e718 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Wed, 28 Nov 2018 15:30:12 -0800 Subject: [PATCH] iob minitest Signed-off-by: John McMaster --- minitests/iob/.gitignore | 1 + minitests/iob/Makefile | 13 ++++++ minitests/iob/README.md | 0 minitests/iob/diff.mk | 11 +++++ minitests/iob/runme.sh | 18 ++++++++ minitests/iob/runme.tcl | 29 +++++++++++++ minitests/iob/top.v | 91 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 163 insertions(+) create mode 100644 minitests/iob/.gitignore create mode 100644 minitests/iob/Makefile create mode 100644 minitests/iob/README.md create mode 100644 minitests/iob/diff.mk create mode 100644 minitests/iob/runme.sh create mode 100644 minitests/iob/runme.tcl create mode 100644 minitests/iob/top.v diff --git a/minitests/iob/.gitignore b/minitests/iob/.gitignore new file mode 100644 index 00000000..378eac25 --- /dev/null +++ b/minitests/iob/.gitignore @@ -0,0 +1 @@ +build diff --git a/minitests/iob/Makefile b/minitests/iob/Makefile new file mode 100644 index 00000000..d074989b --- /dev/null +++ b/minitests/iob/Makefile @@ -0,0 +1,13 @@ +all: build/env build/roi_roi_io.diff + +clean: + rm -rf build + +# hard coded LOCs in .v +build/env: + test "$(XRAY_PART)" = "xc7a50tfgg484-1" + +build/roi_roi_io.diff: + $(MAKE) -f diff.mk OUT_DIFF=build/roi_io.diff PRJL=roi_io_a PRJR=roi_io_b + + diff --git a/minitests/iob/README.md b/minitests/iob/README.md new file mode 100644 index 00000000..e69de29b diff --git a/minitests/iob/diff.mk b/minitests/iob/diff.mk new file mode 100644 index 00000000..b2c2ff60 --- /dev/null +++ b/minitests/iob/diff.mk @@ -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.sh + +build/$(PRJR)/design.bits: + PROJECT=$(PRJR) bash runme.sh + diff --git a/minitests/iob/runme.sh b/minitests/iob/runme.sh new file mode 100644 index 00000000..9390d5ff --- /dev/null +++ b/minitests/iob/runme.sh @@ -0,0 +1,18 @@ +#!/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/top.v + +vivado -mode batch -source $SRC_DIR/runme.tcl +${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y design.bit +test -z "$(fgrep CRITICAL vivado.log)" + diff --git a/minitests/iob/runme.tcl b/minitests/iob/runme.tcl new file mode 100644 index 00000000..9674265d --- /dev/null +++ b/minitests/iob/runme.tcl @@ -0,0 +1,29 @@ +create_project -force -part $::env(XRAY_PART) design design +#read_verilog $::env(SRC_DIR)/$::env(PROJECT).v +read_verilog $::env(TOP_V) +synth_design -top top -flatten_hierarchy none -verilog_define ROI=$::env(PROJECT) + +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] + +create_pblock roi +set_property EXCLUDE_PLACEMENT 1 [get_pblocks roi] +add_cells_to_pblock [get_pblocks roi] [get_cells 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] + +set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF] + +place_design +route_design + +write_checkpoint -force design.dcp + +# set_property BITSTREAM.GENERAL.DEBUGBITSTREAM Yes [current_design] +write_bitstream -force design.bit + diff --git a/minitests/iob/top.v b/minitests/iob/top.v new file mode 100644 index 00000000..c4a37e21 --- /dev/null +++ b/minitests/iob/top.v @@ -0,0 +1,91 @@ +`ifndef ROI +ERROR: must set ROI +`endif + +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_io_a(input clk, input [255:0] din, output [255:0] dout); + assign dout[0] = din[0] & din[1]; + + IOBUF_INTERMDISABLE #( + .DRIVE(12), + .IBUF_LOW_PWR("TRUE"), + .IOSTANDARD("DEFAULT"), + .SLEW("SLOW"), + .USE_IBUFDISABLE("TRUE") + ) IOBUF_INTERMDISABLE_inst ( + .O(1'b0), + .IO(1'bz), + .I(dout[8]), + .IBUFDISABLE(1'b0), + .INTERMDISABLE(1'b0), + .T(1'b1)); + +endmodule + +module roi_io_b(input clk, input [255:0] din, output [255:0] dout); + assign dout[0] = din[0] & din[1]; + + wire onet; + + IOBUF_INTERMDISABLE #( + .DRIVE(12), + .IBUF_LOW_PWR("FALSE"), + .IOSTANDARD("DEFAULT"), + .SLEW("SLOW"), + .USE_IBUFDISABLE("FALSE") + ) IOBUF_INTERMDISABLE_inst ( + .O(onet), + .IO(1'bz), + .I(dout[8]), + .IBUFDISABLE(1'b0), + .INTERMDISABLE(1'b0), + .T(1'b1)); + + PULLUP PULLUP_inst ( + .O(onet) + ); + + IOBUF_INTERMDISABLE #( + .DRIVE(12), + .IBUF_LOW_PWR("FALSE"), + .IOSTANDARD("DEFAULT"), + .SLEW("SLOW"), + .USE_IBUFDISABLE("FALSE") + ) i2 ( + .O(), + .IO(1'bz), + .I(dout[8]), + .IBUFDISABLE(1'b0), + .INTERMDISABLE(1'b0), + .T(1'b1)); + +endmodule +