Merge sequential reads for the UART litex_server backend
authorChristian Klarhorst <cklarhor@techfak.uni-bielefeld.de>
Sun, 26 Jul 2020 11:19:32 +0000 (13:19 +0200)
committerChristian Klarhorst <cklarhor@techfak.uni-bielefeld.de>
Sun, 26 Jul 2020 11:19:32 +0000 (13:19 +0200)
commit2034c563b0db9ab2b772b68463dd22043251c08b
treed5bf2d20572012847861aa75b379bd1477fc11a0
parent1fdffdfd6b5d2ef6aa1330b9db1f39b2693f7045
Merge sequential reads for the UART litex_server backend

The UART backend writes [read identifier, num_reads, addr] for
every read request.
Etherbone packets are able to include multiple read requests.
Therefore, it is beneficial to merge sequential read requests to reduce writes
(and possible latency overhead).

Benchmark:
A typical litescope fetch script with the following
signals [ddrphy.dfi,cpu.ibus.cyc,cpu.ibus.stb] results in 1 read for the
data_valid register and 24 sequential reads for the scope data per timestamp.
Fetching data for a capture length of 512 over a 921600 baud UART (arty board)
took:
205s (current master branch)
 18s (with this merge function)

The proposed merger only merges read requests from one etherbone packet
at a time and doesn't change the read order.
litex/tools/litex_server.py