Asynchronous high-speed data interface

Abstract: An asynchronous high-speed data interface for coupling a serial channel to a parallel control unit. A first state machine, running synchronously with the channel transmitter clock, controls the filling of a pair of dual-port input buffers (32) in alternating fashion with data bytes from incoming serial frames that have been deserialized and decoded. A second state machine, running synchronously with a second clock that is asynchronous with the channel transmitter clock, controls the transfer of the data bytes from the selected input buffer (32) to one of a pair of output buffers (44) en route to the control unit. Upon detecting the receipt of the third incoming data byte, the first state machine sets a start latch (74), causing the second state machine to begin transferring data from the selected input buffer to the selected output buffer while the input buffer is still being filled. Means are provided for disregarding the data bytes that have been transferred to the selected output buffer if the frame is ultimately aborted.

Description: Background of the Invention 1. Field of the Invention This invention relates to an asynchronous high-speed data interface for processing serial data frames and, more particularly, to such an interface for processing frames originating from a serial channel and destined for a control unit having a parallel interface. 2. Description of the Related Art Two copending US patent applications, owned by the assignee of this application describe a fiber-optic-extended parallel channel emulator. As described in those applications, the total extended channel consists of a cooperating serial channel, associated with a host processor, which is connected through a serial fiber-optic link to an extender unit coupled to one or more parallel control units. The control units in turn handle devices, especially direct-access storage devices (DASD) such as magnetic disk drives. The serial protocols for communicating over the fiber-optic link and the format of the serial frames transmitted over the link are also described in the above-identified copending application of D. F. Casper et al. The use of the serial fiber-optic link between the serial channel and the extender unit allows control units to be placed up to 3 km from the channel (1 km in the case of certain time-critical control units), as contrasted with a distance of about 400 feet for conventional parallel channels and control units. In the system described in the copending applications referred to above, the channel and the extender unit coupled by the fiber-optic link are timed by clocks which, although having the same nominal frequency, run asynchronously with each other. In the extender unit, frames arriving from the channel are received under the control of a clock that is synchronous with the channel transmitter clock and are later processed under the control of a clock that is used generally to time the extender unit logic and is asynchronous with the channel transmitter clock. Such asynchronism between the receiving of the serial frame and its later processing usually requires that the entire frame be received in an input buffer and checked for validity before the frame is further processed. This requirement significantly limits the data transmission rate and may result in an input buffer overrun if two consecutive frames are spaced two closely together. Further, the necessity of receiving the entire frame in the input buffer before proceeding with later processing increases the effective latency period of the device connected to the control unit. Summary of the Invention A principal object of the present invention is to provide a data interface that handles data that is asynchronous with circuits that later process the data. A further object of the present invention is to provide a data interface that is capable of high-speed operation without data overrun. In general, the present invention contemplates an asynchronous data interface for processing serial data frames, such as those originating from a serial channel, transmitted in synchronism with a first clock in which a first clocked logic circuit operating synchronously with the first clock fills an input buffer with data from the frames. A second clocked logic circuit operating synchronously with a second clock that is asynchronous with the first clock begins emptying data from the buffer before the first clocked logic circuit has completed its filling operation. EP-A-0 247 317 describes apparatus for avoiding errors and inefficiency in a link between a high speed component and a low speed component in a data transfer system. More specifically, in the preferred form of the invention, the frames comprise a start-of-frame (SOF) delimiter (in particular a passive-start-of-frame (PSOF) delimiter), one or more data bytes, one or more cyclic redundancy check (CRC) bytes, and an end-of-frame (EOF) delimiter which may be either a normal disconnect-end-of-frame (DEOF) delimiter or an abort-end-of-frame (AEOF) delimiter. The first clocked logic circuit begins to fill the input buffer in synchronism with the first clock upon detecting an SOF delimiter and, optionally, other non-data bytes such as an architecture identifier (AID) or the like. Upon detecting the receipt of a predetermined number of data bytes, preferably three, the first clocked logic circuit sets a start latch to signal the second clocked logic circuit to begin emptying the data bytes from the input buffer into an output buffer in synchronism with the second clock. The second clocked logic circuit uses a pointer register to address the output buffer. Upon detecting the setting of the start latch, and before initiating the transfer of data from the input buffer to the output buffer, the second clocked logic circuit stores the existing contents of the pointer register in a backup pointer register. As the second clocked logic circuit transfers successive data bytes from the input buffer to the output buffer, it increments a backup byte counter used to keep track of the number of bytes in the output buffer awaiting further processing. The backup byte counter is readable only by the second clocked logic circuit, and not by the logic circuit that further processes the data in the output buffer. Upon detecting the start of an EOF delimiter, the first clocked logic circuit performs a CRC check and sets a pause latch, signaling the second clocked logic circuit to halt temporarily the further transfer of data from the input buffer to .the output buffer. If the EOF delimiter is a normal EOF delimiter, and if the CRC check is satisfactory, the first clocked logic circuit sets a "good" latch, signaling the second logic circuit to complete the transfer of the frame data from the input buffer to the output buffer. On completion of the data transfer, the second clocked logic circuit transfers the contents of the backup byte counter to the principal byte counter that is readable by other logic circuitry. On the other hand, if the EOF delimiter is found to be an abort EOF delimiter, the first clocked logic circuit sets an abort latch, signaling the second clocked logic circuit to abort the transfer sequence. In this case, the second clocked logic circuit restores the contents of the backup pointer register to the principal pointer register, and does not transfer the contents of the backup byte counter to the principal counter. Thus, even though portions of the aborted frame have been transferred to the output buffer, they are, in effect, invisible to the external circuitry and will be overwritten when the next frame is received. By providing this capability for disregarding the portion of an aborted frame that has already been transferred from the input buffer, the present invention permits the transfer of contents from the input buffer to the output buffer before the incoming frame is completely received and checked for validity. By delaying the transfer from the input buffer until a predetermined number of incoming data bytes have been received, one ensures that the second clocked logic circuit will always have data in the input buffer to transfer to the output buffer while the input buffer is being filled. Brief Description of the Drawings Fig. 1 is a schematic block diagram of an extended channel incorporating an interface constructed in accordance with the present invention. Fig. 2 is a schematic block diagram of the extender unit of the extended channel shown in Fig. 1. Fig. 3 is a schematic block diagram of the input buffer and associated circuitry of the extender unit shown in Fig. 2. Fig. 4 is a schematic block diagram of the latching circuitry associated with the circuitry shown in Fig. 3. Fig. 5 is a schematic block diagram of the data buffer pointer registers associated with the data buffers shown generally in Fig. 2. Fig. 6 is a schematic block diagram of the byte counters associated with each of the data buffers shown generally in Fig. 2. Fig. 7 is a timing diagram illustrating the processing of a normal write data frame by the extender unit shown in Fig. 2 Fig. 8 is a timing diagram illustrating the processing of an aborted write data frame by the extender unit shown in Fig. 2. Fig. 9 is a flow diagram illustrating the operation of the In Buffer Fill State Machine (IBFSM) of the extender unit shown in Fig. 2. Fig. 10 is a flow diagram illustrating the operation of the In Frame State Machine (INFRSM) of the extender shown in Fig. 2. Description of the Preferred Embodiment Referring first to Fig. 1., a system 10 incorporating the present invention includes a host processor 12, which communicates by way of a parallel bus (not separately shown) with a channel 14. Channel 14, in turn, communicates serially with a channel extender unit 22 by way of a duplex fiber-optic link 16 comprising an outbound conductor 18 for transmitting information from the channel 14 to the extender unit 22 and an inbound conductor 20 transmitting information back from the extender unit 22 to the channel 14. Extender unit 22 in turn communicates with one or more control units (CUs) 26 by way of a parallel interface 24 comprising bus and tag lines. The protocols governing the serial link communications between the channel 14 and the extender unit 22 are described in the copending application of D. F. Casper et al. referred to above. The serialized characters flowing on the serial link 16 are described in Franaszek et al. U.S. Patent 4,486,739. If the link 16 is idle, then only idle characters flow in either direction. If either conductor of the link 16 becomes non-idle, then this means that a frame is flowing in that direction. Frames may flow in both directions on the link 16 simultaneously. A normal frame conforming to the protocol referred to above consists of a two-character passive-start-of-frame (PSOF) delimiter, an architecture identifier (AID) character, from 1 to 130 frame contents characters, and two cyclic redundancy check (CRC) characters followed by a three-character disconnect-end-of-frame (DEOF) delimiter. An outbound frame originating from the channel 14 can contain from 1 to 18 frame contents characters, while an inbound frame originating from the extender unit 22 can contain from 1 to 130 frame contents characters. Four types of outbound frames (command, data, control and test) and four types of inbound frames (status, data, control and test) are defined in the protocol identified above. Data frames are variable in length, and contain from 1 to 16 data bytes, and are used to transfer data between the main storage (not shown) associated with the channel 14 and host processor 12 and the devices attached to control units 26. Referring now to Fig. 2, extender unit 22 contains a receiver/deserializer/decoder (RX/DESR/DEC) 28, hereinafter simply "decoder", which converts serialized light pulses to electrical signals, accumulates successive groups of ten serial bits into ten-bit transmission code characters, and converts the ten-bit transmission code characters to eight-bit format characters containing bits 0 to 7, a "K" bit and an odd parity bit (P). The K bit is used to distinguish the special ten-bit transmission codes (K characters) used as idle characters, frame delimiters and special continuous sequences from data characters, as described in U.S. Patent No. 4,486,739, referred to above. A first clocked logic circuit, more specifically, an In Buffer Fill State Machine (IBFSM) 30, to be described in detail further below, detects the arrival of a frame from the channel 14 (Fig. 1), checks the frame including the CRC characters for validity and stores the frame in one of two dual-port buffers constituting the In-frame Buffers (IBs) 32. A frame is considered arriving into extender unit 22 if an SOF delimiter is received, which usually occurs after receiving one or more idle characters. Each storage location of buffers 32 stores 9 bits, i.e. data bits 0-7 and the parity bit P; the K bit is not stored since it is always 0 for a data character. Each of the two dual-port buffers which together constitute IBs 32 is capable of holding 20 characters, which is sufficient for the maximum outbound frame contents of 18 characters plus 2 CRC characters. The CRC characters are written into IBs 32 since they cannot be recognized as CRC characters in advance of receiving the first K character of the DEOF delimiter. They are also used for logout purposes in case a CRC error is detected by IBFSM 30. A second clocked logic circuit, more specifically, an In Frame State Machine (INFRSM) 34, controls the transfer of incoming data from the in-frame buffers 32 to storage means, more particularly, a pair of data buffers (DBs) indicated collectively by the reference number 44 and comprising a pair of individual buffers 44a and 44b (Fig 5). For the purposes of this disclosure in-frame buffers 32 may be regarded as the input buffers and data buffers 44 may be regarded as the output buffers, since it is data transfers from the former to the latter with which the present invention is concerned. INFRSM 34 also moves portions of the frame into a set of in-frame registers (INFRREGS) to decode the type of frame being processed. If it is a command frame, INFRSM 34 sends it to an Initial Selection State Machine (ISSM) 40 for execution. Certain control frames and all test frames, on the other hand, are executed by a microprocessor 38 ("CODE" in Fig 2) running under the control of stored microcode. Microprocessor 38 is also responsible for reset and initialization sequences, error detection and reporting, and diagnostic controls. A Parallel Data Transfer State Machine (PARDXSM) 46, operating under the supervisory control of ISSM 40, controls the transfer of data from data buffers 44 to parallel interface 24 by way of NPL driver/receiver module (NPLD/R) 42. Module 42 converts the extender unit signal levels to those required to drive interface 24. PARDXSM 46 also controls the transfer of data in the other direction, from interface 24 through module 42 to data buffers 44, in the case of a read operation. An Out Frame State Machine (OUTFRSM) 48 controls the subsequent transfer of read data from data buffers 44 to an encoder/serializer/transmitter (TX/SER/ENC) 52, which encodes successive bytes into a suitable transmission format, converts the parallel bytes to serial form, and transmits the serial signal as light pulses on conductor 20 to channel 14 (Fig. 1). OUTFRSM 48 operates in conjunction with a set of out-frame registers (OUTFRREGS) 50. Decoder 28 and IBFSM 30 are timed by a Receive Byte Clock (RBC), internal to decoder 28, which uses the incoming signal from channel 14 (Fig. 1) to generate a clock that is synchronous with the channel transmitter clock. On the other hand, INFRSM 34, PARDXSM 46 and the other clocked logic circuits of extender unit 22 are timed by a Transmit Byte Clock (TBC) which, while having the same nominal frequency (e.g., 20 MHz) as the Receive Byte Clock (RBC), runs asynchronously relative thereto. Referring to Fig. 3, input buffers 32 comprise a pair of dual-port buffers 32a (IB1) and 32b (IB2). A first port of each of buffers 32a and 32b receives parallel data inputs from an IBIN register (IBINREG) 54 contained in decoder 28. IBINREG 54 also supplies its output to a decoder 56 of IBFSM 30, which detects the presence of a K character as distinguished from a data character, the type of K character if present, and whether an AID character conforms to the protocol (i.e., is a hex '00'). IBINREG 54 additionally supplies its output to a CRC generator/checker 58 contained in IBFSM 30, which performs a CRC check on the frame being received. The first ports of buffers 32a and 32b also receive write inputs from respective AND gates 60 and 62, each of which receives one input from a WRIB line of IBFSM 30. Gate 60 receives a second input from a complemented SELWRIB line from IBFSM 30, while gate 62 receives a second input from a SELWRIB line also originating from IBFSM 30. Finally, the first port of each of buffers 32a and 32b receives a write address input from an in-pointer register (IBINPTR) 154 of IBFSM 30. IBFSM 30 activates the WRIB line synchronously with the RBC clock to transfer a byte of incoming data from IBINREG 54 to the buffer 32a or 32b determined by the logic level of SELWRIB. IBFSM 30 also includes a pair of input buffer counters 158a and 158b (Fig. 3), which it uses to maintain respective counts IBINCTR1 and IBINCTR2 of the number of data bytes in input buffers 32a and 32b awaiting processing by INFRSM 34. Referring now to Fig. 4, IBFSM 30 contains various latches for communicating control signals across the asynchronous boundary dividing IBFSM 30 and INFRSM 34 (Fig. 2). Thus, IBFSM 30 contains a pair of RBCSTART latches 74, one for each of buffers 32a and 32b, a single RBCPAUSE latch 76, a pair of RBCGOOD latches 78, and a pair of RBCABORT latches 80. For simplicity of exposition, only a single latch of each of the paired latches 74, 78 and 80 is shown in Fig. 4. Latches 74-80 receive respective set inputs from lines 82, 86, 90 and 94 from IBFSM 30 and reset inputs from respective OR gates 100, 102, 104 and 106. OR gates 100-106 receive respective first inputs from lines 84, 88, 92 and 96 from IBFSM 30 and each receive a second input from a hardware reset (HWRST) line 98 originating from microprocessor 38 (Fig. 2). Each of latches 74-80, in a manner well known in the art, comprises an input latch followed by an output latch and receives clocking signals from a pair of lines 108 (shown in Fig. 4 as a single line) originating from the Receive Byte Clock (RBC). The respective clocking signals supplied to latches 74-80 are so timed that, on each cycle of the Receive Byte Clock (RBC) the input latch half is loaded with the information appearing at the latch inputs, following which that information is transferred from the input latch half to the output latch half. In a similar manner, INFRSM 34 contains a pair of TBCSTART latches 110, a single TBCPAUSE latch 112, a pair of TBCGOOD latches 114, and a pair of TBCABORT latches 116. For simplicity of exposition, latches 110, 114 and 116, although paired to correspond with respective buffers 32a and 32b, are each shown as only a single latch in Fig. 4. TBCPAUSE latch 112 is a polarity hold latch which, as shown in Fig. 4, receives its D-input directly from the output of RBCPAUSE latch 76. The output of latch 112 takes on the new value appearing at the D-input on each TBC clock cycle. Latches 110, 114 and 116 receive respective set inputs from OR gates 132, 136 and 140, each of which receives one input from the corresponding latch in IBFSM 30 and a second input from a line 118, 120 or 122 originating from the microprocessor 38. Lines 118-122 are used for diagnostic purposes only and are normally inactive. Likewise, latches 110, 114 and 116 receive respective reset inputs from OR gates 134, 138 and 142, each of which receives one input from HWRST line 98 and a second input from a line 124, 126 or 128 originating from INFRSM 34. Finally, each of latches 110-116 receives clocking signals from a pair of lines 130 (shown as a single line in Fig. 4) originating from the Transmit Byte Clock (TBC). As in the case of latches 74-80 of IBFSM 30, latches 110-116 of INFRSM 34 each comprise an input latch half and an output latch half, which are consecutively triggered on each cycle of the Transmit Byte Clock (TBC). Considering again the RBC side of the RBC-TBC asynchronous boundary shown in Fig. 4, IBFSM 30 also includes a pair of RBCSTARTSYNC latches 152 corresponding respectively to input buffers 32a and 32b. Latches 152 are polarity hold latches, similar to TBCPAUSE latch 112, which receive clock inputs from RBC lines 108 and respective D-inputs from the corresponding IBSTART outputs of TBCSTART latches 110. IBFSM 30 uses latches 152 to determine, prior to filling a selected input buffer 32a or 32b with data from a frame, whether the buffer has been emptied of data from a previous frame by INFRSM 34. Referring again to Fig. 3, INFRSM 34 also contains an in-frame buffer output register (IBOUTREG) 72, which receives gated outputs from respective buffers 32a and 32b. Thus, if a signal SELRDIB generated by INFRSM 34 is low, IBOUTREG 72 receives data from the second port of buffer 32a by way of gate 64, while if SELRDIB is high, IBOUTREG 72 receives data from the second port of buffer 32b by way of gate 70. Respective gates 66 and 68 supply the second port of a selected buffer 32a or 32b with a RDIB signal generated by INFRSM 34 synchronously with the TBC clock, the selection depending on the logic level of the SELRDIB signal also generated by INFRSM 34. An input buffer out-pointer register (IBOUTPTR) 156 similar to in-pointer register 154 of IBFSM 30 is used by INFRSM 34 to address via the second port the location of the selected buffer 32a or 32b from which data is read. Referring to Fig. 5, INFRSM 34 also includes a data buffer in-pointer register (DBINPTR) 144, which it uses to address the selected buffer 44a or 44b to transfer bytes thereto from IBOUTREG 72. Associated with DBINPTR 144 is a backup pointer register (DBINPTRBU) 146. Upon receiving an IBSTART signal from the selected latch 110 (Fig. 4), INFRSM 34 transfers the existing contents of DBINPTR 144 to DBINPTRBU 146. In the event of a subsequent IBABORT signal from the selected TBCABORT latch 146 (Fig. 4), the previously saved contents are restored to register 144 from backup register 146. In this manner, in the event that an incoming frame is aborted, INFRSM 34 in effect disregards the existence of any bytes of the aborted frame that it has written into DB 44. Referring now to Fig. 6, for each of the two buffers of DB 44, INFRSM 34 and PARDXSM 46 share a byte counter (BC) 148 and a backup byte counter (BCBU) 150. Counters 148 and 150 are used to keep track of the number of bytes in the corresponding buffer 44a or 44b awaiting processing by PARDXSM 46. Thus, upon each transfer of a byte from the selected buffer 32a or 32b to the selected buffer 44a or 44b, INFRSM increments BCBU 150. Similarly, upon reading each byte of data from the selected buffer 44a or 44b during channel read operations, PARDXSM decrements the BC 148 and BCBU 150 corresponding to that buffer. PARDXSM 46 also increments the selected BC 148 each time it transfers a byte of data to the selected buffer 44a or 44b from the parallel interface 24 during channel write operations. As is apparent from this description, INFRSM 34 increments only the backup counter 150 as it is transferring data from the selected buffer 32a or 32b to the selected buffer 44a or 44b. Upon subsequently receiving an IBGOOD signal from the selected TBCGOOD latch 114 (Fig. 4), and following the termination of any decrementing signal from PARDXSM 46, INFRSM 34 transfers the byte count from the selected backup counter 150 to the selected counter 148. On the other hand, in the case of an aborted frame, and following the termination of any decrementing signal from PARDXSM 46, INFRSM 34 restores the byte count from the end of the previous frame from counter 148 to backup counter 150. Since counter 148 is the only one of each pair of counters 148 and 150 that is readable by PARDXSM 46, INFRSM 34 in effect masks the byte count for the selected buffer 44a or 44b from PARDXSM 46 until INFRSM has established that the incoming frame is good. The operation of IBFSM 30 for a valid write data frame will now be described, with particular reference to Figs. 7 and 9. Normally, when incoming line 18 from channel 14 carries idle (K28.5) characters, IBFSM 30 remains in state 0. While in this state IBFSM 30 continually enters a loop in which it examines the output of IBINREG 54 by way of decoder 56 for a start of frame (SOF) delimiter consisting of a K28.5 character ("SOF.5" in Figs. 7 and 9) followed by a K28.7 character ("SOF.7" in Figs. 7 and 9). Upon receiving such a succession of K characters, and if the selected start as indicated by the selected RBCSTARTSYNC latch 152 is inactive, IBFSM 30 enters state 1. If at this time the selected RBCSTARTSYNC latch 152 is active, IBFSM 30 sets an "overrun pending" error condition, since INFRSM 34 has not finished processing data from the selected input buffer 32a or 32b. Upon entering state 1, IBFSM 30 monitors IBINREG for either the correct AID character (in this particular example a hex '00') or the first character K28.6 ("EOF.6" in Fig. 9) of an AEOF delimiter; detection of any other character will set a pending error condition. If such an AID character is received, IBFSM then enters state 2 (Fig. 9) to start the normal data-handling loop for writing incoming data into the selected input buffer 32a or 32b. On entering state 2, IBFSM 30 begins writing the incoming data bytes into the selected buffer 32a or 32b of IB 32, one byte per RBC clock cycle, beginning with the first data byte following the AID character. IBFSM 30 increments IBINPTR 154 each time it writes a data byte into the selected input buffer 32a or 32b. IBFSM 30 also cycles each data byte through the CRC checker 58. Upon receiving the third such byte following the AID character, IBFSM 30 sets the selected RBCSTART latch 74 (Fig. 4). This results in the setting of the corresponding TBCSTART latch 110 on the next TBC clock cycle. The selected IBSTART signal generated by the selected TBCSTART latch 110 tells INFRSM 34 to begin transferring data from the selected input buffer 32a or 32b to the selected output buffer 44a or 44b, one byte at a time in synchronism with the TBC clock. Also at this time, IBFSM 30 begins incrementing the selected counter 158a or 158b for each byte transferred from IBINREG 54 to the selected buffer 32a or 32b. IBFSM 30 delays incrementing the selected counter 158a or 158b until the transfer of the third data byte to the selected register 32a or 32b because, as noted above, the two terminal CRC characters appear to be data bytes and are not recognized as CRC characters until the following K28.6 character of an EOF delimiter is detected. Ignoring the first two data characters compensates the byte count for the two CRC characters necessarily included in the count. As a result, INFRSM 34, which bases its actions on the contents of the selected counter 158a or 158b, will not transfer the CRC characters from the selected input buffer 32a or 32b to the selected data buffer, even though the CRC characters have been loaded into the input buffer. IBFSM 30 continues to fill the selected buffer of DB 32 with bytes from IBINREG 54 and to increment IBINPTR 154 and the selected counter 158a (IBINCTR1) or 158b (IBINCTR2) in this fashion until it detects the reception of a K28.6 character, which indicates the beginning of either a disconnect-end-of-frame (DEOF) delimiter (K28.6-K28.1-K28.1) or an abort-end-of-frame (AEOF) delimiter (K28.6-K28.4-K28.4). Upon detecting such a K28.6 character, and if the selected RBCSTARTSYNC latch 152 (Fig. 4) is active, IBFSM 30 sets the RBCPAUSE latch 76 (Fig. 4). This results in the setting of the TBCPAUSE latch 112 on the next TBC clock cycle. The IBPAUSE signal generated by TBCPAUSE latch 112 tells INFRSM 34 to halt the further transfer of data from IB 32 to DB 44. IBFSM 30 also stops writing data into the selected buffer 32a or 32b and transitions to state 3. While in state 3, IBFSM 30 expects either a K28.1 character ("EOF.1" in Fig. 9) or a K28.4 character ("EOF.4" in Fig. 9) from IBINREG 54 of decoder 28. Detection of a K28.1 character indicates that a DEOF delimiter is being received, and IBFSM 30 transitions to state 4. While in state 4, IBFSM 30 monitors IBINREG 54 of decoder 28 for another K28.1 character. Detection of the second K28.1 character indicates the completion of a valid DEOF delimiter, causing IBFSM 30 to reset the selected RBCSTART latch 74 (Fig. 4), verify that the CRC check as indicated by circuit 58 (Fig. 3) is correct, set the selected RBCGOOD latch 78 (and thus the selected IBGOOD signal on the next TBC clock cycle) if the CRC check is good, toggle its SELWRIB pointer (Fig. 3), and transition to state 5. Setting the selected RBCGOOD latch 78 signals INFRSM 34 that the latter may continue with processing the frame and may regard it as a valid frame for the purpose of updating the registers and counters shown in Figs. 5 and 6. If the CRC check had not been good, the selected RBCGOOD latch would not have been set, and a CRC error condition would be set instead. In response this error condition, or any other error condition, microprocessor 38 generates a logout and resets the state machines and associated latches by pulsing HWRST line 98. While in state 5, IBFSM 30 expects either a K28.5 (idle) character or the first character (K28.6) of an AEOF delimiter. Upon detecting a K28.5 character, IBFSM 30 resets the RBCPAUSE latch 76 (and thus the IBPAUSE signal on the next TBC clock cycle) and returns to the idle state (state 0). The above description of the operation of IBFSM 30 assumed the reception of a valid write data frame terminated by a normal DEOF delimiter. If while in state 3, IBFSM 30 had detected a K28.4 character, indicating an AEOF delimiter rather than an DEOF delimiter, IBFSM 30 would transition to state 7, as shown in Fig. 8, instead of state 4. While in state 7, IBFSM 30 would monitor the output of IBINREG 54 of decoder 28 for another K28.4 character. Detection of the second K28.4 character completes a valid AEOF delimiter and causes IBFSM 30 to reset the selected RBCSTART latch 74. Further, if RBCPAUSE latch 76 is active, IBFSM 30 sets the selected RBCABORT latch 80, toggles the SELWRIB pointer, resets any pending error condition and transitions to state 5. Once it reaches state 5, IBFSM 30 functions in the manner described above for a valid write data frame. IBFSM 30 transitions to state 6 if it detects a K28.6 character while in state 0 or state 1, or while in state 2 if the selected RBCSTARTSYNC latch 152 is inactive. IBFSM 30 also transitions to state 6 after resetting the RBCPAUSE latch 76 if it detects a K28.6 character while in state 5. While in state 6, IBFSM monitors IBINREG 54 of decoder 28 for a K28.4 character. Detection of such a character indicates that an AEOF delimiter is being received. IBFSM 30 resets the selected RBCGOOD and RBCABORT latches 78 and 80 and transitions to state 7, at which point it operates in the manner described above. Latches 74-80, together with counters 158a (IBINCTR1) and 158b (IBINCTR2), are the means by which IBFSM 30 communicates with INFRSM 34 across the asynchronous interface between the circuitry controlled by the Receive Byte Clock (RBC) and that controlled by the Transmit Byte Clock (TBC). Each of RBC latches 74-80, when set, is set to remain on for at least two RBC clock cycles to ensure that at least one complete asynchronous TBC clock cycle is encompassed. This ensures that INFRSM 34 detects the setting of the RBC latch. The operation of INFRSM 34 for a valid write data frame will now be described with reference to Figs. 7 and 10. Normally, INFRSM 34 loops in its own state 0, monitoring the asynchronous interface for an active IBSTART signal from the selected TBCSTART latch 110. Upon detecting such a signal, INFRSM 34 reads the first data byte from the selected buffer 32a or 32b and sequences to state 1. Also at this time, INFRSM 34 transfers the contents of pointer register (DBINPTR) 144 (Fig. 5) to backup pointer register (DBINPTRBU) 146, so that the previous pointer position may be restored if the frame is ultimately aborted. As noted above, the first byte written into the selected buffer 32a or 32b will always be the op/flags byte. INFRSM 34 updates an op/flags register (OPFLGSREG) of INFRREGS 36 and decodes the op/flags byte to determine the type of frame arriving from channel 14. In the system described in the above-identified copending application, the frame arriving from channel 14 will always be (1) a command frame, having a fixed length of six data characters; (2) a control frame, having a fixed length of three data characters; (3) a data frame having a variable length of 1-17 data characters as indicated by the selected counter 158a or 158b; or (4) a test frame having a length of 1-18 data characters as indicated by the selected counter 158a or 158b. Also during state 1, INFRSM 34 monitors the asynchronous interface for an active IBPAUSE, IBGOOD, or IBABORT indication from IBFSM 30, the IBGOOD and IBABORT indications monitored being, of course, those for the selected buffer 32a or 32b. If none of these indications are active, INFRSM 34 will read the next byte from the selected buffer 32a or 32b and sequence to the next state, which is determined by the frame type that is being executed. It will be assumed for the purpose of the following description that the incoming frame, as indicated by the op/flags byte, is a write data frame. Other types of frames, however, may be processed in a similar manner. Assuming, as stated above, that the incoming frame is a write data frame, INFRSM 34 enters state B or state D, depending on the contents of IBOUTPTR 156 and the selected IBINCTR 158a or 158b and the logic levels of IBPAUSE and IBGOOD. If both the selected IBPAUSE and the selected IBGOOD are inactive, or if the selected IBGOOD is active but IBOUTPTR does not equal IBINCTR, INFRSM 34 changes from state 1 to state B. As shown in Fig. 7, upon entering state B, INFRSM 34 begins to transfer data from the selected buffer 32a or 32b (Fig. 3) to the selected buffer 44a or 44b (Fig. 5), incrementing IBOUTPTR, DBINPTR 144 (Fig. 5) and the selected BCBU 150 (Fig. 6) as it does so. During this time, INFRSM 34 constantly monitors the asynchronous interface (Fig. 4) for a signal from the IBPAUSE line or from the selected IBGOOD or IBABORT line. Upon detecting an IBPAUSE signal, INFRSM 34 temporarily halts the transfer of data from the selected buffer 32a or 32b to DB 44 and incrementing of the pointer IBOUTPTR, and awaits an IBGOOD or IBABORT signal from the selected TBC latch 114 or 116. Upon subsequently detecting an IBGOOD signal from the selected TBCGOOD latch 114 (Fig. 4), INFRSM 34 compares IBOUTPTR with IBINCTR. If IBOUTPTR is less than IBINCTR, INFRSM 34 continues to transfer bytes from the selected buffer 32a or 32b to the selected buffer 44a or 44b, incrementing IBOUTPTR, DBINPTR 144 (Fig. 5) and the selected BCBU 150 (Fig. 6) as it does so. When, finally, IBOUTPTR equals IBINCTR, INFRSM 34 changes to state D, where it transfers the contents of the selected BCBU 150 (Fig. 6) to the selected BC 148 to reveal the new byte count to PARDXSM 46. INFRSM then toggles its SELRDIB pointer (Fig. 3) and resets the selected TBCSTART and TBCGOOD latches 110 and 114 (Fig. 4) before returning to the idle state (state 0). Usually, as in the example shown in Fig. 7, the incoming write data frame will contain a sufficient number of bytes that INFRSM 34 will transition to state B before transitioning to state D. Occasionally, however, in the case of a very short frame, IBOUTPTR will already be equal to IBINCTR when the selected IBGOOD latch is set. In such a case, INFRSM 34 changes directly from state 1 to state D, without passing through state B as an intermediary state. Otherwise, the manner of operation is similar to that described above. If an incoming write data frame is aborted, then INFRSM 34 will detect an IBABORT signal from the selected TBCABORT latch 116 (Fig. 4) as shown in Fig. 8, rather than an IBGOOD signal from the selected TBCGOOD latch 114 as shown in Fig. 7. In such a case, INFRSM 34 halts any further transfer of data from the selected input buffer 32a or 32b, if it has not already done so, and transitions to state C instead of state D. On entering state C, INFRSM 34 transfers the contents of the backup pointer register (DBINPTRBU) 146 to the principal pointer register (DBINPTR) 144 (Fig. 5) and transfers the contents of the selected byte counter (BC) 148 to the selected backup byte counter (BCBU) 150 (Fig. 6). The latter two transfers in effect restore registers 144 and 146 and counters 148 and 150 to their former state, as it existed before the arrival of the aborted frame. That portion of the aborted frame which may have been transferred to DB 44 is, in effect, masked from PARDXSM 46, and INFRSM 34 will overwrite the data from the aborted frame when the next incoming frame from channel 14 is received. After these operations have been performed, INFRSM 34 toggles its SELRDIB pointer (Fig. 3), resets the selected TBCSTART and TBCABORT latches 110 and 116 (Fig. 4) and returns to state 0. In effect, the state of the hardware remains unaltered, as if the aborted frame had never been received. As shown in Fig. 7, the processing of a 16 byte write data frame is overlapped across the asynchronous interface, with the selected buffer 32a or 32b being emptied by INFRSM 34 while it is being filled with incoming data by IBFSM 30. As shown in that figure, the total processing period, which begins with the reception of the initial K28.5 character of a PSOF delimiter and ends with the resetting of the TBC latches by INFRSM 34, spans 28 clock cycles. By contrast, the total processing period would span 41 cycles if the processing by INFRSM 34 were to be delayed until IBFSM 30 had detected the final K28.1 character of the DEOF delimiter. Although the asynchronous data interface of the present invention finds special application in the channel extender unit described herein, it is not limited to use in such a unit, nor is it limited to systems using fiber-optic links. It could, for example, also be used in the serial channel itself for the reception of serial frames from the extender unit. More generally, the data interface of the present invention could be used in any application where there is the need to process incoming serial frames before they are completely received or checked for validity.

