From e6654a2dffe5594aca18396f7e25e5896037337a Mon Sep 17 00:00:00 2001 From: morgan Date: Wed, 15 Jan 2025 15:14:49 +0800 Subject: [PATCH] frameline GW: update docs --- src/gateware/cxp_frame_pipeline.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/gateware/cxp_frame_pipeline.py b/src/gateware/cxp_frame_pipeline.py index 943da60..0c52ef5 100644 --- a/src/gateware/cxp_frame_pipeline.py +++ b/src/gateware/cxp_frame_pipeline.py @@ -432,13 +432,17 @@ class Pixel_Gearbox(Module): # sink_dw * i > size * j > source_dw * k # where i,k are postive integers and source_dw * k - sink_dw * (i-1) > 0 # - # For example size == 10 - # 32 * 2 > 10 * (5) > 40 * 1 - # 32 * 2 > 10 * (6) > 40 * 1 - # 32 * 3 > 10 * (9) > 40 * 2 stb_aligned = Signal() match size: case 10: + # For example size == 10 + # 32 * 2 > 10 * (5) > 40 * 1 + # 32 * 2 > 10 * (6) > 40 * 1 + # 32 * 3 > 10 * (9) > 40 * 2 + # ... + # + # the packing pattern for size == 10 repeat every 16 pixels + # the remaining special case can be taken care off using modulo operation stb_cases = { 5: stb_aligned.eq(1), 6: stb_aligned.eq(1), @@ -598,8 +602,8 @@ class ROI(Module): ROI Engine. For each frame, accumulates pixels values within a rectangular region of interest, and reports the total. """ - def __init__(self, pixel_4x, count_len): - assert count_len <= 31 + def __init__(self, pixel_4x, count_width): + assert count_width <= 32 assert len(pixel_4x) == 4 self.cfg = Record([ @@ -611,7 +615,7 @@ class ROI(Module): self.out = Record([ ("update", 1), - ("count", count_len), + ("count", count_width), ]) # # # @@ -624,7 +628,7 @@ class ROI(Module): ("y_good", 1), ("gray", len(pixel_4x[0].gray)), ("stb", 1), - ("count", count_len), + ("count", count_width), ])) @@ -737,7 +741,7 @@ class Frame_Deserializer(Module): class ROI_Pipeline(Module): # largest x/y pixel size supported by frame header are 24 bits - def __init__(self, res_width=24): + def __init__(self, res_width, count_width): # NOTE: csr need to stay outside since this module need to be cdr in the CXP_FRAME_Pipeline module # NOTE: TapGeo other than 1X-1Y are not supported @@ -748,7 +752,7 @@ class ROI_Pipeline(Module): self.submodules.header_decoder = header_decoder = Frame_Header_Decoder() self.submodules.deserializer = deserializer = Frame_Deserializer(res_width) - self.submodules.roi = ROI(deserializer.pixel4x, 31) + self.submodules.roi = ROI(deserializer.pixel4x, count_width) self.comb += [ deserializer.new_frame.eq(header_decoder.new_frame),