#[macro_use]
extern crate bittwiddler;
extern crate jedec;
#[macro_use]
extern crate serde_derive;
pub const INPUTS_PER_ANDTERM: usize = 40;
pub const ANDTERMS_PER_FB: usize = 56;
pub const MCS_PER_FB: usize = 16;
pub const NUM_BUFG_CLK: usize = 3;
pub const NUM_BUFG_GTS: usize = 4;
pub const NUM_BUFG_GSR: usize = 1;
mod bitstream;
pub use crate::bitstream::{XC2Bitstream, XC2BitstreamBits};
mod crbit;
pub use crate::crbit::{FuseArray};
mod errors;
pub use crate::errors::{XC2BitError};
mod fb;
pub use crate::fb::{XC2BitstreamFB, CTC, CTR, CTS, CTE, get_pta, get_ptb, get_ptc};
mod fusemap_logical;
mod fusemap_physical;
mod globalbits;
pub use crate::globalbits::{XC2GlobalNets, XC2ClockDivRatio, XC2ClockDiv};
mod iob;
pub use crate::iob::{XC2MCSmallIOB, XC2IOBZIAMode, XC2IOBOBufMode, XC2ExtraIBuf, XC2IOBIbufMode, XC2MCLargeIOB,
iob_num_to_fb_mc_num, fb_mc_num_to_iob_num};
mod mc;
pub use crate::mc::{XC2Macrocell, XC2MCRegClkSrc, XC2MCRegResetSrc, XC2MCRegSetSrc, XC2MCRegMode, XC2MCFeedbackMode,
XC2MCXorMode};
mod partdb;
pub use crate::partdb::{XC2Device, XC2Speed, XC2Package, XC2DeviceSpeedPackage};
mod pla;
pub use crate::pla::{XC2PLAAndTerm, XC2PLAOrTerm};
mod structure;
pub use crate::structure::{get_gck, get_gts, get_gsr, get_cdrst, get_dge, get_device_structure};
mod zia;
pub use crate::zia::{XC2ZIAInput, zia_table_get_row, ZIA_MAP_32, ZIA_MAP_64, ZIA_MAP_128, ZIA_MAP_256,
ZIA_MAP_384, ZIA_MAP_512};
mod util;
#[cfg(test)]
mod tests {
use super::*;
use std::fs::File;
use std::io::Read;
use jedec::*;
fn run_one_reftest(jed_filename: &'static str) {
let jed_path = std::path::Path::new(jed_filename);
let mut txt_path = jed_path.to_path_buf();
txt_path.set_extension("txt");
let mut jed_data = Vec::new();
let mut txt_data = Vec::new();
File::open(&jed_path).expect("failed to open jed file")
.read_to_end(&mut jed_data).expect("failed to read jed file");
File::open(&txt_path).expect("failed to open txt file")
.read_to_end(&mut txt_data).expect("failed to read txt file");
let jed = JEDECFile::from_bytes(&jed_data).expect("failed to read jed");
let parsed_bitstream_data = XC2Bitstream::from_jed(&jed).expect("failed to process jed");
let mut crbit = Vec::new();
let write_fuse_array = parsed_bitstream_data.to_crbit();
write_fuse_array.write_to_writer(&mut crbit).expect("failed to write crbit");
let read_fuse_array = FuseArray::from_file_contents(&crbit).expect("failed to read crbit");
let parsed_bitstream_data = XC2Bitstream::from_crbit(&read_fuse_array).expect("failed to process crbit");
let mut new_jed = Vec::new();
parsed_bitstream_data.to_jed(&mut new_jed).expect("failed to write jed");
assert_eq!(jed_data, new_jed);
let mut human_readable_data = Vec::new();
parsed_bitstream_data.dump_human_readable(&mut human_readable_data)
.expect("failed to get human readable");
assert_eq!(txt_data, human_readable_data);
}
include!(concat!(env!("OUT_DIR"), "/reftests.rs"));
}