Buffer manager

Information

  • Patent Grant
  • 5861894
  • Patent Number
    5,861,894
  • Date Filed
    Wednesday, June 7, 1995
    29 years ago
  • Date Issued
    Tuesday, January 19, 1999
    26 years ago
Abstract
This invention provides a method to control the buffering of encoded video data organized as frames or fields. This method involves determining the picture number of each incoming decoded frame, determining the expected presentation number at any time and marking any buffer as ready when its picture number is on or after the presentation number.
Description

BACKGROUND OF THE INVENTION
The present invention is directed to a decompression circuit which operates to decompress or decode a plurality of differently encoded input signals, and, more particularly, to a method of controlling the buffering of encoded video data in said circuit.
Previous buffer manager systems were hardwired to implement certain predetermined conversions, for example, 3-2 pulldown systems. The present buffer manager does not use a predefined sequence of replication or skipping of frames, as in conventional 3-2 pulldown systems, and thus any ratio of encoded frame rate and display frame rate can be accommodated. The present buffer manager is thus more flexible with respect to its strategy for dropping or duplicating frames in order to account for differences in the encoded data frame rate and the display frame rate.
SUMMARY OF THE INVENTION
The invention provides a method for buffering encoded video data organized as frames comprising determining the picture number of a frame, determining the desired presentation number of a frame and marking the buffer as ready when the picture number is on or after the desired presentation number.





BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram of an image formatter.
FIG. 2 is a diagram of the buffer manager state machine.
FIG. 3 illustrates the main loop of the state machine in FIG. 2.
FIG. 4 illustrates the timing of a two-wire interface protocol according to the invention.
FIG. 5 is a block diagram of an embodiment of the invention.
Before one embodiment of the invention is explained in detail, it is to be understood that the invention is not limited in its application to the details of construction and the arrangement of components set forth in the following description or illustrated in the drawings. The invention is capable of other embodiments and of being practiced or carried out in various way. Also, it should be understood that the phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting.





