# Project U-Ray

Project U-Ray is an attempt at documenting the bitstream format for the
[Xilinx Ultrascale and Ultrascale+ parts](https://www.xilinx.com/products/technology/ultrascale.html)
including all parts from the following lines;
 * Kintex Ultrascale
 * Virtex Ultrascale
 * Zynq UltraScale MPSoC
 * Kintex UltraScale+
 * Virtex UltraScale+
 * Zynq UltraScale+ MPSoC

It takes a lot of the learning from
[Project X-Ray](https://github.com/SymbiFlow/prjxray) and
[Project Trellis](https://github.com/SymbiFlow/prjtrellis).

# Target Parts

## Ultrascale

### Kintex UltraScale

#### Parts

 * TBD

#### Boards

 * TBD

### Virtex UltraScale

#### Parts

 * TBD

#### Boards

 * TBD

## Ultrascale+

### Kintex UltraScale+

#### Parts

 * TBD - Targetting XCKU11P?

#### Boards

 * TBD

### Virtex UltraScale+

#### Parts

 * TBD - Targetting XCVU13P?

#### Boards

 * TBD

### Zynq UltraScale+

#### Parts

 * Zynq Ultrascale+ MPSoC - **ZU3EG**

#### Boards

| Board | Maker | Price | Part |
| ----- | ----- | ----- | ---- |
| [Ultra96-V2 Zynq UltraScale+ ZU3EG Development Board (ULTRA96-V2-G)](https://www.avnet.com/shop/us/products/avnet-engineering-services/aes-ultra96-v2-g-3074457345638646173/) | ??? | Xilinx Zynq UltraScale+ MPSoC ZU3EG | $USD249 |
| [Genesys ZU: Zynq Ultrascale+ MPSoC Development Board](https://store.digilentinc.com/genesys-zu-zynq-ultrascale-mpsoc-development-board/) | Digilent | Xilinx Zynq UltraScale+ MPSoC ZU3EG | $USD1,149 |


## WebPack Parts

We have a goal of initially targeting parts supported by WebPack so that anyone
can contribute.

WebPack supports the following parts;
 * Kintex UltraScale FPGA  - XCKU025, XCKU035
 * Kintex UltraScale+ FPGA - XCKU3P,  XCKU5P

Zynq UltraScale+ MPSoC -- UltraScale+ MPSoC
 * XCZU2EG, XCZU2CG, XCZU3EG, XCZU3CG, XCZU4EG, XCZU4CG, XCZU4EV, XCZU5EG,
   XCZU5CG, XCZU5EV, XCZU7EV, XCZU7EG, and XCZU7CG


