grabber: minor ROI engine cleanup, export count_len, cap count width to 31

This commit is contained in:
Sebastien Bourdeauducq 2018-07-21 13:25:13 +08:00
parent 766d87f626
commit e3ba4b9516
1 changed files with 14 additions and 8 deletions

View File

@ -50,7 +50,7 @@ assert len(set(bitseq)) == 24
class Parser(Module, AutoCSR): class Parser(Module, AutoCSR):
"""Parses 28 bit encoded words and track pixel coordinates.""" """Parses 28 bit encoded words and track pixel coordinates."""
def __init__(self, width=12): def __init__(self, width):
self.cl = cl = Signal(28) self.cl = cl = Signal(28)
self.last_x = CSRStatus(width) self.last_x = CSRStatus(width)
@ -110,8 +110,14 @@ class Parser(Module, AutoCSR):
class ROI(Module): class ROI(Module):
"""ROI Engine. For each frame, accumulates pixels values within a """ROI Engine. For each frame, accumulates pixels values within a
rectangular region of interest, and reports the total.""" rectangular region of interest, and reports the total."""
def __init__(self, pix, shift=0):
cnt_len = len(pix.x) + len(pix.y) + 16 - shift @staticmethod
def count_len(width, shift):
# limit width to 31 to avoid problems with CPUs and RTIO inputs
return min(31, 2*width + 16 - shift)
def __init__(self, pix, shift):
count_len = ROI.count_len(len(pix.x), shift)
self.cfg = cfg = Record([ self.cfg = cfg = Record([
("x0", len(pix.x)), ("x0", len(pix.x)),
@ -121,8 +127,8 @@ class ROI(Module):
]) ])
self.out = out = Record([ self.out = out = Record([
("update", 1), ("update", 1),
# register output - can be used as CDC input # registered output - can be used as CDC input
("cnt", cnt_len), ("count", count_len),
]) ])
# # # # # #
@ -156,16 +162,16 @@ class ROI(Module):
] ]
# stage 2 - accumulate # stage 2 - accumulate
cnt = Signal(cnt_len) count = Signal(count_len)
self.sync.cl += [ self.sync.cl += [
If(stb & x_good & y_good, If(stb & x_good & y_good,
cnt.eq(cnt + gray), count.eq(count + gray),
), ),
out.update.eq(0), out.update.eq(0),
If(eop, If(eop,
cnt.eq(0), cnt.eq(0),
out.update.eq(1), out.update.eq(1),
out.cnt.eq(cnt) out.count.eq(count)
) )
] ]