Skip to content

Commit 02d2aaa

Browse files
committedJun 24, 2017
xc2bit: Miscellaneous refactoring
1 parent d91cc0e commit 02d2aaa

File tree

4 files changed

+47
-82
lines changed

4 files changed

+47
-82
lines changed
 

Diff for: ‎src/xc2bit/src/bitstream.rs

+20-20
Original file line numberDiff line numberDiff line change
@@ -1327,7 +1327,7 @@ impl XC2BitstreamBits {
13271327
}
13281328

13291329
/// Common logic for reading bitstreams on "small" devices
1330-
pub fn read_bitstream_logical_common_small(fuses: &[bool], device: XC2Device,
1330+
fn read_bitstream_logical_common_small(fuses: &[bool], device: XC2Device,
13311331
fb: &mut [XC2BitstreamFB], iobs: &mut [XC2MCSmallIOB]) -> Result<(), XC2BitError> {
13321332

13331333
for i in 0..fb.len() {
@@ -1352,7 +1352,7 @@ pub fn read_bitstream_logical_common_small(fuses: &[bool], device: XC2Device,
13521352
}
13531353

13541354
/// Common logic for reading bitstreams on "large" devices
1355-
pub fn read_bitstream_logical_common_large(fuses: &[bool], device: XC2Device,
1355+
fn read_bitstream_logical_common_large(fuses: &[bool], device: XC2Device,
13561356
fb: &mut [XC2BitstreamFB], iobs: &mut [XC2MCLargeIOB]) -> Result<(), XC2BitError> {
13571357

13581358
for i in 0..fb.len() {
@@ -1382,7 +1382,7 @@ pub fn read_bitstream_logical_common_large(fuses: &[bool], device: XC2Device,
13821382
Ok(())
13831383
}
13841384
/// Internal function for parsing an XC2C32 bitstream
1385-
pub fn read_32_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1385+
fn read_32_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
13861386
let mut fb = [XC2BitstreamFB::default(); 2];
13871387
let mut iobs = [XC2MCSmallIOB::default(); 32];
13881388

@@ -1403,7 +1403,7 @@ pub fn read_32_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2
14031403
}
14041404

14051405
/// Internal function for parsing an XC2C32A bitstream
1406-
pub fn read_32a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1406+
fn read_32a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
14071407
let mut fb = [XC2BitstreamFB::default(); 2];
14081408
let mut iobs = [XC2MCSmallIOB::default(); 32];
14091409

@@ -1432,7 +1432,7 @@ pub fn read_32a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
14321432
}
14331433

14341434
/// Internal function for parsing an XC2C64 bitstream
1435-
pub fn read_64_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1435+
fn read_64_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
14361436
let mut fb = [XC2BitstreamFB::default(); 4];
14371437
let mut iobs = [XC2MCSmallIOB::default(); 64];
14381438

@@ -1450,7 +1450,7 @@ pub fn read_64_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2
14501450
}
14511451

14521452
/// Internal function for parsing an XC2C64A bitstream
1453-
pub fn read_64a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1453+
fn read_64a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
14541454
let mut fb = [XC2BitstreamFB::default(); 4];
14551455
let mut iobs = [XC2MCSmallIOB::default(); 64];
14561456

@@ -1476,7 +1476,7 @@ pub fn read_64a_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
14761476
}
14771477

14781478
/// Internal function for parsing an XC2C128 bitstream
1479-
pub fn read_128_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1479+
fn read_128_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
14801480
let mut fb = [XC2BitstreamFB::default(); 8];
14811481
let mut iobs = [XC2MCLargeIOB::default(); 100];
14821482

@@ -1503,7 +1503,7 @@ pub fn read_128_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
15031503
}
15041504

15051505
/// Internal function for parsing an XC2C256 bitstream
1506-
pub fn read_256_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1506+
fn read_256_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
15071507
let mut fb = [XC2BitstreamFB::default(); 16];
15081508
let mut iobs = [XC2MCLargeIOB::default(); 184];
15091509

@@ -1530,7 +1530,7 @@ pub fn read_256_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
15301530
}
15311531

15321532
/// Internal function for parsing an XC2C384 bitstream
1533-
pub fn read_384_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1533+
fn read_384_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
15341534
let mut fb = [XC2BitstreamFB::default(); 24];
15351535
let mut iobs = [XC2MCLargeIOB::default(); 240];
15361536

@@ -1561,7 +1561,7 @@ pub fn read_384_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
15611561
}
15621562

