#fpga #xilinx #bitstream #format #parser #byte #set

bin+lib gaffe-xilinx

Parsers and manipulation tools for Xilinx bitstream formats

1 unstable release

Uses old Rust 2015

0.1.0 Jun 8, 2018

#6 in #xilinx

Apache-2.0

95KB
2.5K SLoC

gaffe-xilinx

Rust library for parsing and manipulating Xilinx bitstream formats.

Build Status

xc7-tool Usage

xc7-tool is a multi-tool for manipulating 7-Series bitstreams. If you are mainly interested in looking at the contents of a bitstream, you'll likely find xc7-tool packets and xc7-tool config_mem_frames useful. Commands and their options are documented via --help.

Note that subcommands that parse a bitstream to a configuration will require a device description file. This is a YAML file containing a serialized DeviceDescription. None are currently included in this repo. One can be generated from a debug bitstream with xc7-tool device_description. The logic design inside the bitstream doesn't matter. The only requirements are that it be built with Vivado's BITSTREAM.GENERAL.DEBUGBITSTREAM property set to YES.

Library Usage

Cargo.toml

[dependencies]
gaffe-xilinx = "0.1"

Include the library

extern crate gaffe-xilinx;

Example of parsing a 7-Series bitstream into configuration memory frames

use gaffe_xilinx::from_bytes::FromBytes;
use ::gaffe-xilinx::xc7 as xc7;

let mut device_file = std::fs::File::open(device_file)?;
let device_description : ::xc7::DeviceDefinition = ::serde_yaml::from_reader(device_file)?;

let mut bitstream = std::io::BufReader::new(std::fs::File::open(bitstream)?);
let bitstream = ::xc7::Bitstream::from_bytes(&mut bitstream)?;

let configuration = ::xc7::Configuration::from_bitstream_for_device(&bitstream, &device_description)?;
println!("{:#?}", configuration)

Supported device families

Current development is focused on 7-series (Spartan7, Artix7, Kintex7). Virtex2 and later families all use a similar bitstream format and configuration protocol. If you are interested in looking at these other families, please join ##openfpga (yes, two #s) on Freenode IRC and let us know.

Dependencies

~7–17MB
~198K SLoC