Dual aldc decompressors inside printer asic

A data buffering/transformation system and method that compresses a received signal and stores the compressed received data signal in a data storage unit to conserve storage usage. The system decompresses the data signal prior to transmitting the signal. The received data signal may be an encoded data signal. In such a case, the system further decompresses the received data signal, decodes the signal, recompresses the signal, and stores the signal in the data storage unit. The system and method employs a combination compressor and first decompressor and a second decompressor so the system and method can simultaneously decompress a compressed received data signal and decompress a compressed decoded received data signal.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
 Throughout this description, the preferred embodiment and examples shown
 should be considered as exemplars, rather than as limitations on the
 present invention.
 FIG. 2 illustrates a data buffering/transformation system 20 in accordance
 with the present invention. System 20 includes a compressor/decompressor
 ("C/D") 14, a decompressor 16, a data storage unit 12, a data
 transformer/manipulator 15, and a databus 18. C/D 14 compresses received
 data and stores the compressed data in data storage unit 12 via databus
 18. Decompressor 16 retrieves compressed data signals from data storage
 unit 12 via databus 18. The decompressor 16 decompresses the retrieved
 data signal to generate transmit data. A system coupled to the
 decompressor 16 may process the transmitted data.
 The C/D 14 also retrieves compressed data from data storage unit 12 via
 databus 18 and decompresses the data. In a preferred embodiment, the data
 transformer/manipulator 15 modifies the decompressed data generated by the
 C/D 14. The C/D 14 recompresses the modified data and stores it in data
 storage unit 12 via databus 18. The system 20 can 1) decompress compressed
 received data and 2) decompress compressed transformed or modified data
 simultaneously.
 A preferred embodiment of a data buffering/transformation system is
 presented with reference to FIGS. 3-5. FIG. 5 is a diagram of a printing
 system 100. The printing system 100 includes a main central processing
 unit ("CPU") 80, a local bus 40, a printer application specific integrated
 circuit ("PASIC") 70, data storage units 92, 94, and 96, a bus mapped
 input/output ("I/O") controller 98, a print engine 90, a peripheral
 component interface ("PCI") agent 102, and a direct memory access ("DMA")
 device 104. The CPU 80 is a microprocessor such as a PowerPC, Intel.RTM.,
 AMD.RTM., or Cyrix.RTM. microprocessor. As shown in FIG. 5, the data
 storage units 92, 94, and 96 include synchronous dynamic random access
 memory ("SDRAM") 92, read only memory ("ROM") 94 and synchronous RAM
 ("SRAM") 96. Any form of RAM or data storage such as magnetic or optical
 storage may be used in place of units 92 and 96.
 PASIC 70 includes an SDRAM controller 72, a ROM/SRAM controller 74,
 internal registers 86, an IEEE 1284 interface 76, an ALDC
 compressor/decompressor 14, an ALDC decompressor 16, a graphics RAM
 ("GRAM") system 55, a video interface 60, a direct slave buffer 78, a
 direct master buffer 82, a PCI/DMA buffer 84, and an internal bus 101. The
 SDRAM controller 72 is coupled to the local bus 40 and SDRAM 92 and
 controls access to the SDRAM 92 via the local bus 40. Likewise, the
 ROM/SRAM controller 74 is coupled to the ROM 94 and SRAM 96 and local bus
 40 and controls access to the ROM 94 and SRAM 96 via the local bus 40. The
 direct slave buffer 78, direct master buffer 82, and PCI DMA buffer 84 are
 coupled to the local bus 40 and internal bus 101. The internal bus 101 is
 also coupled to the PCI agent 102 and DMA device 104. The buffers 78, 82,
 and 84, PCI agent 102, and DMA device 104 are used to place data on the
 local bus 40 for routing to the SDRAM controller 72, ROM/SRAM controller
 74, ALDC compressor/decompressor ("C/D") 14, and ALDC decompressor 16.
 ALDC C/D 14 receives uncompressed and compressed data on local bus 40. The
 C/D 14 compresses the uncompressed data, decompresses the compressed data,
 and returns the processed data to the local bus 40. The compressed data
 may be stored in a memory unit 92 or 96. In the PASIC 70, the data may be
 printer data where the data is encoded in a printer encoding language such
 as Postscript, printer control language ("PCL"), intelligent printer data
 stream ("IPDS"), or other printer language. The C/D 14 may also decompress
 encoded data where the encoded data may be stored in the memory units 92
 and 96. In order to build a page or a page segment to be printed via the
 print engine 90, the encoded data may need to be decoded (transformed)
 from a printer language to a different form capable of use by the print
 engine 90 (and video interface 60 in this preferred embodiment.)
 CPU 80 transforms the decompressed encoded printer data into a usable
 format (such as bit-mapped image data). In order to conserve memory
 resources, C/D 14 may compress the decoded printer data and store the
 compressed data in a memory unit 92 or 96 for printing at a later point.
 The ALDC decompressor 16 receives compressed decoded printer data from the
 local bus 40, decompresses the decoded printer data, and stores the
 decompressed decoded data in the GRAM 55. Thus, the C/D 14 may decompress
 encoded printer data to be decoded or transformed while decompressor 16
 decompresses decoded compressed printer data. The video interface 60
 retrieves decompressed, decoded printer data from the GRAM 55 and converts
 the data into a print engine 90 usable format.
 The print engine 90 receives the formatted printer data from the video
 interface 60 and generates a formatted printer data hard copy. The print
 engine 90 may be any printer engine type including Light Amplification by
 Stimulated Emission of Radiation ("LASER"), Light-Emitting Diode ("LED"),
 dot matrix or ink-jet based print engines. Accordingly, PASIC 70 may be
 used to efficiently process printer data while conserving memory usage by
 losslessly compressing or decompressing printer data.
 FIG. 3 illustrates an ALDC compressor/decompressor 14. The ALDC C/D 14
 includes an ALDC compressor/decompressor engine 30, a 32-byte pre-fetch
 input buffer 26, a 32-byte input first in first out ("FIFO") 24, an input
 DMA 28, a 16-byte input FIFO 22, a 32-byte pre-fetch output buffer 36, a
 32-byte output FIFO 34, an output DMA 38, and a 16-byte output FIFO 32.
 The 32-byte input pre-fetch buffer 26 and 32-byte pre-fetch output buffer
 36 are coupled to the local bus 40. The 32-byte pre-fetch buffer 26
 receives compressed data and uncompressed data where the data is to be
 decompressed and compressed by the ALDC C/D engine 30. The 32-byte input
 FIFO 24, input DMA 28, and 16-byte FIFO 22 are used in combination to
 convert 32-byte data words stored in the 32-byte pre-fetch buffer 26 into
 16-byte data words for processing by ALDC C/D engine 30.
 Likewise, the 16-byte output FIFO 32, 32-byte output FIFO 34, and output
 DMA 38 are used to convert 16-byte data words generated by ALDC C/D engine
 30 into 32-byte data words. The 32-byte pre-fetch output buffer 36 buffers
 the 32-byte data words generated by 32-byte input FIFO 34 for transmission
 over local bus 42 to a memory unit 92 and 96. An ALDC decompressor 16 and
 GRAM system 55 preferred embodiment for use in the PASIC are shown in FIG.
 4.
 As shown in FIG. 4, ALDC decompressor 16 includes a local bus master
 interface 48, a DMA controller 46, an ALDC decompressor engine 44, a GRAM
 interface 42, and a local bus slave 52. The GRAM system 55 includes a GRAM
 write circuit 54, a GRAM memory 56, and a GRAM read circuit 58. The local
 bus master interface 48 is coupled to the local bus 40 and ALDC
 decompressor engine 44 via the DMA controller 46. The GRAM interface 42 of
 the decompressor 16 is coupled to the ALDC decompressor engine 44 and GRAM
 system 55 via the GRAM write circuit 54. The local bus master interface 48
 and DMA controller 46 retrieve data words from the local bus 40 and
 provide the data words to the ALDC decompressor engine 44 where the data
 words represent compressed data. The ALDC decompressor engine 44
 decompresses the data words retrieved from the local bus 40 via the local
 bus master interface 48 and the DMA controller 46.
 The GRAM interface 42 and the GRAM write circuit 54 store the decompressed
 data words in the GRAM memory 56. The GRAM write circuit 54 is coupled to
 the GRAM memory 56 and GRAM interface 42. The GRAM read circuit 58 passes
 the decompressed data words stored in the GRAM memory 56 to the video
 interface 60 for further processing. The local bus slave 52 may transmit
 decompressed data words stored in the GRAM memory 56 to the local bus 40.
 The preferred embodiment shown in FIG. 5 is incorporated in a printer ASIC
 70. The preferred embodiment may be incorporated in many different types
 of ASICs including for example a screen display ASIC. Accordingly, it is
 to be understood that the invention is not to be limited by the specific
 illustrated embodiment, but only by the scope of the appended claims.
 While this invention has been described in terms of a best mode for
 achieving this invention's objectives, it will be appreciated by those
 skilled in the art that variations may be accomplished in view of these
 teachings without deviating from the spirit or scope of the present
 invention. For example, the present invention may be implemented using any
 computer programming software, firmware or hardware combination. As a
 preparatory step to practicing the invention or constructing an apparatus
 according to the invention, the computer programming code (whether
 software or firmware) according to the invention will typically be stored
 in one or more machine readable storage mediums such as fixed (hard)
 drives, diskettes, optical disks, magnetic tape, semiconductor memories
 such as ROMs, PROMs, etc., thereby making an article of manufacture in
 accordance with the invention. The article of manufacture containing the
 computer programming code is used by either executing the code directly
 from the storage device, by copying the code from the storage device into
 another storage device such as a hard disk, RAM, etc., or by transmitting
 the code on a network for remote execution.