3 from misoc
.interconnect
.csr
import *
6 class Bandwidth(Module
, AutoCSR
):
7 def __init__(self
, cmd
, data_width
, period_bits
=24):
9 self
._nreads
= CSRStatus(period_bits
)
10 self
._nwrites
= CSRStatus(period_bits
)
11 self
._data
_width
= CSRStatus(bits_for(data_width
), reset
=data_width
)
17 cmd_is_read
= Signal()
18 cmd_is_write
= Signal()
22 cmd_is_read
.eq(cmd
.is_read
),
23 cmd_is_write
.eq(cmd
.is_write
)
26 counter
= Signal(period_bits
)
28 nreads
= Signal(period_bits
)
29 nwrites
= Signal(period_bits
)
30 nreads_r
= Signal(period_bits
)
31 nwrites_r
= Signal(period_bits
)
33 Cat(counter
, period
).eq(counter
+ 1),
36 nwrites_r
.eq(nwrites
),
39 ).Elif(cmd_stb
& cmd_ack
,
40 If(cmd_is_read
, nreads
.eq(nreads
+ 1)),
41 If(cmd_is_write
, nwrites
.eq(nwrites
+ 1)),
44 self
._nreads
.status
.eq(nreads_r
),
45 self
._nwrites
.status
.eq(nwrites_r
)