Currently is able to parse IDCODE and frames from a sequence of
ConfigurationPackets.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Currently just the pieces required to successfully identify and decode
a bitstream into configuration frames.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Need to manually translate row_half from human-readable form in YAML
(top/bottom) to true/false. Requesting a Node as a uint8_t returns the
first char in the YAML field rather than parsing the field as an
integer. Just used unsigned ints and let the constructor force them to
smaller types.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Type 0 shouldn't exist but bitstreams generated with
BITSTREAM.GENERAL.DEBUGBITSTREAM=YES seem to use them as padding.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
binary literals are a C++14 feature. Use hex literals instead to
keep C++11 compatibility.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Type 2 packets are used for when the amount of data required exceeds the
word count field in a Type 1 header. ConfigurationPacket mostly hides
this detail from the user but occasionally it is handy for debugging.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Both ConfigurationPacket and Configuration need to reference registers.
Use a common scoped enum to reduce change of errors. Leverage stream
operator to simplify outputing register names.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Class names were getting unwieldy. Use a namespace to group all the
7series classes and allow for shorter class names.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Reads the raw bitstream into configuration packets that represent
internal register writes.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Encapsulates configuration packets used in Xilinx 7-Series bitstream
format. The same class handles both Type 1 and Type 2 packets.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Functions for hiding all the masking and shifting required for accessing
bit ranges within an integer type.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Currently provides list of segbits files saved in the database.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
Acts as an iterator that yields a single record from the file. Uses a
memory-mapped file and absl::string_view to avoid copies within the
reader.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
mmap() will fail for a zero-length mapping. A valid object should still
be returned to signal that the file was opened to the caller but it
should have a nullptr for data and zero for size.
Signed-off-by: Rick Altherr <kc8apf@kc8apf.net>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>