DATA SYNCHRONIZER BETWEEN A SOURCE SYSTEM AND A SINK SYSTEM

Abstract: A data synchronizer for synchronizing source data from a source system with a clock and/or clocks (20) from a sink system including a source counter (38), a buffer (34), a sink counter (40) and a controller (42). The source data is placed in consecutive buffer positions under the control of the source counter (38), and the sink counter (40) is made to "follow" the source counter (38) and identifies the location in the buffer whereat output data is extracted. The controller (42) monitors the counters and generates control signals (26, 30) representative of the state of the buffer.

Description: The present invention relates to data handling in general and more particularly to a circuit arrangement for synchonizing data from a source system with clocks of a sink system. In designing synchronous digital systems, there are times when it is required to pass data unidirectionally between two groups of logic. Oftentimes the clocks for the two groups of logic are different. Before the receiving logic can use the data, the data must be resynchronized with the clocks of the receiving logic. A typical or straightforward solution is to design a set of "handshaking" signals between the two groups of logic. The handshaking signals are used to indicate the arrival and acceptance of data. The typical solution requires multiple clock cycles (source and sink) per synchronized data item. The solution causes a throughput "bottleneck" at the synchronizer. Systems in which a data item can be processed every clock cycle are susceptible to the throughput "bottleneck" error condition. Another prior art solution to the above problem is set fourth in U.S. Patent 4,119,796. In the patent a digital phase lock loop synchronizes an incoming clock with a local clock. A shift register delays incoming data pulses by the same amount as the incoming clock pulses so that the data pulses are synchronized with the local clock. An output of a counter is used to drive a selector that selects the proper output of the shift register. Still other prior art solutions are described in U.S. Patents 4,065,862 and 4,320,515. Both patents require the use of shift registers through which the data to be synchronized is shifted. Phase lock loops are used to generate internal clocks. The frequencies of the generated clocks are usually higher than the frequencies of the source and/or sink clocks. It is therefore an object of the present invention to provide a more efficient data synchronizer that was heretofore been possible. One system which deals with the retiming of serial bit streams is described in US patent 4,054,747. The latter patent relates to a data buffer including a plurality of storage locations into which data is sequentially written in order to obtain correction for phase jitter. As in the present invention, the retiming system of the above patent receives data from a source system at a rate determined by a first clock and synchronizes the data to be sent to a sink system at a rate determined by a second clock where the clocks are generated from a common origin. Such a retiming system includes a write select circuit operable for writing data into the storage locations, a read selected circuit operable for extracting data from the storage locations, a first counter means being coupled to the write select circuit and operable when activated by the first clock to indicate a storage location whereat the data is to be written, and a second counter means being coupled to the read select circuit and operable when activated by the second clock to indicate a storage location from which data is to be read. The invention is characterized by delta detect means for comparing the state of the first counting means with the state of the second counting means in order to establish the filling state of the storage, and for activating a source data strobe when locations of the storage means are empty in order to signal to the source system that data can be input or activating a sink data strobe when locations of the storage are full in order to signal to the sink system that data can be output. These and other features and advantages of this invention will be more fully described in the accompanying drawings. Fig. 1 shows a block diagram of the present invention with the important signal lines entering and leaving the synchronizer. Fig. 2 is a timing chart showing the relationship between the C clock, B clock, data strobes and the presence of data on the data lines. Fig. 3A is a block diagram of a source controlled synchronizer. Fig. 3B is a block diagram of a sink controlled synchronizer. Fig. 3C is a block diagram of a source and sink controlled synchronizer. Fig. 4 is a functional block diagram of the data synchronizer according to the teachings of the present invention. Fig. 5 shows a block diagram for the delta detect with look-ahead circuit means. Fig. 6A shows a block diagram for a four-bit source counter. Fig. 6B shows a block diagram for a four-bit sink counter. Fig. 6C shows a block diagram for a four-bit write select circuitry. Fig. 6D shows a block diagram for the delta detect circuitry with look-ahead. Figs. 7A-7D show detail block diagram for a sink controlled synchronizer. Figs. 8A-8D show several block diagrams for a source controlled synchronizer. Figs. 9A-9I show several block diagrams for a source and sink controlled synchronizer. The synchronizer is designed to be used as an elastic buffer. Fig. 1 shows a block diagram of the fast data synchronizer according to the teaching of the present invention. The synchronizer include a block box identified by numeral 10 and a plurality of input/output lines or conductors connected to box 10. For purposes of this invention, the set of logic from which the data originates is referred to as the "source system" and the set of logic to which the data is eventually transferred "not shown) is referred to as the "sink system." The inputs and outputs on the left side of block 10 (details to be given subsequently) are connected to the source system. These inputs and outputs signals are all synchronous with the source system clock. The arrowheads on each line signify the directions of data flow. The signals on these lines are all synchronous with the source system clocks. Likewise, the input and output lines on the right side of block 10 are connected to a sink system. These signals are also synchronous with the sink system clocking. Data to be synchronized arrives on line 12. The data is delayed and resynchronized in the fast data synchronizer 10 and then leaves the synchronizer over line 18. The source system clocks C and B are provided to the synchronizer on line 14 and 16, respectively. In particular, source C clock appears on line 14 while the source B clock appears on line 16. The source C clock clocks data into the L1 stage of a shift register latches (to be described subsequently) in the synchronizer that are clocked with the sources clocking system. Likewise, the source B clock clocks data from the L1 stages into the L2 stages of the SRLs in the synchronizer. The sink system clocks, which may be different in phase and frequency from the source system clocks, are provided to the synchronizer on lines 20 and 22, respectively. The sink C clock on line 20 clocks data into the L1 stage of the SRLS (to be described subsequently) that are clocked with the sink's clocking system. The sink clock on conductor 22 clocks data from the L1 stage to the L2 stage of the SRLs that are clocked with the sink's clocking system. Signals on conductors 24, 26, 28, and 30 are data strobe signals. These signals are used to signal the transfer of data on a particular clock cycle. These signals are shown with dotted lines because some of these signals may not be present depending on how the synchronizer is used or configured. As will be explained subsequently, there are some options available as to how the synchronizer is configured and used. These options manifest themselves in the present or absent of these four signals, and in how these signals are interconnected. It should be noted that it is assumed that the clocks (source and sink CB clock signals) are free-running, that is, always transitioning at a regular rate. However, the transfer of data from the source system to the sink system is not necessarily regular, and data transfer does not always occur on every clock cycle. The data strobe signals are therefore activated in order to indicate that a data transfer into/out of the synchronizer is to occur, on any given cycle. To this end the source data strobe in signal on conductor 24 is activated in order to indicate that the data present on the source data in line 12 is good. New data item and therefore should be accepted and latched up by the synchronizer. The source data strobe out signal on conductor 26 is used to indicate that the synchronizer is ready to accept new data on the source data in line 12. The sink data strobe in signal on conductor 28 is activated in order to indicate that the data available on the sink data out line 18 has been accepted and that a new group data item can be placed on the sink data outline 18 on the next clock cycle. Sink data strobe out signal on conductor 30 is activated by the synchronizer in order to indicate that a new, good data item has been placed on the sink data outline 18. Fig. 2 is a timing chart showing the time relationship between the C clock, B clock, data strobes, and the presence of data on the data lines. The chart is meant to show the relationship between those signals within a clocking system (source or sink) but not between clocking systems, as there is no required relationship between the signals in the source clocking system and the sink clocking system. The timing (relative to the C and B clocks) of the data strobe in and out signals is the same. And is shown by the chart signal labeled "data strobe." Whenever a data strobe signal is activated, a new good data item must exist during the same clock cycle on the appropriate data in/data out line. The timing of the presentation of the data item is shown by the chart signal labeled new valid data. Before describing the detail of the fast data synchronizer it should be noted that the synchronizer is designed in accordance with the level sensitive scan design (LSSD) rules. These set of rules which are well known in the testing art was first proposed by the assignee of the present invention and are now becoming the standard for testing logic within the industry. In this regard the invention is implemented with memory elements (latches) which are LSSD testable shift register latches (SRLs) and is fully LSSD testable. However, it should be noted that the invention may be implemented with logic circuitry that are not LSSD testable. For example, the invention may also be implemented using D-type edge triggered flip flops and a single phase clock system. In order to demonstrate the LSSD testability of this invention, the synchronizer is shown implemented using D-type shift register latches (SRLs) as memory elements. A clocking system typical of that used with SRLs is assumed and is shown in Fig. 2. Usually, such a clocking system utilizes two non-overlapping clock signals. The use of this type of clocking system with LSSD testable devices are well known in the prior art and detail will not be given here. Suffice it to say that the D-type SRL contains two stages, each consisting of a "polarity-hold" (also referred to as a "phase hold" or transparent) D-type latch. The first stage is referred to as the "L1" stage and the second is referred to as the L2 stage. The output of the L1 stage is fed to the input of the L2 stage. The inputs to the L1 stage are an "A clock", a "C clock", a "data input", and a "scan input". The A clock and the scan input are used during testing only, and serve no function during normal operation. Therefore, the A clock and scan input signals will not be shown in any of the figures (to be described hereinafter) in order to avoid confusion. The C clock input to the "SRL" latch blocks is designated with a "C", and the data input to the SRL latch blocks is designated with a "D". The C clock, when active, causes the L1 stage to be transparent relative to the data input. That is, the data that appears on the data input also appears on the output of the L1 stage. If the C clock is inactive, the data that was present on the data input at the time that the C clock was deactivated is held in the L1 stage. The L2 stage's clock input is called the "B clock", and this signal is designated by a "B clock" on the SRL block. The B clock functions the same for the L2 stage as the C clock does for the L1 stage. The data that is clocked into that L2 stage by the B clock is the output of that L1 stage. The positive output of the L2 stage is called the "plus L2" output and is designated by a "3" on the SRL block. Likewise, the negative output is called "-L2" output and it is designated by a "4" on the SRL block. The notations described in this paragraph will be shown on the drawings but will not be referred again throughout the remaining description of the present invention. The basic fast data synchronizer 10, (Fig. 1) may be configured in various ways in order to produce a number of various types or variety of synchronizers. In terms of the inputs and outputs, the manifestation of the options occur in the presence or absence of the data strobe signals, and the interconnection of the data strobe signals. Internally, the basic fast data synchronizer circuit is the same for all of the options. However, for certain of the options some of the circuitry may not be used and therefore may be omitted. There are two areas where options may be exercised in order to produce a particular synchronizer implementation. The first option area concerns how the flow of data through the synchronizer is controlled. In order for the synchronizer to synchronize data without error, the rate at which data is clocked into the synchronizer must equal the rate at which data is clocked out of the synchronizer. However, there are three ways in which the flow of data into and out of the synchronizer can be controlled, or paced resulting in three control schemes and three basic types or varieties of synchronizers. The three types are called source controlled, sink controlled and source and sink controlled. In order to simplify the description common numerals are used to identify identical parts and/or signal line in the various views of the drawing. Fig. 3A shows a block diagram for a source controlled fast data synchronizer. The flow of data through the source control synchronizer is paced by the source system (not shown). When the source system has a data item to be transfer to the sink system (not shown), the source system places the data item and source data in line 12 and forces the source data strobe in signal on line 24 active. Once the synchronizer has clocked in the data item and synchronizes it, the data item is placed on the sink data outline 18 and the sink data strobe outline 30 is activated. For this type of synchronizer, it should be noted that the sink data strobe outline 30 is connected into the sink data strobe in line 28. Therefore, when the sink data strobe out signal 30 is activated, the sink data strobe in signal 28 is also activated indicating that the presented data is to be accepted at the end of that clock cycle during which the sink strobe was activated. As a result, the synchronizer will present a particular data item on the sink data outline for a single clock cycle only. The sink system must also be ready to latch up the arriving data, since the sink system does not control the presentation of the data. In general, the operation of the synchronizer is such that the synchronizer attempts to empty its internal data buffers of the synchronized data by forcing it into the sink system. Since, for this type of synchronizer, it is assumed that the source system can clock data into the synchronizer on any clock cycle without limit the source data strobe out signal on line 26 is not used. Therefore this signal and the associated internal circuitry (to be described subsequently) used to develop this signal are not present. Fig. 3B shows a block diagram for a sink control fast data synchronizer. The flow of data through the sink controlled synchronizer is paced by the sink system. In general, the operation of this synchronizer is such that the synchronizer attempts to keep filled its internal buffers with data from the source system so that synchronized data will always be available on demand by the sink system. The synchronizer also makes available good data on the sink data out line 18. When the sink system desires to transfer data, the sink system activates the sink data strobe in new line 28 and at the end of that clock cycle latches up to data on the sink data outline 18. In response, the synchronizer does two things on the next clock cycle. A new, good data item is placed on the sink data outline 18 and one internal buffer position is freed up for more data. The fact that a buffer position is empty also results in the synchronizer forcing the source data strobe out line 26 active. Because the source data strobe out signal on line 26 is tied to the source data strobe in signal on line 24 the synchronizer immediately places the data on the source data in line 12 into the empty buffer position. Therefore, for the sink control synchronizer, the sink system demands data on any clock cycle. The source system must always make a good data available and the source data in line 12. Every time the source system detects the fact that the synchronizer has activated the source data strobe out signal 26, the source system must present a new good data item and the source data in line 12. Since previous good data item has now been latched up to the synchronizer. Since this type of synchronizer, it is assumed that the sink system can demand data on any clock cycle without limit the sink data strobe out signal is not used. Therefore, this signal and the associated internal circuitry (to be described hereinafter) used to develop this signal are not present. In summary, it should be noted that in a source controlled synchronizer, the sink system is a slave system in terms of data flow, and the sink system has no control over the transfer of data. Likewise, in a sink controlled synchronizer, the source system is a slave, and the source system has no control over the transfer of data. Fig. 3C shows a block diagram for a source and a sink controlled synchronizer. The flow of data in the source and sink control synchronizer is paced by both the source and the sink systems respectively. For this type of synchronizer, the source system can force data into the synchronizer on any clock cycle by activating the source data strobe in line 24. Likewise, the sink system can demand data at any time by activating the sink data strobe in line 28. In addition, the state of the internal data buffers is made known to both the source and sink system. As will be explained subsequently, this is done by observing the source data strobe out signal 26. The source system is able to determine if empty buffer position exist and likewise the sink system is able to determine if there is any data available in the synchronizer by observing the state of the sink data strobe outline 30. Still referring to Fig. 3C, the source and the sink control synchronizer can be used in one of two ways. With the first way, the source system forces data into the synchronizer only when data is available and when empty buffer position exists within the synchronizer as indicated by an active source data strobe out signal on line 26. The sink system demands data only if data is needed and good synchronized data exists within the synchronizer, as indicated by an active sink data strobe out signal on line 30. As will be explained subsequently, the signals on line 26 and line 30, respectively, are developed within the fast data synchronizer. Thus, it can be seen that data movement through the synchronizer is controlled by both its availability at the source system and by the need for data at the sink system. The second way in which the source and sink control synchronizer can be used is as an elastic buffer. Use of this synchronizer as an elastic buffer is particularly useful in systems where it is known that over the long term, the rate of data arrival and data exit is exactly the same. The source system forces data into the synchronizer whenever it is made available, without regard to the state of the source data strobe out signal on line 26. The sink system demands that as it is needed without regard to the state of the sink data strobe out signal on conductor 30. The source and sink data strobe out signals are used to indicate that an error has occur in the synchronizer. That is, if a source system tries to force data into the synchronizer when the source data strobe out line 26 is inactive, then a buffer overrun has occurred and data is lost. Likewise, if the sink system tries to demand data from the synchronizer when the sink data strobe out signal 30 is inactive, then a buffer overrun has occurred and data is lost, thus it can be seen that the source and sink data strobe out signals are "not error signals. That is, if either ever goes inactive during a data transfer, then an error has occurred. Detailed description of the fast data synchronizer as a elastic buffer will be described hereinafter in relationship with Figs. 9A-9I. In addition to the above areas that has been described, namely, that concerning how data flow is controlled, there is one other option area available to a user. This option can be applied to each of the three synchronizer options shown in Figs. 3A-3C. Up to this point in the description it has been assumed that the transfer of data into/out of the synchronizer does not occur an error clock cycle and therefore data strobe in lines are required in order to signal the transfer of data on a particular clock cycle. However, there are systems where data is always transfer with each clock cycle. This is common with communication systems, where a data rate clock is provided along with a digital data stream. For this type of systems the data in strobes could be held active all of the time, in order to signal to the synchronizer that data is transferred every clock cycle. However, actually the data in strobes are not needed and these signals along with the circuitry internal to the synchronizer which frees the operation of the synchronizer between data transfer may be omitted. Note that this does not change the way the synchronizer works nor does it change the meaning of any of the other synchronizer input or output signals. For example, in the source control synchronizer (Fig. 3A) if the source system is such that data is forced into the synchronizer every source clock cycle, then the source data strobe in signal 24 and associated circuitry can be eliminated. Likewise, for the sink control synchronizer (Fig. 3B) if the sink system is such that data is demanded every source clock cycle, then the sink data strobe in signal 28 and associated circuitry can be eliminated. For the source and sink control synchronizer (Fig. 3C) if either the source or sink system is of this type then the corresponding data strobe in signals and associated circuitry can be eliminated. Fig. 4 shows a functional block diagram of the data synchronizer according to the teachings of the present invention. The data synchronizer includes a data buffer identify by numeral 34. The data buffer contains a number of buffer positions where data is held stationary during synchronization. The output from each stage of the buffer position are fed over appropriate conductor to read select circuit means 36. The output from read select circuit means 36 is the sink data out signal and is provided on conductor 18. Similarly, the output from write select circuit means 32 are coupled by appropriate conductors to each position in data buffer 34. The input signals to write select circuit means 32 is on conductor 12 and represents source data in to be synchronized. Source counter means 38 is coupled by bus 44 to write select means 32 and at delta detect look-ahead circuit means 42. Similarly, sink counter means 40 is coupled over bus 46 to the read select circuit means 36 and the delta detect with look-ahead circuit means 42. Source C clock and source B clocks are fed into the source counter means 38. The source data strobe in signal is supply on conductor 24 to source counter means 38 and delta detect with look-ahead circuit means 42. Source data strobe out signal is outputted from the delta detect with look-ahead circuit means 42 on conductor or line 26. Likewise, sink C clock and sink B clock are supplied on conductor 20 and 22, respectively, to sink counter means 40. Sink data strobing signal is supplied on conductor 28 to sink counter means 40 and delta detect with look-ahead circuit means 42. Sink data strobe out signal is outputted on conductor 30. Still referring to Fig. 4, both the source counter means 38 and the sink counter means 40 are count up only counters. The number of counting means is normally equal to the number of buffer positions in the data buffer 34. The source counter means 38 is advanced on any clock cycle for which the source data strobe in signal on line 24 is made active. Likewise, the sink counter is advance in response to the activation of the sink data strobe in signal on line 28. The source counter outputs 44 are connected to both the write select circuit means 32 and the delta detect with look-ahead circuit means 42. The sink counter outputs are connected to the read select circuitry 36 onto the delta detect with look-ahead circuit means 42. The write select circuit means 32 operates such that when the source data strobe in signal on line 24 is activated, the data and the source data in line 12 is written into the buffer position pointed to by the source counter 38. The read select circuit means 36 operate such that the contents of the data buffer position pointed to by the sink counter is selected and driven out and the sink data out line 18. The function of the delta detect circuit means 42 is to compare the state of the source counter means 38 and the sink counter means 40 in order to establish the state of the data buffer, as to whether or not it is full or empty. If the data buffer 34 is not full, then the data detect with look-ahead circuit means 42 activates the source data strobe outline 26 in order to signal the source system (not shown) that empty buffer position exists in the data buffer 34. If the data buffer 34 is not empty, then the delta detect with look-ahead circuit means 42 activates the sink data strobe outline 30 in order to signal to the sink system that good synchronized data exists in data buffer 34. In order for the delta detect with look-ahead circuit means to compare the source and sink counter outputs without error, the source and sink counters must be implemented so that the compare can be performed with combinatorial logic such that a result of the compare does not have any "glitches" or spikes. If the source and sink counters are implemented as either ring counters or as gray code counters, then the combinatorial compare can be performed properly. In addition to the compare function, the delta circuitry 42 includes as part of its function a key feature according to the teaching of the present invention. This key feature is hereinafter called "look-ahead." This feature is a necessary function for the proper operation of the synchronizer. Look-ahead operates such that in performing the compare between the source and sink counters in order to develop the data strobe out signals on conductors 30 (Fig. 4). The delta detect under certain conditions compares the next state (rather than the present state) of the counters. That is, look-ahead refers to anticipating and looking ahead to the next counter state in performing a compare operation, rather than using the present counter state. The conditions for invoking look-ahead are as follows: If the source data strobe in signal on line 24 is active during a particular (source) clock cycle, then the next state of the source counter 38 is considered in developing the compare for the source data strobe outline 26 only. Likewise, if the sink data strobe in signal on line 28 is active during a particular (sink) clock cycle, then the next state of the sink counter 40 is considered in developing the compare for the sink data strobe outline 30 only. That is, if a particular counter is to be updated at the end of the present clock cycle (as indicated by an active data in strobe), then look-ahead is used in the delta detect for that counter in order to develop the corresponding data strobe out signal. The look-ahead function is required because there is a one clock cycle delay between the time that the delta detect produces a data strobe out and the time that the corresponding counter is updated for configuration where the data strobe output is fed back into the data strobe in signal. The general operation of the data synchronizer can be explained in relationship with Fig. 4. Incoming data arriving on the source data in line 12 is placed in consecutive buffer positions under the control of the source counter means 38 via the write select circuit means 32. Data once written into a buffer position remains there until overridden by new, good data. The sink counter means 40 follows the source counter means 38 and reads out the stationary data that has been previously written by the source counter means 38. The delta detect with look-ahead circuit means 42 provides feedback as to the full/empty status of the data buffers such that no data is lost in the synchronizer during the synchronization process. The action of the synchronizer can be understood in more detail by considering a specific hypothetical example. For purposes of discussion it should be assumed that the synchronizer in Fig. 4 is configured as a source control synchronizer (Fig. 3), that is, the sink data strobe out line 30 in Fig. 4 is connected to the sink data strobe in line 28. The source data strobe outline 26 is not used and the source data strobe in line 24 is controlled by the source system. Furthermore, assume that the data buffer 34 contains four buffer positions each capable of storing a single data bit. Therefore, the number of source and sink counter stages is also equal to four. The names of the data buffer positions and the counter states are 0, 1, 2 and 3. Initially imagine that both the source and sink counters are in state 0. At this point the data buffer is empty, and the delta detect circuitry 42 indicates this by holding the sink data strobe out signal on line 30 inactive. That is, the data buffer is known to be empty because the source and sink counters are both in the same state. The synchronizer will remain quiescent at this point, until the source system forces data into the synchronizer by activating the source data strobe in signal 24. Imagine now that the source system activates the data strobe in signal 24 for one clock cycle and at the same time places a new good data item on the source data in line 12. At the end of the source clock cycle that the strobe was activated the data on the source data in line 24 is written into buffer position 0 and the source counter 38 is advanced to state 1. It should be noted that at this point the contents of data buffer position 0 (that is, the newly written data bit) is driven out onto the sink data outline 18, since the sink counter still points the data buffer position 0. However, the sink system cannot do anything with this data until the presence of the data is made known by activation of the sink data strobe outline 30 by the delta detect circuitry 42. At this point the combinatorial logic within the delta detect circuitry 42 detects that the source and sink counters are not equal indicating that good data exists in the data buffer 34. The output of the combinatorial logic (to be described hereinafter) is fed into a D-type SRL within the delta detect in order to synchronize that output to the sink system clock. The output of this D-type SRL is driven out of the delta detect as a sink data strobe outline 30. Therefore, at the next sink clock cycle after the source counter is updated the sink data strobe outline 30 is activated, indicating to the sink system that good data exists on the sink data outline 18. It should be noted that at this time that source counter means 38 is at state 1, the sink counter is at state 0, and the sink data strobe outline is active. At the end of the sink clock cycle, since the sink data strobe outline 30 is connected to the sink data strobe in line 28. Sink counter will be advanced by 1 to state 1. However, during this clock cycle the delta detect circuitry is performing another compare to see if more data exists in the data buffer (the compare is done every clock cycle). If it were not for look-ahead (to be described in detail hereinafter), the delta detect at this time would compare the source counter at state 1 and the sink counter at state 0 and at the end of the present sink clock cycle activate the sink data strobe out signal 30 again. In other words, without look-ahead in the delta detect circuitry 42, two sink data strobes would be produced for a single data item. However, at this time the look-ahead function is invoked because the sink data strobe in line 28 is active. The result is that the source counter at state 1 is compared to the next state of the sink counter (the next state being 1). The result of this compare is that the two counters are at the same state so there is no more data in the data buffer. Note that if the source system had written two data items into the data buffer on consecutive clock cycles then the compare would probably indicate at this point that there is more data in the data buffer, since the compare would be between the source counter at state 2 and the sink counter at the next-state 1. Expressing the look-ahead situation another way, there are over two sink system clock cycles between the time that the combinatorial compare logic indicates that there is data in the buffer and the time that the sink counter is actually updated. Therefore, because of this lag between detection and counter update look-ahead must be employed in order to prevent the delta detect from erroneously indicating the existence of an extra data item. Detail circuit block diagram for each of the functional block in Fig. 4 will now be described. Fig. 5 shows a detail block diagram for the delta detect circuit means 42. The previously described look-ahead function is not shown in Fig. 5 but will be shown subsequently. The delta detect circuitry 42 includes a compare section identify by numeral 51, section 61 which generate and provide the source data strobe out signal on conductor 26 and section 41 which generate and provide the sink data strobe out signal on conductor 30. The compare function in the delta detect means 42 takes place within three combinational logic functional block labeled 50, 52 and 54. The input to these blocks are the output from source counter means 38 on bus 44 and sink counter means 40 on bus 46. The output from each block are fed through non-block 56, 58 and 60, respectively, into section 61 and 41. Compare block 52 produces a logical output for the function "source counter (A) equal sink counter (B). This output is used as the non-look-ahead compare for both the source and the sink data strobe out signals. Compare block 50 produces the logic function "source counter (A) + 1 (or, source counter next-state) equal sink counter (B). This block serve as a look-ahead compare for the source data strobe out signal 26. Similarly, compare block 54 produces the logic function "source counter (A) = sink counter + 1 (or, sink counter next minus state)". This block serve as a look-ahead compare for the sink data strobe out signal 30. Logic block 56, 58 and 60 invert the compare block outputs since the presence of data in the data buffer is indicated by the counters not being equal. That is, when the resulting signals on conductor 80 and 82 and 84 are active, there is the synchronized data in the data buffer. Note that the source and sink counters and the compare functions are implemented such that the signals on lines 80, 82 and 84 are "glitchless". That is, once a signal transition from one state to another, they will remain in the resulting state for at least one clock cycle. Still referring to Fig. 5, shift register latch 62, not gate 64 and attached OR gate 66 are used specifically to develop the source data strobe out signal 26. AND-OR block 64 is used to select either a normal compare or a look-ahead compare based on the state of data strobe in line 24. Not block 66 is used to invert the source data strobe in line 24 so that a normal compare is selected when that signal is inactive. D-type SRL latch 62 is used to synchronize the compare results to the source clocking system. Because both source and sink counter outputs feed into the compare circuitry, the compare outputs are not synchronized with either of the source or sink clocking systems. That is, the compare block outputs may have transition in the middle of either a source or sink clock cycle. Therefore, even though the compare results signal at 88 is glitch-free, synchronizing block 62 is still acquired. The source data strobe out signal 26 is driven directly off the positive side of SR 62. In like manner SRL 70, and OR circuit block 72 and not block 74 are used to develop the sink data strobe out signal 30. AND-OR block select either in normal look-ahead compare based on the state of the sink data strobing signal 28, in conjunction with inverting block 74. D-type SR 70 is used to synchronize the resulting signal on conductor 90 to the sink clocking system in order to produce the sink data strobe out signal 30. Still referring to Fig. 5, it should be noted that if the source data strobe out signal is not required for a particular synchronizer implementation (such as the previously described source control synchronizer) then the logic block that were used only to develop that signal may be omitted. For example, blocks that may be omitted are 50, 56, 62, 64 and 66. Likewise, if the sink data strobe out signal 30 is not required for particular synchronizing implementation such as a sink control synchronizer, then logic blocks 54, 60, 70, 72 and 74 may be omitted. Fig. 6A shows for a 4-bit source counter means 38. The implementation is for a source controlled synchronizer. SRLs 102 and 104 form a 4-state gray code counter. AND gates 1618, 110 and 112 are coupled through appropriate conductors to the SRLs and are used to decode the four states of the counter. AND gate 114 is used to gate the source C clock so that the counts on the ? source data strobe in signal on line 24 is active. The decoded outputs of the source counter 38 are outputted as signals R0, R1, R2, and R3, as well as the write gate output from AND gate 114 (which is labeled "WG" are provided on the lines identified by numeral 44 to the write select circuit shown in Fig. 6C and will be described subsequently. Fig. 6B shows the sink counter means 40 which are implemented as the gray code counter previously described in accordance with Fig. 6A. Since the detail of the sink counter means 40 is substantially the same as source counter means 38, the description given relative to the source counter means 38 is equally applicable and as such will not be repeated. Suffice it to say that the difference between the description of 6A and 6B is that the counter in Fig. 6B is clocked with the sink clocking system. Also output signals So, S1, S2 and S3 are labeled 46 and are fed into read select circuit means 36 of Figure 6C. Fig. 6C shows a block diagram for the write select circuit means 32, the data buffer 34, and the read select circuit means 36. The write select circuit means 32 includes AND gates 140, 142, 144 and 146. The data buffer 34 include SRLs 150, 152, 154 and 156. The read select circuitry 36 includes AND gates 160, 162, 164 and 166 and OR gate 168. The signals labeled 44 from the source counter means 38, Fig. 6A, are fed into the inputs of AND circuits 140-146. Similarly, signal labeled SO-S3 on conductor 46, Fig. 6B, are fed into AND circuit means 160-166. Fig. 6D shows the delta detect circuit means 42 with the look-ahead feature. The function "source counter = sink counter" is generated by AND gates 170, 172, 174, 176 and OR gate 178. The function "source counter equal sink counter next state is generated by AND gates 180, 182, 184, 186 and OR gate 188. AND-OR gate 72 under control of input sink data strobe in line 28, through not gate 74 provides the selection between the two compare functions. SRL 70 synchronizes the compare output on conductor 90 to the sink clocking system identified as sink C clock and sink B clock, respectively. Figs. 7A-7D show a fast data synchronizer which is substantially the same as the one shown in Figs. 6A-6D except that the synchronizer shown in Figs. 7A-7D is configured as a sink controlled synchronizer. In Figs. 6 and 7 corresponding views in the drawings perform corresponding function. Thus, Figs. 6A and 7A show the detail circuitry in block diagram form for the source counter means 38 (Fig. 4). Similarly, Figs. 6B and 7B shows in block diagram form the circuit arrangement for sink counter means 40 (Fig. 4) and so on. Fig. 7A shows a detail block diagram for the source counter means 38. The source counter means 38 includes two SRL 202 and 204. The output from the SRLs are fed into AND blocks 206-212. The outputs from each AND block 206-212 are labeled RO-R3 and indicate the position in the data buffer where incoming data is to be written. The signal labeled in the drawing WG (write gate) is generated from AND block 214. The input to AND block 214 are generated from source C clock on conductor 14 and source data strobe in (SI) on conductor 24. The SRL 202 and SRL 204 are stepped by the B clock input on line 16. Fig. 7B shows a detail block diagram for the sink counter means 40. As with Fig. 7A, the sink counter means 40 include two SRLs identify by numeral 222 and 224. The output from the SRLs are fed over appropriate conductor into AND blocks 226-232. The output from the AND blocks are labeled S0-S3. These output indicate the location in the data buffer 34 from which information is to be extracted. AND block 234 combine signals on conductor 20 and 28 and output a control signal for driving SRL 222 and 224 respectively. Fig. 7C shows detail block diagram for the write select circuit means 32, the data buffer 34 and the read select 36. The write select circuit means 32 comprises of a plurality of AND circuits block identify by numeral 240-246. The input to each AND block includes the previously described WG signal and the outputs are 0 through R3 previously described in Fig. 7A. The data buffer 34 includes SRL 250-256. Each of the SRL are connected through appropriate conductor to one of the AND circuits 240-246. Source B clock signal on conductor 16 and the source data in signal on conductor 12 are fed into each of the SRL. The output from the SRL are fed into AND blocks 260-266. Signals S0-S3 which are previously described and developed are fed into AND blocks 260-266. The output from AND blocks 260-266 are fed on appropriate conductors to R circuit means 268. The output from 268 is a sink data out which appears on conductor 18. Fig. 7D shows a detail block diagrams delta detect with look-ahead circuit means 42. The compare function source counter next state equal sink counter is generated in block 50. Block 50 includes AND blocks 270-276 or block 278 and not block 56. Similarly, the function source counter equals sink counter is generated in circuit 52. Circuit 52 includes AND blocks 280-286, OR block 288 and not block 58. AND/OR block 64 select either output on conductor 80 or 82 and synchronizes the selected output with source C clock and source B clock in SRL 62. The output from SRL 62 is the source data strobe out on conductor 26. It should be noted that compare function "source counter = sink counter" is generated for a non-look-ahead compare, and the compare function "source counter next-state = sink counter is generated for the look-ahead compare. Figs. 8A-8D shows block diagram for a source controlled synchronizer. The figures are helpful in understanding the versatility of the synchronizer. The synchronizers in Figs. 8A-8D synchronizes "deserializes" the data that is synchronized. That is, the width of each data transfer at the input to the synchronizer is 1, but the width of each data transfer at the output of the synchronizer is 2. Fig. 8A shows block diagram for source counter 38. The source counter 38 includes SRLs 302 and 304. The SRL form a 4-bit gray code counter. AND gates 306, 308, 310, and 312 decode the four states. AND gate 314 stops the counter when data is not being transferred, that is, where the source data strobe in signal on line 24 is inactive. The counter decodes output 44, labeled RO, R1, R2, R3, and the write gate output labeled WG. The outputs, that is, R0-R3, and WG are provided to write select circuitry 32 (Fig. 8C). Fig. 8B shows a block diagram of the sink counter 40. Because the synchronizer in Figs. 8A-8D output data width is twice as wide as the data input width, half as many data transfers occur on the output side of the synchronizer as occur on the input side. For the same reason, the sink counter has half as many states as the source counter. SRL 322 forms a two-state counter. The two states are labeled SO and S1, respectively. Fig. 8C shows write select circuitry 32, data buffer 34 and read select circuitry 36. The write select circuitry 32 includes AND gates 340-346. The AND gate allows only one bit at a time to be written into the data buffer comprising of SRL 350-356. The read select circuitry 36 includes gates 360, 362, 364, 366, 368, and 358 are implemented in such that two bits identify as bit 0 and bit 1 are outputted on conductor 18 and 18′ at a time. Fig. 8D shows delta detect with look-ahead circuitry 42. The implementation of this function (that is, the delta detect with look-ahead) is substantially similar to that of the synchronizer provided in Fig. 6C-6D. However, there are some differences due to the deserialization that occurs in the synchronizer. The purpose of the delta detect is to determine when data can be transferred. In the case of a source control synchronizer, the delta detect determines when a good new data item exists in the buffer to be transfer to the sink system. In the synchronizer presented in Fig. 8 a data item on the output side consists of two bits. That is, two bits at a time are transferred from the synchronizer to the sink system. Therefore, the delta detect has been designed to detect when two good bits exist in the buffer. In order for this compare to be performed, only the most significant bit of the source counter is compared with the sink counter. When the positive output of SRL 304 (Fig. 8A) changes from inactive to active, then this indicate that data has been written into the first two buffer position in Fig. 8C (SRLs 350 and 352). Likewise, when the output of SRL 304 changes from active to inactive (negated by the line marked QO going active then this indicates that data has been written into the last two buffer position in Fig. 8C (SRL 354 and 356). Therefore, the delta detect Fig. 8D compare lines QO and Q1 to the sink counters output marked SO and S1 in order to determine when data should be transfer. The signal indicating when data is to be transfer is labeled sink data strobe out on conductor 30. Figs. 9A-9I show a source and sink control synchronizer designed to be used as an elastic buffer. This synchronizer features single bit transfers on both the input and output. Because data is to be transfer into the synchronizer on every source system clock cycle, and because data is to be transfer out of the synchronizer, every sink system clock cycle, no data in strobes are used. The data buffer has 16 buffer positions, each able of holding a single bit, and both the source and sink counters have 16 states. Fig. 9A shows a block diagram for the source counter 38. The sink counter 40 is shown in Fig. 9B. Since they are both implanted identically, the operation of both can be understood by examining the source counter alone in Fig. 9A. Source counter is implemented as a ring counter. Sixteen latches, SRLs 402-432, form the ring counter. The counter is implemented such that one and only one SRL output is active at any one time. Also, the SRLs go active in sequence. For example, if SRL 402's state is a 1 on a given clock cycle, then on the next clock cycle SRL 402's state will become a 0 and SRL 404's state will become a 1. The purpose of gates 434 and 436 is to ensure that only valid states are represented in the ring counter. For example, if due to some glitch in the power supply two SRL's state becomes 1, then gate 434 and 436 ensure that the ring counter returns to a valid state within a finite amount of time. Because of the nature of the ring counter, no decoding of the output of the source and sink counter is required. The write select circuitry 32 is shown in Fig. 9C and the data buffer 34 is shown in Fig. 9D. Note that each source system clock cycle a data bit is written into a data buffer position. Likewise, the read select circuitry 36, which is shown in Fig. 9E, causes a single bit to be read out of the data buffer 34 each sink system clock cycle. The delta detect with look-ahead is shown in Figs. 9F, 9G, 9H and 9I. Note that the purpose of the delta detect in this type of synchronizer is not to control data flow, but to indicate when a data error has occurred. Shown in Fig. 9F is the circuitry which generates the function "source counter next-state - sink counter." The circuitry which generates the function "source counter = sink counter" is shown in Fig. 9G, and the circuitry which generates the function "source counter = sink counter next-state" is shown in Fig. 9H. These three compare function outputs feed into the circuitry in Fig. 9I, where error detection occurs. Because there are no data strobe input signals for this synchronizer, the look-ahead compares are used a little differently than in the other synchronizers which have been presented. The look-ahead compares are used to provide additional assurance of error detection (that is, to insure that no error condition is missed), and to distinguish between overrun and underrun conditions in the synchronizer. This function actually indicates that an error is imminent, before data is actually lost. The functions "source counter next-state = sink counter" (marked 656) and "source counter = sink counter" 696 are ORed together in gate 742. The output of gate 742 is then fed into SRL 62 in order to synchronize this signal to the source system clocking. The output of SRL 62 forms the buffer overrun error signal. The buffer overrun error signal is somewhat equivalent to the source data strobe out signal present in the other synchronizers, except that the buffer overrun error signal has the opposite polarity of the strobe out signal. Note then, that if at a source system clock time, the source counter next-state is equal to the sink counter state, then a buffer overrun error is indicated. That is, if the source counter is about to write the last available buffer position, then an error is indicated, because the next write will cause the loss of data. The generation of the buffer underrun error signal is similar to the generation of the overrun signal. Functions "source counter = sink counter" and "source counter = sink counter next-state" are ORed in gate 744, and gate 744 output is driven to SRL 70 for synchronization to the sink system clocking. In this case, when the sink counter reads the last buffer position containing good data, buffer underrun error condition occurs. Normally, reset circuitry is provided in the elastic buffer so that at power on time, the circuit can be properly initialized. Also, if the elastic buffer has reset capability, the buffer over and underrun error indications which are generated in the circuitry in Fig. 9I can be fed back to the elastic buffer in order to reset it. However, in order to keep the presentation of the elastic buffer as clear as possible, the additional circuitry required to reset this synchronizer is not shown. Normally, this type of synchronizer, when reset, is forced into a state such that the data buffer is "half-full." Therefore, during operation the elastic buffer can both "expand" or "contract," as far as data buffering is concerned. In order to accomplish this type of reset, it is only necessary to force at reset time the source counter to state RO, and the sink counter to state S8. In addition, if desired, the data buffer itself can be forced to a known state. The additional circuitry required in order to provide reset capability is as follows, depending on what method is chosen: dual ported SRLs can be used instead of the single ported type shown, and the second port can be used to force the reset condition. A dual ported SRL contains two C clock inputs, and two data inputs. Each data input is associated with one of the C l ks. Data from any one of the data inputs can be forced into the SRL by activating the appropriate associated C clock. A second method of implementing the reset is to use gates to force the SRLs to the desired state at reset time. AND gates can be placed on the data inputs to the SRLs which must be forced to a "zero" during a reset, and OR gates can be placed on the data inputs to the SRLs which must be forced to a "one" during a reset. At reset time, the appropriate control signals are applied to these gates in order to force the reset state.

Claims: A data synchronizer for receiving data from a source system (12) at a rate determined by a first clock and synchronizing the data to be sent to a sink system (18) at a rate determined by a second clock where the clocks are not generated from a common origin, comprising storage means (34) having a plurality of storage locations with each location being operable for receiving and storing a unit of data, a write select circuit (32) operable for writing data into said storage means, a read select circuit (36) operable for extracting data from said storage means, a first counting means (38) being coupled to said write select circuit and operable when activated by said first clock to indicate a location in said storage means whereat the data is to be written, and a second counting means (40) being coupled to said read select circuit and operable when activated by said second clock to indicate a location in said storage means from which data is to be read; said synchronizer being characterized in that it further comprises: delta detect means (42) for comparing the state of said first counting means with the state of said second counting means in order to establish the filling state of said storage means, and for activating a source data strobe (26) when locations of said storage means are empty in order to signal to the source system that data can be input or activating a sink data strobe (30) when locations of said storage means are full in order to signal to the sink system that data can be output. The data synchronizer according to claim 1 wherein : said first counting means is advanced on any cycle of said first clock for which a data strobe line (24) from the source system is active, and said second counting means (40) is advanced on any cycle of said second clock for which a data strobe line (28) from the sink system is active, and said delta detect means (42) include a look-ahead means enabling said delta detect means, when comparing, to consider the next state of said first counting means instead of the current state thereof when said data strobe line from the source system is active, and to consider the next state of said second counting means instead of the current state thereof when said data strobe line from the sink system is active, thereby obviating the clock cycle delay between the time said delta detect means activate said source data strobe (26) or said sink data strobe (30) and the time that the corresponding counting means is advanced by said data strobe line (24 or 28). The synchronizer according to claim 1 or 2 wherein said write select circuit (32) includes a plurality of logical AND gates (140-146) with each gate being operable for generating a bit. The synchronizer according to claim 1, 2 or 3 wherein said storage means (34) includes a plurality of shift register latches (150-156). The synchronizer according to any one of the preceding claims wherein said read select circuit (36) includes a logical OR gate (168) having a single output and a plurality of inputs, and a plurality of AND gates (160-166) one of each being coupled to an input of the OR gate. The synchronizer according to any one of the preceding claims wherein said first counting means (38) includes : at least two shift register latches (102, 104) being configured into a multi-state gray code counter, a plurality of AND gates (106-112) one of each being coupled to an output of the multi-state gray code counter and operable for decoding a state in said counter, and means (114) operable for stepping the counter through its respective types. The synchronizer according to any one of the preceding claims wherein said second counting means (40) includes : at least two shift register latches (122, 124) said latches being configured into a multi-state gray code counter, a plurality of AND gates (126-132) one of each being coupled to an output of the multi-state gray code counter and operable for decoding a state in said counter, and means (134) operable for stepping the counter through its respective stages.

Inventors: NORMAN, VERNON ROBERTS, SCHRUM, SIDNEY BROWER, JR., WICKER, CHARLES RANDY
Applicants: INTERNATIONAL BUSINESS MACHINES CORPORATION
Application year: 1986
Main classification: H04J3
IPC codes: G06F5, H04M7, H04L7, H04J3