Creates an harness bitstream which maps peripherals into a region of interest which can be reconfigured.

The currently supported boards are;

  • Artix 7 boards;
  • Zynq boards;

The following configurations are supported;

  • SWBUT - Harness which maps a board’s switches, buttons and LEDs into the region of interest (plus clock).
  • PMOD - Harness which maps a board’s PMOD connectors into the region of interest (plus a clock).
  • UART - Harness which maps a board’s UART

“ARTY-A7-SWBUT” # 4 switches then 4 buttons A8 C11 C10 A10 D9 C9 B9 B8 # 4 LEDs then 4 RGB LEDs (green only) H5 J5 T9 T10 F6 J4 J2 H6

    # clock

“ARTY-A7-PMOD” # CLK on Pmod JA G13 B11 A11 D12 D13 B18 A18 K16 # DIN on Pmod JB E15 E16 D15 C15 J17 J18 K15 J15 # DOUT on Pmod JC U12 V12 V10 V11 U14 V14 T13 U13

“ARTY-A7-UART” # RST button and UART_RX C2 A9 # LD7 and UART_TX T10 D10 # 100 MHz CLK onboard E3

“BASYS3-SWBUT” # Slide switch pins V17 V16 W16 W17 W15 V15 W14 W13 V2 T3 T2 R3 W2 U1 T1 R2 # LEDs pins U16 E19 U19 V19 W18 U15 U14 V14 V13 V3 W3 U3 P3 N3 P1 L1

    # UART
    B18 # ins
    A18 # outs

    # 100 MHz CLK onboard

“ZYBOZ7-SWBUT” # J15 - UART_RX - JE3 # G15 - SW0 # K18 - BTN0 # K19 - BTN1 J15 G15 K18 K19

    # H15 - UART_TX - JE4
    # E17 - ETH PHY reset (active low, keep high for 125 MHz clock)
    # M14 - LD0
    # G14 - LD2
    # M15 - LD1
    # D18 - LD3

    # 125 MHz CLK onboard


source settings/
cd minitests/roi_harness
make clean
make copy

How it works

Basic idea:

  • LOC LUTs in the ROI to terminate input and output routing
  • Let Vivado LOC the rest of the logic
  • Manually route signals in and out of the ROI enough to avoid routing loops into the ROI
  • Let Vivado finish the rest of the routes

There is no logic outside of the ROI in order to keep IOB to ROI delays short Its expected the end user will rip out everything inside the ROI

To target Arty A7 you should source the artix DB environment script then source

To build the baseline harness:


To build a sample Vivado design using the harness:

XRAY_ROIV=roi_inv.v XRAY_FIXED_XDC=out_xc7a35tcpg236-1_BASYS3-SWBUT_roi_basev/fixed_noclk.xdc ./

Note: this was intended for verification only and not as an end user flow (they should use SymbiFlow)

To use the harness for the basys3 demo, do something like:

python3 out_xc7a35tcpg236-1_BASYS3-SWBUT_roi_basev 3 2

This example connects switch 3 to LED 2