Files
-
hardware / rev0 / debug_control_connections.sch
-
hardware / rev0 / fpga_configuration.sch
-
hardware / rev0 / host_side.sch
-
hardware / rev0 / luna_rev0.kicad_pcb
-
hardware / rev0 / luna_rev0.sch
-
hardware / rev0 / power_supplies.sch
-
hardware / rev0 / ram_section.sch
-
hardware / rev0 / right_side_indicators.sch
-
hardware / rev0 / sideband_side.sch
-
hardware / rev0 / target_side.sch
Last update 4 years 3 months
Fileslunaapollo | |
---|---|
.. | |
protocol | |
support | |
__init__.py | |
ecp5.py | |
flash.py | |
ila.py | |
jtag.py | |
onboard_jtag.py | |
spi.py |
ila.py# # This file is part of LUNA. # """ Apollo-based ILA transports. """ from nmigen import Cat from luna.apollo.support.bits import bits from luna.gateware.debug.ila import ILAFrontend class ApolloILAFrontend(ILAFrontend): """ Apollo-based transport for ILA samples. """ def __init__(self, debugger, *, ila, use_inverted_cs=False): """ Parameters: debugger -- The apollo debugger connection to use for transport. ila -- The ILA object to work with. use_inverted_cs -- Use a simple CS multiplexing scheme, where the ILA samples are read out by pulsing SCK while CS is not asserted. """ self._debugger = debugger self._use_inverted_cs = use_inverted_cs super().__init__(ila) def _split_samples(self, all_samples): """ Returns an iterator that iterates over each sample in the raw binary of samples. """ sample_width_bytes = self.ila.bytes_per_sample # Iterate over each sample, and yield its value as a bits object. for i in range(0, len(all_samples), sample_width_bytes): raw_sample = all_samples[i:i + sample_width_bytes] sample_length = len(Cat(self.ila.signals)) yield bits.from_bytes(raw_sample, length=sample_length, byteorder='big') def _read_samples(self): """ Reads a set of ILA samples, and returns them. """ sample_width_bytes = self.ila.bytes_per_sample total_to_read = self.ila.sample_depth * sample_width_bytes # Fetch all of our samples from the given device. all_samples = \ self._debugger.spi.transfer(b"\0" * total_to_read, invert_cs=self._use_inverted_cs) return list(self._split_samples(all_samples))