Claims: An asynchronous interface for processing serial frames of data transmitted in synchronism with a first clock, said interface comprising means (28) for deserializing said data synchronously with said first clock, a buffer (32), first means (30) for filling said buffer with said deserialized data synchronously with said first clock, and second means (34) for processing said data from said buffer synchronously with a second clock asynchronous with said first clock, said second means beginning said processing operation before said first means has completed said filling operation. An interface as in claim 1 in which said buffer comprises a first buffer (32a), said interface further comprising a second buffer (32b), said first means alternatingly filling said first buffer (32a) and then said second buffer (326) with said frames. An interface as in claim 1 in which said frames contain data bytes and frame delimiter bytes, said first means (30) beginning said filling operation upon the receipt of a data byte. An interface as in claim 1 in which said second means (34) begins processing data from said buffer (32) upon the filling thereof with a predetermined portion of a frame. An interface as in any of the above claims in which said buffer (32) is a dual-port buffer, said first means filling said buffer through one port and said second means processing said data from said buffer (32) through another port. An interface as in further comprising a latch (74), said first means (32) setting said latch (74) upon the receipt of a predetermined number of data bytes from a frame, said second means (34) beginning said processing operation in response to the setting of said latch. An interface as in claim 1 further comprising storage means (44), said second means (34) transferring successive bytes of said data from said buffer (32) to said storage means (44). An interface as in claim 7 further comprising a first counter (148) and a second counter (150), said second means (34) incrementing said first counter (148) upon the transfer of each byte of data from said buffer (32) to said storage means (44), said second means (34) transferring the contents of said first counter (148) to said second counter (150) only upon the transfer of a valid frame from said buffer (32) to said storage means (44). An interface as in claim 7 further comprising a first register (144) and a second register (146), said second means (34) transferring the contents of said first register (144) to said second register (146) before initiating the transfer of said data from said buffer (32) to said storage means (44), said second means (34) incrementing said first register (144) upon the transfer of each byte of data from said buffer (32) to said storage means (44), said first means (30) generating an abort signal upon the detection of an invalid frame, said second means (34) transferring the contents of said second register (146) back to said first register (144) upon the detection of said abort signal from said first means (30). An interface as in claim 9 in which said storage means (44) has an address input coupled to said first register (144). A method of processing serial frames of data transmitted in synchronism with a first clock, including the steps of deserializing (28) said data synchronously with said first clock, filling a buffer (32) with said deserialized data synchronously with said first clock, and processing said data from said buffer (32) synchronously with a second clock asynchronous with said first clock, said processing step being begun before said filling step is completed. A method as in claim 11 in which a second buffer (32b) is filled with said frames alternatingly with a first buffer (32a). A method as in claim 11 in which said frames contain data bytes and frame delimiter bytes, said filling step being begun upon the receipt of a data byte. A method as in claim 11 in which said processing step is begun upon the filling of said buffer (32) with a predetermined portion of a frame. A method as in claim 11 including the steps of incrementing a first count as successive bytes are written into said buffer, incrementing a second count as successive bytes are processed from said buffer, and halting the further processing of data from said buffer when said second count equals said first count. A method as in claim 11 in which each of said frames contains n CRC bytes followed by an end-of-frame delimiter, the incrementing of said first count being inhibited for the first n bytes written into said buffer. A method as in claim 11 in which each of said frames contains an end-of-frame delimiter, said processing step being interrupted upon the receipt of said delimiter. A method as in claim 17 including the step of checking the validity of said frame following the receipt of said delimiter. A method as in claim 18 including the step of continuing said processing step upon the detection of a valid frame. A method as in claim 18 including the step of terminating said processing step upon the detection of an invalid frame. A method as in claim 11 in which said processing step includes the step of transferring successive bytes of said data from said buffer (32) to storage means (34). A method as in claim 21 in which said transfer of data from said buffer (32) to said storage means (44) is cancelled upon the detection of an invalid frame. A method as in claim 21 including the steps of incrementing a first counter (148) upon the transfer of each byte of data from said buffer (32) to said storage means (44) and transferring the contents of said first counter (148) to a second counter (150) only upon the transfer of a valid frame from said buffer (32) to said storage means (44). A method as in claim 21 including the steps of transferring the contents of a first register (144) to a second register (146) before initiating the transfer of data from said buffer (32) to said storage means (44), incrementing said first register (144) upon the transfer of each byte of data from said buffer (32) to said storage means (44), and transferring the contents of said second register (146) back to said first register (144) upon the detection of an invalid frame. A method as in claim 24 in which said first register (144) is used to address said storage means (44) for the transfer of data from said buffer.

Inventors: MINASSIAN VAHE ARPAK, MIRACLE GERALD HOLT, NEUNER RICHARD ANDREW, POTVIN PETER LLOYD, MINASSIAN, VAHE ARPAK, MIRACLE, GERALD HOLT, NEUNER, RICHARD ANDREW
Applicants: IBM, INTERNATIONAL BUSINESS MACHINES CORPORATION
Application year: 1990
Main classification: G06F5
IPC codes: G06F13, G06F5, H04L13