This might be an interesting starting point
When a ColumnReader has delivered all elements to the stream, as far as the sink is concerned, the ColumnReader is done doing its job. Thus it might reset the ColumnReader before all bus transfers on the host-side of the bus have been handled by the ColumnReader. This can cause a deadlock on the host side bus as the resetted ColumnReader will not acknowledge any incoming transfers that might still be open from a large burst request.
Solution is probably to provide a "done" signal on the output of the ColumnReader, or to "un-fix" the burst length so we never burst over our last byte of interest.
contains port names which are the inverse of the conventions that AXI commonly uses
It might be worthwhile to refactor this