DETAILED DESCRIPTION OF THE INVENTION
An image formatter is shown in FIG. 1. There are two address generators, one for writing 10 and one for reading 20, a buffer manager 30 which supervises the two address generators 10 and 20 and provides frame-rate conversion, a data processing pipeline including vertical and horizontal upsamplers, colour-space conversion and gamma correction, and a final control block which regulates the output of the processing pipeline.
Tokens arriving at the input to the image formatter are buffered in the FIFO 40 and transferred into the buffer manager 30. This block detects the arrival of new pictures and determines the availability of a buffer in which to store each one. If there is a buffer available, it is allocated to the arriving picture and its index is transferred to the write address generator 10. If there is no buffer available, the incoming picture will be stalled until one does become free. All tokens are passed on to the write address generator 10. This operation is described in greater detail in U.K. Serial No. 9405914.4 filed on Mar. 24, 1994, which is incorporated herein by reference.
Each time the read address generator 20 receives a VSYNC signal from the display system, a request is made to the buffer manager 30 for a new display buffer index. If there is a buffer containing complete picture data, and that picture is deemed to be ready for display, that buffer's index will be passed to the display address generator. If not, the buffer manager sends the index of the last buffer to be displayed. At start-up, zero is passed as the index until the first buffer is full. A picture is deemed to be ready for display if its number (calculated as each picture is input) is greater than or equal to the picture number which is expected at the display (presentation number) given the encoding frame rate. The expected picture number is determined by counting picture clock pulses, where picture clock can be generated either locally by the clock dividers, or externally. This technology allows frame-rate conversion (e.g. 2-3 pull-down).
External DRAM is used for the buffers, which can be either two or three in number. Three are necessary if frame-rate conversion is to be effected.
The purpose of the buffer manager 30 is to supply the address generators with indices indicating any of either two or three external buffers for writing and reading of picture data. The allocation of these indices is influenced by three principal factors, each representing the effect of one of the timing regimes in operation: the rate at which picture data arrives at the input to image formatter (coded data rate), the rate at which data is displayed (display data rate), and the frame rate of the encoded video sequence (presentation rate).
A three-buffer system enables the presentation rate and the display rate to differ (e.g. 2-3 pulldown), so that frames are either repeated or skipped as necessary to achieve the best possible sequence of frames given the timing constraints of the system. Pictures which present some difficulty in decoding may also be accommodated in a similar way, so that if a picture takes longer than the available display time to decode, the previous frame will be repeated while everything else `catches up`. In a two-buffer system the three timing regimes must be locked--it is the third buffer which provides the flexibility for taking up slack.
The buffer manager operates by maintaining certain status information associated with each external buffer--this includes flags indicating if the buffer is in use, full of data, or ready for display, and the picture number within the sequence of the picture currently stored in the buffer. The presentation number is also recorded, this being a number which increments every time a picture clock pulse is received, and represents the picture number which is currently expected for display based on the frame rate of the encoded sequence.
An arrival buffer (a buffer to which incoming data will be written) is allocated every time a PICTURE.sub.-- START token is detected at the input, and this buffer is then flagged as IN.sub.-- USE; on PICTURE.sub.-- END, the arrival buffer will be de-allocated (reset to zero) and the buffer flagged as either FULL or READY depending on the relationship between the picture number and the presentation number.
A simple two-wire valid/accept protocol is used at all levels in the chip-set to control the flow of information and its timing diagram is presented in FIG. 5. Data is only transferred between blocks when both the sender and receiver are observed to be ready when the clock rises. Possible events are:
1) Data transfer;
2) Receiver not ready; and
3) Sender not ready.
If the sender is not ready (as in 3) Sender not ready, above) the input of the receiver must wait. If the receiver is not ready (as in 2) Receiver not ready, above) the sender will continue to present the same data on its output until it is accepted by the receiver.
In addition to the data signals there are three other signals transmitted via the two-wire interface: valid; .accept; and extension.
The two wire interface is intended for short range, point to point communication between chips.
The decoder chips should be placed adjacent to each other, so as to minimize the length of the PCB tracks between chips. Where possible, track lengths should be kept below 25 mm. The PCB track capacitance should be kept to a minimum.
The clock distribution should be designed to minimize the clock slew between chips. If there is any clock slew, it should be arranged so that "receiving chips" see the clock before "sending chips".
All chips communicating via two wire interfaces should operate from the same digital power supply.
The display address generator requests a new display buffer, once every vsync, via a two-wire-interface. If there is a buffer flagged as READY, then that will be allocated to display by the buffer manager. If there is no READY buffer, the previously displayed buffer will be repeated.
Each time the presentation number changes this is detected and every buffer containing a complete picture is tested for READY-ness by examining the relationship between its picture number and the presentation number. Buffers are considered in turn, and when any is deemed to be READY this automatically cancels the READY-ness of any which was previously flagged as READY, this then being flagged as EMPTY. This works because later picture numbers are stored, by virtue of the allocation scheme, in the buffers that are considered later.
TEMPORAL.sub.-- REFERENCE tokens in H261 cause a buffer's picture number to be modified if skipped pictures in the input stream are indicated. TEMPORAL.sub.-- REFERENCE tokens in MPEG have no effect.
A FLUSH token causes the input to stall until every buffer is either EMPTY or has been allocated as the display buffer; presentation number and picture number are then reset and a new sequence can commence.
All data is input to the buffer manager from the input fifo, bm.sub.-- front. This transfer takes place via a two-wire interface, the data being 8 bits wide plus an extension bit. All data arriving at the buffer manager is guaranteed to be complete tokens, a necessity for the continued processing of presentation numbers and display buffer requests in the event of significant gaps in the data upstream.
Tokens (8 bit data, 1 bit extension) are transferred to the write address generator via a two-wire interface. The arrival buffer index is also transferred on the same interface, so that the correct index is available for address generation at the same time as the PICTURE.sub.-- START token arrives at waddrgen.
The interface to the read address generator comprises two separate two-wire interfaces which can be considered to act as `request` and `acknowledge` signals respectively--single wires are not adequate, however, because of the two two-wire-based state machines at either end.
The sequence of events normally associated with the dispaddr interface is as follows: dispaddr invokes a request, in response to a vsync from the display device, by asserting the drq.sub.-- valid input to the buffer manager; when the buffer manager reaches an appropriate point in its state machine it will accept the request and go about allocating a buffer to be displayed; the disp.sub.-- valid wire is then asserted, the buffer index is transferred, and this will normally be accepted immediately by dispaddr. There is an additional wire associated with this last two-wire-interface (rst.sub.-- fld) which indicates that the field number associated with the current index must be reset regardless of the previous field number.
The buffer manager block uses four bits of microprocessor address space, together with the 8-bit data bus and read and write strobes. There are two select signals, one indicating user-accessible locations and the other indicating test locations which should not require access under normal operation conditions.
The buffer manager is capable of producing two different events: index found and late arrival. The first of these is asserted when a picture arrives whose PICTURE.sub.-- START extension byte (picture index) matches the value written into the BU.sub.-- BM.sub.-- TARGET.sub.-- IX register at setup. The second event occurs when a display buffer is allocated whose picture number is less than the current presentation number, i.e. the processing in the system pipeline up to the buffer manager has not managed to keep up with the presentation requirements.
Picture clock is the clock signal for the presentation number counter and is either generated on-chip or taken from an external source (normally the display system). The buffer manager accepts both of these signals and selects one based on the value of pclk.sub.-- ext (a bit in the buffer manager's control register). This signal also acts as the enable for the pad picoutpad, so that if the Image Formatter is generating its own picture clock this signal is also available as an output from the chip.
There are 19 states in the buffer manager's state machine. These interact as shown in FIG. 2. The reset state is PRES0, with flags set to zero such that the main loop is circulated initially.
The main loop of the state machine comprises the states shown in FIG. 3 (highlighted in the main diagram--FIG. 2). States PRES0 and PRES1 are concerned with detecting a picture clock via the signal presfig. Two cycles are allowed for the tests involved since they all depend on the value of rdytst. If a presentation flag is detected, all of the buffers are examined for possible `readiness`, otherwise the state machine just advances to state DRQ. Each cycle around the PRES0-PRES1 loop examines a different buffer, checking for full and ready conditions: if these are met, the previous ready buffer (if one exists) is cleared, the new ready buffer is allocated and its status is updated. This process is repeated until all buffers have been examined (index==max buf) and the state then advances. A buffer is deemed to be ready for display when any of the following is true:
(pic.sub.-- num>pres.sub.-- num)&&((pic.sub.-- num-pres.sub.-- num)>=128)
or
(pic.sub.-- num<pres.sub.-- num)&&((pres.sub.-- num-pic.sub.-- num)<=128)
or
pic.sub.-- num==pres num
State DRQ checks for a request for a display buffer (drq.sub.-- valid.sub.-- reg && disp.sub.-- acc.sub.-- reg). If there is no request the state advances (normally to state TOKEN--more on this later), otherwise a display buffer index is issued as follows: if there is no ready buffer, the previous index is re-issued or, if there is no previous display buffer, a null index (zero) is issued; if a buffer is ready for display, its index is issued and its state is updated--if necessary the previous display buffer is cleared. The state machine then advances as before.
State TOKEN is the usual option for completing the main loop: if there is valid input and the output is not stalled, tokens are examined for strategic values (described in later sections), otherwise control returns to state PRES0.
Control only diverges from the main loop when certain conditions are met. These are described in the following sections.
If during the PRES0-PRES1 loop a buffer is determined to be ready, any previous ready buffer needs to be vacated because only one buffer can be designated ready at any time. State VACATE.sub.-- RDY clears the old ready buffer by setting its state to VACANT, and it resets the buffer index to 1 so that when control returns to the PRES0 state, all buffers will be tested for readiness. The reason for this is that the index is by now pointing at the previous ready buffer (for the purpose of clearing it) and there is no record of our intended new ready buffer index--it is necessary therefore to re-test all of the buffers.
Allocation of the display buffer index takes place either directly from state DRQ (state USE.sub.-- RDY) or via state VACATE.sub.-- DISP which clears the old display buffer state. The chosen display buffer is flagged as IN.sub.-- USE, the value of rdy buf is set to zero, and the index is reset to 1 to return to state DRQ. disp buf is given the required index and the two-wire interface wires (disp.sub.-- valid and drq.sub.-- acc) are controlled accordingly. Control returns to state DRQ only so that the decision between states TOKEN, FLUSH and ALLOC does not need to be made in state USE.sub.-- RDY.
On receipt of a PICTURE.sub.-- END token control transfers from state TOKEN to state PICTURE.sub.-- END where, if the index is not already pointing at the current arrival buffer, it is set to point there so that its status can be updated. Assuming both out.sub.-- acc.sub.-- reg and en.sub.-- full are true, status can be updated as described below; if not, control remains in state PICTURE.sub.-- END until they are both true. The en.sub.-- full signal is supplied by the write address generator to indicate that the swing buffer has swung, i.e. the last block has been successfully written and it is therefore safe to update the buffer status.
The just-completed buffer is tested for readiness and given the status either FULL or READY depending on the result of the test. If it is ready, rdy.sub.-- buf is given the value of its index and the set.sub.-- la.sub.-- ev signal (late arrival event) is set high (indicating that the expected display has got ahead in time of the decoding). The new value of arr.sub.-- buf now becomes zero, and, if the previous ready buffer needs its status clearing, the index is set to point there and control moves to state VACATE.sub.-- RDY; otherwise index is reset to 1 and control returns to the start of the main loop.
When a PICTURE.sub.-- START token arrives during state TOKEN, the flag from ps is set, causing the basic state machine loop to be changed such that state ALLOC is visited instead of state TOKEN. State ALLOC is concerned with allocating an arrival buffer (into which the arriving picture data can be written), and cycles through the buffers until it finds one whose status is VACANT. A buffer will only be allocated if out.sub.-- acc.sub.-- reg is high, since it is output on the data two-wire-interface, so cycling around the loop will continue until this is the case. Once a suitable arrival buffer has been found, the index is allocated to arr.sub.-- buf and its status is flagged as IN.sub.-- USE. Index is set to 1, the flag from.sub.-- ps is reset, and the state is set to advance to NEW.sub.-- EXP.sub.-- TR. A check is made on the picture's index (contained in the word following the PICTURE.sub.-- START) to determine if it the same as targ.sub.-- ix (the target index specified at setup) and, if so, set.sub.-- if.sub.-- ev (index found event) is set high.
The three states NEW.sub.-- EXP.sub.-- TR, SET.sub.-- ARR.sub.-- IX and NEW.sub.-- PIC.sub.-- NUM set up the new expected temporal reference and picture number for the incoming data--the middle state just sets the index to be arr.sub.-- buf so that the correct picture number register is updated (note that this.sub.-- pnum is also updated). Control then goes to state OUTPUT.sub.-- TAIL which outputs data (assuming favourable two-wire interface signals) until a low extension is encountered, at which point the main loop is re-started. This means that whole data blocks (64 items) are output, within which there are no tests for presentation flag or display request.
A FLUSH token in the data stream indicates that sequence information (presentation number, picture number, rst.sub.-- fld) should be reset. This can only happen when all of the data leading up to the FLUSH has been correctly processed and so it is necessary, having received a FLUSH, to monitor the status of all of the buffers until it is certain that all frames have been handed over to the display, i.e. all but one of the buffers have status EMPTY, and the other is IN.sub.-- USE (as the display buffer). At that point a `new sequence` can safely be started.
When a FLUSH token is detected in state TOKEN, the flag from.sub.-- fl is set, causing the basic state machine loop to be changed such that state FLUSH is visited instead of state TOKEN. State FLUSH examines the status of each buffer in turn, waiting for it to become VACANT or IN.sub.-- USE as display. The state machine simply cycles around the loop until the condition is true, then increments its index and repeats the process until all of the buffers have been visited. When the last buffer fulfils the condition, presentation number, picture number and all of the temporal reference registers assume their reset values; rst.sub.-- fld is set to 1. The flag from.sub.-- fl is reset and the normal main loop operation is resumed.
When a TEMPORAL.sub.-- REFERENCE token is encountered, a check is made on the H261 bit and, if set, the four states TEMP.sub.-- REFO to TEMP.sub.-- REF3 are visited. These perform the following operations:
TEMP.sub.-- REF0: temp.sub.-- ref=in.sub.-- data.sub.-- reg;
TEMP.sub.-- REF1: delta=temp.sub.-- ref-exp.sub.-- tr; index=arr.sub.-- buf;
TEMP.sub.-- REF2: exp.sub.-- tr=delta+exp.sub.-- tr;
TEMP.sub.-- REF3: pic.sub.-- num�i!=this.sub.-- pnum+delta;index=1;
State TOKEN passes control to state OUTPUT.sub.-- TAIL in all cases other than those outlined above. Control remains here until the last word of the token is encountered (in.sub.-- extn.sub.-- reg is low) and the main loop is then re-entered.
The requirement to repeatedly check for the `asynchronous` timing events of picture clock and display buffer request, and the necessary to have the buffer manager input stalled during these checks, means that when there is a continuous supply of data at the input to the buffer manager there will be a restriction on the data rate through the buffer manager. A typical sequence of states may be PRES0, PRES1, DRQ, TOKEN, OUTPUT.sub.-- TAIL, each, with the exception of OUTPUT.sub.-- TAIL, lasting one cycle. This means that for each block of 64 data items, there will be an overhead of 3 cycles during which the input is stalled (during states PRES0, PRES1 and DRQ) thereby slowing the write rate by 3/64 or approximately 5%. This number may occasionally increase to up to 13 cycles overhead when auxiliary branches of the state machine are executed under worst-case conditions. Note that such large overheads will only apply on a once-per-frame basis.
Presentation number free-runs during upi accesses; if presentation number is required to be the same when access is relinquished as it was when access was gained, this can be effected by reading presentation number after access is granted, and writing it back just before it is relinquished. Note that this is asynchronous, so it may be necessary to repeat the accesses several times to be sure they are effective.
The write address generator 10 receives tokens from the buffer manager 30 and detects the arrival of each new DATA token. As each arrives, it calculates a new address for the DRAM interface 50 in which to store the arriving block. The raw data is then passed to the DRAM interface 50 where it is written in to a swing buffer. Note that DRAM addresses are block addresses, and pictures in the DRAM are organised as rasters of blocks. Incoming picture data, however, is organised as sequences of macroblocks, so the address generation algorithm must take account of this.
The Buffer manager 30 is now described in further detail.
B.4.2 Overview
The buffer manager 30 provides four addresses for the DRAM interface 50. These addresses are page addresses in the DRAM. The DRAM interface is maintaining two FIFOs in the DRAM, the Coded Data Buffer and the Token Data Buffer. Hence the four addresses; a read and a write address for each buffer.
B.4.3 Interfaces
The Buffer Manager is connected only to the DRAM interface and to the microprocessor. The microprocessor need only be used for setting up the "Initialization registers" shown in Table B.4.4. The interface with the DRAM interface is the four eighteen bit addresses controlled by a REQuest/Acknowledge protocol for each address. (Not being in the datapath the Buffer Manager has no two-wire interfaces.)
Buffer Manager operates from DRAM interface clock generator and on the DRAM interface scan chain.
B.4.4 Address Calculation
The read and write addresses for each buffer are generated from 9 eighteen bit registers:
Initialization registers (RW from microprocessor)
BASECB-base address of coded data buffer
LENGTHCB-maximum size (in pages) of coded data buffer
BASETB-base address of token data buffer
LENGTHTB-maximum size (in pages) of token data buffer
LIMIT-size (in pages) of the DRAM.
Dynamic registers (RO from microprocessor)
READCB-coded data buffer read pointer relative to BASECB
NUMBERCB-coded data buffer write pointer relative to READCB
READTB-token data buffer read pointer relative to BASETB
NUMBERTB-token data buffer write pointer relative to READTB
To calculate addresses:
readaddr=(BASE+READ)mod LIMIT
writeaddr=(((READ+NUMBER)mod LENGTH)+BASE)mod LIMIT
The "mod LIMIT" term is used because a buffer may wrap around DRAM.
B.4.5 Block Description
The Buffer Manager is composed of three top level modules connected in a ring which snooper monitors the DRAM interface connection. The modules are bmprtize (prioritize), bminstr (instruction), and bmrecalc (recalculate) are arranged in a ring of that order and omsnoop (snoopers) on the address outputs.
Bmprtize deals with the REQ/ACK protocol, the FULL/EMPTY flags for the buffers and it maintains the state of each address, i.e., "is it a valid address?". From this information it dictates to bminstr which (if any) address should be recalculated. It also operates the BUF.sub.-- CSR (status) microprocessorregister, showing FULL/EMPTY flags, and the buf.sub.-- access microprocessor register, controlling microprocessor write access to the buffer manager registers.
Bminstron being told by bmprtize to calculate an address, issues six instructions (one every two cycles) to control bmrecalc into calculating an address.
Bmrecalc recalculatesthe addresses under the instruction of bminstr. Running an instruction every two cycles. It contains all of the initialization and dynamic registers, and a simple ALU capable of addition, subtraction and modulus. It informs Sbmprtize of FULL/EMPTY states it detects and when it has finished calculating an address.
B.4.6 Block Implementation
B.4.6.1 Bmprtize
At reset the buf.sub.-- access microprocessor register is set to one to allow the setting up of the initialization registers. While buf.sub.-- access reads back one no address calculations are initiated because they are meaningless without valid initialization registers.
Once buf.sub.-- access is de-asserted (write zero to it) bmprtize goes about making all the addresses valid (by recalculating them), because this is its purpose to keep all four addresses valid. At this stage the Buffer Manager is "starting up" (i.e. all addresses have not yet been calculated), so no requests are asserted. Once all addresses have become valid start-up ends and all requests are asserted. From now on when an address becomes invalid (because it has been used and acknowledged) it will be recalculated.
No prioritizing between addresses will ever need to be done, because the DRAM interface can at its fastest use an address every seventeen cycles while the Buffer Manager can recalculate an address every twelve cycles. Therefore only one address will ever be invalid at one time after start-up. So bmprtize will recalculate any invalid address that is not currently being calculated.
Start-up will be re-entered whenever buf.sub._ access is asserted and so no addresses will be supplied to the DRAM interface during microprocessor accesses.
B.4.6.2 Bminstr
Bminstr contains a MOD 12 cycle counter (the number of cycles it takes to generate an address). Even cycles start an instruction, whereas odd cycles end an instruction. The top 3 bits along with whether it is a read or a write calculation are decoded into instructions for bmrecalc as follows:
For read addresses:
TABLE B.4.1______________________________________Read address calculation Opera- Meaning ofCycle tion BusA BusB Result result's sign______________________________________0-1 ADD READ BASE2-3 MOD Accum LIMIT Address4-5 ADD READ "1"6-7 MOD Accum LENGTH READ8-9 SUB NUMBER "1" NUMBER10-11 MOD "0" Accum SET.sub.-- EMPTY (NUMBER >= 0)______________________________________
For write addresses:
TABLE B.4.2______________________________________For write address calculations Meaning ofCycle Operation BusA BusB Result result's sign______________________________________0-1 ADD NUMBER READ2-3 MOD Accum LIMIT4-5 ADD Accum BASE6-7 MOD Accum LIMIT Address8-9 ADD NUMBER "1" NUMBER10-11 MOD Accum LENGTH SET.sub.-- FULL (NUMBER >= LENGTH)______________________________________
The result of the last operation is always held in the accumulator.
When there are no addresses to be recalculated the cycle counter idles at zero, thus causing an instruction that writes to none of the registers, and so has no affect.
B.4.6.3 Bmrecalc
Bmrecalc performs one operation every two clock cycles. It latches in the instruction from bminstr (and which buffer and io type) on an even counter cycle (start.sub._ alu.sub._ cyc), and latches the result of the operation on an odd counter cycle (end.sub._ alu.sub._ cyc). The result of the operation is always stored in the "Accum" register in addition to any registers specified by the instruction. Also on end.sub._ alu.sub._ cyc, bmrecalc informs bmprtize as to whether the use of the address just calculated will make the buffer full or empty, and when the address and full/empty has been successfully calculated (load.sub._ addr).
Full/empty are calculated using the sign bit of the operation's result.
The modulus operation is not a true modulus but A mod B is implemented as:
(A>B?(A-B):A). However this is only wrong when A>(2B-1), which will never occur.
B.4.6.4 Bmsnoop
Bmsnoop, is composed of four eighteen bit super snoopers that monitor the addresses supplied to the DRAM interface. The snooper must be "super" (i.e., can be accessed with the clocks running) to allow on chip testing of the external DRAM. These snoopers must work on a REQ/ACK system and are, therefore, different to any other on the device.
REQ/ACK is used on this interface as opposed to a two-wire protocol because it is essential to transmit information (i.e. acknowledges) back to the sender which an accept will not do). This is to acutely monitor the FIFO pointers. Having a 2-wire pipeline would not allow this, because it is not possible to know how full the pipeline of addresses is.
B.4.7 Registers
To gain microprocessor write access to the initialization registers one should be written to buf.sub._ access, access will be given when buf.sub._ access reads back one. Conversely to give up microprocessorwrite access zero should be written to buf.sub._ access. Access will be given when buf.sub._ access reads back zero. buf.sub._ access is reset to one.
The dynamic and initialization registers may be read at any time, however to ensure that the dynamic registers are not changing the microprocessor write access must be gained.
It is intended that the initialization registers be written to only once. Re-writing them may cause the buffers to operate incorrectly. It may be possible in a later revision to increase the buffer length on-the-fly and have the buffer manager use the new length when appropriate.
No check is ever made to see that the values in the initialization registers are sensible, e.g. that the buffers do not overlap. This is the user's responsibility.
TABLE B.4.3______________________________________Buffer manager non-keyhole registersRegister Name Usage Address______________________________________CED.sub.-- BUF.sub.-- ACCESS xxxxxxxD 0 .times. 24CED.sub.-- BUF.sub.-- KEYHOLE ADDR xxDDDDDD 0 .times. 25CED.sub.-- BUF.sub.-- KEYHOLE DDDDDDDD 0 .times. 26CED.sub.-- BUF.sub.-- CB.sub.-- WR.sub.-- SNP.sub.-- 2 xxxxxxDD 0 .times. 54CED.sub.-- BUF.sub.-- CB.sub.-- WR.sub.-- SNP.sub.-- 1 DDDDDDDD 0 .times. 55CED.sub.-- BUF.sub.-- CB.sub.-- WR.sub.-- SNP.sub.-- 0 DDDDDDDD 0 .times. 56CED.sub.-- BUF.sub.-- CB.sub.-- RD.sub.-- SNP.sub.-- 2 xxxxxxDD 0 .times. 57CED.sub.-- BUF.sub.-- CB.sub.-- RD.sub.-- SNP.sub.-- 1 DDDDDDDD 0 .times. 58CED.sub.-- BUF.sub.-- CB.sub.-- RD.sub.-- SNP.sub.-- 0 DDDDDDDD 0 .times. 59CED.sub.-- BUF.sub.-- TB.sub.-- WR.sub.-- SNP.sub.-- 2 xxxxxxDD 0 .times. 5aCED.sub.-- BUF.sub.-- TB.sub.-- WR.sub.-- SNP.sub.-- 1 DDDDDDDD 0 .times. 5bCED.sub.-- BUF.sub.-- TB.sub.-- WR.sub.-- SNP.sub.-- 0 DDDDDDDD 0 .times. 5cCED.sub.-- BUF.sub.-- TB.sub.-- RD.sub.-- SNP.sub.-- 2 xxxxxxDD 0 .times. 5dCED.sub.-- BUF.sub.-- TB.sub.-- RD.sub.-- SNP.sub.-- 1 DDDDDDDD 0 .times. 5eCED.sub.-- BUF.sub.-- TB.sub.-- RD.sub.-- SNP.sub.-- 0 DDDDDDDD 0 .times. 5f______________________________________
Where D indicates a registers bit and x shows no register bit.
TABLE B.4.4______________________________________Registers in buffer manager keyholeKeyhole Register Name Usage Keyhole Address______________________________________CED.sub.-- BUF.sub.-- CB.sub.-- BASE.sub.-- 3 xxxxxxxx 0 .times. 00CED.sub.-- BUF.sub.-- CB.sub.-- BASE.sub.-- 2 xxxxxxDD 0 .times. 01CED.sub.-- BUF.sub.-- CB.sub.-- BASE.sub.-- 1 DDDDDDDD 0 .times. 02CED.sub.-- BUF.sub.-- CB.sub.-- BASE.sub.-- 0 DDDDDDDD 0 .times. 03CED.sub.-- BUF.sub.-- CB.sub.-- LENGTH.sub.-- 3 xxxxxxxx 0 .times. 04CED.sub.-- BUF.sub.-- CB.sub.-- LENGTH.sub.-- 2 xxxxxxDD 0 .times. 05CED.sub.-- BUF.sub.-- CB.sub.-- LENGTH.sub.-- 1 DDDDDDDD 0 .times. 06CED.sub.-- BUF.sub.-- CB.sub.-- LENGTH.sub.-- 0 DDDDDDDD 0 .times. 07CED.sub.-- BUF.sub.-- CB.sub.-- READ.sub.-- 3 xxxxxxxx 0 .times. 08CED.sub.-- BUF.sub.-- CB.sub.-- READ.sub.-- 2 xxxxxxDD 0 .times. 09CED.sub.-- BUF.sub.-- CB.sub.-- READ.sub.-- 1 DDDDDDDD 0 .times. 0aCED.sub.-- BUF.sub.-- CB.sub.-- READ.sub.-- 0 DDDDDDDD 0 .times. 0bCED.sub.-- BUF.sub.-- CB.sub.-- NUMBER.sub.-- 3 xxxxxxxx 0 .times. 0cCED.sub.-- BUF.sub.-- CB.sub.-- NUMBER.sub.-- 2 xxxxxxDD 0 .times. 0dCED.sub.-- BUF.sub.-- CB.sub.-- NUMBER.sub.-- 1 DDDDDDDD 0 .times. 0eCED.sub.-- BUF.sub.-- CB.sub.-- NUMBER.sub.-- 0 DDDDDDDD 0 .times. 0fCED.sub.-- BUF.sub.-- TB.sub.-- BASE.sub.-- 3 xxxxxxxx 0 .times. 10CED.sub.-- BUF.sub.-- TB.sub.-- BASE.sub.-- 2 xxxxxxDD 0 .times. 11CED.sub.-- BUF.sub.-- TB.sub.-- BASE.sub.-- 1 DDDDDDDD 0 .times. 12CED.sub.-- BUF.sub.-- TB.sub.-- BASE.sub.-- 0 DDDDDDDD 0 .times. l3CED.sub.-- BUF.sub.-- TB.sub.-- LENGTH.sub.-- 3 xxxxxxxx 0 .times. 14CED.sub.-- BUF.sub.-- TB.sub.-- LENGTH.sub.-- 2 xxxxxxDD 0 .times. 15CED.sub.-- BUF.sub.-- TB.sub.-- LENGTH.sub.-- 1 DDDDDDDD 0 .times. 16CED.sub.-- BUF.sub.-- TB.sub.-- LENGTH.sub.-- 0 DDDDDDDD 0 .times. 17CED.sub.-- BUF.sub.-- TB READ.sub.-- 3 xxxxxxxx 0 .times. 18CED.sub.-- BUF.sub.-- TB.sub.-- READ.sub.-- 2 xxxxxxDD 0 .times. 19CED.sub.-- BUF.sub.-- TB.sub.-- READ.sub.-- 1 DDDDDDDD 0 .times. 1aCED.sub.-- BUF.sub.-- TB.sub.-- READ.sub.-- 0 DDDDDDDD 0 .times. 1bCED.sub.-- BUF.sub.-- TB.sub.-- NUMBER.sub.-- 3 xxxxxxxx 0 .times. 1cCED.sub.-- BUF.sub.-- TB.sub.-- NUMBER.sub.-- 2 xxxxxxDD 0 .times. 1dCED.sub.-- BUF.sub.-- TB.sub.-- NUMBER.sub.-- 1 DDDDDDDD 0 .times. 1eCED.sub.-- BUF.sub.-- TB.sub.-- NUMBER.sub.-- 0 DDDDDDDD 0 .times. 1fCED.sub.-- BUF.sub.-- LIMIT.sub.-- 3 xxxxxxxx 0 .times. 20CED.sub.-- BUF.sub.-- LIMIT.sub.-- 2 xxxxxxDD 0 .times. 21CED.sub.-- BUF.sub.-- LIMIT.sub.-- 1 DDDDDDDD 0 .times. 22CED.sub.-- BUF.sub.-- LIMIT.sub.-- 0 DDDDDDDD 0 .times. 23CED.sub.-- BUF.sub.-- CSR xxxxDDDD 0 .times. 24______________________________________
B.4.8 Verification
Verification was conducted in Lsim with small FIFOs onto a dummy DRAM interface, and in C-code as part of the top level chip simulation.
B.4.9 Testing
Test coverage to the bman is through the snoopers in bmsnoop, the dynamic registers (shown in B.4.4) and using the scan chain which is part of the DRAM interface scan chain.
Claims
  • 1. An image formatter for processing encoded video data comprising:
  • an input element for receiving encoded data having a frame rate and an arrival rate;
  • a memory defining at least three buffers for storage of the encoded data, one of said buffers being a display buffer, and another of said buffers being an arrival buffer;
  • a write address generator for generating write addresses for data being stored thereat in said memory;
  • a read address generator for generating read addresses for reading data stored there at in said memory;
  • an output interface linked to said read address generator that produces decoded data at a display rate; and
  • a buffer manager responsive to said arrival rate, said display rate, and said frame rate for allocating said buffers to said write address generator and said read address generator, wherein said buffers are allocated to said write address generator in response to a timing regime.
  • 2. The image formatter according to claim 1, wherein said read address generator and said buffer manager are connected by a plurality of two-wire interfaces, wherein said two-wire interfaces each comprise: a sender, a receiver, and a clock connected to said sender and said receiver, wherein data is transferred from said sender to said receiver upon a transition of said clock only when said sender is ready and said receiver is ready.
  • 3. The image formatter according to claim 1, wherein said input element and said buffer manager are connected by a two-wire interface, wherein said two-wire interface comprises: a sender, a receiver, and a clock connected to said sender and said receiver, wherein data is transferred from said sender to said receiver upon a transition of said clock only when said sender is ready and said receiver is ready.
  • 4. The image formatter according to claim 1, wherein said write address generator and said buffer manager are connected by a two-wire interface, wherein said two-wire interface comprises: a sender, a receiver, and a clock connected to said sender and said receiver, wherein data is transferred from said sender to said receiver upon a transition of said clock only when said sender is ready and said receiver is ready.
  • 5. The image formatter according to claim 1, further comprising a setup register having a picture index stored therein, wherein said buffer manager asserts a first signal when received encoded data represents a picture having an index corresponding to said picture index, and wherein said buffer manager asserts a second signal when said display buffer has a picture number that is less than a current presentation number.
  • 6. The image formatter according to claim 1, wherein said timing regime comprises an arrival rate of video data.
  • 7. The image formatter according to claim 1, wherein said timing regime comprises an display rate of video data.
  • 8. The image formatter according to claim 1, wherein said timing regime comprises an presentation rate of an encoded video sequence.
