In order to store and transmit large amounts of data, the data is often compressed. As a result, many electronic devices must compress and decompress large amounts of data. For example, a digital video may be more efficiently stored and transmitted in a compressed form. However, in order to display the digital video on a high definition television or monitor, the video data may need to be decompressed.
Compression and decompression are computationally intensive tasks. Accordingly, many electronic devices have a dedicated hardware coder/decoder (CODEC). In addition, moving large amounts of memory from one location to another location often requires a significant amount of time. Accordingly, many electronic devices have a dedicated direct memory access (DMA) unit.
However, even with a dedicated hardware coder/decoder (CODEC) and a dedicated direct memory access (DMA) unit, a large amount of central processing unit cycles are consumed managing the interaction between these two devise when a large amount of data needs to be moved and compressed or decompressed (e.g., digital video and/or digital audio).
Briefly, methods and apparatus for storing and delivering compressed data are disclosed. In an embodiment, the apparatus includes a direct memory access (DMA) engine operatively coupled to a lossless compression engine. The direct memory access (DMA) engine is structured to perform a direct memory write operation of lossless compressed data, and the lossless compression engine is structured to produce the lossless compressed data as part of the direct memory write operation.
Among other features, electronic devices employing the disclosed direct memory access (DMA) engine with integrated coder/decoder (CODEC) are able to perform large memory transfers where compression and/or decompression are used (e.g., retrieving compressed video from memory and sending the uncompressed version of the video to a graphics processing unit) with minimal intervention from the central processing unit. As a result, the central processing unit is free to perform other tasks.
In one example, the direct memory access (DMA) engine is structured to (a) cause the lossless compressed data to be produced in response to an initiation by a central processing unit (CPU) and (b) perform the direct memory storage operation without further interaction by the central processing unit (CPU). In one example, the lossless compression engine is structured to segment uncompressed data and reassemble corresponding lossless compressed data. In one example, the lossless compression engine is structured to send the lossless compressed data via a communication channel.
Turning now to the figures, in general, a direct memory access (DMA) unit includes a lossless compression engine and/or a lossless decompression engine (CODEC). In one mode of operation, the direct memory access (DMA) unit compresses uncompressed data and stores the compressed data in a memory as part of a direct memory access (DMA) write operation. For example, the direct memory access (DMA) unit may compress and store video information as the video information is received from a video camera (i.e., “on the fly”). In another mode of operation, the direct memory access (DMA) unit decompresses compressed data and delivers the decompressed data to an output device as part of a direct memory access (DMA) read operation. For example, the direct memory access (DMA) unit may decompress and deliver video information to a display via a graphics processing unit (GPU). In both modes of operation, the operation may be initiated by a central processing unit (CPU). However, the operation is typically performed without further interaction by the central processing unit (CPU).
The direct memory access (DMA) unit with integrated coder/decoder (CODEC) may be part of a wide variety of devices. For example, the DMA/CODEC may be part of networked video game console. A block diagram of certain elements of an example network communications system 100 is illustrated in
The web server 106 stores a plurality of files, programs, and/or web pages in one or more databases 108 for use by the client devices 102 as described in detail below. The database 108 may be connected directly to the web server 106 and/or via one or more network connections. The database 108 stores data as described in detail below.
One web server 106 may interact with a large number of client devices 102. Accordingly, each server 106 is typically a high end computer with a large storage capacity, one or more fast microprocessors, and one or more high speed network connections. Conversely, relative to a typical server 106, each client device 102 typically includes less storage capacity, a single microprocessor, and a single network connection.
Each of the devices illustrated in
The example electrical device 200 includes a main unit 202 which may include, if desired, one or more processing units 204 electrically coupled by an address/data bus 206 to one or more memories 208, other computer circuitry 210, and one or more interface circuits 212. The processing unit 204 may include any suitable processor or plurality of processors. In addition, the processing unit 204 may include other components that support the one or more processors. For example, the processing unit 204 may include a central processing unit (CPU), a graphics processing unit (GPU), and/or a direct memory access (DMA) unit.
The memory 208 may include various types of non-transitory memory including volatile memory and/or non-volatile memory such as, but not limited to, distributed memory, read-only memory (ROM), random access memory (RAM) etc. The memory 208 typically stores a software program that interacts with the other devices in the system as described herein. This program may be executed by the processing unit 204 in any suitable manner. The memory 208 may also store digital data indicative of documents, files, programs, web pages, etc. retrieved from a server and/or loaded via an input device 214.
The interface circuit 212 may be implemented using any suitable interface standard, such as an Ethernet interface and/or a Universal Serial Bus (USB) interface. One or more input devices 214 may be connected to the interface circuit 212 for entering data and commands into the main unit 202. For example, the input device 214 may be a keyboard, mouse, touch screen, track pad, isopoint, camera, voice recognition system, accelerometer, global positioning system (GPS), and/or any other suitable input device.
One or more displays, printers, speakers, monitors, televisions, high definition televisions, and/or other suitable high bandwidth output devices 216 may also be connected to the main unit 202 via the interface circuit 212. High bandwidth output devices 216 typical consume uncompressed data, such as uncompressed audio and/or video data. For example, a display for displaying decompressed video data may be a cathode ray tube (CRTs), liquid crystal displays (LCDs), electronic ink (e-ink), and/or any other suitable type of display.
One or more storage devices 218 may also be connected to the main unit 202 via the interface circuit 212. For example, a hard drive, CD drive, DVD drive, and/or other storage devices may be connected to the main unit 202. The storage devices 218 may store any type of data used by the device 200.
The electrical device 200 may also exchange data with one or more low bandwidth input/output (I/O) devices 220. Low bandwidth I/O devices 220 typical produce and/or consume compressed data, such as compressed audio and/or video data. For example, low bandwidth I/O devices 220 may include network routers, camera, audio players, thumb drives etc.
The electrical device 200 may also exchange data with other network devices 222 via a connection to a network 110. The network connection may be any type of network connection, such as an Ethernet connection, digital subscriber line (DSL), telephone line, coaxial cable, wireless base station 230, etc. Users 114 of the system 100 may be required to register with a server 106. In such an instance, each user 114 may choose a user identifier (e.g., e-mail address) and a password which may be required for the activation of services. The user identifier and password may be passed across the network 110 using encryption built into the user's browser. Alternatively, the user identifier and/or password may be assigned by the server 106.
In some embodiments, the device 200 may be a wireless device 200. In such an instance, the device 200 may include one or more antennas 224 connected to one or more radio frequency (RF) transceivers 226. The transceiver 226 may include one or more receivers and one or more transmitters operating on the same and/or different frequencies. For example, the device 200 may include a blue tooth transceiver 216, a Wi-Fi transceiver 216, and diversity cellular transceivers 216. The transceiver 226 allows the device 200 to exchange signals, such as voice, video and data, with other wireless devices 228, such as a phone, camera, monitor, television, and/or high definition television. For example, the device 200 may send and receive wireless telephone signals, text messages, audio signals and/or video signals directly and/or via a base station 230. A receive signal strength indicator (RSSI) associated with each receiver generates an indication of the relative strength or weakness of each signal being received by the device 200.
For example the central processing unit 302 may send data transfer instructions to the DMA/CODEC 304 indicating that the DMA/CODEC 304 should retrieve a certain section of memory 208, decompress the data from the memory 208 and send the decompressed data to the graphics processing unit 306. In this example, the graphics processing unit 306 may then transmit the decompressed data to a high bandwidth output device 216, such as a display or television.
In another example, the central processing unit 302 may send data transfer instructions to the DMA/CODEC indicating that the DMA/CODEC should receive uncompressed data, compress that data and send the compressed data to some destination without further intervention by the central processing unit 302. For example, a high bandwidth input device 214 such as a video camera and/or microphone interfaced via interface circuit 212 may send uncompressed video data to the DMA/CODEC 304. The DMA/CODEC 304 may then compresses the uncompressed data and store the compressed data in memory 208 and/or send the compressed data to one or more low bandwidth I/O devices 220 via interface circuit to 212. For example, the DMA/CODEC 304 may send the compressed data to a network router and/or an audio player.
In another example, CPU 302 and/or a GPU 306 may send data transfer instructions to the DMA engine 402 to retrieve compressed data from memory 208 and transfer the data in uncompressed form to a high bandwidth output device. For example, the DMA engine 402 may retrieve compressed video data from memory 208, and send the compressed video data to lossless decompression engine 406, which returns the data in decompressed segments to the DMA engine 402. The DMA engine 402 may then send the decompressed data to the high-bandwidth output device. For example, the DMA engine 402 may send uncompressed video data to a high-definition display 216. As discussed in more detail below with reference to
In general, a DMA engine 402 receives uncompressed data, segments the uncompressed data, and forwards each uncompressed data segment to the lossless compression engine 404. After the lossless compression engine 404 returns the compressed data to the DMA engine 402, the DMA engine 402 reassembles the compressed data segments into the overall compressed data stream and then stores and/or sends the compressed data to a memory device and/or a low bandwidth I/O device 220.
More specifically, in this example, the process 500 begins when the DMA engine 402 receives or retrieves uncompressed data (block 502). For example, the DMA engine 402 may receive or retrieve uncompressed audio and/or video data from one or more input devices such as a microphone or camera. The DMA engine 402 then segments the uncompressed data as the uncompressed data is being received or retrieved (block 504). The DMA engine 402 then forwards each uncompressed data segment to the lossless compression engine 404 (block 506). The lossless compression engine 404 then compresses that data segment (block 508).
After the lossless compression engine 404 returns the compressed data to the DMA engine 402, the DMA engine 402 reassembles the compressed data segments into the overall compressed data stream (block 510). For example, the DMA engine 402 may be reassembling a compressed video stream. The DMA engine 402 then stores and/or sends the compressed data to a memory device and/or a low bandwidth I/O device 220 (block 512). For example, the DMA engine 402 may store the compressed data in memory 208, and/or the DMA engine 402 may send the compressed data to a network router, camera, audio player, thumb drive, and/or any other suitable device.
Each of these steps in process 500 may be executed in parallel with one or more of the other steps in 500. For example, after uncompressed data is received, the uncompressed data may be segmented and compressed at the same time that new data is being received. Similarly, as compressed data is produced, the compressed data may be reassembled and stored on the fly at the same time as new data is being received, segmented and compressed.
In general, a DMA engine 402 receives compressed data, segments the compressed data, and forwards each compressed data segment to the lossless decompression engine 406. After the lossless decompression engine 406 returns the decompressed data to the DMA engine 402, the DMA engine 402 reassembles the decompressed data segments into the overall decompressed data stream and then stores and/or sends the decompressed data to a memory device and/or a high bandwidth output device 216.
More specifically, in this example, the process 600 begins when the DMA engine 402 receives or retrieves compressed data (block 602). For example, the DMA engine 402 may receive or retrieve compressed audio and/or video data from one or more memories 208 and/or one or more low bandwidth I/O devices 220 such as a network router, camera, audio player, etc. The DMA engine 402 then segments the compressed data as the compressed data is being received or retrieved (block 604). The DMA engine 402 then forwards each compressed data segment to the lossless decompression engine 406 (block 606). The lossless decompression engine 406 then decompresses that data segment (block 608).
After the lossless decompression engine 406 returns the decompressed data to the DMA engine 402, the DMA engine 402 reassembles the decompressed data segments into the overall decompressed data stream (block 610). For example, the DMA engine 402 may be reassembling a decompressed video stream. The DMA engine 402 then stores and/or sends the decompressed data to a memory device and/or a high bandwidth output device 216 (block 612). For example, the DMA engine 402 may store the decompressed data in memory 208, and/or the DMA engine 402 may send the decompressed data to a display and/or amplifier/speaker.
Each of these steps in process 600 may be executed in parallel with one or more of the other steps in 500. For example, after compressed data is received, the compressed data may be segmented and decompressed at the same time that new data is being received. Similarly, as decompressed data is produced, the decompressed data may be reassembled and transmitted on the fly at the same time as new data is being received, segmented and decompressed.
In this example, the process 700 begins when the DMA engine 402 receives uncompressed data (block 702). For example, the DMA engine 402 may receive uncompressed audio and/or video data. The DMA engine 402 then sends the uncompressed data to the lossless compression engine 404. The lossless compression engine 404 compresses the uncompressed data and stores the resulting lossless encoded data as part of a direct memory access write operation via the DMA engine 402 (block 704).
In this example, the process 800 begins when the DMA engine 402 receives compressed data (block 802). For example, the DMA engine 402 may receive compressed audio and/or video data. The DMA engine 402 then sends the compressed data to the lossless decompression engine 406. The lossless decompression engine 406 decompresses the compressed data and sends the resulting unencoded data as part of a direct memory access read operation via the DMA engine 402 (block 804).
In summary, persons of ordinary skill in the art will readily appreciate that methods and apparatus for storing and delivering compressed data have been provided. Among other features, electronic devices employing the disclosed direct memory access (DMA) engine with integrated coder/decoder (CODEC) are able to perform large memory transfers where compression and/or decompression are used (e.g., retrieving compressed video from memory and sending the uncompressed version of the video to a graphics processing unit) with minimal intervention from the central processing unit. As a result, the central processing unit is free to perform other task.
The foregoing description has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the exemplary embodiments disclosed. Many modifications and variations are possible in light of the above teachings. It is intended that the scope of the invention be limited not by this detailed description of examples, but rather by the claims appended hereto.
This application claims priority to Provisional Application Ser. No. 61/825,249, filed on May 20, 2013, having inventors Winthrop Wu and Sebastien Nussbaum, titled “METHODS AND APPARATUS FOR STORING AND DELIVERING COMPRESSED DATA”, and is incorporated herein by reference. The present disclosure relates in general to computing systems, and, in particular, to methods and apparatus for storing and delivering compressed data.
Number | Date | Country | |
---|---|---|---|
61825249 | May 2013 | US |