15631563
/// Internal function for parsing an XC2C512 bitstream
1564-
pub fn read_512_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
1564+
fn read_512_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC2BitError> {
15651565
let mut fb = [XC2BitstreamFB::default(); 32];
15661566
let mut iobs = [XC2MCLargeIOB::default(); 270];
15671567

@@ -1592,7 +1592,7 @@ pub fn read_512_bitstream_logical(fuses: &[bool]) -> Result<XC2BitstreamBits, XC
15921592
}
15931593

15941594
/// Common logic for reading bitstreams on "small" devices
1595-
pub fn read_bitstream_physical_common_small(fuse_array: &FuseArray, device: XC2Device,
1595+
fn read_bitstream_physical_common_small(fuse_array: &FuseArray, device: XC2Device,
15961596
fb: &mut [XC2BitstreamFB], iobs: &mut [XC2MCSmallIOB]) -> Result<(), XC2BitError> {
15971597

15981598
for i in 0..fb.len() {
@@ -1607,7 +1607,7 @@ pub fn read_bitstream_physical_common_small(fuse_array: &FuseArray, device: XC2D
16071607
}
16081608

16091609
/// Common logic for reading bitstreams on "large" devices
1610-
pub fn read_bitstream_physical_common_large(fuse_array: &FuseArray, device: XC2Device,
1610+
fn read_bitstream_physical_common_large(fuse_array: &FuseArray, device: XC2Device,
16111611
fb: &mut [XC2BitstreamFB], iobs: &mut [XC2MCLargeIOB]) -> Result<(), XC2BitError> {
16121612

16131613
for i in 0..fb.len() {
@@ -1622,7 +1622,7 @@ pub fn read_bitstream_physical_common_large(fuse_array: &FuseArray, device: XC2D
16221622
}
16231623

16241624
/// Internal function for parsing an XC2C32 bitstream
1625-
pub fn read_32_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1625+
fn read_32_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
16261626
let mut fb = [XC2BitstreamFB::default(); 2];
16271627
let mut iobs = [XC2MCSmallIOB::default(); 32];
16281628

@@ -1643,7 +1643,7 @@ pub fn read_32_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstream
16431643
}
16441644

16451645
/// Internal function for parsing an XC2C32A bitstream
1646-
pub fn read_32a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1646+
fn read_32a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
16471647
let mut fb = [XC2BitstreamFB::default(); 2];
16481648
let mut iobs = [XC2MCSmallIOB::default(); 32];
16491649

@@ -1672,7 +1672,7 @@ pub fn read_32a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstrea
16721672
}
16731673

16741674
/// Internal function for parsing an XC2C64 bitstream
1675-
pub fn read_64_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1675+
fn read_64_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
16761676
let mut fb = [XC2BitstreamFB::default(); 4];
16771677
let mut iobs = [XC2MCSmallIOB::default(); 64];
16781678

@@ -1690,7 +1690,7 @@ pub fn read_64_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstream
16901690
}
16911691

16921692
/// Internal function for parsing an XC2C64A bitstream
1693-
pub fn read_64a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1693+
fn read_64a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
16941694
let mut fb = [XC2BitstreamFB::default(); 4];
16951695
let mut iobs = [XC2MCSmallIOB::default(); 64];
16961696

@@ -1716,7 +1716,7 @@ pub fn read_64a_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstrea
17161716
}
17171717

17181718
/// Internal function for parsing an XC2C128 bitstream
1719-
pub fn read_128_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1719+
fn read_128_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
17201720
let mut fb = [XC2BitstreamFB::default(); 8];
17211721
let mut iobs = [XC2MCLargeIOB::default(); 100];
17221722

@@ -1743,7 +1743,7 @@ pub fn read_128_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstrea
17431743
}
17441744

17451745
/// Internal function for parsing an XC2C256 bitstream
1746-
pub fn read_256_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1746+
fn read_256_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
17471747
let mut fb = [XC2BitstreamFB::default(); 16];
17481748
let mut iobs = [XC2MCLargeIOB::default(); 184];
17491749

@@ -1770,7 +1770,7 @@ pub fn read_256_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstrea
17701770
}
17711771

17721772
/// Internal function for parsing an XC2C384 bitstream
1773-
pub fn read_384_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1773+
fn read_384_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
17741774
let mut fb = [XC2BitstreamFB::default(); 24];
17751775
let mut iobs = [XC2MCLargeIOB::default(); 240];
17761776

@@ -1801,7 +1801,7 @@ pub fn read_384_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2Bitstrea
18011801
}
18021802