Priority Claims (3)
Number Date Country Kind
9405914 Mar 1994 GBX
9415365 Jul 1994 GBX
9503964 Feb 1995 GBX
REFERENCE TO RELATED APPLICATIONS

This Application is a division of application Ser. No. 08/399,801, filed Mar. 7,1995 and a division of application Ser. No. 400,397, filed Mar. 7,1995, which is a continuation-in-part of U.S. application Ser. No. 08/382,958 filed on Feb. 2, 1995, which is a continuation of U.S. application Ser. No. 08/082,291 filed on Jun. 24, 1993 (now abandoned). The following Applications assigned to the assignee hereof contain subject matter related to this Application: Ser. Nos. 08/399,665, filed Mar. 07, 1995;08/400,058, filed Mar. 07, 1995; 08/399,800, filed Mar. 07, 1995; 08/399,801, filed Mar 07, 1995; 08/810,780, filed Mar. 05, 1997; 08/474,222, filed Jun. 07, 1995; 08/486,481, filed Jun. 07,1995; 08/474,231, filed Jun. 07,1995; 08/474,830, filed Jun. 07, 1995; 08/474,220, filed Jun. 07,1995; 08/473,868, filed Jun. 07,1995; 08/474,603, filed Jun. 07, 1995; 08/477,048, filed Jun. 07,1995; 08/485,744, filed Jun. 07,1995; 08/399,799, filed Mar. 07, 1995; (not yet known), filed Mar. 4, 1997.

