The jpegenc is constructed of subblocks that perform various processing in the JPEG encoder. Currently the interfaces between the subblocks is inconsistent. The subblocks need to be modified to use standard interfaces. An early design decision was that a ready-valid flow was used to control the data flow between.
The blocks should be implemented around the following interfaces (located in jpegenc/interfaces.py:
class DataStream(object):
def __init__(self):
self.data = Signal(intbv(0)[data_width:0])
self.ready = Signal(False)
self.valid = Signal(False)
class RGBStream(DataStream):
pass
class YCbCrStream(DataStream):
pass
The following shows how and where the interfaces are used.

In addition each subblock should have an option MemoryMapped and ControlStatus interface. The control status object defines the config/control/status attributes available for the subblock and the memory-mapped interfaces allows dynamic access to the control-status attributes.
Future enhancement will allow the number of pixels / data words transferred between subblocks configurable.
The jpegenc is constructed of subblocks that perform various processing in the JPEG encoder. Currently the interfaces between the subblocks is inconsistent. The subblocks need to be modified to use standard interfaces. An early design decision was that a ready-valid flow was used to control the data flow between.
The blocks should be implemented around the following interfaces (located in
jpegenc/interfaces.py:The following shows how and where the interfaces are used.
In addition each subblock should have an option
MemoryMappedandControlStatusinterface. The control status object defines the config/control/status attributes available for the subblock and the memory-mapped interfaces allows dynamic access to the control-status attributes.Future enhancement will allow the number of pixels / data words transferred between subblocks configurable.