18031803
/// Internal function for parsing an XC2C512 bitstream
1804-
pub fn read_512_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
1804+
fn read_512_bitstream_physical(fuse_array: &FuseArray) -> Result<XC2BitstreamBits, XC2BitError> {
18051805
let mut fb = [XC2BitstreamFB::default(); 32];
18061806
let mut iobs = [XC2MCLargeIOB::default(); 270];
18071807

Diff for: ‎src/xc2bit/src/errors.rs

+18
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,30 @@ use std::fmt;
3131
use std::num;
3232
use std::str;
3333

34+
/// Errors that can occur when parsing a .jed file
3435
#[derive(Debug, PartialEq, Eq)]
3536
pub enum JedParserError {
37+
/// No STX byte found
3638
MissingSTX,
39+
/// No ETX byte found
3740
MissingETX,
41+
/// An invalid UTF-8 sequence occurred
3842
InvalidUtf8(str::Utf8Error),
43+
/// A field contains a character not appropriate for that field (e.g. non-hex digit in a hex field)
3944
InvalidCharacter,
45+
/// An unexpected end of file was encountered in the file checksum
4046
UnexpectedEnd,
47+
/// The file checksum was nonzero and incorrect
4148
BadFileChecksum,
49+
/// The fuse checksum (`C` command) was incorrect
4250
BadFuseChecksum,
51+
/// A `L` field index was out of range
4352
InvalidFuseIndex,
53+
/// There was no `QF` field
4454
MissingQF,
55+
/// There was no `F` field, but not all fuses had a value specified
4556
MissingF,
57+
/// There was a field that this program does not recognize
4658
UnrecognizedField,
4759
}
4860

@@ -102,12 +114,18 @@ impl From<num::ParseIntError> for JedParserError {
102114
}
103115
}
104116

117+
/// Errors that can occur when parsing a bitstream
105118
#[derive(Debug, PartialEq, Eq)]
106119
pub enum XC2BitError {
120+
/// The .jed file could not be parsed
107121
JedParseError(JedParserError),
122+
/// The device name is invalid
108123
BadDeviceName(String),
124+
/// The number of fuses was incorrect for the device
109125
WrongFuseCount,
126+
/// An unknown value was used in the `Oe` field
110127
UnsupportedOeConfiguration((bool, bool, bool, bool)),
128+
/// An unknown value was used in the ZIA selection bits
111129
UnsupportedZIAConfiguration(Vec<bool>),
112130
}
113131

Diff for: ‎src/xc2bit/src/fb.rs

+9-8
Original file line numberDiff line numberDiff line change
@@ -625,13 +625,13 @@ impl XC2BitstreamFB {
625625
_ => true,
626626
};
627627