US Referenced Citations (223)
Number Name Date Kind
3875391 Shapiro et al. Apr 1975
3893042 Whitman et al. Jul 1975
3962685 Belle Isle Jun 1976
4135242 Ward et al. Jan 1979
4142205 Iinuma Feb 1979
4149242 Pirz Apr 1979
4196448 Whitehouse et al. Apr 1980
4215369 Iijima Jul 1980
4225920 Stokes Sep 1980
4228497 Gupta et al. Oct 1980
4236228 Nagashima et al. Nov 1980
4251864 Kindell et al. Feb 1981
4307447 Provanzano et al. Dec 1981
4334246 Saran Jun 1982
4356550 Katzman et al. Oct 1982
4433308 Hirata Feb 1984
4437072 Asami Mar 1984
4442503 Schutt et al. Apr 1984
4467409 Potash et al. Aug 1984
4467443 Shima Aug 1984
4495629 Zasio et al. Jan 1985
4507731 Morrison Mar 1985
4540903 Cooke et al. Sep 1985
4580066 Berndt Apr 1986
4593267 Kuroda et al. Jun 1986
4598372 McRoberts Jul 1986
4617657 Drynan et al. Oct 1986
4630230 Sundet Dec 1986
4679163 Arnould et al. Jul 1987
4689823 Wojcik et al. Aug 1987
4692880 Merz et al. Sep 1987
4710866 Zolnowsky et al. Dec 1987
4785349 Keith et al. Nov 1988
4789927 Hannah Dec 1988
4799056 Hattori et al. Jan 1989
4799677 Frederiksen Jan 1989
4807028 Hatori et al. Feb 1989
4811214 Nosenchuck et al. Mar 1989
4811413 Kimmel Mar 1989
4829465 Knauer et al. May 1989
4831440 Borgers et al. May 1989
4841436 Asano et al. Jun 1989
4855947 Zymslowski et al. Aug 1989
4866510 Goodfellow et al. Sep 1989
4885786 Anderson et al. Dec 1989
4897803 Calarco et al. Jan 1990
4910683 Bishop et al. Mar 1990
4912668 Aubie et al. Mar 1990
4922341 Strobach May 1990
4922418 Dolecek May 1990
4924298 Kitamura May 1990
4924308 Feuchtwanger May 1990
4943916 Asano et al. Jul 1990
4953082 Nomura et al. Aug 1990
4975595 Roberts et al. Dec 1990
4985766 Morrison et al. Jan 1991
4989138 Radochonski Jan 1991
5003204 Cushing et al. Mar 1991
5010401 Murakami et al. Apr 1991
5021947 Campbell et al. Jun 1991
5035624 Hosoya et al. Jul 1991
5036475 Ueda Jul 1991
5043880 Yoshida Aug 1991
5050166 Cantoni et al. Sep 1991
5053985 Friedlander et al. Oct 1991
5057793 Cowley et al. Oct 1991
5060242 Arbeiter Oct 1991
5081450 Lucas et al. Jan 1992
5086489 Shimura Feb 1992
5107345 Lee Apr 1992
5111292 Kuriacose et al. May 1992
5113255 Nagata et al. May 1992
5122873 Golin Jun 1992
5122875 Raychaudhuri et al. Jun 1992
5122948 Zapolin Jun 1992
5124790 Nakayama Jun 1992
5126842 Andrews et al. Jun 1992
5130568 Miller et al. Jul 1992
5134487 Taguchi et al. Jul 1992
5134699 Aria et al. Jul 1992
5136371 Savatier et al. Aug 1992
5136695 Goldshlag et al. Aug 1992
5142380 Sakagami et al. Aug 1992
5146325 Ng Sep 1992
5146326 Hasegawa Sep 1992
5148271 Kato et al. Sep 1992
5151875 Sato Sep 1992
5159449 Allmendinger Oct 1992
5161221 Van Nostrand Nov 1992
5164819 Music Nov 1992
5168356 Acampora et al. Dec 1992
5168375 Reisch et al. Dec 1992
5172011 Leuthold et al. Dec 1992
5173695 Sun et al. Dec 1992
5175617 Wallace et al. Dec 1992
5184347 Farwell et al. Feb 1993
5185819 Ng et al. Feb 1993
5189526 Sasson Feb 1993
5191548 Balkanski et al. Mar 1993
5193002 Guichard et al. Mar 1993
5200925 Morooka Apr 1993
5201056 Daniel et al. Apr 1993
5202847 Bolton et al. Apr 1993
5203003 Donner Apr 1993
5212549 Ng et al. May 1993
5212742 Normile et al. May 1993
5214507 Aravind et al. May 1993
5214770 Ramanujan et al. May 1993
5216724 Suzuki et al. Jun 1993
5218436 Sugiyama et al. Jun 1993
5223926 Stone et al. Jun 1993
5226131 Grafe et al. Jul 1993
5227863 Bilbrey et al. Jul 1993
5227878 Puri Jul 1993
5228098 Crinon et al. Jul 1993
5231484 Gonzales et al. Jul 1993
5231486 Acampora et al. Jul 1993
5233420 Piri et al. Aug 1993
5233545 Ho et al. Aug 1993
5237413 Israelsen et al. Aug 1993
5237432 Calarco et al. Aug 1993
5241383 Chen et al. Aug 1993
5241635 Papadopoulos et al. Aug 1993
5241658 Masterson et al. Aug 1993
5249146 Uramoto et al. Sep 1993
5253058 Gharavi Oct 1993
5253078 Balkanski et al. Oct 1993
5257213 Kim et al. Oct 1993
5257223 Dervisoglu Oct 1993
5258725 Kinoshita Nov 1993
5260781 Soloff et al. Nov 1993
5260782 Hui Nov 1993
5261064 Wyland Nov 1993
5276513 van der Wal et al. Jan 1994
5276784 Ohki Jan 1994
5276832 Holman, Jr. Jan 1994
5278520 Parker et al. Jan 1994
5278646 Civanlar et al. Jan 1994
5278647 Hingorani et al. Jan 1994
5283646 Bruder Feb 1994
5287178 Acampora et al. Feb 1994
5287182 Haskell et al. Feb 1994
5287420 Barrett Feb 1994
5289276 Siracusa et al. Feb 1994
5293229 Iu Mar 1994
5294894 Gebara Mar 1994
5297263 Ohtsuka et al. Mar 1994
5298896 Lei et al. Mar 1994
5298992 Pietras et al. Mar 1994
5299025 Shirasawa Mar 1994
5300949 Rodriguez et al. Apr 1994
5301019 Citta Apr 1994
5301032 Hong et al. Apr 1994
5301040 Hoshi et al. Apr 1994
5301136 McMillan, Jr. et al. Apr 1994
5301272 Atkins Apr 1994
5301344 Kolchinsky Apr 1994
5304953 Heim et al. Apr 1994
5305438 MacKay et al. Apr 1994
5307180 Williams et al. Apr 1994
5307449 Kelley et al. Apr 1994
5309527 Ohki May 1994
5319460 Kubo Jun 1994
5321806 Meinerth et al. Jun 1994
5341371 Simpson Aug 1994
5343218 Maeda Aug 1994
5351047 Behlen Sep 1994
5357606 Adams Oct 1994
5367636 Colley et al. Nov 1994
5384598 Rodriguez et al. Jan 1995
5384745 Konishi et al. Jan 1995
5386385 Stephens, Jr. Jan 1995
5386537 Asano Jan 1995
5390029 Williams et al. Feb 1995
5390149 Vogley et al. Feb 1995
5392071 Richards et al. Feb 1995
5396497 Veltman Mar 1995
5396592 Fujimoto Mar 1995
5404474 Crook et al. Apr 1995
5406279 Anderson et al. Apr 1995
5412782 Hausman et al. May 1995
5414813 Shiobara May 1995
5421028 Swanson May 1995
5425061 Laczko, Sr. et al. Jun 1995
5426606 Takai Jun 1995
5430488 Hedley Jul 1995
5442790 Nosenchuck Aug 1995
5446866 Drako et al. Aug 1995
5448310 Kopet et al. Sep 1995
5448568 Delpuch et al. Sep 1995
5450599 Horvath et al. Sep 1995
5452006 Auld Sep 1995
5457482 Rhoden et al. Oct 1995
5457780 Shaw et al. Oct 1995
5461679 Normile et al. Oct 1995
5467137 Zdepski Nov 1995
5481307 Goldstein et al. Jan 1996
5481689 Stamm et al. Jan 1996
5486876 Lew et al. Jan 1996
5487064 Galand et al. Jan 1996
5488432 Guillon et al. Jan 1996
5490247 Tung et al. Feb 1996
5495291 Adams Feb 1996
5497498 Taylor Mar 1996
5502494 Auld Mar 1996
5504869 Uchida Apr 1996
5510857 Kopet et al. Apr 1996
5517462 Iwamoto et al. May 1996
5517603 Kelley et al. May 1996
5517670 Allen et al. May 1996
5535290 Allen Jul 1996
5543853 Haskell et al. Aug 1996
5553005 Voeten et al. Sep 1996
5553258 Godiwala et al. Sep 1996
5559999 Maturi et al. Sep 1996
5566089 Hoogenboom Oct 1996
5568165 Kimura Oct 1996
5572691 Koudmani Nov 1996
5574933 Horst Nov 1996
5577203 Reinert et al. Nov 1996
5579052 Artieri Nov 1996
5590283 Hillis et al. Dec 1996
5603012 Sotheran Feb 1997
Foreign Referenced Citations (1)
Number Date Country
0075893 Apr 1983 EPX
Divisions (1)
Number Date Country
Parent 399801 Mar 1995
Continuations (1)
Number Date Country
Parent 82291 Jun 1993
Continuation in Parts (1)
Number Date Country
Parent 382958 Feb 1995