628-
let zia_row_read_function = match device {
629-
XC2Device::XC2C32 | XC2Device::XC2C32A => XC2ZIARowPiece::read_32_zia_fb_row_logical,
630-
XC2Device::XC2C64 | XC2Device::XC2C64A => XC2ZIARowPiece::read_64_zia_fb_row_logical,
631-
XC2Device::XC2C128 => XC2ZIARowPiece::read_128_zia_fb_row_logical,
632-
XC2Device::XC2C256 => XC2ZIARowPiece::read_256_zia_fb_row_logical,
633-
XC2Device::XC2C384 => XC2ZIARowPiece::read_384_zia_fb_row_logical,
634-
XC2Device::XC2C512 => XC2ZIARowPiece::read_512_zia_fb_row_logical,
628+
let zia_row_decode_function = match device {
629+
XC2Device::XC2C32 | XC2Device::XC2C32A => XC2ZIARowPiece::decode_32_zia_choice,
630+
XC2Device::XC2C64 | XC2Device::XC2C64A => XC2ZIARowPiece::decode_64_zia_choice,
631+
XC2Device::XC2C128 => XC2ZIARowPiece::decode_128_zia_choice,
632+
XC2Device::XC2C256 => XC2ZIARowPiece::decode_256_zia_choice,
633+
XC2Device::XC2C384 => XC2ZIARowPiece::decode_384_zia_choice,
634+
XC2Device::XC2C512 => XC2ZIARowPiece::decode_512_zia_choice,
635635
};
636636

637637
let mut and_terms = [XC2PLAAndTerm::default(); ANDTERMS_PER_FB];
@@ -649,7 +649,8 @@ impl XC2BitstreamFB {
649649
let mut zia_bits = [XC2ZIARowPiece::default(); INPUTS_PER_ANDTERM];
650650
let zia_block_idx = fuse_base;
651651
for i in 0..zia_bits.len() {
652-
let result = zia_row_read_function(fuses, zia_block_idx, i)?;
652+
let zia_row_fuses = &fuses[zia_block_idx + i * zia_row_width..zia_block_idx + (i + 1) * zia_row_width];
653+
let result = zia_row_decode_function(i, zia_row_fuses)?;
653654
zia_bits[i] = result;
654655
}
655656

Diff for: ‎src/xc2bit/src/zia.rs

-54
Original file line numberDiff line numberDiff line change
@@ -9158,15 +9158,6 @@ const T: bool = true;
91589158
const F: bool = false;
91599159

91609160
impl XC2ZIARowPiece {
9161-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9162-
pub fn read_32_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9163-
-> Result<Self, XC2BitError> {
9164-
9165-
let zia_row_fuses = &fuses[block_idx + row_idx * 8..block_idx + (row_idx + 1) * 8];
9166-
9167-
XC2ZIARowPiece::decode_32_zia_choice(row_idx, zia_row_fuses)
9168-
}
9169-
91709161
/// Internal function that takes a ZIA row and decodes the bit encoding for it
91719162
pub fn decode_32_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
91729163
// This is an ugly workaround for the lack of stable slice patterns
@@ -9227,15 +9218,6 @@ impl XC2ZIARowPiece {
92279218
}
92289219
}
92299220

9230-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9231-
pub fn read_64_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9232-
-> Result<Self, XC2BitError> {
9233-
9234-
let zia_row_fuses = &fuses[block_idx + row_idx * 16..block_idx + (row_idx + 1) * 16];
9235-
9236-
XC2ZIARowPiece::decode_64_zia_choice(row_idx, zia_row_fuses)
9237-
}
9238-
92399221
/// Internal function that takes a ZIA row and decodes the bit encoding for it
92409222
pub fn decode_64_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
92419223
// This is an ugly workaround for the lack of stable slice patterns
@@ -9319,15 +9301,6 @@ impl XC2ZIARowPiece {
93199301
}
93209302
}
93219303

9322-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9323-
pub fn read_128_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9324-
-> Result<Self, XC2BitError> {
9325-
9326-
let zia_row_fuses = &fuses[block_idx + row_idx * 28..block_idx + (row_idx + 1) * 28];
9327-
9328-
XC2ZIARowPiece::decode_128_zia_choice(row_idx, zia_row_fuses)
9329-
}
9330-
93319304
/// Internal function that takes a ZIA row and decodes the bit encoding for it
93329305
pub fn decode_128_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
93339306
// This is an ugly workaround for the lack of stable slice patterns
@@ -9443,15 +9416,6 @@ impl XC2ZIARowPiece {
94439416
}
94449417
}
94459418

9446-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9447-
pub fn read_256_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9448-
-> Result<Self, XC2BitError> {
9449-
9450-
let zia_row_fuses = &fuses[block_idx + row_idx * 48..block_idx + (row_idx + 1) * 48];
9451-
9452-
XC2ZIARowPiece::decode_256_zia_choice(row_idx, zia_row_fuses)
9453-
}
9454-
94559419
/// Internal function that takes a ZIA row and decodes the bit encoding for it
94569420
pub fn decode_256_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
94579421
// This is an ugly workaround for the lack of stable slice patterns
@@ -9623,15 +9587,6 @@ impl XC2ZIARowPiece {
96239587
}
96249588
}
96259589

9626-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9627-
pub fn read_384_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9628-
-> Result<Self, XC2BitError> {
9629-
9630-
let zia_row_fuses = &fuses[block_idx + row_idx * 74..block_idx + (row_idx + 1) * 74];
9631-
9632-
XC2ZIARowPiece::decode_384_zia_choice(row_idx, zia_row_fuses)
9633-
}
9634-
96359590
/// Internal function that takes a ZIA row and decodes the bit encoding for it
96369591
pub fn decode_384_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
96379592
// This is an ugly workaround for the lack of stable slice patterns
@@ -9873,15 +9828,6 @@ impl XC2ZIARowPiece {
98739828
}
98749829
}
98759830

9876-
/// Internal function that reads a piece of the ZIA corresponding to one FB and one row
9877-
pub fn read_512_zia_fb_row_logical(fuses: &[bool], block_idx: usize, row_idx: usize)
9878-
-> Result<Self, XC2BitError> {
9879-
9880-
let zia_row_fuses = &fuses[block_idx + row_idx * 88..block_idx + (row_idx + 1) * 88];
9881-
9882-
XC2ZIARowPiece::decode_512_zia_choice(row_idx, zia_row_fuses)
9883-
}
9884-
98859831
/// Internal function that takes a ZIA row and decodes the bit encoding for it
98869832
pub fn decode_512_zia_choice(row: usize, row_bits: &[bool]) -> Result<Self, XC2BitError> {
98879833
// This is an ugly workaround for the lack of stable slice patterns

0 commit comments

Comments
 (0)
Please sign in to comment.