USRE31319E - Digital data communication system - Google Patents
- ️Tue Jul 19 1983
1. Field of the Invention
This invention relates to digital transmission systems and, more particularly, to digital transmission by asynchronous message switching on a common time-divided transmission loop.
2. Description of the Prior Art
It is often desirable to exchange digital information between digital machines. If such machines are separated by any significant geographic distance, it has heretofore been necessary to either purchase or lease a dedicated transmission facility between such machines, or to arrange a temporary connection between such machines by means of common carrier, switched transmission facilities. Since it is the nature of digital machines to require large amounts of digital channel capacity, but only for brief periods and only occasionally, the heretofore available facilities described above have proven very inefficient for this use. Dedicated transmission facilities, for example, remain unused the vast majority of the time. Switched, common carrier facilities tend to be restricted in bandwidth to voice frequencies and hence are not immediately adaptable to high speed digital transmission.
A further problem with switched facilities is the fact that it often takes more time to set up the transmission path than is required for the entire transmission of data. The telephone network requires real time transmission in the sense that signals must be delivered substantially at the same time they are generated. It therefore is standard procedure to set up the communication path in its entirety before any signals are transmitted. As a result, centralized switching has been used in the telephone plant. Digital transmission of data, on the other hand, need not be done in real time and hence it is wasteful to set up an entire connection prior to transmission. These facts tend to make presently available interconnection facilities uneconomical for intermachine digital communications.
It is therefore an object of the present invention to provide improved digital transmission between digital machines.
It is another object of the present invention to allow digital machines having widely varying data handling capabilities to communicate efficiently and ecomonically.
It is a further object of this invention to provide a system which allows a digital machine to communicate with a plurality of other digital machines without the need for reprogramming that machine when the number or capabilities of machines in the system is changed.
It is a still further object of this invention to provide an algorithm which takes advantage of the inherent characteristics of digital machines to provide a more efficient method of using transmission resources.
SUMMARY OF THE INVENTIONThese objects are achieved in accordance with this invention by a system of interconnected transmission loops. The system includes a plurality of interconnected switching units which comprise general-purpose programmable digital computers. Each switching unit has at least one transmission loop connected to it. Each loop includes at least one loop access module and each module has attached to it a terminal interface unit to which a digital device is connected.
Each switching unit controls the data transmission to and from the digital devices that are attached to its transmission loops. Each digital device may be allocated up to 256 different channels, one of which is used solely for signalling between the digital device and its associated switching unit. The switching unit controls the allocation and actual implementation of the remaining 255 of these channels by a process that may be termed "virtual allocation."
When a request to make a connection is received, the switching unit determines and stores the characteristics of the transmission path required to honor the request. No actual transmission paths are set up at this time and no actual system resources are assigned except for the amount of the switching unit memory used to store the transmission path characteristics. The transmission path is actually set up only when the digital device begins to transmit data. The data flow is then controlled in accordance with the previously determined characteristics by a novel algorithm embodying a request-acknowledge process. A transmission path is actually maintained only as long as data is being transmitted. The transmission path otherwise remains only virtually allocated. Since it is characteristic of digital devices to transmit data in bursts with pauses between bursts, this method of controlling the system eliminates idle transmission paths. This more efficient use of transmission resources allows a greater volume of data to be handled.
The loop access modules serve to keep data flowing around the transmission loops and to provide an interface between the loops and the terminal interface units. The terminal interface units transfer data on a full duplex basis between their associated digital device and the rest of the system. Each terminal interface unit includes a small programmable digital computer which interacts with the computer in the switching unit to control the signaling between the switching unit and the associated digital device and which serves to control the transfer of data to and from the digital device.
The algorithm that governs the transmission of data in the system comprises two program portions, one stored in and executed by the switching unit, the other stored in and executed by the computer contained in the terminal interface unit. This algorithm utilizes the characteristics of the requested data transfer to determine the system resources that will be required. During the actual data transmission, the algorithm provides for the buffering that is required to allow the requesting digital device to transmit data to the receiving digital device. Thus the algorithm serves to match the data transmission characteristics of the transmitting digital device to the data reception characteristics of the receiving digital device.
BRIEF DESCRIPTION OF THE DRAWINGFIG. 1A is a general block diagram of a digital transmission system in accordance with this invention;
FIG. 1B illustrates the manner in which data and signalling information is transmitted in the system of FIG. 1A;
2A is a more detailed diagram of the switching unit shown in FIG. 1A;
FIG. 2B is a more detailed diagram of a part of the transmission system shown in FIG. 1A;
FIG. 3A illustrates the format of the signals appearing on the transmission lines and transmission loops shown in FIG. 1A;
FIG. 3B is an expanded view of a portion of FIG. 3A;
FIG. 4A shows the manner in which the line format shown in FIG. 3A is utilized in this invention;
FIG. 4B is an expanded view of a portion of FIG. 4A;
FIG. 4C is a further expanded view of a portion of FIG. 4A;
FIGS. 5A and 5B are a logic diagram of the loop transmit buffer shown in FIG. 2B;
FIG. 5C is a logic diagram of the rising edge trigger circuit used in the loop transmit buffer shown in FIG. 5A;
FIGS. 5D and 5E are a logic diagram of the loop receive buffer shown in FIG. 2B;
FIG. 5F is a logic diagram of the falling edge trigger circuit used in the loop receive buffer shown in FIG. 5D;
FIGS. 6A through 6H are a logic diagram of the data multiplexer shown in FIG. 2B;
FIG. 6I shows the interconnection of FIGS. 6A through 6H;
FIG. 7A is a block diagram of the terminal buffer shown in FIG. 2B;
FIG. 7B is a timing diagram useful in understanding the operation of the terminal buffer shown in FIG. 7A;
FIG. 7C is a more detailed diagram of the data receive buffer shown in FIG. 7A;
FIG. 7D is a more detailed diagram of the data transmit buffer shown in FIG. 7A;
FIG. 7E is a more detailed diagram of the channel select circuit shown in FIG. 7A;
FIG. 7F is a more detailed diagram of the channel break circuit shown in FIG. 7A;
FIG. 8 is a representation of an instruction word used by the interface computer shown in FIG. 2B;
FIG. 9A is a block diagram of the interface computer shown in FIG. 2B;
FIG. 9B is a timing diagram useful in understanding the operation of the interface computer shown in FIG. 9A;
FIGS. 9C, 9D, and 9E are a logic diagram of the interface computer shown in FIG. 9A;
FIG. 9F shows the interconnection of FIGS. 9C, 9D, and 9E;
FIG. 9G is a logic diagram of a clock circuit used in the interface computer shown in FIG. 9A;
FIG. 10A is a functional diagram that illustrates the data and signal transfer between the digital device, terminal interface unit, and switching unit shown in FIG. 1A;
FIG. 10B is a functional diagram that illustrates the data and signal transfer between the switching units shown in FIG. 1A;
FIGS. 11A, 11B, and 11C show the formats of the data and signals that are transmitted in the system of FIG. 1A;
FIG. 12 is a flow chart of the initialization instructions executed by the interface computer shown in FIG. 2B;
FIGS. 13A and 13B are a flow chart of the data output routine executed by the interface computer shown in FIG. 2B;
14A and 14B are a flow chart of the data input routine executed by the interface computer shown in FIG. 2B;
FIG. 15 is a flow chart of the signal output routine executed by the interface computer shown in FIG. 2B;
FIGS. 16A and 16B are a flow chart of the signal input routine executed by the interface computer shown in FIG. 2B;
FIGS. 17A through 17L show the data structures used by the control computer shown in FIG. 2B;
FIGS. 18A, 18B, 18C and 18D are a flow chart of the call management routine executed by the control computer shown in FIG. 2B;
FIG. 19A is a flow chart of the decode route routine executed by the control computer shown in FIG. 2B;
FIG. 19B is a flow chart of the trace route routine executed by the control computer shown in FIG. 2B;
FIG. 19C is a flow chart of the remove subchannel routine executed by the control computer shown in FIG. 2B;
FIGS. 19D and 19E are a flow chart of the create subchannel routine executed by the control computer shown in FIG. 2B;
FIG. 19F is a flow chart of the find queue routine executed by the control computer shown in FIG. 2B;
FIGS. 20A-20D are a flow chart of the data input routine executed by the control computer shown in FIG. 2B;
FIGS. 21A and 21B are a flow chart of the data output routine executed by the control computer shown in FIG. 2B;
FIGS. 22A through 22F are a flow chart of the signal input routine executed by the control computer shown in FIG. 2B;
FIGS. 23A and 23B are a flow chart of the signal output routine executed by the control computer shown in FIG. 2B;
FIGS. 24A and 24B are a flow chart of the timeout routine executed by the control computer shown in FIG. 2B;
FIG. 25A is a flow chart of the S.BURST.IN subroutine executed by the control computer shown in FIG. 2B;
FIG. 25B is a flow chart of the E.BURST.IN subroutine executed by the control computer shown in FIG. 2B;
FIG. 25C is a flow chart of the S.BUNDLE.IN subroutine executed by the control computer shown in FIG. 2B;
FIGS. 25D and 25E are a flow chart of the S.BURST.OUT subroutine executed by the control computer shown in FIG. 2B;
FIG. 25F is a flow chart of the E.BURST.OUT subroutine executed by the control computer shown in FIG. 2B;
FIG. 25G is a flow chart of the S.BUNDLE.OUT subroutine executed by the control computer shown in FIG. 2B;
FIG. 25H is a flow chart of the REQSIG subroutine executed by the control computer shown in FIG. 2B;
FIG. 25I is a flow chart of the REQOUT subroutine executed by the control computer shown in FIG. 2B;
FIG. 25J is a flow chart of the ASSIGN.SPACE subroutine executed by the control computer shown in FIG. 2B;
FIG. 25K is a flow chart of the RELEASE.SPACE subroutine executed by the control computer shown in FIG. 2B;
FIG. 25L is a flow chart of the ASSIGN.TRUNK subroutine executed by the control computer shown in FIG. 2B;
FIG. 25M is a flow chart of the RELEASE.TRUNK subroutine executed by the control computer shown in FIG. 2B; and
FIG. 25N is a flow chart of the RETREAT subroutine executed by the control computer shown in FIG. 2B.
DETAILED DESCRIPTIONBefore proceeding to a detailed description of the drawings, it should be noted that all of the circuits described herein may be realized, in the illustrative embodiment, by using integrated circuits. Suitable circuits can be found, for example, in "The Integrated Circuit Catalog," first edition, Catalog CC401, published by Texas Instruments, Inc. and, alternatively, in "The Microelectronics Data Book," second edition, by Motorola Semiconductor Products, Inc., dated December, 1969.
Referring more particularly to FIG. 1A, there is shown a graphical representation of a data transmission system in accordance with the present invention. The system comprises a plurality of switching
units10 which are interconnected by means of
transmission lines12. Each switching
unit10 has attached thereto at least one
transmission loop14. Each
such transmission loop14 is connected to at least one
loop access module16.
Loop access module16 serves to steer data around
loop14 and to take data from the loop and place data on the loop in the manner to be described in greater detail hereinbelow. Each
loop access module16 is connected to a
terminal interface unit17 which provides an interface between an attached
digital device18 and the remainder of the system. Data transmission in the system is primarily controlled by the interaction of
terminal interface unit17 and switching
unit10.
This interaction is shown schematically in FIG. 1B. FIG. 1B illustrates a full-duplex transmission path in which one
terminal interface unit19 of the type shown in FIG. 1A transmits data to another
terminal interface unit23 which receives it. The receiving
terminal interface unit23 responds by sending either data or signals or both back to the transmitting
terminal interface unit19. Since the transmission path is full-duplex, these actions can occur simultaneously.
While it is possible for two terminal interface units 17 (FIG. 1A) on the
same transmission loop14 to communicate, a typical communication will, as shown in FIG. 1B, involve more than one switching unit. The detailed system algorithm by which this communication takes place is described hereinbelow following the detailed descriptions of the apparatus shown in FIG. 1A. However, a consideration of the following brief description of the process of communication in the system of FIG. 1A will make the apparatus description more readily understandable.
The digital transmission system of FIG. 1A provides each
digital device18 that uses the system with the capability of selecting up to 256 other devices in the system to which it can transmit data or from which it can receive data. Each such selection comprises a "channel" which is used herein to mean a previously selected route. Thus it is as if each digital device had attached to it 256 full-duplex channels each of which it could use on a one-at-a-time basis to send or receive data. Although each device has only 256 channels, the destinations of these channels can be changed by the device as desired. One of these channels is reserved for communication with the switching unit that controls the transmission loop to which the particular device is attached. This channel, termed the "control channel," is used by the terminal interface unit associated with the digital device to set up a data transmission path by providing the most immediately associated switching unit with the full address of the intended destination of the data appearing on each of the remaining 255 channels. The control channel is also used by the switching unit to command the digital device to pick the channel on which it wishes to receive data being sent by another digital device. The switching unit maintains a list showing the correspondence between the absolute addresses and the 256 channels of each of the digital devices connected to it. Thus for each transmission or reception, a digital device need only handle an eight bit address. FIG. 1B illustrates a single full-duplex channel between a transmitting
terminal unit19 and a receiving
terminal unit23.
Terminal interface units19 and 23 and the switching
units20, 21, and 22 are shown as comprising components labeled with subscripted α's and β's. The label "α" is associated with the transmission of data while the label "β" is associated with the reception of data. The connection between a particular α and the β to which it transmits is termed a "link." The subscript "T" is associated with that half of the full-duplex path, which is termed a "subchannel" and shown in FIG. 1B as
path15, that transmits data from the transmitting
terminal interface unit19 to the receiving
terminal interface unit23. The subscript "R" is associated with the other subchannel of the full-duplex path.
The α and β "components" referred to above and shown in FIG. 1B refer not to apparatus but to stored processes and parameters which serve to control the transmission and reception of data between the terminal interface units and the switching units. The α processes use the α parameters to control transmission of data while the β processes use the β parameters to control reception of data. The exact manner in which these processes provide the desired data communication will be discussed in greater detail below. In general, a terminal interface unit will only have a single set of α parameters and a single set of β parameters, both sets of which are uniquely determined by the characteristics of the particular associated digital device. Hence the α and β parameters of a terminal interface unit remain the same for each of the 256 channels on which it can communicate.
This is not true, however, for the switching units. Each switching unit will, at any instant, be communicating on only a particular one of the 256 full-duplex channels of a specified terminal interface unit. Each half of this channel has an associated α-β pair which need not correspond to the α-β pair on the other half of the channel. In the example shown in FIG. 1B, αT1 represents the transmitting characteristics of transmitting
terminal interface unit19, while βRn represents the receiving characteristics of that unit.
Switching unit20 receives data on
link24 from
terminal interface unit19 in accordance with the parameters βT1 and retransmits the data to switching
unit21 on
link25 in accordance with parameters αT2. Similarly, switching
unit20 receives data sent by receiving
terminal interface unit23 from switching
unit21 on
link28 in accordance with parameters βR(n-1) and retransmit it to transmitting
terminal interface unit19 on link 29 in accordance with parameters αRn.
Each switching unit has two α-β pairs for each full-duplex channel which is routed through it. Thus switching
unit22 may have, for example, not only the two α-β pairs shown in FIG. 1B, but also other such pairs allocated for other channels from other terminal interface units associated with both switching
unit20 and switching
unit21. The allocation of such pairs in various switching units is termed "virtual allocation" since all that need be done is to store the correct α-β pairs. Thus many channels may be virtually allocated at any one time. A particular channel may be actually activated by directing the pertinent switching units to begin receiving and retransmitting data on a half duplex basis in accordance with that particular channel's α-β appropriate pair.
Continuing then with the description of the apparatus of FIG. 1A, FIG. 2A is seen to be a more detailed description of a
single switching unit10. Each switching
unit10 comprises a
single control computer30 which communicates with a plurality of
line terminating units31. One
line terminating unit31 is required for each
transmission loop14 and each
transmission line12 that is connected to switching
unit10. These units serve to output data from
control computer30 onto
transmission loops14 and
transmission lines12.
Transmission lines12 as well as
transmission loops14 are of the type suitable for synchronous, digital, fixed-frame transmission. In the following discussion of the exemplary embodiment of this invention, it will be assumed that
transmission lines12 and
transmission loops14 comprise standard T1 carrier lines of the type well known in the prior art.
FIG. 2B is a more detailed diagram of the apparatus required to control a single transmission loop to which is connected a single
loop access module16. Since each
line terminating unit31 operates in the same manner irrespective of whether it is connected to a
transmission line12 or a
transmission loop14, a detailed description of the apparatus shown in FIG. 2B will suffice to explain the operation of the system shown in FIG. 1A.
Turning then to control
computer30 shown in FIG. 2B, it is this device that performs the aforementioned processes of virtual allocation and actual activation of channels that is required to enable
terminal interface unit17 to communicate with other terminal interface units in the system.
Control computer30 may be any of the many commercially available general-purpose digital-computers. The computer chosen for any particular implementation will be determined by the size of the system that is desired. In the following discussion,
computer30 is assumed to be a
TEMPO1 computer which is manufactured by TEMPO Computers, Incorporated, a division of General Telephone and Electronics, Incorporated.
30 is connected to loop transmit
buffer34 of
line terminating unit31 by means of
lines32. Since the
TEMPO1 computer has a sixteen-bit output,
lines32 shown in FIG. 2B comprise 16 separate wires which interconnect the output register of the
TEMPO1 computer and the loop transmit
buffer34. Loop transmit
buffer34 temporarily stores the sixteen-bit words output by the
control computer30. After buffering this data, the loop transmit
buffer34 outputs it to the
byte disassembler40. Each such output comprises a ten-bit word, eight bits of data from the
control computer30 and two bits of control information which are supplied by the circuitry of the loop transmit
buffer34 in the manner which is described in conjunction with FIGS. 5A and 5B.
These twelve-bit words are transferred from loop transmit
buffer34 to
byte disassembler40 of
line terminating unit31 by means of
lines38 which comprise twelve wires, one for each bit.
Byte disassembler40 serves to transform the output of loop transmit
buffer34 into serial data for transfer to
terminal matching unit42 over
line44.
42 of
line terminating unit31 supplies the interface that connects the input and output of
control computer30 to the
transmission loop14 or, alternatively, to a
transmission line12 for those
line terminating units31 that are connected to
transmission lines12. This terminal matching unit comprises standard T1 equipment which can be commercially obtained from the Vicom division of the Vidar Corporation as the Vicom 2020 Terminal Matching Unit.
Terminal matching unit42 is connected to
office repeater50 by means of
lines46 and 48.
Lines46 comprise a pair of wires which allow data to be transmitted from
control computer30 to
transmission loop14 and
lines48 comprise a pair of wires which allow data to be transmitted from
transmission loop14 to control
computer30.
50 serves to provide power for the T1 line comprising
transmission loop14. This unit is also commercially available under the name of Vicom 2010 Office Repeater.
As can be seen in FIG. 2B, data flows out of
office repeater50 onto
transmission loop14 and is transferred to
line repeater52 which is contained in
loop access module16.
Line repeater52 serves to retransmit data received on
transmission loop14 from
office repeater50 and also serves as the means by which
loop access module16 takes data from
line14 and places data onto
loop14.
Line repeater52 is also a piece of commercial T1 equipment which is obtainable under the name of the Vicom 1550-04 Self-Equalizing Line Repeater.
Line repeater52 is line powered and serves to automatically adjust for variations in the length of cable between adjacent repeaters subject to a range limitation. In those implementations in which loop access modules are very close together and hence out of the compensation range of the repeaters, 15 decibel artificial cable networks may be inserted between repeaters in a manner which will be apparent to those of ordinary skill in the art.
In order to insure proper operation of the system if power should fail at a particular loop access module, each
loop access module16 is provided with a
protection relay54.
Protection relay54 has transfer contacts which when
unenergized connect lines78 and 80, and when energized
connect lines79 and 80. Thus if a signal is not supplied to
protection relay54 on
line77 by power monitors 76, the protection relay will short-circuit
loop access module16 and simply allow data to be retransmitted on
transmission loop14 by
line repeater52.
Power monitor 76 is a triggerable one-shot multivibrator and will hence supply an output signal as long as it is supplied with power from
terminal interface unit17 and is also continuously triggered by AND
gate73. AND
gate73 has two inputs, one from
interface computer62 which is periodically supplied if
interface computer62 is functioning properly, and one from
data multiplexer58 through
inverter74. The signal supplied by
data multiplexer58 indicates that a framing error was detected in the data input on
lines71.
Inverter74 thus inhibits AND
gate73 when an error signal is supplied by
data multiplexer58 on
line75.
56 of
loop access module16 shown in FIG. 2B serves the same function as
terminal matching unit42. Indeed, matching
unit56 may also comprise a Vicom 2020 Terminal Matching Unit.
58 of
terminal interface unit17 shown in FIG. 2B serves to receive data from matching
unit56 of
loop access module16 on
lines71, and to transfer data to matching
unit56 on
lines72.
Data multiplexer58, shown in greater detail in FIGS. 6A-6I, serves to assemble the serial data coming from matching
unit56 into eight-bit words for transmission to
terminal buffer60, and also serves to disassemble eight-bit words from
terminal buffer60 into serial data to be transferred back to matching
unit56.
Terminal buffer, 60, which is explained in greater detail in conjunction with FIGS. 7A-7F, serves to buffer data going to and coming from
digital device18. This buffer serves to isolate
digital device18 from the synchronous speed of
transmission loop14.
The control of
terminal interface unit17 is provided by the
interface computer62.
Interface computer62, which is explained in greater detail in conjunction with FIGS. 9A-9F, is a digital computer which has a limited instruction repertoire. This instruction repertoire is, however, sufficiently flexible to allow programming the
interface computer62 to do the variety of tasks which are of critical importance in the implementation of the aforementioned transmission algorithm. In this illustrative embodiment a specially designed digital computer is disclosed; however, the functions performed by
interface computer62 could alternatively be implemented by using a commercial digital computer as will become apparent to those of ordinary skill in the art by the further discussion of
interface computer62.
Serial data emerging from
line repeater52 of
loop access module16 returns to control
computer30 by way of the
office repeater50 and
terminal matching unit42. The data is transferred serially from
terminal matching unit42 by line 6200 to
byte assembler64.
Byte assembler64 performs the converse of the operation performed by
byte disassembler40; that is, it assembles the serial data from
terminal matching unit42 into eight-bit bytes for transmission to loop receive
buffer66 on
lines68.
Loop receive
buffer66 operates in a manner analogous to loop transmit
buffer34 and is explained more fully in conjunction with FIGS. 5D and 5E.
Before proceeding to the more detailed diagrams of the apparatus shown in FIG. 2B, it will be advantageous to consider first the data format of the system as shown in FIGS. 3A and 3B.
The format shown in FIG. 3A is seen to be the standard T1 line format. The bit sequence appearing on the T1 line is divided into standard frames each comprising a framing bit followed by 192 time slots. The framing bit alternates between a "1" and a "0" on successive frames. The concatenation of two successive standard frames will be termed herein a "master frame" and is understood to always begin with a frame whose framing bit is a 1.
The 192 time slots of a standard frame are seen in the expanded view in FIG. 3B to be further subdivided into 24 subgroups of eight slots each. These slots in each subgroup are labeled "1" through "8," respectively. As shown, a 1 line bit occupies fifty percent of the time slot allotted to it, thereby resulting in a fifty percent duty cycle pulse train. As is well known in the prior art, it is necessary when using a T1 line to insure that there are enough 1 bits on the line to keep the system clocks operational. To accomplish this, a 1 bit, which is commonly termed a "keep-alive bit," is inserted into the sixth slot of every eight-slot subgroup.
When the serial data on the transmission line is used in the system, such as by
byte assembler64 and data multiplexer 58 shown in FIG. 2B, the framing and keep-alive bits are ignored in the formation of the byte. Excluding these two types of bits, it can thus be seen that 42 eight-bit bytes are formed in a master frame.
The line format provided by the standard T1 line is utilized by the apparatus of the illustrative embodiment of this invention in the manner shown in FIGS. 4A, 4B, and 4C. Both the network signaling and the transmission of system data are multiplexed onto the same line in the same manner. Of the 42 bytes that exist in a master frame, the first four bytes shown in FIG. 4B are reserved exclusively for network control signaling, and the remaining 38 bytes are reserved for user supplied data. The first four bytes will be termed hereinafter a "signal packet" and the remaining 38 bytes will be termed a "data packet." As can be seen in FIG. 4B, signal packets and data packets are completely independent even though they occur as a pair within a master frame. The first byte of each packet is understood to be reserved for an identification code or a special code indicating that the packet is currently empty. The packet formats are discussed in greater detail hereinbelow in conjunction with FIGS. 11A through 11C.
LOOP TRANSMIT BUFFERContinuing then with the detailed description of the circuitry shown in FIG. 2B, FIGS. 5A and 5B are seen to comprise a detailed diagram of the loop transmit
buffer34 shown in FIG. 2B. As shown in FIG. 5A, the input to the loop transmit
buffer34 comprises a sixteen
lines150 from
control computer30. The output of the loop transmit buffer comprises eight
lines151 which are applied to
byte disassembler40.
Loop transmit
buffer34 buffers data coming from
control computer30 and outputs it to
byte disassembler40 in the proper sequence at the proper time. This function is accomplished through the control of
memory152 shown in FIG. 5B.
Memory152 is a thirty-two word by sixteen-bit store which can be formed, for example, of eight integrated circuit memories such as bipolar LSI memory 3101 manufactured by Intel Corporation. Under the control of the logic circuitry shown in FIGS. 5A and 5B, sixteen-bit words are read into
memory152 from
control computer30 while, on alternate byte strobe signals issued on line BS from
byte disassembler40, eight-bit words are read out of
memory152 on either of the eight lines 154 or the eight
lines155 into eight-
bit register156 from whence they are clocked out to
byte disassembler40. The manner in which the control logic accomplishes this is as follows.
186 shown in FIG. 5A provides the basic timing for loop transmit
buffer34. This clock comprises an astable multivibrator which runs at a 5 megahertz rate. The output of
clock186 is applied to flip-
flop158 which is a triggered flip-flop; that is, it changes state each time it receives a pulse from
clock186. Flip-
flop158 serves to divide the pulse train from
clock186 into two pulse trains operating at one-half the frequency of
clock186. The Q output of flip-
flop158 is applied to AND
gate159 while the Q output of flip-
flop158 is applied to AND gate 160. Additionally, each of these two gates have as their second input the output of
clock186. Thus the outputs from AND
gates159 and 160 are seen to be two 2.5 megahertz pulse trains that are 180° out of phase. The pulse train from AND
gate159 is used to read sixteen-bit words from
control computer30 into
memory152, while the output from AND gate 160 is used to read eight-bit bytes from
memory152 to
byte disassembler40.
First consider the reading of sixteen-bit words from
control computer30 into
memory152. This process is accomplished on a command-acknowledge basis. Commands from
control computer30 are transferred on
line163 to rising
edge trigger164. This trigger, which is shown in greater detail in FIG. 5C, provides a strobe output to
NAND gate161 upon receipt of a command from
control computer30 unless an inhibit signal has been received from six-
bit comparator166 in accordance with the discussion hereinbelow. The rising
edge trigger circuit164 also serves, unless it is inhibited, to supply an acknowledge signal to control
computer30 on
line165 each time it receives a command.
Rising
edge trigger circuit164 is shown in greater detail in FIG. 5C. In the circuit's quiescent state both of D-type flip-
flops189 and 193 have a 1 on their Q outputs causing the strobe output to be a 0 and the acknowledge output to be a 1. A strobe pulse is generated in response to a command being applied to the D input of flip-
flop189. When a command is applied, flip-
flop189 changes to its set state the next time a clock pulse is applied to the clock input of flip-
flop189. Since at the time flip-
flop189 becomes set flip-
flop193 is still reset, AND
gate194 goes to a 1 output, thus beginning the strobe pulse output.
The trailing edge of the clock pulse that sets flip-
flop189 is coupled through
inverter192 to the clock input of flip-
flop193. This allows the 0 on the Q output of flip-
flop189 to be coupled through
NAND gate191 to the D input of flip-
flop193, causing it to change state. The acknowledge line thus falls, causing the output of AND
gate194 to fall, thereby terminating the strobe pulse output. The circuit remains in this state until the command line falls, at which time it returns to its quiescent state until the command line is again raised.
The generation of the strobe pulse output will be inhibited if a 1 is applied to the inhibit input.
Inverter190 converts this into a 0 which prevents
NAND gate191 from responding to the Q output of flip-
flop189. This, in turn, prevents the acknowledge output from going to a 1.
Returning then to FIG. 5A,
NAND gate161 is thus seen to be enabled whenever the strobe signal from rising
edge trigger164 corresponds with the output from
gate159. When both these inputs are simultaneously present at
gate161, it generates an output signal to
memories167 and 152 and to six-
bit counter168. This output signal causes
memories167 and 152 to store the words currently appearing on their inputs.
167 is a thirty-two-word-by-two-bit memory which serves to store two bits of information which are applied to
memory167 by
control computer30 on
lines169 and 170. These two bits comprise status information which is output to
byte disassembler40 at the appropriate time. The bit appearing on
line169 signifies the type of packet currently being transmitted, either a data packet or a signal packet, and the bit on
line170 serves to indicate when byte zero of either a signal packet or a data packet is being transmitted.
Six-
bit counter168 serves to keep track of the address in each of
memories167 and 152 which is currently being written into by
control computer30. The same addresses in each of
memories167 and 152 are always simultaneously addressed. The output from
gate161 increments six-
bit counter168 each time a command is received from
control computer30 to store another word into
memories167 and 152. This serves to provide the correct address for the storage that follows the next command from
control computer30.
Turning then to the apparatus which transfers eight-bit bytes of the words stored in
memories152 and 167 to
byte disassembler40, this apparatus is seen to be under the control of ten-
bit shift register171.
Shift register171 receives both of its inuts from
byte disassembler40. One of these inputs, the D36 input, comprises a signal that falls to a 0 ech
time byte disassembler40 requests the thirty-sixth byte of a thirty-eight byte data packet. This input serves to put a 0 into
shift register171. This particular signal is used to provide a reference point from which the type of packet which is currently being transmitted can always be determined. The other input to shift
register171 is the byte strobe signal, BS, which is supplied by
byte disassembler40 each time it requests a new byte to be transferred from the
memory152. The 0 bit that is inserted in the left side of
shift register171 is right-shifted each time the byte strobe signal occurs.
After
shift register171 has been right-shifted twice, once for the D36 and D37 byte strobes, the next byte strobe will be the beginning of a signal packet. Since the third through the sixth output taps of
shift register171 are connected to
NAND gate171B, the output of this gate, which is applied to two-bit comparator 173, is a 1 when a signal packet is being processed by
byte disassembler40.
A 0 on the third output tap of
shift register171 indicates that the first byte of a signal packet is being processed while a 0 on the seventh output tap of
shift register171 indicates that the first byte of a data packet is being processed. Thus the output of
NAND gate171A is a 1 when the first byte of a packet is being processed. The outputs of
NAND gates171A and 171B are applied to the two-bit comparator circuit 173. Comparator circuit 173 also receives input from
register174 which serves as a holding register for
memory167 in the same manner that register 156 serves as a holding register for
memory152. Comparator circuit 173 thus serves to compare the packet type and byte number which is currently being processed by
byte disassembler40 with the packet type and byte number which are currently resident in
register156.
When these inputs are the same, comparator 173 supplies an output signal through
gate175 to six-
bit counter176.
Gate175 is a four-input AND gate having 2 of its inputs inverted by
inverters175A and 175B. Thus the output signal from comparator 173 passes through
gate175 to counter 176 at the proper time as determined by the inputs to
gate175 which are supplied by flip-flop 172, NAND gate 146, and
comparator166. The output of
gate175 causes counter 176 to be incremented.
Counter176 serves as an address counter which keeps track of the current address in
memories167 and 152 from which the
byte disassembler40 is reading in a manner analogous to that in which counter 168 keeps track of the address into which control
computer30 is writing.
152 comprises thirty-two memory words each containing sixteen bits. However, since it is desired to read each of these words out to
byte disassembler40 in eight-bit bytes, it is necessary to alternate reading out one-half of the memory on the eight
lines155 and reading the other half of the memory on the eight lines 154. This alternate reading is accomplished by means of flip-flop 172 and OR
gates177 and 178.
Flip-flop 172 receives its clocking input from the BS signal line of
byte disassembler40. Thus flip-flop 172 serves to divide the byte strobe pulses into two pulse trains, one pulse train appearing on the Q output of flip-flop 172 and the other on the Q output of flip-flop 172. These two pulse trains are applied respectively, to OR
gates177 and 178; the Q output of flip-flop 172 being applied to OR
gate178, and the Q output of flip-flop 172 being applied to OR
gate177. The outputs of these two gates go to the "Select" inputs on the aforementioned memory circuits.
The memory circuits which comprise
memory152 are characterized in that the contents of the currently selected addressed location are available as the output whenever the select signal is given. Since the select signals are given in an alternating fashion by the outputs from OR
gates177 and 178, register 156 is loaded first from one-half of
memory152 and then from the other half, and then, in the following time period, from the first half again. Thus it is seen that
register156 is loaded by alternate bytes of each word that is output from
memory152.
The outputs of six-bit counters 176 and 168 are applied to
memories167 and 152 by means of select circuit 179. For simplicity, only one detailed portion of select circuit 179 has been shown in FIG. 5B. in actuality, circuit 179 comprises five sets of
circuits179A through 179E. Each of these comprises, as shown in detail in
circuit179A, AND
gates180, 181, OR
gate182 and
inverter183 that are shown in FIG. 5B. That is, the
circuit179A comprises the circuitry needed to gate one bit of the five least significant bits from each of
counters176 and 168 to the five-bit address inputs of the two memories. AND
gate181 has as its inputs a bit from
counter176 and the Q output of flip-
flop158. Thus whenever flip-
flop158 is reset, which occurs during the time which is allocated for
byte disassembler40 to read bytes out of
memory152, AND
gate181 has as its output one bit from
counter176. This is applied by means of OR
gate182 to
memories167 and 152. Thus whenever flip-
flop158 is reset, the address suplied to
memories167 and 152 is that determined by
counter176 which is the counter which keeps track of the correct location from which
byte disassembler40 should be reading. In a similar fashion, AND
gate180 has as its input a bit from
counter168 and the Q output of flip-
flop158 as inverted by
inverter183. Thus on alternate cycles of
clock186, AND
gate180 will supply a bit from
counter168 through OR
gate182 to the address inputs of
memories152 and 167. Thus it is seen that select circuit 179 serves to apply addresses to
memories167 and 152 in an alternating fashion, first the address into which control
computer30 is currently writing and then the address from which
byte disassembler40 is currently reading.
Six-
bit comparator166 serves to compare the outputs from
counters176 and 168. When these outputs are equal, indicating that the location into which control
computer30 will next write is the same location from which
byte disassembler40 will next read, this indicates that the
memories167 and 152 are empty and hence a signal is output on
line166A to AND
gate175 through
inverter175B. When
comparator166 determines that the address from which
byte disassembler40 will next read is equal to the sum of the address into which control
computer30 has just written plus thirty-two, which indicates that
memories167 and 152 are full, then an output signal will be generated on
line149 and applied to rising
edge trigger circuit164. This signal will serve to inhibit the generation of an acknowledge command on
line165 in the manner described hereinbefore. This is done because since the
memories167 and 152 are now full,
control computer30 must be prevented from writing any more information into them until room has been provided by means of
byte disassembler40 reading out a word of the stored information.
Flip-
flops147 and 148 serve to synchronize the loop transmission buffer of FIGS. 5A and 5B. The T1 transmission line is a synchronous line while the
control computer30 is an asynchronous device. It is thus necessary to insure that the outputs from
control computer30 are supplied to the transmission line in the proper time sequence. The input to flip-
flop147 is the byte strobe signal on line BS from
byte disassembler40. The output of flip-
flop147 is copied into flip-
flop148 whenever AND
gate159 generates an output. When flip-
flop148 receives its input from flip-
flop147, this is output to NAND gate 146. The next time that gate 160 generates an output, NAND gate 146 generates an output to
registers174 and 156, which causes these registers to read from
memories167 and 152, respectively. The outputs of these registers are then available to
byte disassembler40.
Register174 provides its output by means of
inverter185 and AND
gates184 and 186.
Register156 provides eight bits of output on eight
lines151.
Continuing with the detailed description of the circuitry shown in FIG. 2B, FIGS. 5D and 5E are seen to be a detailed diagram of the loop receive
buffer66 shown in FIG. 2A. As shown in FIG. 5E, input to the loop receive
buffer66 comprises eight
lines195 from
byte assembler64. The output of the loop receive buffer comprises sixteen
lines209 which are applied to control
computer30.
Loop receive
buffer66 performs the converse of the function performed by loop transmit
buffer34. That is, loop receive
buffer66 stores eight-bit bytes from
byte assembler64, forms them into sixteen-bit words, and transfers them to control
computer30. This function is accomplished through the proper control of
memories196 and 203 in the following manner.
196 is a sixteen-word-by-sixteen-bit memory which can be formed for example, from eight integrated circuit memories such as bipolar LSI memory 3101 manufactured by Intel, Inc. Under the control of the logic circuitry shown in FIGS. 5D and 5E, eight-bit bytes are written into
memory196 from
byte assembler64 while, on alternate byte strobe signals from
byte assembler64, sixteen bit words are read out of
memory196 into sixteen bit register 197 from whence they are clocked out to control
computer30. The manner in which the control logic accomplishes this is as follows.
198 provides the basic timing for the loop receive buffer. This clock comprises an astable multivibrator which runs at a 5 megahertz rate. The output of
clock198 is applied to flip-
flop199 which is a triggered flip-flop, that is, it changes state each time it receives a pulse from
clock198. Flip-
flop199 serves to divide the pulse train from
clock198 into two pulse trains operating at one-half the frequency of
clock198. The Q output of flip-
flop199 is applied to AND
gate200 while the Q output of flip-
flop199 is applied to AND
gate201. Additionally, each of these two gates have as their second input the output from
clock198. Thus the outputs from AND
gates200 and 201 are seen to be two 2.5 megahertz pulse trains that are 180 degrees out of phase. The pulse train that is output by AND
gate201 is used to write eight-bit words from
byte assembler64 into
memory196, while the output from AND
gate200 is used to read sixteen-bit words from
memory196 to register 197, from which it is available to control
computer30.
The output of AND
gate201 is applied to
NAND gate202. The other input to
gate202 is the Q output of flip-
flop225. Flip-
flop225 in conjunction with flip-
flop204 serves to synchronize the operation of loop receive
buffer64 with the timing of the T1 transmission line in the same manner as flip-
flops147 and 148 shown in FIG. 5A serve to synchronize the loop transmit
buffer34 with the T1 transmission line. Thus the timing pulse from
gate201 is applied by
gate202 to the write input of
memories196 and 203 immediately after the byte strobe signal is applied from
byte disassembler64 on line BS.
The address into which the current byte from
byte assembler64 will be written is determined by five-
bit counter205. The particular byte of that address into which the current output from
byte assembler64 will be written is determined by
gates206 and 207 under the control of flip-
flop208. This determination is exactly analogous to that made by
gates177 and 178 under the control of flip-flop 172 which is shown in FIG. 5A. That is, the incoming bytes are placed in alternate bytes of the word.
205 is incremented by the output from
NAND gate202 provided that it is not inhibited by the output of
NAND gate219. The inputs to
gate219 are derived from ten-
bit shift register211.
One input to shift
register211 is the byte strobe signal which is supplied on line BS by
byte assembler64 each time it sends an eight-bit byte out on
lines195. The other input to shift
register211 is the D36 pulse, which when applied through
inverter212 puts a 0 into
shift register211. The D36 pulse is emitted by
byte assembler64 each time it sends the thiry-seventh byte of a thirty-eight byte data packet. This particular signal is used to provide a reference point from which the type of packet currently being transmitted can be easily determined. The 0 bit that is inserted in the left side of
shift register211 is right-shifted each time the byte strobe signal occurs. The output taps of the register are used as follows.
After
shift register211 has been right-shifted twice, once each for the D36 and D37 byte strobes, the next byte strobe will be the beginning of a signal packet. Thus the third output tap in FIG. 5D, is connected by means of
inverter200 to the K input of JK flip-
flop208. The outputs of flip-
flop208 are applied to OR
gates206 and 207 which drive the "Select" inputs of
memory196 and thus serve to write eight-bit bytes into alternate halves of a memory word in the same manner that OR
gates177 and 178 shown in FIG. 5B serve to read alternate halves of words out of
memory152.
The fourth output tap of the
shift register211 signifies the second byte in a signal packet. This is applied through
inverter213 to OR
gate215. If a signal is simultaneously present on the READ input line, indicating that the current packet is not an empty one, then AND
gate218 will transfer a 1 to
memory203. The eighth output tap of
register211, which signifies the second byte in a data packet, is also applied to OR
gate215 by means of
inverter214. Thus it can be seen that AND
gate218 will transfer a 1 bit to
memory203 whenever the second byte of either a signal or data packet that is not empty is being stored in
memory196.
216 has as its inputs the third through tenth output taps of
shift register211.
NAND gate216 thus only has an output when any one of the signals on these output taps are 0's. This corresponds to the four bytes of a signal packet and the first four bytes of a data packet. This information is all control information used by the system in the manner discussed hereinbelow and hence the output of
NAND gate216 is transferred on
line223 to
memory203.
203 is addressed by
select circuit227 which is driven by five-bit counters 205 and 226.
Counter205 controls the address into which
byte assembler64 writes while
counter226 controls the address from which control
computer30 reads.
Counter205 is inhibited by
NAND gate219 when there is no signal on the READ input and when, simultaneously, the packet currently being processed is not the second byte of a signal packet and thus the write addressing of
memory196 is inhibited.
Select circuit227 is exactly the same as select circuit 179 shown in greater detail in FIG. 5B and operates in exactly the same manner to supply the correct read and write addresses to
memories203 and 196.
Next consider the reading of sixteen-bit words from
memory196 into
control computer30. This process is accomplished on a command-acknowledge basis. Commands from
control computer30 are transferred on
line237 to falling
edge trigger210. This trigger, which is shown in greater detail in FIG. 5F, provides a strobe output to
NAND gate229 upon receipt of a command from
control computer30 unless an inhibit signal has been received from five-
bit comparator228 in accordance with the discussion hereinbelow. The falling
edge trigger circuit210 also serves to supply an acknowledge signal to control
computer30 on
line238 each time it receives a command unless it is inhibited.
Falling
edge trigger circuit210 is shown in greater detail in FIG. 5F. In the circuit's quiescent state D-type flip-
flop231 is in the set state and flip-
flop235 is in the reset state causing the strobe output to be a 0 and the acknowledge output to be a 1. A strobe pulse is generated in response to a command being applied. Flip-
flop231 changes to its reset state the next time a clock pulse is applied to the clock input of flip-
flop231. Since, at the time flip-
flop231 becomes reset flip-
flop235 is still reset, the output of AND
gate236 goes to a 1, thus beginning the strobe pulse output.
The trailing edge of the clock pulse that sets flip-
flop231 is coupled through
inverter232 to the clock input of flip-
flop235. This causes the 0 on the Q output of flip-
flop231 to be coupled through
NAND gate234 to the D input of flip-
flop235, causing the output of AND
gate236 to fall, thereby terminating the strobe pulse output. The circuit remains in this state until the command line rises, at which time it returns to its quiescent state until the command line is again dropped.
The generation of the strobe pulse output will be inhibited if a 1 is applied to the inhibit input.
Inverter233 converts this into a 0 which prevents
NAND gate234 from responding to the Q output from flip-
flop231 when a 1 is applied to the command input. This, in turn, prevents the acknowledge output from going to a 1.
Reterning then to FIG. 5D and 5E,
NAND gate229 is seen to be enabled whenever the strobe signal from falling
edge trigger circuit210 corresponds with the output from
gate200. When enabled,
gate229 increments counter 226 and provides a clocking signal to
checksum circuit239.
239 provides a parity-like check on the sixteen-bit words sent to control
computer30 on
lines209.
Checksum circuit239 serves to EXCLUSIVE OR sixteen data words with the checksum word immediately following it. This checksum word is generated when the data is sent in the manner to be described hereinbelow. In the absence of error, the output of the circuit is zero after each seventeenth word in a data packet. The manner in which the EXCLUSIVE OR between successive bits in the same bit position in successive words is formed can best be appreciated by the following example. Consider for example, the ith bit position of four successive words, N1, N2, N3, and N4. The EXCLUSIVE OR of the bit in the ith bit position in words N1 and N2 is formed. The result of this is EXCLUSIVE ORed with the ith bit position of word N3, the result of which is, in turn, EXCLUSIVE ORed with the ith bit position of word N4. This process is continuously repeated. For simplicity, only one portion of
checksum circuit239 is shown in FIG. 5E.
Checksum circuit239 actually comprises sixteen sets of circuits, 239A through 239P. Each of these, as shown in detail in circuit 239A, comprises EXCLUSIVE
OR gate gate242 and D-type flip-
flop241. Flip-
flop241 stores the result of each output from
gate242 and supplies it as an input to
gate242 for the next word output from
register197, thus achieving the desired result. The outputs from each of
gates242 form the sixteen
lines243 which are all inputs to OR
gate244. If any of these inputs are 1, indicating the presence of a checksum error, then OR
gate244 generates an error signal to control
computer30 on
line245.
Checksum circuit239 is reset to zero by NAND gate 244A when the fourth byte of each data packet is given to control
computer30.
40 and
byte assembler64, shown in FIG. 2B, perform functions analogous to that performed by
data multiplexer58, also shown in FIG. 2B. In fact, a subset of the apparatus of
data multiplexer58 can be used to implement
byte disassembler40 and
byte assembler64. Therefore, before discussing these latter two units, the logic diagram of data multiplexer 58 which is shown in detail in FIGS. 6A through 6H will be discussed. FIG. 6I shows the manner in which FIGS. 6A through 6H are connected.
As shown,
data multiplexer58 serves as an interface between matching
unit56 of
loop access module16, and
terminal buffer60 and
interface computer62 of the
terminal interface unit17. The purpose of the
multiplexer58 is to collect the relevant data and signal packets from the transmission loop and to insert new ones onto the loop when circumstances permit. The general manner in which
data multiplexer58 achieves this purpose is as follows.
All of the timing for the operation of
data multiplexer58 is determined by
system clock250, although functional control is exercised by the
interface computer62. Transmission line bits, excluding the "keep-alive" bit, are serially clocked into
shift register251. When a full byte has been clocked into
shift register251 it may be decoded, left untouched, or removed from the shift register on a parallel basis.
Transmission is accomplished on a packet-by-packet basis. Once transmission of a packet commences, it continues until the entire packet has been transmitted. Transmission from
terminal buffer60 or from
interface computer62 can occur when an empty packet is detected, or where the contents of a packet are removed by the terminal buffer, provided the packet type being processed by the data mltiplexer matches the packet type that interface
computer62 wants to have transmitted. This matching requirement must be observed because signal packets and data packets are not interchangeable, as was discussed in connection with FIG. 4B. In addition, the request from
interface computer62 to transmit information must be detected by the data multiplexer before an appropriate time in order for transmission to be considered during the next packet time interval.
In addition to the basic function mentioned above, the data multiplexer checks for incoming bipolar violations in the T1 line format and provides a means for pulse injection into the outgoing bit stream. This pulse injection inserts the "keep-alive" bit into the outgoing bit stream and is also used to insert a special error format into the outgoing bit stream at the appropriate time. This error format provides a means to signal subsequent stations on a loop that a bipolar violation has occurred in a particular packet.
The manner in which these functions are performed by
data multiplexer58 will now be described in greater detail with specific reference to FIGs. 6A-6H. The order of the description below follows the order in which the various portions of the apparatus actually function during the typical operation of
multiplexer58. In order to facilitate this discussion and to provide better continuity between figures, various ones of the input and output lines shown in FIGS. 6A-6H are labeled in accordance with the signals which they transmit or receive.
Referring then specifically to FIG. 6C, matching
unit56 is seen to provide a two
wire input353 to
circuit352.
Circuit352, which provides an interface between matching
unit58 and
data multiplexer58, is standard T1 equipment obtainable under the name of Vicom 5120 Data Receive Unit.
Circuit352 provides a clocking singla (RCV CLOCK) to
system clock250.
Circuit352 also provides a repetitive set of eight pulses on lines D1 through D8 which correspond to the eight slots in the subgroup in a standard T1 frame. It is to be noted that these pulses correspond to the line slots and not to either the bits in a byte or to the bytes in a data packet. These bytes can be distinguished in that they are referred to by subscripted D's, D0 through D37. The RCV CLOCK signal is also applied to receive flip-
flop253 which serves to read the line bits serially into
shift register251.
58 has one
system clock250 and three subclocks driven from the system clock.
System clock250 comprises a one-shot multivibrator which serves to regenerate the RCV CLOCK signal from the matching
unit56, and thus its output comprises a near-perfect fifty-percent duty cycle waveform. The subclocks comprise
serial strobe generator254, parallel strobe generator 300, and status read
pulse generator358.
254, which also comprises a one-shot multivibrator, generates a pulse on the falling edge of each pulse from
system clock250 which is used to strobe data serially into
shift register251. The pulse train from
serial strobe generator254 cannot, however, be used directly. As previously mentioned, the standard T1 line format includes a "keep-alive" bit in the line bit stream. In order that this "keep-alive" bit not be permitted into
shift register251, the serial strobe corresponding to the time at which this "keep-alive" bit appears at the input to shift
register251 must be inhibited. This is accomplished by the
strobe steering circuit255.
The
strobe steering circuit255 has applied thereto the inverted D6 output (D6) from
circuit352. This inversion is obtained by means of
inverter261. When the D6 signal falls it serves to preset flip-
flop256. When flip-
flop256 is preset, AND
gate257 is enabled and AND
gate258 is disabled. Therefore the strobe signal from
serial strobe generator254 cannot pass through
gate258. During the time that
gate257 is enabled the serial strobe instead passes through
gate257 to the sixth
slot error detector262 enabling it to operate in the manner to be described hereinbelow. When signal D7 is generated by
circuit352, it is passed through
inverter355 and applied to flip-
flop256 thereby clearing it. This enables
gate258 and disables
gate257. Therefore the serial strobe generated by
serial strobe generator254 is again allowed to pass through
gate258 to
shift register251.
Gate258 is disabled only during the time period when the serial strobe corresponding to the "keep-alive" bit appears. Therefore the "keep-alive" bit is the only bit that is not permitted to enter
shift register251. The output of AND
gate258 is also applied to the input of
NAND gate260. The output of
NAND gate260 is applied to three-
bit counter263 which in turn provides its output to six-
bit counter264. The outputs of
counters263 and 264 provide timing signals for
data multiplexer58. One timing signal generated by AND
gate361 is output on line D36 to
terminal buffer60 and to interface
computer62. That line is set to a 1 when
counter264 contains the value 41.
260 inhibits the steered serial strobe from AND
gate258 whenever the strobe corresponding to the framing bit occurs. This action is analogous to that in which ther serial strobe corresponding to the "keep-alive" bit is inhibited.
NAND gate260, in conjunction with flip-
flop259, removes the pulse strobe corresponding to the framing bit in order that the framing bit will not be counted as a bit of usable information. Whenever the signal DF is output from
circuit352 to
inverter265, the output of the inverter, DF, goes to zero, thereby presetting flip-
flop259. During the time that the Q output of flip-
flop259 is 0, the output of
NAND gate260 is 1. When the pulse D1 occurs flip-
flop259 is cleard. Therefore, flip-
flop259 only inhibits
NAND gate260 for the time period in which the strobe corresponding to the framing bit occurs. It is thus seen that the output of
NAND gate260 comprises a series of strobe pulses excluding those corresponding to the "keep-alive" bit and the framing bit. This pulse train is then counted using the beginning of a master frame as a reference point. This counting is initialized in the following manner.
As previously mentioned, the beginning of a master frame occurs when the framing bit is a 1 bit.
Data multiplexer58 is initialized at the beginning of each master frame by the output of master frame reset
pulse generator266, which comprises an AND gate. The inputs to the master frame reset
pulse generator266 comprise the DF pulse and the U pulse which is output from
inverter267. The U pulse, which is generated by
circuit352, is normally used in standard T1 systems, as is well known by those of ordinary skill in the art, to compare the actually received framing bit with the desired framing bit in order continuously to check that the incoming signal is correctly framed. Therefore, rather than use the actual framing bit as a criterion for the beginning of the master frame, the U pulse, which is a 1 when the framing bit should be a 1, is used. Thus the beginning of a master frame is not dependent upon a line bit which may be in error.
After
counters263 and 264 have been initialized by the output signal from master frame reset
pulse generator266, as inverted by
inverter168, the output of
NAND gate260, which contains a series of serial strobe pulses excluding those corresponding to the "keep-alive" bit and the framing bit, is applied to the count input of three-
bit counter263. After the eighth one of these strobe pulses the output of three-
bit counter263 will fall. At this time the eighth bit of the first byte has been clocked from receive flip-
flop253 into
shift register251. Whenever
output252, the most significant bit of three-
bit counter263, falls, mode control flip-
flop271 in
mode control circuit269 is set. Flip-
flop271 had previously been cleared at the beginning of the master frame by the output from master frame reset
pulse generator266. Flip-
flop271 comprises a triggered flip-flop and hence any negative-going transition at the clock input will cause the flip-flop to change state.
After the falling edge of
output252 of three-
bit counter263 occurs, the mode control flip-
flop271 output changes to a 1. Therefore,
shift register251 is ready to clock data in on a parallel basis before the next serial strobe occurs if it is decided to do so. Note that mode control flip-
flop271 is set to the parallel mode after a complete eight-bit byte has been shifted into the
shift register251 irrespective of whether a parallel read-in will occur. If it is determined that transmission will occur, the parallel read-in to shift
register251 from
select circuit380 will occur prior to the falling edge of
system clock250. After the first byte of a packet has been completely read into
shift register251, a comparison identification byte of the packet must occur.
To accomplish this identification, incoming
packet status decoder27 is used along with incoming
packet status detector273. To detect any empty packet, the outputs of
shift register251, inverted by inverters 274-281, are applied to
NAND gate282 of incoming
packet status decoder272. If an empty packet is being passed through
date multiplexer58, the first eight-bit byte will necessarily be all 0's; therefore, since the inputs to
NAND gate282 are all the inverted outputs of
shift register251, all of the inputs will be 1, thereby causing the output of
gate282 to be a 0.
NAND gate283 decodes the identification number (ID) of the packet. The outputs of
shift register251, along with the inverted outputs of
shift register251 from inverters 274-281, are supplied to two
patch blocks356 and 357. These patch blocks comprise supporting structures containing terminals which are appropriately interconnected so that when the ID of the attached terminal interface unit is present in
shift register251, all of the inputs to
gate283 will be 1 thereby causing its output to be 0. The outputs of
NAND gates282 and 283 are supplied to NOR
gates284 and 285, respectively of incoming
packet status detector273.
Soon after the start of the first byte of a newly received packet, either
OR gate286 or
NAND gate287 of transmit packet type
initialization pulse generator363 will output a zero-going pulse to indicate the start of a new date packet or a new sigal packet, respectively. Note that these two pulses occur while the new packet is actually being read into
shift register251. This instant of time is after the parallel strobe corresponding to the last byte of the preceding packet and before the parallel strobe corresponding to the first byte of the next packet. The outputs of
NAND gate287 and
OR gate286 are applied to AND
gate288. Therefore the output of AND
gate288 will be a zero-going pulse during the first byte of a received packet, whether it is a signal packet or a data packet. The output of AND
gate288 is used to present flip-
flop289 and to clear flip-
flops290 and 291 of incoming
packet status detector273. By presetting flip-
flop289, a 0 output of either of
NAND gates282 or 283 is able to propagate through NOR
gates284 or 285, respectively, as a 1.
The clock pulse used to clock the J input of JK flip-
flops290 and 291 into the flip-flops is generated by the status read
pulse generator358 which comprises a NAND gate whose inputs are the output of
mode control circuit269 and the output from
system clock250.
After the first byte of a new packet has been fully clocked into
shift register251, as after every complete byte, the
mode control circuit269 output rises to a 1. At that instant however, the output from
system clock250 is in its low state. When the output from
system clock250 rises to a 1, the output of the status read
pulse generator358 falls to a 0. This output is used to clock flip-
flops289, 290, and 291 of incoming
packet status detector273. At that time, whatever signal is on the J inputs of flip-
flops290 and 291 is transferred into those flip-flops and appear on their outputs. Also at this time flip-
flop289 returns to the state where its Q output is a 0 and its Q output is a 1. This is accomplished, as shown in FIG. 6E, by feeding the Q output back into the K input. Therefore, when the output of status read
pulse generator358 falls, the 1 input to the K input of flip-
flop289 will cause the Q output to go to 0 and the Q output to go to 1. With the Q output going to 1 the outputs of NOR
gates284 and 285 remain 0 until flip-
flop289 is again present.
The output of NOR
gate284 is applied to the J input of JK flip-
flop290 and the output of NOR
gate285 is applied to the J input of JK flip-
flop291. Thus if an empty packet is identified, flip-
flop290 is set so that its Q output goes to 1. If a terminal ID is decoded satisfactorily, flip-
flop291 is set so that its Q output goes to a 1. Either flip-flop will remain in the set state until cleared by the zero-going pulse generated by AND
gate288 during the start of the next packet.
When the associated terminal interface unit wishes to transmit data, the first thing that data multiplexer 58 must do is to find either an empty packet in the line bit stream or a packet that is addressed to the associated terminal interface unit. In the latter case, the terminal interface unit removes the information in the packet addressed to it thereby leaving the packet empty.
62 must apply either or both of two distinct signals to
data multiplexer58. One signal, SENDD, indicates a request to transmit a data packet and the other, SENDS, indicates a request to transmit a signal packet. The data multiplexer identifies these two signals by means of request-to-send
recognition circuit292. Specifically, the SENDD signal is applied to AND
gate294 of request-to-send
recognition circuit292 and the SENDS signal is applied to AND
gate293. The other inputs to these two gates come from transmit packet
type indicator circuit295, which comprises a flip-flop. When a signal packet is being received by the data multiplexer, the Q output of flip-
flop295 will be a 1, thereby enabling AND
gate293. When a data packet is being received by the data multiplexer, the Q output of flip-
flop295 will be a 1, thereby enabling AND
gate294. It is the function of AND
gates293 and 294 to gate the SENDD and SENDS signals with the packet type that is being received at that time. Therefore, if signal packet transmission is requested and the date multiplexer is receiving a date packet, the outputs of AND
gates293 and 294 will both be 0 and hence the output of OR
gate296 will be 0. Therefore no outgoing date packet or signal packet transmission will take place. The same holds true in the reverse situation where date packet transmittion has been requested and a signal packet is being received. Thus, in order to transmit a signal packet, a signal packet must be used; and in order to transmit a date packet, a date
The manner in which a signal packet is transmitted by
data multiplexer58 can best be appreciated by a consideration of the following example. In this example it is assumed that the SENDS signal has been received, thereby causing one input to AND
gate293 to be a 1 and, further, that a signal packet has just begun to be received. Therefore, the Q output of flip-
flop295 will be a 1 thereby causing the output of AND
gate293 to be a 1. This 1 output, which is applied to the input of OR
gate296 will cause that gate's output to be a 1. This 1 output is applied to the D input of D-type flip-
flop297, which is also contained in a request-to-send
recognition circuit292 shown in FIG. 6E. When the output of AND
gate288 rises, the signal on the D input of flip-
flop297 will be transferred to its Q output. In this way it is insured that the SENDS signal is received and the match between received packet type and desired type of transmission is made before there is any parallel clocking into
shift register251. This insures that there can be no errors generated as a result of signals changing at critical times.
The Q output of flip-
flop297 of request to send
recognition circuit292 is applied to transmit-enable
gate298, which comprises an AND gate. The other input to transmit enable
gate298 comes from OR
gate299. The output signal from OR
gate299, when it is a 1, indicates, as described above, that either an empty packet has been detected or the ID of the associated terminal interface unit was successfully decoded. In this situation both imputs to AND
gate298 are 1 thereby causing its output to be a 1. The output of AND
gate298 is returned to
interface computer62 as the SEND line to indicate when data is being transmitted. The output of OR
gate299 is input to parallel
strobe steering circuit307. Thus when the output of OR
gate299 is a 1, a parallel strobe is applied to
shift register251 as described below.
The timing signals for the parallel insertion of data in
shift register251 are provided by parallel strobe generator 300 which comprises a one-shot multivibrator that is driven by the output of parallel
strobe gating circuit301 which comprises an AND gate. To insure that the parallel strobe occurs at the proper time, one-
shot multivibrator304 is used as a delay and is triggered at the time the
system clock250 output rises. The Q output of
delay304 is applied to one of the inputs of parallel
strobe gating circuit301. Delay 304 will output a pulse every time the
system clock250 output rises. However, the parallel strobe is required only after a complete eight-bit byte. Therefore, the Q output of
delay304 is gated with the
mode control circuit269 output by parallel
strobe gating circuit301. Hence only when the output from
mode control269 is a 1 does a pulse generated by
delay304 propagate to the output of parallel
strobe gating circuit301. At all other times the output of
gating circuit301 is clamped to a 0 level by the
mode control269 output being a 0. When the Q output of flip-
flop271 of
mode control269 is a 1, the pulse generated by
delay304 will appear at the output of
gate301. The falling edge of this pulse triggers the parallel strobe generator 300. Thus it is seen that this strobe, denoted the "byte strobe" signal, is generated after every complete eight-bit byte has been completely read into
shift register251 irrespective of whether transmission will be initiated by the terminal interface unit.
At the time that a complete byte of data has been assembled in
shift register251, the byte strobe from parallel strobe generator 300 clocks the data into
register251A. The eight output lines MDI from
register251A go to
interface computer62 and
terminal buffer60. At the same time that data is clocked into
register251A, a pulse appears on
line308 if the data belongs to an empty packet or if the data belongs to a packet whose ID was recognized. The pulse on
line308 strobes the output of
select circuit380 into
register251A.
380 comprises eight circuits, 380A through 380H, as shown in FIG. 6B. Each of these circuits contains the gates shown in detail in
circuit380A, that is, AND
gates382, 383, 384, 385 and 389,
inverters386 and 387, and
OR gate388. Each of
circuits380A through 380H provides one bit of the eight bits of the data supplied to shift
register251 as follows.
When
interface computer62 indicates that it wants to send, the output of transmit enable
gate298 will be a 1 if transmission is actually taking place. That output is a 0 when there is no request to send even if the opportunity exists. In these latter circumstances, AND
gate389 is inhibited and zero bytes are strobed into
shift register251. When a request to send has been received, and the output of
gate298 is a 1, AND
gate389 is enabled, and the source of data strobed into
shift register251 is determined by
lines392 and 393.
When the byte of data to be loaded into
shift register251 is the first of a packet, then both
lines392 and 393 are equal to 1, AND
gate382 is enabled, and the data input to shift
register251 is taken from
patch block381.
Patch block381 serves to generate the associated terminal's ID on eight
lines621.
When the byte of data to be loading into
shift register251 is one of the second through the fourth bytes of a packet, then lines 392 and 393 are zero, AND
gate385 is enabled, and the data on the eight lines MDO from
interface computer62 are strobed into
shift register251.
When the byte of data to be loaded into
shift register251 is the fifth through thirty-eighth of a data packet, then
line392 is a 1 and
line393 is a 0, AND
gate383 is enabled, and the data on lines SDO from
terminal buffer60 are strobed into
shift register251.
392 is the Q output of JK flip-
flop390 which is preset at the start of each packet by the output and AND
gate288. Flip-
flop390 is cleared by the falling edge of the output from
mode control269 which is applied to the flip-flop's clock input. Thus flip-
flop390 remains set only during the first byte time of a packet. When flip-
flop390 is reset,
NAND gate391 is enabled and the signal on
line393 is the inverted form of the Q output of D-type flip-
flop366. That flip-flop is reset by the output of AND
gate288 at the start of a packet. The flip-
flop366 is set when the output of
NAND gate365 rises. This occurs when counter 264 contains the
valve8, and the most significant bit of
counter263 falls to zero.
The byte strobe signal output by parallel strobe generator 300 is applied to
gates305 and 306 of parallel
strobe steering circuit307, and is also applied to
interface computer62 by line BS where it is used as a timing reference for the
interface computer62 as described hereinbelow. If, as in the case previously descussed, the output of OR
gate299 is a 1, then AND
gate305 is enabled and the parallel strobe is allowed to propagate through it. The output of AND
gate305 is applied to the parallel
load clock input308 of
shift register251 where a parallel read-in to shift
register251 takes place. If, on the other hand, the output of OR
gate299 is a 0, then AND
gate305 will be disabled and AND
gate306 will be enabled. The strobe signal generated by parallel strobe generator 300 will then be allowed to propagate through AND
gate306 but not through AND
gate305 and the parallel
load clock input308 of
shift register251 will not be strobed. The outputs of AND
gates305 and 306 are applied to the input of OR
gate309. The output of OR
gate309 comprises the parallel strobe pulse irrespective of whether transmission has been enabled or not. The output of OR
gate309 is fed back to the input of OR
gate270 in
mode control circuit269 where it causes the Q output of mode control flip-
flop271 to return to its 0 state, thereby preparing
shift register251 for serial operation during the next incoming byte. During this time the byte present in
shift register251 is serially shifted out of the shift register through the
injector circuit302 to the transmit flip-
flop303 and out onto the line.
Turning then to
injector circuit302 shown in FIG. 6G, this circuit is seen to provide the means for inserting bits into the serial bit stream to comply with system constraints. It inserts the "keep-alive" bit into the sixth slot of a line subgroup, and it also inserts an error format into the bit stream whenever the transmit
error steering circuit310 indicates that it should do so. This error format comprises a 1bit in every line slot except for the "keep-alive" slot, which contains a 0 in this format. The framing bit, however, is allowed to pass through
injector circuit302 in its original state without being altered in any way.
Consider now a case of normal transmission where the error format is not transmitted. In this situation the output of OR
gate311 of transmit
error steering circuit310 will be a 0, thereby causing the output of
NAND gate312 of
interior circuit302 to be a 1. Flip-
flop313 and OR
gates314 and 315 are used to insert the "keep-alive" bit into the bit stream. During times other than those when the "keep-alive" bit is to be inserted, the outputs of both of OR
gates314 and 315 will be 1. In this
situation inputs317, 318, and 319 to
NAND gate320 are 1.
Input316 is from the output of
inverter281 which inverts the output of the last cell of
shift register251. Therefore, the output of
NAND gate320 is 1. Hence, the output of
NAND gate320 is seen to be in the same state as the last call of
shift register251. The output of
NAND gate320 is passed to the input of AND
gate322. The other input to AND
gate322 comes from OR
gate323. Since one of the inputs to OR
gate323 comes from the output of
NAND gate312, which is a 1 when the error format is transmitted, the output of OR
gate323 will be a 1 thereby enabling AND
gate322 and passing the output of
NAND gate320 through AND
gate322 to transmit flip-
flop303. On each falling edge of
system clock250 the output of AND
gate322 is clocked into transmit flip-
flop303 where it is sampled during the next 1 state of
system clock250. A further description of the operation of transmit flip-
flop303 in conjunction with
bipolar converter324 is contained hereinbelow.
Consider now the injection of the "keep-alive" bit into the bit stream. First considering the normal situation, that is, the situation that applies to every "keep-alive" time slot except the one immediately following the framing bit. In this normal situation the set output of flip-
flop313 of
injector circuit302 is a 0, which holds the output of OR
gate315 to a 1. When the set output of flip-
flop313 is 0, the output of OR
gate314 will be a 1 whenever its input from
inverter355, that is D7, is 0. D7 is a 1 at all times except for when it falls to 0 for one system clock time. Therefore when the D7 pulse occurs, the output of OR
gate314 will go to a 0, causing the output of
NAND gate320 to go to a 1 and the output of AND
gate321 to go to a 0. Since, as stated above, the output of
NAND gate312 is at this time a 1, the output of AND
gate322 will also be a 1. Therefore a 1 will be clocked to transmit flip-
flop303 on the falling edge of
system clock250.
Next considering the situation of injection immediately after receiving a framing bit, it can be seen that the "keep-alive" bit injected by using the pulse D7 would cause the "keep-alive" bit to be injected into the time slot immediately following the desired one. In this particular situation the D6 pulse is used. Note that the time slot referred to precedes the transmission of the framing bit by
data multiplexer58. The DF pulse is used to preset flip-
flop313 of
injector circuit302. With the Q output of flip-flop 313 a 1, the output of OR
gate314 will be a 1, and with the Q output a 0, the output of OR
gate315 will depend upon D6. When the pulse D6 goes to 0, the output of OR
gate315 will go to 0. With the output of OR
gate315 at 0, the output of
NAND gate320 is a 1, and the output of AND
gate322 is a 0. The output of OR
gate323 and
NAND gate320 each a 1 causes the output of AND
gate322 to be a 1. The output of AND
gate322 is clocked into transmit flip-
flop303. Using the pulse D6 in this situation causes the "keep-alive" bit to be inserted in the proper line time slot, the sixth slot. Two system clock pulse periods after pulse D6 occurs, pulse D8 occurs, D8 being used to clear flip-
flop313. The clearing of flip-
flop313 inhibits OR
gate315, therefore pulse D7 will again be the pulse that inserts a 1 into the "keep-alive" slot until the next framing bit is received.
When the output of OR
gate311 of transmit
error steering circuit310 is a 1, the error format is transmitted. In this format all the bit slots except the "keep-alive" bit slot contain 1's and the "keep-alive" bit slot contains a 0. In order to preserve synchronization in the system, the framing bit is allowed to propagate through the
injector circuit302 without alteration.
Assume now that no transmission has been initiated and that therefore the transmit error disable circuit comprising flip-
flop325 has not been set to inhibit the error format. The Q output of flip-
flop325 is then a 1. The remaining input to
NAND gate312 comes from the output of OR
gate326. Assuming for the moment that flip-
flop327 is in its reset state, then the output of OR
gate326 is a 1. Therefore, since the three inputs to
NAND gate312 are all 1, the output of the gate is a 0. This causes the output of
NAND gate320 to be a 1. Except at those times when a signal is injected into the "keep-alive" slot through OR
gates314 or 315, the output of both of these gates is a 1. Since both of the inputs to AND
gate321 are 1, its output is a 1 thereby causing the output of OR
gate323 to be a 1. Since both inputs to AND
gate322 are also 1, its output is a 1. Hence a 1 level is applied to transmit flip-
flop303 to be clocked into it on the falling edge of the next pulse from
system clock250.
Now consider the "keep-alive" slot. As previously described, the D7 pulse normally causes a 1 to be inserted into the "keep-alive" slot. In this situation, when the D7 pulse goes to 0, thereby causing the output of OR
gate314 to go to 0, the corresponding input to AND
gate321 goes to 0, and therefore the output of AND
gate321 will be a 0 for the time that the D7 pulse is present. With the output of NAND gate 312 a 0, and the output of OR gate 314 a 0, both inputs to OR
gate323 are 0 thereby causing its output to be 0. Thus one input to AND
gate322 is 0 which causes its output to be a 0. A 0 is thereby clocked into transmit flip-
flop303 at the time of the occurrence of the "keep-alive" slot. As previously described, immediately, following the receipt of a framing bit, the "keep-alive" bit must be generated one slot earlier than usual in order that it be in the correct line time slot. This is accomplished by presetting flip-
flop313 by using the DF pulse. This, therefore, enables OR
gate315 and disables OR
gate314. Note that in this context "enable" means applying a 0 input to OR
gate315. When the D6 pulse appears from
inverter261, the output of OR
gate315 goes to 0, causing the output of AND
gate321 to go to a 0, thereby making one input to OR gate 323 a 0. Since the other input to OR
gate323 comes from
NAND gate312, whose output is also a 0, the output of OR
gate323 is a 0. Thus the output of AND
gate322 will also be a 0 and a 0 will be clocked into the "keep-alive" time slot. As soon as the D8 pulse occurs, flip-
flop313 is cleared so that until the framing bit occurs again the D7 pulse will be used to fill the "keep-alive" slot.
Another special situation occurs when the framing bit is clocked into
shift register251. In order to preserve line synchronization, it is necessary to transmit the framing bit exactly as it was received without regard to the action of
injector circuit302. Note that one of the inputs to
NAND gate312 comes from the output of
gate326, which is a 1.
In the normal situation, flip-
flop327 is in its reset state with its Q output equal to 1. The Q output of D-type flip-
flop327 is fed back to its D input so that when the clock lead is pulsed the Q output of the flip-flop will go to 0. The input to the clock lead of flip-
flop327 comes from the Q output of flip-
flop313. The DF pulse presets flip-
flop313 to allow the unaltered framing bit to pass through
injector circuit302 and the following D8 pulse clears it. When the D8 clear pulse occurs, the Q output goes from a 0 to a 1. This 0 to 1 transition causes the signal on the D input of flip-
flop327 to transfer to the Q output of flip-
flop327 and its complement to the Q output. Therefore on the D8 pulse immediately following the DF pulse the Q output of flip-
flop327 is fed to one input of OR
gate326.
The other input to
gate326 is from the D1 pulse which is output from
inverter328. This pulse is normally a 1 except during the time of the D1 time slot at which time it is a 0. When the D1 pulse does go to 0, and with the other input to OR
gate326 also a 0, the output of OR
gate326 also goes to 0. This 0 signal applied to the input of
NAND gate312 causes the output of
NAND gate312 to be forced to a 1. With the output of NAND gate 312 a 1 and the output of both
gates314 and 315 a 1,
inputs317, 318 and 319 of
gate320 are 1. With the output of NAND gate 312 a 1 the output of OR
gate323 is also a 1, therefore AND
gate322 is enabled and the inverted output of the end cell of
shift register251, which is the framing bit, is transferred on
input line316 to
NAND gate320 where it is inverted again and passes through AND
gate322 to transmit flip-
flop303. Hence at the next clock pulse from
system clock250, the unaltered framing bit is transmitted.
When flip-
flop313 is cleared by the D8 pulse, the output of OR
gate314 returns to its normal 1 value, thereby removing the inhibit from
NAND gate312 and returning the
injector circuit302 to the previous condition whereby the 1 bit error signal from OR
gate311 causes the output of
NAND gate312 to be 0, thereby causing the error format to be properly injected into the bit stream.
When transmission is initiated by a terminal interface unit it is desired that incoming errors do not cause
injector circuit302 to output a signal to transmit flip-
flop303 indicating that errors were received. When transmission is to be initiated, it is undesirable and unnecessary to send out only an error format. The transmit error disable
circuit325, which comprises a flip-flop, inhibits transmission of the error format in this case as follows.
Whenever the output of OR
gate299 is a 1, this 1 output is applied to the D input of D-type flip-
flop325. This 1 input causes the Q output of flip-
flop325 to fall to 0 upon being clocked by the rising edge of parallel strobe generator 300. This 0 input is applied to
NAND gate312 and causes the output of
NAND gate312 to remain a 1 as long as the Q output of flip-
flop325 is a 0. This inhibits the transmission of the error format by transmit flip-
flop303.
Once flip-
flop325 has been set, it remains in that state until the first parallel strobe associated with the next packet occurs. At that time, if no transmission is to be made, the output of OR
gate299 will be 0. This 0 is applied to the D input of D-type flip-
flop325 and causes its Q output to go to 0 and its Q output to go to 1 when the first parallel strobe associated with the next data packet occurs. Since the reset output of flip-
flop325 is one of the inputs to
NAND gate312, the output of
NAND gate312 will now be determined by its other two inputs.
As shown in FIG. 6G, the output of AND
gate322 of
injector circuit302 is applied to the input of flip-
flop303 the tansmit flip-flop. With each falling edge of
system clock250, the output of AND
gate322 is clocked into transmit flip-
flop303. Once a bit has been clocked into this flip-flop no further insertions or changes can be made. The output of flip-
flop303 is fed to AND
gate329 of
biopolar converter324.
324 converts the unipolar logic level of the data multiplexer to a line-compatible bipolar signal. The output of flip-
flop303 that was clocked in on the falling edge of
system clock250 is sampled by AND
gate329 during the next clock pulse interval. If a 1 bit was clocked into flip-
flop303 the output of AND
gate329 is a 1 during the next clock pulse interval. If a 0 was clocked into flip-
flop303 the output of AND
gate329 is a 0 during the next clock pulse interval. In the case where the output of AND
gate329 is a 0, both AND
gates331 and 332 will have 0 output thereby causing both of
transistors334 and 335 to be off. With these transistors both off, zero volts will appear across the secondary winding of
transformer336. In the situation where the output of AND
gate329 is a 1, the output of either AND
gate331 or 332 will be a 1 causing
transistor334 or 335, respectively, to turn on during the duration of the system clock pulse. This action causes either a positive or negative pulse to appear at the secondary winding of
transformer336.
Flip-
flop330 causes adjacent one-bit line pulses to be of opposite polarity. Assume, for example, that the Q output of flip-
flop330 is a 1, thereby enabling AND
gate331. When the system clock pulse falls, the output of AND
gate331 falls, thereby causing flip-
flop330 to change to a state where its Q output is a 1. AND
gate332 is now enabled for the next 1 bit that is to be transmitted. Since flip-
flop330 requires a falling edge to change state, it will only change state after a 1 bit has been transmitted. In this manner adjacent 1 bits on the line will be of opposite polarity.
Error detection occurs in two different circuits in
data multiplexer58. First, there is an error detector that detects the 1 bit inserted in the "keep-alive" slot. The output of receive flip-
flop253 is applied to the input of
inverter337 of six-
slot error detector262. The output of
inverter337 is fed to the D input of flip-flop 338. When the signal in the "keep-alive" slot is a 1, the output of
inverter337 will be a 0 thereby applying a 0 to the D input of flip-flop 338. When the signal in the "keep-alive" slot is a 0, the output of
inverter337 will be a 1, thereby applying a 1 to the D input of flip-flop 338.
The clock for flip-flop 338 comes from the
strobe steering circuit255, which supplies a clock pulse to the clock input of flip-flop 338 corresponding to the "keep-alive" slot only as has been previously explained. A 0 input clocked into the flip-flop will cause its Q output to apply a 1 to the input of AND
gate339, thereby indicating an error.
The other error detecting circuit is the PCM error detecting circuit in receive
unit352. This circuit outputs a PCM ERROR pulse whenever the bipolar nature of the incoming signal has been violated by two adjacent 1 bits being of the same polarity. The pulse is of the same width and in the same position as a line pulse that violates the bipolar code. The PCM ERROR pulse is aplied through
inverter340 to the other input of AND
gate339. Under normal conditions the output of
inverter340 is a 1. When an error is detected, its output will go to 0. When either of the two inputs to AND
gate339 go to 0, thereby corresponding to an error, the output of AND
gate339 goes to 0.
The output of AND
gate339 is applied to one input of OR
gates341 and 342 of incoming packet type detector and
steering circuit343. The other input to these two gates comes from flip-
flop344, which steers the error signal to the proper one of OR
gates341 and 342. It is important that the packet type, either signal or data, in which the error was detected be noted so that the correct packet will be made to contain the error format when it is transmitted. Flip-
flop344 indicates which type of packet is currently being received. It derives its preset signal from
NAND gate345. The inputs to
NAND gate345 are the pulse D8 and outputs 264A, 264D and 264F of six-
bit counter264 and
output252 of three
bit counter263. When the output of
NAND gate345 falls to 0, thereby presetting flip-
flop344, a 0 input to OR
gate341 corresponding to a detected error is allowed to propagate to its output. Note that flip-
flop344 is preset and set using the digit pulse corresponding to the last time slot in the packet.
In order to insure that a PCM error detected in the first bit of a new packet is directed to the flip-flop corresponding to that new packet, it is necessary to use the digit pulse corresponding to the last line bit of the previous packet. The appropriate steering is provided by flip-
flop344.
When flip-
flop344 is in the preset state, any errors detected and thereby output as a 0 by AND
gate339 will be directed through OR
gate341 to flip-
flop346 in
incoming error detector347. The 0 signal will serve to preset flip-
flop346 thereby indicating that there was an error in the incoming signal packet. Flip-
flop346 will remain in this state until the signal packet has been completely transmitted out of
shift register251. In the same manner, when flip-
flop344 is in the reset state as a result of
NAND gate348 applying a 0 pulse to its clear input, its Q output will be 1. Therefore any 0 output of AND
gate339 will propagate through OR
gate342 to preset flip-
flop349.
Since it is possible that an error may be detected in the first byte of a new incoming packet while the last byte of the previous packet is still being transmitted, the error format is not transmitted until the new packet is being transmitted. This is insured by the action of transmit
error steering circuit310. Flip-
flop350 forms the basis of this circuit. The JK inputs to this flip-flop come from the Q and Q outputs, respectively, of flip-
flop295. Flip-
flop295 indicates the type of packet that will be transmitted starting with the serial strobe following the next parallel load strobe. The clock pulse of flip-
flops350, 346, and 349 is derived from the Q output of flip-
flop289 in incoming
packet status detector273. Flip-
flop289 is normally in the reset state. The output of
gate288, which is a zero-going pulse to indicate the start of a new data packet or a new signal packet, is applied to the preset input of flip-
flop289. This action occurs after the last parallel load strobe of the previous packet and before the first parallel load strobe of a new packet.
The output of the status read
pulse generator358 is applied to the clock input of flip-
flop289. When the output of status read
pulse generator358 falls, which action precedes the parallel load strobe corresponding to the first byte of a new packet, the Q output of flip-
flop289 will go to 0. This is the result of tying the Q output back to the K input with the J input grounded. The falling edge of the Q output is the clock for flip-
flops346, 349, and 350. The time at which this happens is immediately preceding the parallel load strobe corresponding to the first byte of a new packet. The transmit
error steering circuit310 will therefore have time to settle and to apply the proper signal to
injector circuit302 in time for the next serial strobe to
shift register251. The output of transmit
error steering circuit310 is also applied to
interface computer62 on line BPER.
Flip-
flop350 has the secondary function of providing the means to clear flip-
flops346 and 349 at the appropriate time. For example, assume that an error is detected in the signal packet thereby causing flip-
flop346 to preset at the appropriate time. Also assume that signal packet transmission has been completed and data packet transmission is about to start. Therefore, sometime between this time and the time the next signal packet is received, flip-
flop346 must be cleared so that if no new signal packet errors are detected, the next signal packet can be transmitted without the error format. To accomplish this, the Q output of flip-
flop350 is applied to the K input of flip-
flop346. Likewise, the Q output of flip-
flop350 is applied to the K input of flip-
flop349 to accomplish this same clearing function for the data packet.
Assume further that the
data multiplexer58 has just completed transmitting the signal packet in which the Q output of flip-
flop350 is still high. When the clock for flip-
flops350, 346, and 349 occurs, which is prior to the parallel load strobe corresponding to the first byte of a packet, the 1 on the Q output of flip-
flop350 is fed back to the K input of flip-
flop346 causing flip-
flop346 to go to the state where its Q output is 0. Therefore flip-
flop346 is cleared ready to receive an error signal on its preset lead at the next time that a signal packet is being received. The same situation holds true when a data packet is being transmitted. The Q output of flip-
flop350 will be a 1 and the Q output of flip-
flop350 will be a 0. Therefore when the clock pulse generated by flip-
flop289 of incoming
packet status detector273 occurs, the 1 output of flip-
flop350 on its Q output that is fed back to the K input of flip-
flop349 will cause flip-
flop349 to clear itself and be ready to accept an error signal on its preset lead the next time that a data packet is being received.
As mentioned above, a subset of the apparatus comprising data multiplexer 58 can be used to implement
byte disassembler40 and
byte assembler64. The inputs to and outputs from data multiplexer 58 have been labeled A through E in FIG. 2B and in FIGS. 6A-6H to facilitate the following discussion.
Turning then to
byte disassembler40, this device can be made from the apparatus shown in FIGS. 6A-6H by connecting the eight
lines38 shown in FIG. 2B to the eight lines labeled "C" in FIG. 6B, and by connecting the pair of wires labeled "B" in FIG. 6G to
terminal matching unit42 shown in FIG. 2B. Lines A, D and E shown in FIGS. 6C, 6B, and 6A are not used by
byte disassembler40. Additionally, since
byte disassembler40 must transmit all packets it receives rather than merely those having a particular identification number, patch blocks 356 and 357 shown in FIG. 6A must be reconfigured so as to match any zero or non-zero identification number. Further, flip-
flop390 shown in FIG. 6F must be replaced by a patch block configured so that the signals appearing on
lines394 and 392 are each a 0.
64 can be made from the apparatus shown in FIGS. 6A-6H by connecting the eight lines labeled "E" in FIG. 6A to loop receive
buffer66 shown in FIG. 2B and by connecting the pair of wires labeled "A" in FIG. 6C to
terminal matching unit42 shown in FIG. 2B. Lines B, C, and D shown in FIGS. 6B and 6C are not used by
byte assembler64. Additionally, since
byte assembler64 must transmit all packets with non-zero identification numbers that it receives rather than merely those having a particular identification number, patch blocks 356 and 357 shown in FIG. 6A must be reconfigured to match any non-zero identification number. Further, the output of
NAND gate282 must be applied to
patch block356.
60 of
terminal interface unit17 shown in FIG. 2B is shown schematically in FIG. 7A. As shown in FIG. 7A,
terminal buffer60 comprises four major parts: data receive
buffer450, data transmit
buffer451, channel
select circuit452, and
channel break circuit453.
Data receive
buffer450 receives data from data multiplexer 58 on eight lines MDI and transfers it to
digital device18 by means of eight
lines455. Data receive
buffer450 assembles a complete packet of data before any of it is made avaiable to
digital device18.
Similarly, data transmit
buffer451 receives data from
digital device18 on eight
lines456 and transfers it to
data multiplexer58 on eight lines SDO. Again, a complete packet of data is assembled before it is transmitted.
Channel
select circuit452, in response to a command on eight
lines458 from
digital device18, selects a channel for the data transmission and passes this information to interface
computer62 on eight lines SBC.
Finally,
channel break circuit453 transfers a signal from
interface computer62 on eight lines RCH that notifies
digital device18 about a change in status of a non-selected channel. This information is transferred to
digital device18 by eight lines RCH.
Each of the four
functional units450, 451, 452, and 453 of
terminal buffer60 operates under the control of both
digital device18 and
interface computer62. The manner in which this control is exercised and the manner in which each of the major blocks shown in FIG. 7A accomplishes its function may best be appreciated by means of FIGS. 7B-7F which illustrate
terminal buffer60 in greater detail.
FIG. 7B illustrates the timing signals used in the operation of
terminal buffer60.
Timing signals for the entire
terminal interface unit17 are generated by
data multiplexer58 and transmitted to
terminal buffer60 and
interface computer62. The key timing signal is the byte strobe signal appearing on line BS in the data multiplexer logic diagram of FIG. 6E. This strobe occurs forty-two times during each master frame and coincides with the complete assembly of one eight-bit byte in
register251A of
data multiplexer58. At the
time data multiplexer58 issues a byte strobe it puts the eight-bit byte of data into
register251A and simultaneously reads data from one set of its data input lines, either MDO or SDO. When the first four byte strobes in a master frame occur, the four eight-bit bytes of the signal packet are put on the data output lines MDI, and when the subsequent thirty-eight byte strobes in one master frame occur the thirty-eight bytes of a data packet are put on the data multiplexer output lines MDI. The time interval following one byte strobe is identified by the name of the byte which for that time interval is available on the eight data multiplexer output lines MDI. The four time intervals during which the four bytes of a signal packet are available are known respectively as S0, S1, S2, and S3. The thirty-eight time intervals during which the thirty-eight bytes of a data packet are available are known respectively as D0, D1, et cetera, through D37. Each of these time intervals starts when the byte strobe occurs and ends just before the occurrence of the next byte strobe.
FIG. 7C is a logic diagram of data receive
buffer450 shown in FIG. 7A. This unit assembles and stores the thirty-two bytes of data from a data packet in response to a pulse being applied on line RCV to flip-
flop468. This pulse occurs during time period D3 and causes data receive
buffer450 to read thirty-two bytes of data from the eight input lines MDI and to store them in
memory unit466 during time periods D4 through D35. Memory unit 466 comprises a thirty-two-word-by-eight-bit memory.
Concurrently with the store operation, the signals on lines MDI are applied to
checksum circuit467 which accumulates the logical sum of the incoming data and compares it with the sixteen-bit sum received on input lines MDI during time periods D36 and D37. If the checksum is found to be in error, then the error signal output from
circuit467 will be a 1, otherwise it will be a 0.
467 utilizes the apparatus of
checksum circuit239 shown in FIG. 5E. The input to
checksum circuit239 comprises sixteen bits while the input to
checksum circuit467 comprises eight bits. Thus in order for
checksum circuit467 to compute a sixteen bit checksum, the sixteen EXCLUSIVE OR
gates242 and flip-
flops241 of
checksum circuit239 are divided into two groups of eight and the eight lines MDI are alternatively gated to each of these two groups through the use of the least significant bit from
counter469 on
line454. The manner in which
checksum circuit239 shown in FIG. 5E can be adapted to serve as
checksum circuit467 will be apparent to those of ordinary skill in the art from the above discussion.
Incoming data bytes D4 through D35 are stored in successive locations within
memory unit466 as determined by the output of
counter469. This counter is initialized by the five lines which are the most significant bits of the eight lines RBL at the same time that command pulse RCV is issued to flip-
flop468 by
interface computer62. Once the data has been assembled in receive
buffer memory466, an RCLEAR pulse is given to JK flip-
flop468 which causes the assembled data to be made available to
digital device18 on the eight
data lines455.
Counter469 is again initialized when the RCLEAR pulse is applied to flip-
flop468, and the value then used is the same as the value used to initialize the counter when the RCV pulse is issued.
18 obtains data eight bits at a time over the eight
data lines455 in response to commands which it issues to falling
edge trigger circuit470 on line RD CMD. Falling
edge trigger circuit470, which is identical to
circuit210 shown in FIG. 5D, acknowledges the commands issued on line RD CMD on line RD STS. The digital device is allowed to read eight-bit data bytes from
memory466 until
counter469 generates an overflow signal on line RSUM at which time the receive cycle is repeated.
Digital device18 receives an end-of-message signal from AND
gate472 on line EOMR when the last byte of information is read from
memory466. That signal will be set if, when the preceding RCV pulse was applied to flip-
flop468, the input line REOM was set. At that time the flip-
flop471 is set and its output is gated to
digital device18 on line EOMR by AND
gate472 when counter 469 overflows. Flip-
flops473 and 474 are used to turn off the normal operation of data receive
buffer450 and to put it into testing mode. The operation in that mode will be described below.
When JK flip-
flop468 is in the set state data receive
buffer450 is outputting data to
digital device18 on eight
lines455 and when that flip-flop is in the reset state data receive
buffer450 is reading data from data multiplexer 58 on eight lines MDI.
While flip-
flop468 is in the reset state,
counter469 is incremented as each byte strobe occurs. The byte strobe is input to one-
shot multivibrator477 which delays it until the byte has been read into
memory466 and then applies it through inverter 475A to NOR
gate475. The output of NOR
gate475, which is applied to NOR
gate476, will rise when flip-
flop468 is in the reset state and the output of
multivibrator477 is high. When the flip-
flop468 is in the set state and
digital device18 issues a command to falling
edge trigger circuit470, the strobe output from that trigger circuit is also applied to NOR
gate476. The strobe output and the output of NOR
gate475 are ORed together in NOR
gate476 and applied to the count input of six-
bit counter469. The counter is assembled so that, when a pulse occurs on the count input, the counter is incremented by 1 and when a pulse occurs on the load input from NOR gate 462 through AND
gate462A, the five most significant bits of the data currently on input lines RBL are copied into the five least significant bits of
counter469 and the most significant bit of the counter is cleared. The overflow (OVR) output of
counter469 corresponds to the most significant bit of the six bits and the carry output of the counter occurs when the least significant five bits are all 1 and therefore a carry is about to occur from the fifth bit position. The address input for
memory unit466 comprises the least significant five bits of
counter469.
The outputs of
memory466 on eight
lines455 are the contents of the cell currently being addressed by
counter469. The contents of the cell addressed by
counter469 are set equal to the data on the eight lines MDI when a pulse is received on the write input, provided that the Memory Write is not inhibited. The inhibit incurs when counter 469 OVR is set. As already indicated, the output of NOR
gate475 provides a pulse when a byte strobe occurs during the time that flip-
flop468 is reset. This pulse is gated by
NAND gate478 and the output of
gate478 is used to drive the write input to
memory466.
Gate478 inhibits the write pulse if flip-flop 473 is set, which occurs in the testing mode as described below.
FIG. 7D is a logic diagram of data transmit
buffer451 shown in FIG. 7A. The primary function of this unit is to collect thirty-two words of data from
digital device18 on eight
lines456 and transmit them to
data multiplexer58 on eight lines SDO. This function is performed under the control of JK flip-
flop481.
Flip-
flop481 is set by a pulse on the SCLEAR line from
interface computer62 and is reset by a pulse appearing on the XMT line. When flip-
flop481 is in the set state, commands issued by
digital device18 on the WT CMD line to rising
edge trigger circuit482 cause data to be written into
memory480. When flip-
flop481 is in the reset state, the thirty-two words stored in
memory480 are transferred to
data multiplexer58 on lines SDO.
An address must be supplied to
memory480 for each word that is either written into or read out of the memory. These addresses are generated as follows.
A pulse on line XMT is supplied by
interface computer62 when it wishes to initiate transmission of data out of
memory480 to
data multiplexer58.
Interface computer62 supplies a pulse on line SCLEAR when the data currently in
memory480 has been transmitted and
memory480 can be filled with other data from
digital device18. The pulses appearing on either of lines XMT or SCLEAR are applied through NOR
gate494 to the reset input of six-
bit counter483. This serves to initialize counter 483 so that a zero address is applied to
memory480 when
digital device18 begins to write a new set of thirty-two words and when the thirty-two words currently contained in
memory480 are about to be transmitted to
data multiplexer58. When a pulse is applied to the count input of
counter483, its current value is incremented; and when the current value is equal to or greater than thirty-two, it generates a signal on its OVR output.
A pulse is applied to the count input of
counter483 in two different ways. If data is currently being collected from
digital device18, flip-
flop481 is in the set state and a strobe is generated by rising
edge trigger circuit482, one for each write command issued by
digital device18 on the WT CMD line. Thus NOR
gate486 generates an output to the count input of
counter483 each time rising
edge trigger circuit482 generates a strobe output. If flip-
flop481 is in the reset state, indicating that data is being transmitted to
data multiplexer58, then each signal generated on line BS by
data multiplexer58 will cause one-
shot multivibrator484 to generate an output signal which is applied to NOR
gate485 through
inverter485A. Thus each byte strobe will cause NOR
gate485 to generate an output which will pass through NOR
gate486 to the count input of
counter483. Hence it can be seen that when
digital device18 is writing into
memory480 the address at which writing occurs is governed by
counter483 which is incremented each time
digital device18 issues a write command. When information is being read out of
memory480 to
data multiplexer58,
counter483 is incremented each
time data multiplexer58 sends out a byte strobe. The least significant five bits of the output from
counter483 are made available to
interface computer62 by means of the eight lines SBL, and the same five bits are used as the address input to
memory480. It should be noted that the least significant five bits of the output of
counter483 appear as the most significant five bits of eight lines SBL.
In addition to supplying the proper address on the address input of
memory480, it is necessary when writing into the memory to provide a strobe signal on the write input. The necessary signal it provided by the strobe output of rising
edge trigger circuit482 which passes through NOR
gate487 unless NOR
gate488 is generating an output.
Gate488 will generate an output and thus inhibit write signals from
gate487 when data transmit
buffer451 is in the test state. This will occur when flip-
flop489 is in its set state.
A signal on the write input of
memory480 will have no effect if a signal is present on the inhibit input of
memory480. This inhibit occurs when
counter483 generates an overflow signal. When
digital device18 has issued thirty-two consecutive write commands, the overflow output OVR of
counter483 will be set and thus inhibit
memory480 from being written into again. The overflow output signal from
counter483 is also applied to the inhibit input of rising
edge trigger circuit482 which prevents an acknowledgement signal from being sent to the
digital device18 on the WT STS line.
62 monitors counter 483 by means of line SSUM, in the manner to be described hereinbelow, and causes the assembled data in
memory480 to be transmitted to
data multiplexer58 when the memory is full. Alternatively,
digital device18 can cause transmission of less than thirty-two words of data by providing a signal on line SEOM. When a write command is issued on line WT CMD to rising
edge trigger circuit482 by
digital device18, the resulting strobe output serves to clock D-type flip-
flop490 which then samples the line SEOM from
digital device18. If a signal is present on this line, the output from flip-
flop490 will inhibit rising
edge trigger circuit482 and also be available on line EOMS to interface
computer62, thus allowing
interface computer62 to begin the transmission of the data in
memory480 to
data multiplexer58.
Considering then the manner in which data from
memory480 is transferred to
data multiplexer58, this process is seen from FIG. 7D to be initiated by a pulse on the XMT line from
interface computer62 to flip-
flop481. If this signal is issued during time period D3, data bytes will be transmitted to
data multiplexer58 in the subsequent time periods D4 through D35. At the same time a sixteen-bit checksum will be computed by
checksum circuit491 and this sum will be transmitted over lines 457 during time periods D36 and D37. Checksum circuit 491 is the same as
checksum circuit467 shown in FIG. 7C. This result is accomplished using
select circuit492 which is the same circuit as circuit 179 shown in FIG. 5B. The clock input to
checksum circuit491 is pulsed once for every incoming byte strobe by the output of
multivibrator484. The output of
checksum circuit491, which appears on line 495, is set to 0 whenever an XMT pulse is applied to flip-
flop481. During time periods D3 through D35, the OVR output of
counter483 is reset and
select circuit492 will transfer the output from
memory480 on to the output lines SDO. In time periods D36 and D37 the OVR output of
counter483 is set and
select circuit492 will transfer the output of
checksum circuit491 on to the data output lines SDO.
It is advantageous for
control computer30 to be able to test the operation of data receive
buffer450 shown in FIG. 7C and a data transmit
buffer451 shown in FIG. 7D. This is accomplished by the provision of special circuitry which assembles an incoming data packet from data multiplexer 58 in data receive
buffer450, transfers the assembled data to data transmit
buffer451, and subsequently transfers it back to
data multiplexer58. This entire operation takes place without requiring any interaction with
digital device18.
Referring then to FIG. 7C, it is understood that the application of a pulse on the RCV line to flip-
flop468 causes an incoming data packet to be stored in
memory466 in the manner described above. When thirty-two bytes of data have thus been stored, a pulse on line RTEST will set flip-flop 473 and thereby cause
NAND gate478 to inhibit further write pulses to
memory unit466. The data will remain in
memory466 until such time as it can be transferred to
memory480 in data transmit
buffer451 shown in FIG. 7D.
The transfer of the data from
memory466 to
memory480 is effected by the simultaneous application of pulses on line XMT to flip-
flop481 and on line STEST to flip-
flop489 of data transmit
buffer451, shown in FIG. 7D. The effect of the STEST pulse is to set flip-
flop489 and through
inverter489A and AND
gate462A load counter 469 in data receive
buffer450. When flip-
flop489 is set incoming byte strobes from
multivibrator484 are steered into the write input of
memory480 by means of NOR
gates488 and 487 and
inverter485A. Since an XMT pulse is issued simultaneously with the STEST pulse,
counter483 is reset and as each of the next thirty-two byte strobes occur, the write input to
memory480 is strobed and counter 483 incremented. While flip-
flop489 is set, data select
circuit493 will steer data on line RDO from the output of
memory unit466 in data receive
buffer450 into
memory480. When thirty-two bytes of data have been transferred from
memory466 to
memory480 test mode flip-
flops473 and 489 will be returned to their normal reset state. Flip-
flop489 is reset by the OVR output of
counter483 when it overflows. Flip-flop 473 is reset by the next pulse on line RCV.
Channel
select circuit452 shown in FIG. 7A is shown in more detail in FIG. 7E. This circuit allows
digital device18 to transfer an eight-bit channel number on eight
lines458 through to interface
computer62 on eight lines SBC. The circuit operates as follows.
The channel number on
line458 is stored in eight-
bit register500. The eight outputs from
register500 are clocked onto lines SBC by the strobe output of rising
edge trigger circuit501. The strobe output is generated when the
digital device18 sends a select command on line SL CMD to rising
edge trigger circuit501. Thus the eight-bit channel number on
lines458 is stored in
register500 when the select command is generated. Since the strobe output of rising
edge trigger circuit501 is applied to the J input of JK flip-
flop502, and since the Q output of JK flip-
flop502 is connected to the inhibit input of rising
edge trigger circuit501,
trigger501 is inhibited immediately following the SL CMD signal.
The Q output of flip-
flop502 is made available on line SELEC to interface
computer62. When
interface computer62 detects that flip-
flop502 is set, it reads the eight-bit channel number from
register500 on lines SBC and generates a signal on line SLCT to the K input of flip-
flop502. This resets flip-
flop502, thereby removing the inhibit from rising
edge trigger circuit501. This allows
trigger circuit501 to return an acknowledgement over line SL STS to
digital device18 which is then free to issue another select command on line SL CMD.
There is a logical interlock between the channel
select circuit452, the data receive
buffer450, and data transmit
buffer451 which insures that no data is transmitted or received while the channel number is being changed by
interface computer62. This operates as follows.
When a channel select command has been issued and flip-
flop502 set, operation of data receive
buffer450 and data transmit
buffer451 by
digital device18 is disabled. This is brought about by feeding the Q output of flip-
flop502 into the inhibit inputs of
trigger circuits470 and 482 on the line labeled "SELECTED."
Digital device18 is also prevented from issuing the SL CMD signal to channel
select circuit452 when
memory466 in data receive
buffer450 has been partially emptied. This effect is obtained by means of JK flip-
flop474 in data receive
buffer450. That flip-flop is reset whenever an RCLEAR or RCV pulse is issued to flip-
flop468 or when the OVR output of
counter469 is set. Flip-
flop474 is set whenever
digital device18 issues an RD CMD signal to falling
edge trigger circuit470 which in turn issues a strobe to the J input of JK flip-
flop474. By connecting the Q output of flip-
flop474 to the inhibit input of rising
edge trigger circuit501 in channel
select unit452 on the line labeled "BLOCK," select commands issued by
digital device18 to rising
edge trigger circuit501 are disabled.
The
channel break circuit453 shown in FIG. 7A appears in greater detail in FIG. 7F. This unit transfers an eight-bit channel number over lines RCH from
interface computer62 to
digital device18.
62 issues a channel break command (BREAK) in order to provide
digital device18 with an eight-bit channel number when information transmission is to begin on a different channel than the one currently in use. This is accomplished by setting D-type flip-
flop510 by means of a pulse on the BREAK input line. The Q output of flip-
flop510 is connected to the inhibit input of falling
edge trigger circuit511 so that when flip-
flop510 is set the trigger circuit is enabled allowing
digital device18 to issue a command on line BK CMD to falling edge trigger circuit 11. An indication that such a command can be issued is provided by status line BK STS which is set when falling
edge trigger circuit511 is enabled and is reset after a command has been issued. The strobe output of falling
edge trigger circuit511 is connected to the clear input of flip-
flop510 so that when a command has been issued that flip-flop is reset and falling
edge trigger circuit511 is inhibited.
Interface computer62 detects that
digital device18 has issued a command on line BK CMD by examining line BK EKO which is connected to the Q output of flip-
flop510.
62, which is shown in FIG. 2B to be part of
terminal interface unit17, is shown in block diagram form in FIG. 9A.
Interface computer62 is a small digital computer which has a single eight-
bit accumulator602, sixteen eight-bit words of working
storage604, and 256 sixteen-bit words of read-
only program store600. This computer supervises and controls transmission activity by means of control lines that connect at the various parts of the transmission equipment as has been shown in the preceding FIGS. These control lines are organized so that they appear to interface
computer62 to be seven storage words, each containing eight bits. These control lines are known collectively as the "peripheral store" and are shown as
peripheral store611 in FIG. 9A.
The instruction repertoire for
interface computer62 is given below in Table I. As shown in FIG. 8, each instruction word of
interface computer62 contains sixteen bits which are organized into an operation code field of two bits, a T field of one bit, an R field of five bits, and an X field of eight bits.
TABLE I ______________________________________ Instruction Repertoire for the Terminal Interface Computer ______________________________________ CONTROL INSTRUCTIONS Operation Mnemonic Code T R Instruction Form Field Field Field Definition ______________________________________ GOTOa 00 0 00000 Unconditional jump to the program store location specified by a BTa 01 0 00000 Jump to the program store location specified by a if a = 0 BFa 10 0 00000 Jump to the program store location specified by a if a ≠ 0 WAIT 11 0 00000 Wait for Byte strobe GOTOx 00 1 00000 Unconditional jump to the program store location specified by x BTx 01 1 00000 Jump to the program store location specified by x if a = 0 BFx 10 1 00000 Jump to the program store location specified by x if a ≠ 0 WAIT 11 1 00000 Wait for Byte strobe ______________________________________ ARITHMETIC AND LOGICAL INSTRUCTIONS Operation Code T Instruction Field Field Definition ______________________________________ A= a!r 00 0 Form the logical EXCLUSIVE OR of a and the contents of the specified by r and store the result in A A= a 01 0 Form the logical AND of a and the contents of the specified by r and store the result in A A= a+ r 10 0 Add a to the contents of the location specified by r and store the result in A A= a→ r 11 0 Store a in the location specified by r and also in A A= x!r 00 1 Form the logical EXCLUSIVE OR of x and the contents of the location specified by r and store the result in A A= x & r 01 1 Form the logical AND of x and the contents of the location specified by r and store the result in A A= x+ r 10 1 Add x to the contents of the location specified by r and store the result in A A= x→ r 11 1 Store x in the location specified by r and in A ______________________________________
Referring to Table I, the instruction repertoire is seen to comprise control instructions and arithmetic and logical instructions. Control instructions are characterized in that the R field is 0. If the T field is a 0 then, as shown in Table I, the accumulator, A, contains the operand for the instruction. If the T field is a 1 then the operand for the instruction is the contents of the X field. Note that in Table I the various instruction word fields are denoted by upper case letters while the contents of the fields are denoted by lower case letters.
The arithmetic and logical instructions are seen in Table I to include addition, the logical AND, and the logical EXCLUSIVE OR functions. In the arithmetic and logical instructions, as in the control instructions, a 1 value in the T field indicates that one of the operands, x, is contained in the X field while a 0 l in the T field indicates that one of the operands is contained in the accumulator, A. The other operand in each case is found at the location specified by r, the contents of the R field.
The locations which can be specified by the R field are shown in Table II to include the sixteen working storage locations denoted by Wi, where 0≦i≦15, the seven peripheral store locations Vk, where 0≦k≦6, and the accumulator.
TABLE II ______________________________________ R Field Formats R Location Field (Binary Value) Specified ______________________________________ 10000 + i Working storage location W.sub.i, where 0 ≦ i ≦ 15. 01000 + k Peripheral interface word V.sub.k, where 0 ≦ k ≦ 6. 01111 Accumulator. 00000 No location, this specifies that the instruction is a control instruction. ______________________________________
Referring again to FIG. 9A, it can be seen that
program store600, outputs sixteen bit instruction words to
instruction register601. The output from
instruction register601 and the output from
accumulator602 are gated by means of
selection circuit608 onto eight
lines609. From
lines609 the information may be transferred into
program counter605, which controls the addressing of
program store600, into eight-
bit function generator603, into
peripheral store611, or into working
store604. Gating into the peripheral store is controlled by write
select circuit607.
603 provides the means for performing the functions of addition, logical AND, EXCLUSIVE OR, and an additional function in which, upon command, the data on
lines609 are merely transferred to the
function generator603 output which comprises
accumulator602.
Function generator603 also supplies a special status signal whenever its output is 0. This status signal is gated into flip-
flop606.
Function generator603 obtains one of its inputs from the eight
lines609 and the other is obtained from eight
lines610. Data on
lines609 is obtained either from
instruction register601 or from
accumulator602 depending upon the operation of
select circuit608. The data on
lines610 may be from working
store604 or from either
accumulator602 or
peripheral store611 as determined by gating
circuit619. The function of the interface computer may best be appreciated by a consideration of the manner in which the instructions in Table I above are executed.
Each cycle of
interface computer62 may be conveniently divied into four sections which are shown as t1, t2, t3, and t4 in the timing diagram of FIG. 9B. During time interval t1, a sixteen-bit instruction is read out of
program store600 into
instruction register601. The outputs from the most significant eight bits of the instruction register then determine the behavior of the machine during the remaining three time periods in the machine's cycle. This behavior is different for each of the eight different instructions described in Table I. For all instruction types, the machine increments the
program counter605 at time t2. The output of this counter, at the subsequent time t1 selects the instruction to be used for the following machine cycle.
First consider the eight control instructions. The instructions are seen to comprise two groups, the first having a T-field of 0, as indicated in Table I, and the second having a T-field equal to 1. The value of T determines the behavior of
selection circuit608. If T equals 0,
selection circuit608 allows the output of
accumulator602 to pass onto
bus609. If the T-field is a 1,
selection circuit608 allows the least significant eight bits of the current instruction contained in the I register 601 to pass onto
bus609.
The operation code field in the instruction determines what use is made of the value that is gated onto
bus609. In a "GOTO" instruction the contents of
bus609 are loaded unconditionally into the
program counter605 during the time period starting at t2. This action overrides the previously mentioned operation of adding 1 to the program counter. The result of this action is, of course, that the next instruction is taken from the address specified by the value on
bus609.
The instruction whose operation code field has the
value01 is a jump instruction that is conditional on the value in
accumulator602. The effect of that instruction is to transfer the contents of
bus609 into the
program counter605 if the accumulator contains 0. The instruction with
operation code10 has the effect of transferring the contents of
bus609 into the
program counter605 if the contents of the
accumulator602 is non-zero. It is possible to determine whether the contents of the accumulator is 0 by examining flip-
flop606. If the set output of flip-
flop606 is 0, then the contents of
accumulator602 are zero.
In either of the two conditional jump instructions, if the jump is actually to take place and information is to be transferred from
bus609 into
program counter605, this operation takes place starting in the time period beginning at t2 and overrides the previously mentioned act of incrementing the program counter.
The remaining control instruction has operation code 11 and is a WAIT instruction which stops the operation of the interface computer. The interface computer will resume operation when it receives a byte stobe signal from the
data multiplexer58.
The eight arithmetic and logical instruction listed in Table I can also be grouped into two sets of four instructions. In one set the T-field is a 1, in the other it is a 0. As with the previously described control instructions, the T-field governs the action of
selection circuit608.
The operation code of the instruction in
register601 determines what value is to be computed in the function generator and subsequently stored in the
accumulator602. The computed value is stored in the accumulator at time t1, that is, at the beginning of the next instruction cycle. At the same time, flip-
flop606 is set either to 0 or to 1 as the result put into the accumulator is 0 or non-zero. For operation code 11 the value stored in the accumulator is equal to the value on
bus609. For
operation code10 the value stored in the accumulator is equal to the sum of the value on
bus609 and the value on the
bus610. For
operation code01 the value stored in the accumulator is the logical AND of the value on
bus609 and the value on
bus610. For
operation code00 the value stored in the accumulator is the EXCLUSIVE OR of the value on
bus609 and the value on
bus610.
Operation code 11 has the additional effect of storing the value from
bus609 into one eight-bit register, either in the working
store604 or in the
peripheral store611. The particular register concerned is determined by the R field of the instruction currently in the
instruction register601. That field also determines the contents of
bus610 which is equal to the contents of one of the words either from the working
store604 or the
peripheral interface605, or possibly from the
accumulator602. If a store instruction takes place, that is, if the operation code is 11, then it takes place at time t3.
62 shown in block diagram form in FIG. 9A is shown in greater detail in FIGS. 9C through 9G. Referring then to FIG. 9C,
program store600 shown therein comprises a 256-word-by-sixteen-bit read-only memory unit. This memory may be formed, for example, from four integrated circuits of type SN74187 manufactured by Texas Instruments, Inc.
The output of
program store600 comprises sixteen-bit words which are clocked into
instruction register601 when clock signal C1 is applied to
instruction register601. The outputs of
instruction register601, which have been labeled in FIG. 9C in accordance with the instruction word format shown in FIG. 8, are applied to the remainder of the interface computer circuitry as shown to provide the requisite control signals.
The clock signals used by the interface computer are supplied by the clock circuit shown in FIG. 9G.
Astable multivibrator650 shown in FIG. 9G supplies a train of pulses to the clock input of D-type flip-
flop651. Flip-
flop651 transfers these pulses on to flip-
flop652 if the D input to flip-
flop651 is not inhibited by NOR
gate666. The Q output of flip-
flop652 is applied to AND
gate653, the output of which comprises the C1 clock signal used in FIGS. 9C, 9D and 9E. The Q output of flip-
flop652 forms the C2 clock signal and is also applied to AND
gate654, the output of which is the C4 clock signal. The clock signals thus supplied by the output of flip-
flop652 are phased as shown in FIG. 9B.
NOR
gate666 and flip-
flops655 provide the means for stopping the generation of clock signals when a WAIT signal occurs. This signal is supplied by AND
gate669 shown in FIG. 9C. The inputs to AND
gate669 are supplied by AND
gate668 and NOR
gate612. As can be seen from FIG. 9C, AND
gate668 generates an output when both bits in the operation code field of the word currently in
instruction register601 are 1. NOR
gate612 generates an output when the first two bits in the R field of the word currently in
instruction register601 are 0. Referring back to Table 1, it thus can be seen that the WAIT signal is generated whenever a WAIT instruction is present in
instruction register601.
Returning then to FIG. 9G, it is seen that when the WAIT signal is applied to flip-
flop655 it causes the Q output to rise at the next C4 pulse. This inhibits NOR
gate666 which causes the Q output of flip-
flop651 to remain a 1, thereby enabling AND
gates653 and 654. Since the Q output of flip-
flop651 remains a 0, no further pulses are supplied to the clock input of flip-
flop652, causing this flip-flop to remain in the state where its Q output is a 1 and its Q output is a 0. The clock circuit thus halts with the C1 output a 1 and the C2 and C4 outputs a 0. The point of the clock signal waveforms at which the clock circuit halts is graphically shown in FIG. 9B by the line labelled "HALT." The clock circuit resumes normal operation when flip-
flop655 is reset by the byte strobe from data multiplexer 58 on line BS. Since a 0 is required to reset a D-type flip-flop, the byte strobesignal must be inverted by
inverter667.
Returning then to FIG. 9D, it is seen that the outputs of
instruction register601 corresponding to the X field of an instruction word are applied to select
circuit608 which operates in the same manner as select circuit 179 shown in FIG. 5B. The select input to select
circuit608 is the one-bit T field output from
instruction register601 which servs to gate onto eight
lines609 the X field from
instruction register601 if T=1, and the contents of eight-
bit accumulator602 if T=0.
The clocking of
accumulator602 shown in FIG. 9E is performed by the CA signal from AND
gate645 which is generated by each C1 clock signal unless inhibited by the Q output of flip-
flop613 being a 0. The Q output of flip-
flop613 is a 0 only when the value gated into its D input by the C4 pulse is a 1. This only occurs during a control instruction at which time both inputs to NOR
gate612 are 0 thereby causing its output to be a 1.
The input to eight-
bit accumulator602 is supplied by eight-
bit function generator603 which computes the aforementioned four functions from the two eight-bit operands on
lines609 and 610.
Function generator603 can be made from two four-bit function circuits of type 74181 manufactured by Texas Instruments, Inc. The two-bit operation code available from
instruction register601 must be suitably gated to provide the proper signals to the S0, S1, S2, S3 and M inputs of the type 74181 function circuits. The gating that is required is shown in Table III.
TABLE III ______________________________________ 0.sub.1 0.sub.2 S.sub.0 S.sub.1 S.sub.2 S.sub.3 M ______________________________________ 0 o 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 ______________________________________
This gating is accomplished by the voltage -V,
NAND gate614, and
inverter615 as shown in FIG. 9E.
If the four bit result from each of the two function circuits is zero, then their "C" outputs are each 1. These outputs are combined by
NAND gate616 to yield a signal that is 0 if the result stored in
accumulator602 is non-zero and are applied to zero
detector606 shown in FIG. 9C which is seen to comprise a D-type flip-flop that is clocked by the CA signal from AND
gate645.
The outputs of flip-
flop606 and NOR
gate612 are combined by AND-NOR
gate617 with the two operation code bits as inverted by
inverters670 and 671 to determine whether a control instruction is currently resident in
instruction register601. The AND-NOR
gate617 may be obtained, for example, as part number 74H55 manufactured by Texas Instruments, Inc. The output of AND-NOR
gate617 is a 0 if a control transfer is present and it causes eight-
bit program counter605 to be loaded by the data currently on
bus609. The count input of
program counter605 is provided by the C2 pulse and its output drives the address leads of
program store600.
The other storage unit used by
interface computer62 is working
store604 shown in FIG. 9E. This storage unit contains sixteen eight-bit storage locations. These locations have been previously referred to in Table II as locations Wi, where 0≦i≦15. The Wi are used to store the information required by that part of the communication process that is executed by the interface computer. In the detailed explanation of this process which is to follow hereinafter, the Wi are, for convenience referred to by mnemonic designations. These are given in Table IV below along with an explanation of the contents of each location.
TABLE IV ______________________________________ Working Store Location Mnemonic Explanation ______________________________________ W0 SOUT Status of the signal output routine W1 DOUT Status of the data output routine W2 DIN Status of the data input routine W3 DERR List of errors detected by the data input routine W4 SSEQ Sequence number of the last packet transmitted by the data output routine W5 LIMIT Sequence number of the last packet that the data output routine is allowed to transmit W6 RSEQ Sequence number of the packet which the data input routine next expects to receive W7 SELCH Channel number that is currently selected for data output from the digital device W8 FOUT The information which is to be inserted in byte S.sub.1 of the next signal packet to be transmitted by the signal output routine W9 NOUT The information which is to be inserted in byte S.sub.2 of the next signal packet to be transmitted by the signal output routine W10 FIN The information that was in byte S.sub.1 of the last signal packet that was received by the signal input routine W11 NIN The information that was in byte S.sub.2 of the last signal packet that was received by the signal input routine W12 COUT The information which is to be inserted in byte D.sub.1 of the next data packet to be transmitted by the data output routine W13 LOUT The information which is to be inserted in byte D.sub.2 of the next data packet to be transmitted by the data output routine W14 CIN The information that was in byte D.sub.1 of the last data packet that was received by the data input routine W15 LIN The information that was in byte D.sub.2 of the last data packet that was received by the data input routine ______________________________________
Working
store604 may be constructed from a pair of sixteen-word-by-four-bit integrated circuit memories such as bipolar LSI memory 3101 manufactured by Intel, Inc. The four-bit address required to access working
store604 is obtained from the least significant four bits, R1, R2, R3 and R4, of the R field of the instruction currently in
instruction register601. Working
store604 is selected if the most significant bit, R0, of the R field is 1. Input in working
store604 occurs during time t2 shown in FIG. 9B from eight
lines609 when a signal is supplied by AND
gate618 to the write input of the store. Output from working
store604 is available on eight
lines610 when a 1 is present on the select input of the store.
The major remaining portion of the interface computer is
peripheral store611 shown in FIG. 9D. As previously mentioned,
peripheral store611 actually comprises a plurality of sets of input and output lines which are treated by
interface computer62 like a series of memory locations. These input and output lines provide the means for the flow of commands and data between
interface computer62 and the rest of the
terminal interface unit17. Table V below provides a list of these input and output lines and an explanation of their functions.
TABLE V ______________________________________ Peri- Line pheral Name Store in FIGS. 9C, Function Location 9D, and 9E Performed ______________________________________ Pheripheral Store Output Lines V.sub.6 MDO These eight lines transfer a byte of control information to shift register 251 of data multiplexer 58 shown in FIG. 6A V.sub.5 RCH These eight lines transfer to digital device 18 the channel number on which data is currently available V.sub.4 RBL These five lines transfer to counter 469 shown in FIG. 7C the length of the data in the data packet currently being input to data receive buffer 450. These five lines correspond to the five most significant bits of eight-bit register 630 V.sub.2 CMDB This comprises the seven lines: XMT This line transmits the pulse that causes data transmit buffer 451 shown in FIG. 7D to transfer data to data multiplexer 58. SCLEAR This line transmits the pulse that causes data transmit buffer 451 shown in FIG. 7D to allow the digital device 18 to write into data transmit buffer memory 480 RCV This line transmits the pulse that causes data receive buffer 450 shown in FIG. 7C to receive data from data multiplexer 58 RCLEAR This line transmits the pulse that causes data receive buffer 450 shown in FIG. 7C to allow the digital device to read from data receive buffer memory 466 BREAK This line transmits the pulse that causes the channel break circuit 453 shown in FIG. 7F to send the BK STS signal to digital device 18 thereby informing it that there is a channel number waiting REOM This line transmits the pulse that causes data receiver buffer 450 shown in FIG. 7C to send an end of message, EOMR, signal to digital device 18 SLCT This line transmits the pulse that causes channel select circuit 452 shown in FIG. 7E to read a channel number from digital device 18 V.sub.0 CMDA This comprises the five lines: RTEST This line transmits the pulse that puts data receive buffer 450 shown in FIG. 7C into the test mode STEST This line transmits the pulse that puts data transmit buffer 451 shown in FIG. 7D into the test mode SENDS This line transmits a pulse that informs data multiplexer 58 that the terminal interface unit 17 wants to send a signal packet SENDD This line transmits a pulse that informs data multiplexer 58 that the terminal interface unit 17 wants to send a data packet ALIVE This line transmits a pulse to AND gate 73 shown in FIG. 2B that enables power monitor 76 to keep protection relay 54 closed Peripheral Store Input Lines V.sub.6 MDI The eight lines transfer a byte of information from data multiplexer 58 to receive buffer memory 466 of data receive buffer 450 shown in FIG. 7C and also to the interface computer 62 shown in FIG. 9D V.sub.4 SBC These eight lines transfer the channel number selected by digital device 18 from register 500 of channel select circuit 452 shown in FIG. 7E V.sub.3 SBL These five lines are the most significant of the eight lines 623 shown in FIG. 9D. They transfer from counter 483 shown in FIG. 7D the length of the data in the data packet currently stored in the data transmit buffer 451. These five lines correspond to the five least significant bits of six-bit counter 483 V.sub.2 STSB This comprises five lines: SSUM This line transmits a pulse from counter 483 of data transmit buffer 451 shown in FIG. 7D when the counter overflows RSUM This line transmits a pulse from counter 469 of data receive buffer 450 shown in FIG. 7C when the counter overflows SELEC This line transmits a pulse from channel select circuit 452 shown in FIG. 7E that indicates that the digital device 18 has provided another channel number BKEKO This line transmits a pulse from channel break circuit 453 shown in FIG. 7F. The pulse ends when the digital device 18 has acknowledged the channel number previously sent by the interface computer 62 EOMS This line transmits a pulse from data transmit buffer 451 shown in FIG. 7D that indicates that digital device 18 has sent an end-of-message signal to data transmit buffer 451 V.sub.1 TID These eight lines transfer the terminals identification number from patch block 381 of data multiplexer 58 shown in FIG. 6B V.sub.0 STSA This comprises seven lines: BPER This line transmits a pulse from data multiplexer 58 shown in FIG. 6E when a bipolar error is detected in the packet just received by the data multiplexer ERROR This line transmits a pulse from data receive buffer 450 shown in FIG. 7C when an error is detected in a data packet D.sub.36 This line transmits a pulse from data multiplexer 58 when it transmits the 36th byte of a data packet FRAMEOUT This line transmits a pulse from data multiplexer 58 when it detects a T1 framing error SEND This line transmits a pulse from data multiplexer 58 when it is transmitting a new packet READ This line transmits a pulse from data multiplexer 58 when it is reading a signal or data packet having the terminals' identification number PKT This line transmits a timing signal pulse from data multiplexer 58 ______________________________________
Considering first the
input lines620 through 626 of peripheral store 611 (FIG. 9D). These and
lines627 from a
register602 are seen to be gated onto eight
lines610 by gating
circuit619 shown in FIG. 9D.
Gating circuit619 comprises eight gates 619A-619H. Each of these eight gates has eight input bit positions. Each of the eight
incoming cables620 through 627 comprises eight wires. One wire from each of these eight cables is connected to a particular input bit position on each of eight gates 619A-619H. Gates 619A-619H each output that input bit position selected by the three-bit address R2, R3, R4. Since the same three-bit address is always supplied to each of eight gates 619A-619H, each of the eight gates always outputs the same input bit position. Thus, each three-bit address supplied to
gating circuit619 results in the gating of each of the eight wires of one of
cables620 through 627 onto the eight
output lines610. Gates 619A-619H supply an output whenever the R0 bit connected to their inhibit inputs is a zero. These gates may each comprise integrated circuits of the type 8231 manufactured by Signetics, Inc.
Considering next the
output lines640 through 644 of
peripheral store611, these are seen to be supplied from the eight-
bit registers628 through 632 shown in FIG. 9D. These registers are set by the signals on eight
lines609 under the control of write
select circuit607. Write
select circuit607, which may comprise part number 74874 manufactured by Texas Instruments, selects which of five
registers628 through 632 is to receive an input from
lines609 at any given time. This selection is made in accordance with the three least significant bits of the R field if it is not inhibited by a signal from NAND gate 634 (FIG. 9C).
NAND gate634 uses the O0, O1, R1 and R0 as inverted by
inverter634A to generate an inhibit at all times except when a transfer is to be made to
peripheral store611.
Registers628 through 630 each comprise eight D-type flip-flops. The clock inputs for each of these registers are provided by NOR
gates635 through 637, respectively, each of which serves to combine the C4 clock signal and the appropriate output from write
select circuit607.
Registers631 and 632 also each comprise eight D-type flip-flops, 631A-631H and 632A-632H, respectively. The eight reset inputs to each flip-flop in each of these two registers is the inverted byte strobe signal on line BS as inverted by
inverter674. The eight flip-
flops631A-631H of
register631 each take their preset input from one of the eight
NAND gates638A through 638H which make up
gate638. Each of
NAND gates638A-638H has three inputs: the C4 signal, one of eight
lines609, and the output of
inverter672. Similarly, the eight flip-
flops632A-632H of
register632 each take their preset input from one of the eight
NAND gates639A through 639H which make up gate 639. Each of
NAND gates639A-639H has three inputs: the C4 signal, one of eight
lines609, and the output of
inverter673.
The apparatus described above provides the transmission paths by which the digital data transmission system of this invention actually transmits and receives data. As briefly discussed in conjunction with FIG. 1B, this apparatus is controlled by stored programs in
interface computer62 and
control computer30. The method by which this control is achieved will now be discussed in greater detail.
FIG. 10A is a functional diagram of the data and signals that are transmitted on a full-duplex basis between a switching
unit10 and a
digital device18 through a
terminal interface unit17.
As shown in FIG. 10A a
digital device18 issues a channel select command to its associated terminal interface unit (TIU) 17 each time it wishes to begin a new transmission of data.
TIU17 then sends an SEL signal to the
switching unit10 which replies with an ACK signal. Data transmission then proceeds. As bytes of data are sent from
digital device18 to
TIU17, they are accumulated into data packets and then sent to switching
unit10, which periodically acknowledges them with an ACK signal.
In the other direction, switching
unit10 sends an SEL signal to the
TIU17 when it has accumulated a quantity of data for the
digital device18.
TIU17 then sets the channel break status line thereby informing
digital device18 that there is data ready for it. When
digital device18 has selected the appropriate channel, switching
unit10 delivers the data packets to
TIU17 which transfers the data in bytes to
digital device18 and periodically sends an ACK signal to switching
unit10 in acknowledgment.
FIG. 10B is a functional diagram of the data and signals that are transmitted on a full-duplex basis between two switching
units10. This transmission is exactly the same on both halves of the full-duplex path.
As shown in FIG. 10B, when data is about to be transmitted from switching unit 10a, that unit sends an STRT signal to switching
unit10b, which acknowledges it with an ACK signal. Data transmission then proceeds. As data becomes available in switching unit 10a it is sent in packets to switching
unit10b, which periodically acknowledges this by sending an ACK signal. Certain errors may be detected by switching
unit10b in which case NACK signals are sent to switching unit 10a. Finally, when switching unit 10a ceases to transmit data it sends an IDL signal to switching
unit10b.
The data and signal transfers shown functionally in FIGS. 10A and 10B can best be appreciated through an understanding of the data formats shown in FIGS. 11A, 11B and 11C.
FIG. 11A shows a signal packet and a data packet. As shown, a signal packet comprises four eight-bit bytes.
Considering first the signal packet, it is seen that its first byte,
byte1100, contains an identification number (ID). Since the most significant bit of ID is used to specify the direction of data transfer, the ID provides the capability of multiplexing up to 128 TIU's on each of the
transmission loops14 shown in FIG. 1A. In this case the ID serves to uniquely identify each TIU. Since the same data format is used on
transmission lines12 that serve to interconnect pairs of switching
units10, each
such transmission line12 is effectively multiplexed into 128 full-duplex transmission paths. These are termed "trunks" and comprise a system resource which is allocated and assigned in the manner to be explained hereinbelow. Of course, an ID of different size, thereby allow the capability of multiplexing a different number of TIU's and trunks, may be used without departing from the spirit and scope of the invention.
1101, shown in greater detail in FIG. 11B, comprises a six-
bit sequence number1112 and a two-
bit F field1113. Sequence numbers are consecutively applied to both SEL signal packets and data packets during transmission on
loop14 and are consecutively applied to date packets during transmission on
line12. The significance of the
SEQ field1112 as well as the
CH byte1102 depends upon the value of the
F field1113.
The
F field1113, if zero, indicates that the packet is an acknowledge (ACK) packet. The
SEQ field1112 is used to acknowledge the receipt of data of SEL signals and contains the sequence number applied to the last data packet or SEL signal correctly received. The significant of the
CH field1102 in an acknowledge packet depends upon the circumstances in which the packet is being used. When the ACK signal is issued by a switching unit to either a TIU or other switching unit, the
CH field1102 serves to authorize further transmissions. In that case, the
CH field1102 contains the last sequence number that can be used for subsequent transmission. When the ACK signal is issued by a TIU the
CH field1102 contains zero if no transmission errors have been detected, and contains the appropriate error codes as listed below in Table VI if errors have been detected.
TABLE VI ______________________________________ Value Error ______________________________________ 1 Framing trouble 2 Control checksum error 4 Wrong channel 8 Wrong sequence number 16 Bipolar format error 32 Data checksum error ______________________________________
The
F field1113, if a one, indicates an SEL signal when used on a
loop14 and indicates an STRT signal when used on a
line12. In an SEL signal, the
SEQ field1112 is a sequence number, as described above, and the
CH byte1102 contains the number of the selected channel. In an STRT signal, the two
fields1112 and 1102 are combined to form a 14 bit number identifying the channel on which communication is about to start.
The
Field1113, if a two, indicates an IDL signal and the
SEQ field1112 is the last sequence number used in the immediately prior transmission.
The
Field1113, if a three, indicates an NACK signal and the SEQ and
CH fields1112 and 1102, respectively, are used in the same manner as in an ACK signal from the TIU.
Finally,
byte1103, the last byte in the signal packet, contains an 8 bit checksum which is generated by program means and which comprises the EXCLUSIVE OR of the value contained in
fields1100, 1101, and 1102.
The data packet shown in FIG. 11A also includes an eight-
bit byte1104 which contains the ID number of the packet.
Byte1105, shown in greater detail in FIG. 11C, comprises a six-
bit sequence number1110 and a two-bit type field 1111. If field 1111 contains the value two, then the data packet is an end-of-message packet. If field 1111 contains the value one, then the data packet is an end-of-bundle packet. If field 1111 contains zero, then the data packet merely contains data and is neither an end-of-message nor and end-of-bundle packet.
1106 of the data packet contains the length L, of the data in the packet. A length of zero, by convention, indicates a full packet of 32 bytes. If the packet is less than full, the information must be in the leading part of the 32-byte field and the remaining positions can contain any value.
1107 of the data packet contains an eight-bit program-generated checksum.
1108 contains the actual data and may be up to 32 eight-bit bytes in length. Finally,
field1109 contains a sixteen-bit hardware-generated checksum.
The method by which the aforementioned α and β processes use the signalling capability illustrated by FIGS. 10A and 10B can best be appreciated by referring again to FIG. 1B. Each channel such as the one illustrated in FIG. 1B comprises two subchannels, each subchannel being concerned with data transmission in one direction. The description which follows shall be directed to the algorithm that handles data transmission on one subchannel,
subchannel15 shown in FIG. 1B, and it is understood that data transmission on a full channel is achieved through the application of the algorithm twice.
It will be remembered that there are two sets of parameters and two processes involved in the transmission on one subchannel. The α process or algorithm controls outgoing data and updates the α parameters of the subchannel. The β process or algorithm controls incoming data and updates the β parameters of the sub-channel.
The detailed process of this invention is based upon certain important techniques which will now be discussed before proceeding to a detailed description of the algorithms.
Digital data is transmitted in accordance with this invention in bursts, where a "burst" is defined as that data which is transmitted by a digital device during one continuous period of activity on one channel. A burst starts with an SEL signal and ends with either the next SEL signal or a data packet with an end-of-message code in it. System resources are assigned for the purpose of transmitting one burst and reassigned for subsequent bursts. "System resources" are here understood to mean data packet storage space in a switching unit and trunks on a transmission line that interconnects two switching units.
Each link of a channel in the data transmission from one switching unit to another can use at most one trunk, and therefore no one channel can absorb all available trunks. However, there is a danger that one channel might use all the storage in one or more switching units. Therefore, the following constraints are used.
Storage space in a switching data is assigned in units data M packets, where "M" is a parameter that is a constant for each channel. The particular value given to M for a specific channel is determined when the channel data virtually allocated. When burst transmission begins, the β process obtains the assignment of M storage locations, data all transmission there have been loaded by the β process with data it has received, it requests another assignment of M storage locations. data data packet must be used.
DATAThe storage locations by the β process are then made available to the associated α process for retransmission. When the retransmission is satisfactorily completed, the α process releases the storage locations. They are then available for assignment to the next β process that makes a request for storage allocation. Hence the amount of storage, denoted by "V," in a switching unit which is actually assigned to an active subchannel is the sum of all those assignments of M made to the subchannels β process less the amount of storage released by the subchannel's α process.
The V assigned to a particular subchannel is constrained not to be greater than a particular value "A," where "A" is another constant that is specified for the subchannel. Hence so long as A-V<M for a particular subchannel, the requests for further allocation of storage by that subchannel's β process will not be honored. This use of the ACK signals provides the means whereby the data transmission system of this invention automatically matches the transmitting speed of each sending digital device to the receiving speed of each digital device to which it transmits.
The manner in which the data transmission system of this invention controls the transfer of data is dependent upon all data being assigned sequence numbers which are used by the ACK signals both to acknowledge correct receipt of the data which has been thus far transmitted and to authorize further transmission. The use of a six-bit sequence number, as has been done in this exemplary embodiment, allows a single ACK signal to authorize transmission of at most 63 data packets. Alternative embodiments could, of course, use a sequence number of different size to allow the authorizatin of transmission of a greater or lesser number of packets without departing from the spirit and scope of this invention.
The packets transmitted between successive authorization signals are collectively referred to as a "bundle." Since this embodiment uses a six-bit sequence number it will be appreciated that the size of a bundle may not be greater than 63 packets. In fact, it may comprise less than this number, the length being determined by the α process which transmits it. The maximum authorization that a β process will send is determined by the parameter N, which is a constant for the subchannel. Thus N is a second constrain on the maximum size of a bundle. In all cases, the last packet in a bundle is uniquely identified by type field 1111 shown in FIG. 11C. By convention, an SEL signal is always the end of a bundle. A digital device may arbitrarily divide the data it sends to another digital device into units termed "messages." When a sending digital device transfers the last byte of a message to its associated TIU, it must set the SEOM line as previously discussed in conjunction with FIG. 7D. By convention, the last packet of a message defines the end of a bundle and the end of a burst.
The operation of the α and β algorithms can be understood with reference to FIG. 1B by considering the transfer of data from
TIU19 to switching
unit21 through switching
unit20.
As shown in FIG. 1B, the αT1 process of
terminal interface unit19 is connected to the βT1 process of switching
unit20. The other half of the switching
unit20 portion of
subchannel15 is the αT2 process which connects to the βT2 process of switching
unit21.
Consider first a transmission from αT1 to βT1. Data and SEL signal packets passing from αT1 to βT1 are sequence numbered as described above and these sequence numbers are checked by βT1. Only data and SEL signal packets which have consecutive numbers are accepted for processing by βT1, all others are treated as errors. When the digital device associated with
TIU19 desires to start transmission on
subchannel15, it must issue a select for that channel which will then result in an SEL signal being sent by αT1 to βT1. Upon arrival at βT1 that SEL signal will constitute a request for resources for the transmission of one burst of data from αT1 through switching
unit20 onto
link25. In particular, βT1 makes a request for a subtrunk to implement
link25 and for storage space in switching
unit20 sufficiently large to accommodate M packets of data. If either of these two resources cannot currently be assigned to βT1, then transmssion to switching
unit20 on
subchannel15 is suspended until sufficient resources become available.
One the requested resources have been assigned to βT1, the SEL signal from αT1 is acknowledged by sending an ACK signal from βT1 to αT1 authorized the start of data transmission. The αT1 process will, if the digital device provides enough data, send the authorized number of packets of data to βT1, marking the last of these packets as the last of a bundle. As each packet is received, βT2 checks its sequence number and stores it in switching
unit20. When the last packet of the bundle is received, βT1 wil construct a new ACK signal and send it to αT1. That new ACK signal confirms the successul reception of the transmitted data and authorizing transmission of more data until the total amount transmitted is equal to M. When this occurs, βT1 will request storage space for another M packet of data. When this request is honored, βT1 again sends an ACK signal to αT1.
When βT1 receives either an SEL signal or the last packet of a message, thus signifying the end of a burst, any unused storage resources assigned during burst transmission but currently unused for storage of data are returned to the common storage pool in switching
unit20.
Considering next the transmission from αT2 to βT2, it is apparent that this depends upon βT1 supplying to αT2 the data received from αT1. βT1 makes this data available to αT2 by placing it in a first-in-first-out queue which can also be accessed by αT2. αT2 constantly tries to empty the queue by retransmitting the data to βT2. The transmission process comprising sequence numbering of the data packets and use of the ACK signal to authorize further transmission that was described above is also used to effect this retransmission.
Although the process for transmission of data on
link25 shown in FIG. 1B is the same as that previously described for
link24, the signalling associated with the start and end of a burst is different.
A burst on
link25 starts when the βT1 process obtains an assignment of a subtrunk linking switching
units20 and 21. At that time an STRT signal is sent over the assigned subtrunk to switching
unit21. As previously mentioned, the SEQ and CH fields are combined to uniquely specify that portion of
subchannel15 passing through switching
unit21 shown in FIG. 1B. When switching
unit21 receives the STRT signal it associates the assigned subtrunk number with the proper sub-channel so that subsequent transmissions on that subtrunk will be correctly handled by the βT2 process. The signal also causes βT2 to request resources for burst transmission in the same way as was described above for βT1.
The end of a burst occurs when αT2 runs out of data to transmit and at the same time no burst is in progress on
link24. At that time αT2 releases the subtrunk which it has been using to implement
link25. The subtrunk then becomes available for reassignment. When the subtrunk is released, and periodically thereafter, switching
unit20 sends an IDL signal over that subtrunk for as long as it remains unassigned. If switching
unit21 receives an IDL signal on the subtrunk while it is associated with βT2, then it disassociates that subtrunk from βT2 and informs βT2 that the burst is finished. At this time, the action of βT2 is the same as that previously described for βT1 at the completion of a burst.
The communication process utilized by this invention in the manner set forth above is implemented by stored programs that reside in each
interface computer62 and each
control computer30 shown in FIG. 2B. Each interace computer executes the same program as every other interface computer in the system and each control computer executes the same program as every other control computer in the system. The details of these two programs will now be discussed, considering first the interface computer program and then the control computer program.
FIGS. 12-16B are seen to comprise flow charts of the initialization instructions and the four routines that correspond to the α and β processes as performed by the interface computer: the initialization instructions shown in FIG. 12, the data output routine shown in FIGS. 13A and 13B, the data input routine shown in FIGS. 14A and 14B, the signal output routine shown in FIG. 15, and the signal input routine shown in FIGS. 16A and 16B. The data output routine implements the data handling portion of the α process, while the data input routine implements the data handling portion of the β process. The signal input and output routines are used by both the α and β processes to perform the signaling that each requires.
Each of the four interface computer routines is functionally independent of the others. However, each contains sequences of instructions that must be performed in particular ones of the time periods which have been set forth graphically in FIG. 7B, during which
terminal buffer60 can transmit control information. The four routines contain instructions that must be executed during the D37, S0, S1, S2, S3, D0, D1, D2, and D3, periods as well as some instructions, termed asynchronous instructions, that may be executed between the D3 and D37 time periods. The execution of the instructions in the proper time sequence is achieved by interleaving the functionally independent portions of each of the four routines according to the time periods in which they must be executed. For ease of description, each routine will be explained individually. The exact manner in which the instruction interleaving may be performed is, however, set forth in the program listing of Appendix A, which is a list of the contents of
program memory600 of
interface computer62 shown in FIG. 9A.
The flow charts of FIGS. 12-16B are seen to include several different symbols. A rectangle, termed up "operation block" is used to indicate an arithmetical or logical step in the process. A diamond, termed a "conditional branch point" indicate a decision step of the process. An ellipse, termed a "terminal indicator" delineates the various sequence times during which the instructions must be performed. A circle is used merely as a drafting aid to indicate the proper flow from one sheet of the drawing to another.
INITIALIZATION INSTRUCTIONS OF THE INTERFACE COMPUTER PROGRAMTurning then to the flow charts, FIG. 12 illustrates the several initialization instructions which must precede the four interleaved routines to insure that each cycle of execution begins at the start of the D37 time period.
The flow chart of FIG. 12 has two entry points, 750 and 754. The
START entry750 is used to initialize the interface computer program.
Operation block751 begins this process by setting working store locations SOUT, DOUT, DIN, SSEQ, RSEQ, and LIMIT to zero.
Block752 then sends an XMT command to the data transmit
buffer451 causing it to prevent the
digital device18 from writing data into the buffer. Next block 753 issues an RCV command to the data receive
buffer450 causing it to prevent any data from being read out of that buffer by the digital device. Control then passes to
operation block755.
The
RESTART entry754 is used when it is required to disconnect the
TIU17 from the
transmission loop14. To obtain this effect control is passed to block 755, which sets SOUT equal to three and then passes control to the main loop of the interface computer program at
conditional branch point756.
756 tests whether data multiplexer 58 has obtained frame synchronization with the
transmission loop14. That fact is indicated by a 0 on line FRAMEOUT. If that line is a 1, indicating that frame synchronization has not been achieved,
conditonal branch point756 continues to loop back to block 755. If data multiplexer 58 is in synchronization with the transmission loop control passes from
conditional branch point756 to
conditional branch point757.
The sequence comprising
conditional branch point757 and block 758 maintains the connection of the TIU to the
transmission loop14 by appropriate pulsing of power monitor 76 shown in FIG. 2B which keeps the
protection relay54 in the
loop access module16 closed for as long as the value in working store location SOUT is not equal to three. If the value in working store location SOUT is equal to three, control transfers from
conditional branch point757 around
block758 to
conditional branch point759. Otherwise, control passes to block 758. In
block758 an ALIVE command is issued to power monitor 76 which causes the
protection relay54 to remain closed for the next time period of about 250 microseconds. The sequence comprising
conditional branch point759 and operation block 760 causes
interface computer62 to wait for time period D36. During that time period the D36 input line is equal to 1. If that line is not equal to 1, then
conditional branch point759 transfers control to block 760 and block 760 causes
interface computer62 to wait for another byte strobe. Following the arrival of the next byte strobe, control passes back to
conditional branch point759. If
conditional branch point759 determines that input line D36 is equal to one, synchronization is now obtained with the time period D36 and control passes to block 761.
Block761 waits for the byte strobe to arrive signaling the start of time period D37. This time period is the time at which the first sequence of execution of the four main routines is to begin and hence control passes from
block761 to these routines. This action is shown schematically in FIG. 12 as
block762. After the execution of the asnychronous sequence of the last of these routines, control passes back to block 756 and the cyclic operation of the interface computer program is repeated.
Turning then to FIGS. 13A and 13B, these are seen to comprise a flow chart of the data output routine. The function of the data output routine is to handle the output of a data packet and to supervise the operation of data transmit
buffer451. This routine maintains the sequence number SSEQ discussed hereinbefore in Table IV. It stores the data packet control data in COUT, the data packet length in LOUT, and the process status in DOUT. The sequence number for the end of the current bundle is held in LIMIT and SELCH contains the number of the currently selected output channel.
As shown in FIG. 13A, the first function performed by the data output routine takes place during the D37 interval and comprises
blocks800 through 805. The purpose of these blocks is to complete if necessary, the outputting of a data packet from data transmit
buffer451 to
data multiplexer58. This operation may have been begun during the last cycle of the interface computer program and may not as yet have been completed.
Conditional branch point801 tests whether DOUT is equal to four. As previously mentioned. Dout stores the status of the routine. If indeed the data output routine is in the process of outputting a data byte, then DOUT will equal four. If this is not the case, then
conditional branch point801 will transfer control to the next sequence, the S3 sequence which begins at
block806.
If DOUT does equal four, the
conditional branch point801 transfers control to
conditional branch point802 which tests the value of COUT. COUT corresponds to the TYPE field in the CNTRL byte of a data packet. Thus COUT takes the value two if the data packet is the end of a message and therefore the end of a bundle, takes the value one if it is merely the last packet in a bundle without being the last packet in a message, and takes the value zero if it is neither the last packet in a bundle nor in a message. If COUT is not equal to zero, thus indicating that the current packet is either an end-of-bundle or end-of-message, then status word DOUT is set equal to eight by
block803, which serves to indicate that the data output routine is now waiting for an ACK signal. Control is then transferred by
block803 to the the beginning of the S3 sequence at
block806.
If COUT is zero, then the current data packet is neither an end-of-bundle nor an end-of-message, and block 804 sends an SCLEAR command to data transmit
buffer451. This will cause data transmit
buffer451 to allow
digital device18 to write in another packet of data. Status word DOUT is then set equal to 1 by
block805 indicating that
digital device218 is now currently reading a new data packet into data transmit
buffer451. At this point, control is transferred to
terminal indicator806 at which time the S3 sequence is begun.
During time period S2 the sequence starting at
block806 is obeyed. That sequence starts with
conditional branch point806 where a test is made on DOUT. If DOUT is equal to two, it indicates that the data output routine is waiting to transmit a packet of data. If the data output routine is not so waiting,
conditional branch point807 transfers control to the D0 sequence starting at
operation block809. If the data output routine is waiting to transmit a data packet, then block 808 issues a SENDD command to
data multiplexer58. This command causes the multiplexer to look for an opportunity to transmit a data packet.
The sequence starting at
terminal indicator809 is executed in time period D0. That sequence comprises only block 810 in which the contents of working storage location COUT are transferred to data output lines MDO. The effect of this is to cause data multiplexer 58 to transmit as byte D1 of a data packet the value which is currently contained in COUT.
The sequence beginning at
terminal indicator811 is executed in time period D1. That sequence comprises block 812 in which the contents of working store location LOUT are transferred to data output lines MDO, causing data multiplexer 58 to write the value from LOUT into byte D2 of the outgoing data packet. If the multiplexer is not currently transmitting, then blocks 810 and 812 will have no useful effect.
The sequence which begins at
terminal indicator812A is executed in time period D2. This sequence is in fact redundant and has no useful effect if data multiplexer 58 is not actually transmitting data; and if the multiplexer is transmitting, the effect of this sequence is to output in byte D3 of the outgoing data packet the checksum which is computed as the EXCLUSIVE OR of the values in bytes D0, D1, and D2 of a data packet.
Block813 computes this value using the fact that peripheral store lines TID carry the terminal ID which is written into byte D0 of the data packet and the fact that working store locations LOUT and COUT contain the values inserted in byte positions D1 and D2, respectively, of that packet. The result computed by
block813 is transferred to data output lines MDO by
block814.
The sequence which starts at
terminal indicator815 is obeyed in time period D3. First,
conditional branch point816 tests the SEND line from
data multiplexer58. That line is equal to 1 if data multiplexer 58 is in fact transmitting a data packet.
Conditional branch point816 transfers control to
terminal indicator820 if data multiplexer 58 is not transmitting data. When the data multiplexer is transmitting data, SEND is 1 and
conditional branch point816 transfers control to block 818 where an XMT command is issued to data transmit
buffer451. The effect of this command is to cause the buffer to transmit during time periods D3 through D36 the thirty-two bytes of data held in the buffer, followed by the sixteen-bit checksum which that buffer computes .Operation block 819 then sets DOUT equal to four, indicating that transmission of data is in progress.
The asynchronous sequence which begins at
terminal indicator820 is obeyed sometime between time period D3 and time period D37. First in that sequence, as shown in FIG. 13B,
conditional branch point821 tests DOUT. If DOUT is not equal to 1, control is transferred to the end of the data output routine at
terminal indicator835. When DOUT equals 1, this indicates that the digital device is able to transfer data into data transmit
buffer451.
When
digital device18 has finished transferring data into data transmit
buffer451 either SSUM or EOMS will be set equal to 1. Alternatively,
digital device18 may select a new channel, in which case SELEC will be equal to 1. If any of these conditions exists, then the sequence beginning at
block823 is obeyed, otherwise
conditional branch point822 transfers control to the end of the data output routine at
terminal indicator835.
The sequence beginning at
block823 first works on the assumption that
digital device18 has inserted data into data transmit
buffer451 and that that data should then be transmitted as a data packet. This assumption is good unless
digital device18 selected a new channel when data transmit
buffer451 was empty. This condition is tested by
conditional branch points832 and 833.
823 computes the sequence number to be used in the data packet which will next be transmitted. Next,
conditional branch points824 and 827 and operation blocks 825, 826, and 828 compute the type of the data packet to be transmitted. If the sequence number of the packet held in SSEQ is equal to the limiting sequence number held in LIMIT, then
conditional branch point824 transfers control to block 826 where the type of the packet is provisionally set in COUT to be equal to 1. If SSEQ is not equal to LIMIT, then
conditional branch point824 transfers control to block 825 wherein the type of the packet is provisionally set to 0 in working storage location COUT.
827 is then executed and tests input line EOMS. This line is 1 if
digital device18 has indicated that the data stored in data transmit
buffer451 is the last of a message. If EOMS is equal to 1, then
conditional branch point827 transfers control to block 828 wherein the packet type two is stored in working storage location COUT. If EOMS is not equal to 1, then
conditional branch point827 transfers control around block 828 to block 829.
The information which will go into byte position D1 of the data packet contains the sequence number in its most significant six bits and the packet type in its least significant two bits. This value is computed in
block829 and stored in COUT. Since the sequence number is already in the most significant six bits of SSEQ, and since the type is already in the least significant two bits of COUT, block 829 merely adds the contents of working store locations COUT and SSEQ and stores the value in COUT.
The information which is transmitted in byte D2 of the data packet is equal to the length of the data in that packet. That length is currently available on input lines SBL which come from data transmit
buffer451.
Operation block830 stores this length in working store location LOUT. DOUT is then set equal to two by
block831. This indicates that the data output routine is now waiting for an opportunity to transmit.
Conditional branch points 832 and 833 then proceed to test whether
digital device18 in fact wrote any data into data transmit
buffer451. If it did, then either the data length on lines SBL will be nonzero or line SSUM will be set equal to 1. If either of these conditions exist, then
conditional branch points832 and 833 will transfer control to the end of the data output routine at
terminal indicator835. If neither of these conditions exists, then
digital device18 must have selected a new channel without writing any data into data transmit
buffer451, and in this case block 834 is used to set DOUT equal to zero, indicating that the data output routine is calling upon the signal output routine to transmit an SEL signal. After obeying
block834, control is transferred to the end of the data output routine at
terminal indicator835.
This routine handles the input of a data packet and supervises operation of the data receive
buffer450. The process maintains a sequence number in RSEQ, stores the data packet control and length information in CIN and LIN, respectively, and stores the process status in DIN. If any errors are detected during input the type of error is noted in DERR.
As shown in FIG. 14A, the routine starts at
terminal indicator840 with a sequence which is obeyed in time period D37. First in that sequence is
conditional branch point841 where a test is made on DIN to see if it is equal to 1, indicating that data is currently being received from data multiplexer 58 by data receive
buffer450. If DIN is not equal to one,
conditional branch point841 transfers control to the D1 sequence beginning at
terminal indicator851. Otherwise, control is passed to
conditional branch point842.
842 checks whether there was a bipolar error or a checksum error in the data received by data receive
buffer450. It does this by checking to see if either of the input lines BPER or ERROR is equal to 1. If neither is equal to 1, then
conditional branch point842 transfers control to block 848, otherwise it transfers control to
conditional branch point843. If line BPER is equal to 1 then a bipolar error was detected by
multiplexer58 and
conditional branch point843 transfers control to block 844, where the value sixteen is added to working store location DERR. If no such error was detected, then
conditional branch point843 transfers control to
conditional branch point845.
If data receive
buffer450 detects a checksum error in the incoming data packet, then line ERROR will be set to 1 and
conditional branch point845 will transfer control to block 846 where the
value128 is added to working store location DERR. if no such error was detected then
conditional branch point845 transfers control to block 847. In
block847 DIN is set equal to four, which serves to indicate that the data input routine is now waiting for the signal output routine to send an ACK signal.
Operation block847 then passes control to the D1 sequence beginning at
terminal indicator851.
As mentioned above,
conditional branch point842 transfers control to block 848 if no error is detected in the incoming data packet.
Block848 then sets DIN equal to two, indicating the data input routine is now waiting for
digital device18 to read data from data receive
buffer450, and control is transferred to
operation block849.
Operation block849 sets the lines RBL equal to the value currently stored in working store location LIN which value is currently minus one times the length of the data in the data packet. Then block 850 issues an RCLEAR command to data receive
buffer450 causing that buffer to make the data it holds availabe to
digital device18. Control is then transferred to the D1 sequence beginning at
terminal indicator851.
The D1 sequence starts with
conditional branch point852 where a test is made on DIN. If DIN is equal to 0, then the data input routine is waiting to read a data packet and
conditional branch point852 transfers control to block 853, which transfers the data available on input lines MDI from
data multiplexer58 to working store location CIN. Otherwise, control passes around block 853 to
terminal indicator854.
The next sequence, starting at
terminal indicator854, is executed in time period D2 and comprises operation block 855 which transfers the data on data input lines MDI to working store location LIN.
The next sequence is the D3 sequence which begins at
terminal indicator856. The first action taken by this sequence is to test whether a data packet destined for
TIU17, in which the data input routine is running, is in fact being read by
data multiplexer58. That test is made in
conditional branch point857 by checking to see whether line READ is equal to 1. If READ is not equal to 1, then control is transferred to the beginning of the asynchronous sequence at terminal indicator 873 shown in FIG. 14B. If a packet is being read by
data multiplexer58, then line READ will equal 1 and control is transferred to
conditional branch point858A where a test is made on DIN to see if the data input routine is in fact waiting for more data input as is the case when DIN equals 0. If no input is expected, the control is transferred from
conditional branch point858A to the end of the D3 sequence, that is, to terminal indicator 873 shown in FIG. 14B. Otherwise, control passes to block 858.
Working store location DERR is used by the data input routine to accumulate values indicating errors that have been detected during the input process. In
block858 DERR is initialized to zero. Following
block858,
conditional branch point859 and block 860 together check the sequence number of the incoming packet against that expected by the data input routine as stored in RSEQ. If that check fails and the sequence number of the incoming packet is a number different from that expected, then a error code of eight is set in DERR.
Conditional branch point859 extracts the sequence number from the most significant six bits of CIN where it is deposited by
block853 during the input process. This extraction uses "$FC" as a mask, where the symbol "$" indicates the hexadecimal number system and F and C are hexadecimal digits. Thus "$FC" is the hexadecimal representation of the
decimal number252.
859 compares the extracted sequence number with the sequence number in the most significant six bits of working store location RSEQ. If the sequence numbers are equal, control passes from
conditional branch point859 to
conditional branch point861. Otherwise, block 860 sets an error code in DERR.
861 and operation block 862 then check whether the data input packet just received relates to a channel different from the one selected for data output. Working store location RCH contains the number of the channel that was selected for data input and working store location SELCH contains the channel number chosen by
digital device18 for data output. At
conditional branch point861 these two values are compared, and if they are equal, control is transferred to
operation block863. Otherwise control passes to operation block 862 where the error code four is inserted in working store location DERR.
Byte D3 of each data packet is a checksum whose value should be the EXCLUSIVE OR of bytes D0, D1, and D2, which byte values are currently available to the data input routine on input lines TID, in working location CIN, and in working location LIN, respectively
Block863 thus computes the EXCLUSIVE OR of these three values.
Conditional branch point864 compares the result with the value currently on data input lines MDI. If equality is found, then control passes from
conditional branch point864 around
operation block865 to
operation block866. Otherwise block 865 is used to set the error code two in working store location DERR.
Next, block 866 shown in FIG. 14A extracts the type of the incoming data packet from the value currently held in CIN. That type is in the least significant two bits of CIN and the effect of
block866 is to mask out and return to CIN just the two-bit quantity which is the type of the incoming packet.
Conditional branch point867 then checks whether the incoming packet is of type two. If it is not, control is passed around block 868 to block 869. Otherwise, block 868 is used to set the command line REOM. Command line REOM is an input to data receive
buffer450 which signals if that the incoming data packet is the last of a message. At this point in the data input routine working store location LIN contains the length of data actually contained in the packet. This value is shown as being negated by
block869. Since
interface computer62 does not have a subtract instruction, the two's-complement negative of the value in LIN is obtained in two steps. First the EXCLUSIVE OR of that value with the hexadecimal value $FF (255 decimal) is formed. Then one is added to the result.
870 transfers the contents of working store location LIN to the lines RBL where it is made available to data receive
buffer450.
Operation block871 shown in FIG. 14B then issues an RCV command to data receive
buffer450 which causes it to start reading data from
data multiplexer58. This is a process which continues from time period D4 through to time period D37. To indicate that this input process is taking place, operation block 872 sets working store location DIN equal to 1.
The asynchronous sequence starting at terminal indicator 873 is obeyed during the interval from time period D3 through time period D37. In the asynchronous sequence, the data input routine first checks to see whether data in data receive
buffer450 is currently available to
digital device18 and whether
digital device18 has in fact just finished taking the last byte of data from data receive
buffer450. If that is the case, then working store location DIN is equal to two and input lines RSUM are equal to 1. If the first of these conditions is not true, then
conditional branch point874 transfers control to
conditional branch point876. If the second of these conditions is not true, then
conditional branch point875 transfers control to
conditional branch point876. If both conditions are true, then
conditional branch point875 transfers control to
conditional branch point878.
Conditional branch point876 determines whether a channel break has been sent to
digital device18. If a channel break has been sent to
digital device18 then working store location DIN will contain the value eight and
conditional branch point876 transfers control to
conditional branch point877. Otherwise, control passes to the end of the data input routine at
terminal indicator882.
877 determines whether the channel break has been accepted and acknowledged by
digital device18. If it has, input line BKEKO will contain the
value0 and
conditional branch point877 will transfer control to
operation block880. Otherwise control will pass to the end of the data input routine at
terminal indicator882. In
block880 the working store location DIN is set to four, indicating that the data input routine is waiting for the signal output routine to send an ACK signal.
Operation block880 passes control to block 881.
It can be seen from the above that when
digital device18 has completed collecting data from data receive
buffer450 control passes to
conditional branch point878. At that point, the data intput routine checks to see whether the type of packet just given to
digital device18 is equal to 0. Working store location CIN stores the packet type. If the type is nonzero, it must either be the last packet of a bundle or the last packet of a message, and in either of these cases control passes from
conditional branch point878 to operation block 880 where, as seen above, working store location DIN is set equal to four to indicate that the data input routine is waiting for the signal output routine to send an ACK signal. If the type of the packet is zero, then control passes from
conditional branch point878 to operation block 879 where working store location DIN is set equal to 0 indicating that the data input routine is waiting for another input packet.
Operation block879 then passes control to
operation block881.
The sequence number of the next packet to be accepted by the data input routine is contained in the most significant six bits of working store location RSEQ.
Operation block881 increases RSEQ by four and then transfers control to the end of the data input routine at
terminal indicator882.
The signal output routine is illustrated in FIG. 15. This routine handles the output of a signal packet contained in working storage locations FOUT and NOUT. The state of the signal output routine is indicated by the current value of SOUT.
As shown in FIG. 15, the signal output routine begins at
terminal indicator890 in time period D37. The signal output routine first checks whether SOUT is 1 to see if it is waiting to send a signal.
Conditional branch point891 transfers control around
operation block892 to
terminal indicator893 if SOUT is not equal to 1, and transfers control to block 892 where an SENDS command is issued to
data multiplexer58 if SOUT is equal to one. The SENDS command requests transmission of a signal packet at the next opportunity.
The S0 sequence starting at
terminal indicator893 comprises
block894 in which the information in storage location SOUT is transferred onto data output lines MDO and made available to
data multiplexer58 which will insert it as the second byte of an outgoing signal packet.
The S1 sequence beginning at
terminal indicator895 comprises
operation block896 where information in storage location NOUT is transferred onto data output lines MDO which take it to the
multiplexer58 where it is inserted into byte S2 of an outgoing signal packet.
The S2 sequence begins at
terminal indicator896A. First,
operation block897 computes the checksum to be transmitted as byte S3 of the outgoing signal packet. That checksum is the EXCLUSIVE OR of the three preceding bytes of the signal packet and these values are available, respectively, on input lines TIC, in working store location FOUT, and in working store location NOUT. This checksum is output onto data output lines MDO by
block898.
It may happen that operation block 892 requested the opportunity to transmit a signal packet and
data multiplexer58 did not find an opportunity to do so in the current master frame time. This condition is tested in
conditional branch point899. If so, input line SEND is equal to zero 0 and the operation performed by
blocks894, 896, 897, and 898 will have been in vain. If input line SEND is equal to 1 it indicates that data multiplexer 58 was able to transmit a signal packet and in this case
conditional branch point899 transfers control to
operation block900. If this is not the case,
conditional branch point899 transfers control to
terminal indicator901. In
operation block900 SOUT is set equal to two, indicating that the signal output routine has disposed of any current requests to send a signal packet and is available to process a subsequent request.
The asynchronous sequence beginning at
terminal indicator901 is obeyed during time period S3 and D37. If at this point SOUT contains the value two, then the signal output routine is available to service a request to transmit signals and the signal output routine thus goes on to determine whether such a request exists.
Conditional brance point902 transfers control to the end of the signal output routine at
terminal indicator906 if the signal output routine is not available to send a signal, that is, if SOUT is not equal to two. Otherwise, control is transferred to
conditional branch point903.
If it is able to service this request to send a signal,
conditional branch point903 tests to see if the data input process is requesting that an ACK signal be sent. That fact is indicated by the value four stored in DIN. If an ACK signal is requested,
conditional branch point903 transfers control to block 907. Otherwise, control passs to
conditional branch point904.
In
conditional branch point904 the signal output routine checks to see if the data output routine is requesting the transmission of an SEL signal, that is, if working store location DOUT is equal to 0. If such a signal is requested, control is transferred from
conditional branch point904 to
operation block910. Otherwise control passes to the end of the signal output routine at
terminal indicator906.
907, 908, and 909 handle the output of an ACK signal on behalf of the data input routine. Byte S1 of the ACK signal contains the sequence number of the last packet received by the data input routine, which number is one less than the six-bit number held in the most significant six bits of working store location RSEQ. The purpose of
block907 is to compute the sequence number of the last received packet and store the value in FOUT for subsequent transmission by the signal output routine. Byte S2 of the ACK signal contains the error indication currently stored in working store location DERR. In
block908 this value is transferred to working store location COUT for subsequent output by the signal output routine.
Block909 sets DIN equal to 0, indicating to the data input routine that it should now be waiting for further data packet input and then transfers control to
operation block920.
The sequence starting at
block910 handles the output of the SEL signal on behalf of the data output routine. The number of the selected channel is provided by
digital device18, and is stored in channel
select circuit452 from which it is available to interface
computer62 on lines SBC.
Block910 stores the number of this channel in working store location SELCH. That number is to appear in byte S2 of an SEL signal and thus operation block 912 transfers the channel number from SELCH to working store location COUT from which it is subsequently transmitted by the signal output routine.
Byte S1 of an SEL signal contains in its most significant six bits the sequence number which is one greater than the last sequence number transmitted. That number is available in the most significant six bits of working store location SSEQ. A 1 is stored in the least significant two bits of byte S1 of the SEL signal packet.
Block913 computes the value of byte S1 for the SEL signal packet using the sequence number held in SSEQ and stores the result in working store location FOUT for subsequent transmission by the signal output routine. In
block914 the signal output routine sets DOUT equal to sixteen indicating to the data output routine that it should now be waiting for the ACK signal to be received.
Operation block915 then issues an XMT command which insures that
digital device18 cannot write more data into data transmit
buffer450.
Conditional branch point916 checks to see if DIN is equal to two, that is, to see if there is data currently available in data receive
buffer450. If this is not the case, control passes to block 920, otherwise control passes to block 917.
917 issues an RCV command to data receive
buffer450. This insures that data currently resident in data receive
buffer450 is no longer made available to
digital device18. Then in
block918 DIN is set to four to indicate to the data input routine that it must now send an ACK signal. In
block919 working store location DERR is set to four to indicate that the most recently received data packet was treated as being an error for the reason that it applies to a channel that is no longer the one selected for data output. From
block919 control passes to block 920 where SOUT is set equal to 1 indicating that the signal output routine is now waiting to transmit another signal. From
block920, control passes to the end of the signal output routine at
terminal indicator906.
The signal input routine is illustrated in FIGS. 16A and 16B. This routine stores the second and third bytes of each signal packet in working store locations FIN and NIN, respectively.
The signal input routine starts with the S1 sequence beginning at
terminal indicator930. During time period S1, block 931 copies the data available on data input lines MDIN into woking store location FIN.
The S2 sequence beginning at
terminal indicator932 is executed next. During time period S2, block 933 transfers the data on data input lines MDIN into working store location NIN.
The next sequence executed by the signal input routine is the S3 sequence beginning at
terminal indicator934.
Conditional branch point935 tests to see if a signal is in fact being read. This is indicated by the READ input line. If that line is equal to 0, then no signal packet is in fact being read and
conditional branch point935 causes a transfer to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B. Otherwise control passes to
conditional branch point936. At this time the input line BPER is equal to one if a bipolar error was detected by
data multiplexer58 during the reading of the signal packet.
Conditional branch point936 transfers control to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B if an error is so detected, and if no error is detected, control passes to block 937.
Byte S3 of a signal packet contains a checksum which is the EXCLUSIVE OR of the preceding three bytes, S0, S1, and S2. At this point the values of these bytes are available on lines TID, in working store location FIN, and in working store location NIN, respectively.
Block937 computes the EXCLUSIVE OR of these three values, and
conditional branch point938 compares that with the value available on data input lines MDIN. If the two values are found to be unequal,
conditional branch point938 transfers control to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B. Otherwise, control passes to block 939. The significance of the signal packet is determined by the function code in the least significant two bits of byte S1 of the signal packet. That function code is extracted from the value stored in FIN by
operation block939. Conditional branch points 940, 941, and 942 then transfer control to the sequence appropriate to the function value obtained.
940 transfers control to
conditional branch point944 if the function code of the incoming signal packet is 0 indicating that it is an ACK signal. Otherwise, control is transferred to
conditional branch point941 shown in FIG. 16B.
Conditional branch point941 transfers control to
conditional branch point956 if the function code of the incoming signal packet is one, indicating that it is an SEL signal.
Conditional branch point942 shown in FIG. 16B transfers control to
conditional branch point966 if the function code of the incoming signal is two, indicating that it is an RST signal. If the function code is not one of these values, then control passes t the end of the signal input routine at
terminal indicator943.
The sequence starting at
conditional branch944 shown in FIG. 16A handles the case when the incoming signal is an ACK signal. If the data output routine is waiting for an ACK signal after transmitting the last data packet of a bundle, the value of DOUT is eight. A test of this value is made by
conditional branch point944 and if that value is found, control is transferred to block 948. Otherwise, it passes to
conditional branch point945.
If the data output routine has previously received an ACK signal which indicated that it should not transmit any more data packets, the value of DOUT is thirty-two.
Conditional branch point945 tests for this value and, if it finds it, passes control to block 948. If not, control passes onto
conditional branch point946.
If the data output routine is waiting for an ACK signal after sending an SEL signal, then DOUT equals sixteen.
Conditional branch point946 checks for this value. If the value sixteen is not found, control passes from
conditional branch point946 to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B. If the value sixteen is found, control passes to block 947.
Block947 sets DOUT equal to 0 as a provisional measure indicating that if the incoming ACK signal has an incorrect sequence number, then the data output routine should request the signal output routine to send another SEL signal. Control then passes from
block947 to
terminal indicator949.
As mentioned above, block 948 is obeyed if either of the tests made by
conditional branch points944 and 945 are true. In this case, DOUT is set equal to two indicating to the data output routine that if the incoming ACK signal has an erroneous sequence number the data output routine should repeat the transmission of the most recently transmitted data packet. Control then passes from
block948 to
terminal indicator949.
In the D0 sequence beginning at
terminal indicator949, the first operation is performed by
conditional branch point950 which compares the sequence number in the most significant six bits of working store location SSEQ with the sequence number from byte S1 of the incoming signal packet which is currently stored in working store location FIN. If these values are not equal, control passes through
conditional branch point950 to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B. Otherwise control passes to block 951. In
block951 working store location LIMIT is set equal to the value stored in working store location NIN.
The NIN value was obtained from the byte S1 of the incoming signal packet and is the sequence number of the last data packet which the data output routine is authorized to transmit. If this value is equal to the value stored in SSEQ then the data output routine has transmitted all that it is permitted to transmit and
conditional branch point952 passes control to block 955 where the working store location DOUT is set equal to thirty-two, indicating to the data output routine that it must wait for another ACK signal. If working store location LIMIT is not equal to working store location SSEQ, control passes from
conditional branch point952 to block 953 where an SCLEAR command is issued to data transmit
buffer451 with the effect that
digital device18 is permitted to write more data into that buffer.
Block954 sets DOUT equal to one, indicating to the data output routine that
digital device18 is now able to write into data transmit
buffer451. Control passes through
blocks954 and 955 to the end of the signal input routine at
terminal indicator943 shown in FIG. 16B.
The sequence starting at
conditional branch point956 shown in FIG. 16B handles the input of the SEL signal on behalf of the data input routine. Only if that routine is waiting for input will the SEL signal be accepted. Thus
conditional branch point956 checks to see if working store location DIN is equal to 0, and, if it is not, passes control to the end of the signal input routine at
terminal indicator943. If working store location DIN is 0, block 957 is obeyed. In that block the six-bit sequence number contained in the most significant six bits of byte S1 of the incoming signal packet is extracted from working store location FIN.
Conditional branch point958 compares this sequence number with working store location RSEQ. If the two values are found to be equal, control passes to block 961. Otherwise control passes to block 959.
959 sets an error code of eight in working store location DERR and then block 960 instructs the data input routine to request that the signal output routine send an ACK signal. This it does by setting DIN to four. After
block960, control passes to the end of the signal input routine, that is, to
terminal indicator943. In the case that control passes from
conditional branch point958 to block 961, the incoming SEL signal has been accepted and the channel number obtained from byte S2 of the signal packet and currently stored in working store location NIN is copied onto the lines RCH which are input lines to channel
break circuit453.
962 compares the channel number now selected for data input and contained in working store location NIN with the channel number selected for data output and currently contained in working store location SELCH. If these values are equal, control passes to block 965. Otherwise, control passes to block 963. When these numbers are not equal, error code four is set in working store location DERR by
block963 and a BREAK command is sent to channel
break circuit453 by
block964. The effect of these actions is to make the number of the channel selected for data input available to
digital device18.
After
block964 control passes to block 965 in which the signal input routine sets DIN equal to eight, indicating to the data input routine that a new channel has been selected for data input. After this action has been taken, control passes to the end of the signal input routine at
terminal indicator943.
The sequence starting a
conditional branch point966 is obeyed if an RST signal is received. In that case, the value contained in byte S2 of the incoming signal packet determines what further action should be taken. That value is currently stored in working store location NIN.
Conditional branch point966 transfers control to the
RESTART entry point754 of the signal input routine shown in FIG. 12 if the value in NIN is 0.
Conditional branch point967 transfers control to the
START entry point750 of the signal input routine shown in FIG. 12 if the value in working store location NIN equals 1. In the case that working store location NIN contains a value which is greater than 1, block 968 is obeyed. In
block968 working store location SOUT is set equal to two. This action is significant if the previous value of SOUT was three, indicating that the terminal interface unit is disconnected from the loop access module by
protection relay54 shown in FIG. 2B. By setting SOUT to two,
terminal interface unit17 will attach itself to the transmission line, an effect which is brought about by the initialization instructions shown in FIG. 12. After
block968, control passes to the end of the signal input routine at
terminal indicator943.
The program that resides in the
control computer30 of each switching
unit10 is a great deal more complex than the program that resides in the
interface computer62 of each
terminal interface unit17. Each switching
unit10 may have a plurality of
transmission lines12 attached to it as shown in FIG. 1A. Additionally, each switching
unit10 may have a plurality of
transmission loops14 attached to it as shown and each of these loops may interconnect through
loop access module16 up to 128 to
terminal interface units17. At any particular instant of time, the
control computer30 of each switching
unit10 will therefore be handling a large number of virtually allocated as well as actually assigned transmission paths. This function is performed in accordance with the illustrative embodiment of this invention by a plurality of functionally distinct routines and subroutines which are multiprogrammed by the Tempo I computer which serves as
control computer30. In order to facilitate the understanding of these routines and subroutines, the data structures that they use, which are illustrated in FIGS. 17-17L will first be discussed.
The major components in the data structures are blocks of thirty-two sixteen-bit words. Each of these blocks is termed a "descriptor." The manner in which the individual words of a descriptor are used depends upon what it is that the particular descriptor describes. Each
TIU17 shown in FIG. 1A has one descriptor which is stored in its associated
switching unit10. Each
transmission loop14 has one descriptor which is stored in its associated
switching unit10. Each
transmission loop14 has one descriptor which is stored in its associated
switching unit10. Each
transmission line12 has two descriptors, one stored in each of the two switching
units10 which it serves to interconnect. Similarly, each trunk has two descriptors, one in each of the switching
units10 which use it. Each channel has one descriptor stored in each switching
unit10 through which it passes. Finally, there is a single control unit descriptor in each control computer that describes the switching unit which it contains.
Referring then to FIG. 17A, it is seen that all of the
transmission loop descriptors1000,
transmission line descriptors1001 and
control unit descriptor1002 contained in a
single control computer30 memory are linked together by a circular pointer chain. Each pointer in this chain is contained in the NEXT field of each of these descriptors. For ease of discussion
hereinbelow loop descriptors1000,
line descriptors1001, and
control unit descriptor1002 are collectively referred to as "
type1" descriptors. A single storage location,
LINE1003, contains a pointer to that descriptor currently being processed by
control computer30.
FIG. 17B shows a circular pointer chain of the
TIU descriptors1004 and
trunk descriptors1005 that are contained in a
single control computer30 memory. These descriptors are collectively referred to hereinbelow as "
type2" descriptors. The circular chain shown in FIG. 17B interconnects all
type2 descriptors contained in
control computer30 by means of a pointer in the NEXT field of each descriptor which points to the next descriptor in the chain. The single storage location SCANNED 1006 contains a pointer to that one of the
type2 descriptors that was last accessed by the timeout routine in the manner to be described hereinbelow.
FIG. 17C shows another pointer which is contained in
line descriptor1001. This pointer, CHLIST, points to a chain of
subchannel descriptors1007. There are two subchannel descriptors for each virtual channel that is currently allocated in
control computer30. The pointer CHLIST shown in FIG. 17C points to a chain of the descriptors of those subchannels that are allocated to transmit data out of
control computer30 on a
particular transmission line12. In that chain the NEXT field of each
subchannel descriptor1007 contains a pointer to the next subchannel descriptor in the chain. The NEXT field of the last subchannel on the chain contains the value zero. The word CHLIST is zero if the chain is empty.
FIG. 17D shows another pointer which is contained in
TIU descriptor1004. This pointer, CHANNELS, also points to a chain of
subchannel descriptors1007. This chain comprises those subchannels which are allocated to transmit data to a TIU which is on a loop directly connected to the
control computer30. It can be seen in FIG. 17D that this chain is linked by the NEXT fields of
subchannel descriptors1007 in the same way as those of FIG. 17C. Also, the word CHANNELS is zero if the chain is empty.
FIG. 17E shows another pointer which is contained in
loop descriptor1000. This pointer TERMINALS, points to
terminal index1008 which contains pointers to
TIU descriptors1004. Although not shown in FIG. 17E, each
line descriptor1001 also contains a pointer TERMINALS to a
terminal index1008. Each
terminal index1008 contains 128 entries, one for each TIU ID if the
terminal index1008 is associated with a
loop descriptor1000 and one for each trunk ID if the
terminal index1008 is associated with a
line descriptor1001. The position of an entry in the
terminal index1008 corresponds to the ID of the
type2 descriptor to which that entry points. For
loop descriptors1000, as shown in FIG. 17E, the entries in the
terminal index1008 correspond to TIU ID numbers.
As previously mentioned, a full-duplex channel is described as a pair of subchannels. FIG. 17F shows that the pair of
subchannel descriptors1007A and 1007B for one channel comprise the
channel descriptor1009 for the channel. The thirty-two
word channel descriptor1009 contains a sixteen-
word subchannel descriptor1007A in its first sixteen words and a second sixteen-
word subchannel descriptor1007B in its second group of sixteen words. The SINK fields in each
subchannel descriptor1007A and 1007B contains pointers to the
type2
descriptors1010A and 1010B, respectively, that correspond to the terminal interface units or trunks to which the subchannel is allocated for the transmission of data. In the case where a subchannel is allocated to transmit data to a trunk, the field SINK contains a pointer to a
trunk descriptor1005 only while a trunk is actually assigned to that subchannel. When assignment of a trunk has not been made the field SINK of a sub-channel descriptor contains zero.
FIG. 17F can be correlated to the illustrative channel shown in FIG. 1B in the following manner. If
channel descriptor1009 shown in FIG. 17F is assumed to be associated with switching
unit20 shown in FIG. 20, then subchannel descriptors 1007A and 1007B of FIG. 17F correspond to the β.sub.τ1 /α.sub.τ2 and αRn /βR(n-1) parameter pairs, respectively, and
type2
descriptors1010A and 1010B correspond to the β.sub.τ2 /α.sub.τ3 pair and βR n parameters, respectively.
Referring then to FIG. 17G, there can be seen another pointer of
line descriptor1001. This pointer TRLIST, points to a chain of currently
unassigned trunk descriptors1005. TRLIST is zero if no trunk remains unassigned and otherwise contains a pointer to the
trunk descriptor1005 for the first unassigned trunk. Each
trunk descriptor1005 contains a pointer, TRCHAIN, to the next trunk descriptor, 1005 in the chain, and the TRCHAIN field of the last trunk descriptor on the chain contains zero.
FIG. 17H shows a pointer, ATTNQ, which is contained in each
type1 descriptor. ATTNQ points to data
output attention queue1011.
When a subchannel has data ready for output an entry is made in the data
output attention queue1011 for the
type1
descriptor1012 associated with the line onto which the data is to be transmitted. There is one
queue1011 for each
type1 descriptor. In each 250 microsecond interval one queue entry is processed. The position of the entry processed in the most recent interval is contained in the field DXLAST of the
type1 dscriptor. An entry in the
attention queue1011 is either zero or a pointer to a
subchannel descriptor1007 that has data ready for output.
FIG. 17I illustrated a signal output queue. Each signal
output queue entry1013 comprises four words. The
entries1013 are chained to form a circular chain by for of the NEXT fields. There is one signal output queue for each
type1
descriptor1012. The fields SXTAIL and SXHEAD in the
type1
descriptor1012 contain pointers to queue
entries1013. All those
queue entries1013 in the circular chain starting at the entry pointed to by SXHEAD and terminating with the entry prior to the one pointed to by SXTAIL are the "active" queue entries. Each active queue entry specifies a signal that is to be sent out of the control computer. The field TMNL in each
queue entry1013 contains a pointer to the
type2
descriptor1010 for the terminal or trunk to which the signal is to be directed. The fields FN and CH contain data to be used in constructing the second and third bytes, respectively, of the signal packet.
As each data packet is received at
control computer30 it stored is in a twenty-one word storage area which is known as a "packet buffer" 1014. After certain checks have been completed, the packet buffer is placed on a queue of packet buffers where it waits for service. This queue is shown graphically in FIG. 17J. There is one such queue for each transmission line and each transmission loop. The
type1
descriptors1012 for each such transmission facility have fields DRHEAD and DRTAIL that contain pointers to the associated queue of
packet buffers1014. Field DRHEAD contains a pointer to the
first packet buffer1014 in the queue and DRTAIL points to the
last packet buffer1014 in the queue. Each
packet buffer1014 contains a pointer, NEXT, to the
next packet buffer1014 in the queue. The NEXT field of the
last packet buffer1014 in the queue contains a pointer to the storage location that contains DRTAIL for the
type1
descriptor1012. When the queue is empty, DRHEAD contains a pointer to the location DRTAIL.
FIG. 17K shows a typical signal input queue that is associated with one
type1
descriptor1012.
Entries1015 in that queue comprise four-word units which are formed into a circular chain by means of the NEXT fields in them. Each entry does not contain useful information at every instant of time. A pointer to the first that any particular time does contain useful information is stored in field SRHEAD of
type1
descriptor1012. The
queue entry1015 pointed to by SRHEAD and successive entries on the circular chain up to but not including the one pointed to from the field SRTAIL, all contain useful information that is waiting to be processed. That information is derived from signal packets received at
control computer30. The field FN of a
queuee entry1015 contains a copy of the first two bytes from a signal packet, and the field CH contains a copy of the last two bytes from a signal packet. The TMNL field of
queue entry1015 contains a pointer to the
type2
descriptor1010 to which the signal packet relates.
After processing, data packets are stored in a data output queue associated with the subchannel on which that data is being sent. FIG. 17L shows a data output queue. There is one such queeue for each
subchannel descriptor1007. The queue comprises
entries1016 of four words each that are chained together in a circular chain by means of the NEXT field in each
entry1016. As seen in FIG. 17L the chain formed by pointers in the NEXT fields of the data
output queue entries1016 is matched by a circular chain comprising pointers in the PREV fields of each
entry1016. The circular chain made from the PREV fields traverse the circle of queue entries in the reverse direction to that of the NEXT fields.
Three other pointers of interest appear in each
subchannel descriptor1007 to which a data output queue relates. These pointers are in fields DATAQH, DATAQT and NEXTOUT. The
queue entries1016 that currently contain information to be processed occupy successive positions around the circular chain starting with the
particular entry1016 that is pointed to by the field DATAQH and ending with the entry prior to the one pointed to by the field DATAQT. Data will have been transmitted from some of these
queue entries1016 but the entries remain in the data output queue until acknowledgement of the transmission is received at the control computer. A pointer to the
first queue entry1016 for which data has not been transmitted is contained in the field NEXTOUT. The field TYPE of each
queue entry1016 contains the
value2 if the associated data packet is the last of a message, otherwise the value is zero. The field DBLK in each
queue entry1016 contains a pointer to the
packet buffer1014 holding data to be transmitted.
In addition to these pointers, the data structures discussed in conjunction with FIGS. 17A-17L contain other pointers and data which are used by the program of
control computer30. In order to aid the detailed description of the various parts of this program, all of the data structure entries are listed below in Table VII.
NEXT Pointer to
next type1 descriptor in a circular chain. Position in the data
output attention queue1011 of the last entry processed.
SXHEAD Pointer to the first active signal
output queue entry1013.
SXTAIL Pointer to the signal
output queue entry1013 following the last active entry.
DRHEAD Pointer to the
first packet buffer1014 in the queue of buffers waiting for input processing.
DRTAIL Pointer to the
last packet buffer1014 in the queue of buffers waiting for input processing.
SRHEAD Pointer to the first active signal
output queue entry1015.
SRTAIL Pointer to the signal
output queue entry1015 following the last active entry.
TERMINALS Pointer to the
terminal index1008.
ATTNQ Pointer to the data
output attention queue1011.
DXMASK Contains one less than the length of the data
output attention queue1011. That length must be a power of two.
TRLIST Pointer to the
first trunk descriptor1005 for an unassigned trunk.
CHLIST Pointer to the
first sub-channel descriptor1007 that has been allocated to output data on line described by the
type1 descriptor containing this field.
TRUNKDEBT This contains minus one times the maximum number of channels which can be virtually allocated to output data on the transmission line.
SIGCH Pointer to the
sub-channel descriptor1007 to be used for control messages on this transmission line.
CHLOW The lower bound on channel numbers that can be chosen by the control computer for use on this transmission line.
CHHIGH The upper bound on the channel numbers that can be chosen by the control computer for use on this transmission line.
Type 2 Descriptor FieldsNEXT Points to the
next type2 descriptor on a circular chain.
CHANNELS Points to the
first subchannel descriptor1007 with data output allocated to the terminal which this
type2 descriptor relates.
RSTAT Contains a status indicator for the input process.
RTIME Contains the time, in units of 250 microseconds at which the last input was received.
RSELCH Points to the
subchannel descriptor1007 selected for data input.
RSEQ Contains the sequence number expected in the next data packet received.
SSTAT Contains a status indication for the data output process.
STIME Contains the time, in units of 250 microseconds at which the last transmission was made.
SSELCH Pointer to the
sub-channel descriptor1007 selected for data output.
SELNO Contains the number of the channel currently selected for data output.
SSEQ Contains the sequence number used in the last data transmission.
ID Contains, in its most significant 8 bits the ID to be used for packets transmitted.
LOOP Points to the
type1 descriptor for the line with which this
type2 descriptor is associated.
V.IN Contains minus one times the number of packets not yet received but whose receipt has been authorized.
A.IN Contains the number of packets whose receipt can be authorized after receipt of the bundle currently being received.
V.OUT Contains minus one times the number of packets not yet transmitted but whose transmission has been authorized.
A.OUT Contains the number of packets that can be sent after completion of the current bundle.
N.OUT Contains the maximum bundle size for data output.
N.IN Contains the maximum bundle size for data input.
TRCHAIN Pointer to the
next trunk descriptor1005 of the same transmission line.
NEXT Points to the
next subchannel descriptor1007 of the same terminal interface unit or of the same transmission line.
SINK Pointer to the
type2 descriptor to which data output is to be directed.
DATAQH Pointer to the data
output queue entry1016 currently at the head of the queue.
DATAQT Pointer to the data
output quenue entry1016 following the last active queue entry.
NEXTOUT Pointer to the data
output queue entry1016 from which data is next to be taken for output.
VOL This 16 bit value contains, in the last significant eight bits a count of the active entries in the data output queue. In the most significant eight bits is a count of the packets which are the ends of a messages.
RATE This contains the minimum number of packet times that must elapse for each packet of data transmitted.
COSTAT A status indicator for the subchannel. It indicates the status for data output processing.
CRSTAT A status indicator for data output processing of the subchannel.
M.IN The number of packet buffers assigned to the subchannel at the start of burst transmission.
M.OUT The number of packets that should be collected before starting transmission of data.
ALLOC The maximum number of packet buffers that can concurrently be assigned to the subchannel.
MAXN.IN The maximum bundle size for data input.
MAXN.OUT The maximum bundle size for data output.
CHANNO The number used to identify the channel to the receiving terminal or trunk.
SLOOP Pointer to the
type1 descriptor to which this subchannel relates.
NEXT Pointer to the next packet buffer in one chain.
TERM Pointer to the
type2 descriptor to which the packet in this packet buffer relates.
IDW A copy of the first two bytes of the data packet.
DLENGTH A copy of the third and fourth bytes from the data packet.
BODY An area of 17 words used to hold the data and checksum from a data packet.
Miscellaneous Fields Used by the Control ComputerTIME This location is increased by one for each 250 microsecond interval that passes.
SCANTIME This contains minus one times the time that must elapse before the next activation of the timeout routine.
SCANNED Points to the
type2 descriptor last processed by the timeout routine.
FREESPACE All those packet buffers not actually in use are chained, by their NEXT fields, and the first is pointed to form FREESPACE.
UNASSIGNEDSPACE Contains a count of the number of packet buffers that have not been assigned to any subchannel.
FREE32 A pointer to the first of a chain of 32 word storage areas that are all currently not in use.
FREE4 A pointer to the first of a chain of unused four word storage areas.
COUNT4 A count of the number of four word areas in the chain FREE4.
LOOPLIST The address of a 256 location index containing pointers to type 1 descriptors. Each such descriptor has an identity which is also the position of the pointer to it contained in this index.
SWLIST The address of a 256 location index relating to the 256 possible switching unit identities. An entry in this list is a pointer to the subchannel to be used to send messages to the switch in question.
SPACEDEBT This contains minus one times the maximum space allocation that can be made to new virtual channels.
MESSAGE FORMATS USED FOR COMMUNICATION WITH THE CONTROL COMPUTER PROGRAMThe control computer program that uses the above described data structures begins its operation with respect to a particular communication by responding to a request for the virtual allocation of a transmission path, and ends that operation by deallocating the path. This process requires communication between the control computer program and the remainder of the system. This communication uses messages having standard formats which are passed to the
control computer30 of the switching
unit10. These messages are sent by both the
digital device18, termed the "calling device," which is initiating the data transfer and the
digital device18, termed the "called device" which is to receive the data. Each messages comprises thirty-two bytes with the thirty-second byte being appropriately identified as an end-of-message as was discussed hereinbefore in conjunction with FIG. 11C.
Four different messages are used. A "connect" message is sent by the calling device to its associated switching unit to initiate channel allocation. An "accept" message is sent by the called device to its associated switching unit in response to the connect message if the called device is willing to accept data from the calling device. Otherwise, the called device sends a "reject" message. An "end-of-call" message is used by either the calling device or the called device to deallocate a channel.
When a calling device wishes to obtain allocation of a new channel it sends a connect message to the associated control computer. That message carries identification information which uniquely specifies the called device. The control computer transmits the connect message, to the called device. A function code in the first byte of the message allows the called device to identify the message as a connection request. If the called device wishes to accept the connection request, it adds certain information to the connection request, changes the function code to indicate acceptance, and returns the updated message to the control computer associated with the called device. If the called device wishes to reject the connection request, the function code in the request is changed to indicate rejection and the message is returned to the control computer.
An acceptance message contains all the information required by all of the switching units in the communication path to allocate one virtual channel. When acceptance is obtained, the acceptance message is returned in the calling device and at the same time the virtual channel is allocated. This is done on a link-by-link basis. Communication can start at any time after the calling device receives the acceptance message. In the case of a rejection, the rejection message passes from the called device to the calling device without further action on the part of any switching unit in the communication path.
Either the called or the calling device may cause a virtual channel to be deallocated by sending an end-of-call message to its associated control computer. That message is transmitted to the other device. As that transmission takes place, the virtual channel is deallocated on a link-by-link basis. Any data currently in transit on the virtual channel is lost.
As previously mentioned, by convention, all communication with the control computer must be made on channel zero and all messages transmitted from the control computer to a digital device are sent on that devices' channel zero.
A message of thirty-two bytes comprises two sixteen-byte parts. The first sixteen bytes contain a specification of the virtual channel for the calling device; the second sixteen bytes contain a specification of the virtual channel for the called device. The first byte, termed FUNCTION, of the specification for the calling device contains a function code indicating which type of message is being sent. If FUNCTION is one it indicates a connect request, if two it indicates an acceptance, if three it indicates a rejection, and if four it indicates an end-of-call. The remaining bytes of the two sixteen byte specifications are used in the same manner. The values will, of course, depend on whether the device being specified is the calling or the called device. These remaining bytes are as follows.
The second byte of a specification, termed AOUT, contains the amount of packet buffer storage space that is to be used in each switching unit through which the virtual channel passes. This number specifies a particular multiple of thirty-two bytes. The packet storage space is used to buffer all data passing away from the device in whose specification the number appears.
The third byte, termed "MIN," specifies, as a multiple of thirty-two, the number of bytes of packet storage space to be assigned at the start of each burst transmission. It applies to bursts of transmission away from the device in whose specification the number is contained.
The fourth byte, termed "NOUT," specifies, as a multiple of thirty-two, the number of bytes that should be collected in the switching unit before the start of delivery to the device in whose specification this fourth byte appears. In the case that a complete message contains fewer bytes than are indicated in this specification, delivery of the message will start when all of it has been assembled in the switching unit.
The fifth byte, termed "RIN," specifies the maximum rate at which the digital device to which the specification applies will accept data packets on the particular channel being specified. That rate is given as a multiple of six miscroseconds and is the time allowed for the delivery of one byte of data.
The sixth byte, termed "ROUT", specifies the expected maximum rate of data output during burst transmission. This rate also is expressed as a multiple of six microseconds and is the anticipated delivery time per byte transmitted.
The seventh, eighth and ninth bytes, termed "SWITCHNO," "LINENO," and "TERMINALNO," respectively, uniguely identify the digital device to which the specification relates. The SWITCHNO byte contains the identity of the switching unit to which the digital device is attached, the LINENO byte specifies the transmission loop on that switch, and the TERMINALNO byte contains the terminal interface unit ID.
The tenth byte, termed "CHANNELNO," specifies the channel number to be used by the digital device when communicating on the new virtual channel.
The eleventh through sixteenth bytes of a message are reserved for switching unit use. The eleventh and twelfth bytes together form a sixteen-bit value, termed "LOOPD," which is a pointer to a
type1 descriptor. The thirteenth and fourteenth bytes together form a sixteen-bit value, termed "TERMINALD" which is a pointer to a
type2 descriptor. The fifteenth and sixteenth bytes together form a sixteen-bit value, terminal "TRUNKN," which uniquely identifies the channel on a per-switching-unit basis.
The above-described data structures and message formats are used by the control computer program in the manner shown in the flow charts of FIGS. 18A-25N. These flow-charts describe the various routines and subroutines that make up the control computer program. The data output routine shown in FIGS. 21A and 21B is primarily responsible for implementing the data handling portion of the α process as performed by the control computer, while the data input routine shown in FIGS. 20A and 20B is primarily responsible for implementing the data handling portion of the β process. The remaining routines and subroutines implement the remainder of these two processes.
As previously mentioned, the
Tempo1 compouter utilized in the illustrative embodiment of this invention is multiprogramed. The aforementioned routines and subroutines are thus actually divided into two subprograms, the
level1 subprogram and the
level2 subprogram. These subprograms are interrupt-driven with the
level1 subprogram having priority over the
level2 subprogram and serving to set the interrupt that drives the
level2 subprogram.
The routines and subroutines of the control computer program are shown in FIGS. 18A-25N on a functional basis. Various of the routines contain both
level1 and
level2 instructions. The
level1 instructions deal with the
synchronous transmission lines12 and
transmission loops14 shown in FIG. 2A. In fact, there is a complete set of
level1 instructions for each
transmission line12 and
transmission loop14 connected to control
computer30. The appropriate set is executed in response to the interrupt that is generated by a signal from one of the
line terminating units31 shown in FIG. 2A. That is, each
line terminating unit31 attached to control
computer30 controls its own individual interrupt line which activates the copy of the
level1 instructions associated with that particular
line terminating unit31. Since time is of the essence in dealing with the
synchronous loops14 and
lines12, the
level1 subprogram instructions are given higher priority than the
level2 subprogram instructions.
The routines and subroutines of the control computer program may be implemented in accordance with this illustrative embodiment by using the instruction set of the
Tempo1 computer. As will be obvious to those of oridinary skill in the art, the flow charts of FIGS. 18A-25N could be programmed in many differently detailed ways to execute the indicated processes. Indeed, the detailed steps in the flow charts could be accomplished in a plurality of different ways. These will be obvious from the discussion below of FIGS. 18A-25N taken in conjunction with the descriptions of the
Tempo1 computer that are provided in the
Tempo1 Interface Reference Manual, TA-1000-969, and in the Tempo Programmer's Reference Manual, E0002. Although the many ways of accomplishing the detailed steps that must be performed by
control computer30 will be obvious to those of ordinary skill, one particular sequence of suitable Tempo program instructions that may be used is shown in the familiar hexadecimal form in the listing of Appendix B. It can be seen that this listing contains two copies of the
level1 instructions and thus is capable of handling a
single transmission loop14 and a
single transmission line12. The listing of Appendix B was limited to two such copies of the
level1 instructions for brevity. The necessary additional coding for
other loops14 and
lines12 will be obvious to those of ordinary skill.
Turning then to the flow charts of FIGS. 18A-25N, it can be seen that these flow charts use the same symbols as were used in the flow charts of FIGS. 12-16B. Additionally, the rectangular operation block symbol is also used in FIGS. 18A-25N for the operation of calling a subroutine. Further, a hexagon is used to indicate a computed branch point which uses a computed value to determine its branch point.
CALL MANAGEMENT ROUTINE OF THE CONTROL COMPUTER PROGRAMFIGS. 181-18D are a flow chart of the call managemnt routine.
All bytes contain numeric values expressed in the binary notation. As will be obvious to those of ordinary skill in the art, other message formats and other notations can be used without departing from the spirit and scope of this invention.
This routine handles all control messages, allocates virtual channels, and subsequently de-allocates them. The routine, which begins at
block1030, is a
level2 routine. This routine, like the others in the control computer program, uses the parameter "L." This parameter is a pointer to the
type1
descriptor1012 as shown in FIG. 171 which corresponds to the loop or line with which the current execution of the routine is associated. In the case of the call management routine, it processes the data
output attention queue1011 shown in FIG. 17H associated with the
control unit descriptor1002. The pointer of that descriptor is stored in location L.
1031 updates the field DXLAST of the control unit descriptor so that it then contains the position of the next entry to be processed. Since the queue is in consecutive locations and the number of these locations is DXLENGTH, the position of the next entry is obtained by adding one to DXLAST modulo DXLENGTH. This function is indicated in
block1031 in FIG. 18A by the term "|DXLAST(L)+1|DXLENGTH." It is to be noted that DXLAST(L) means "the DXLAST field of the descriptor pointed to by the pointer stored in location L.
1032 then copies the next queue entry into temporary storage location Q. If this entry contains zero, then no action has been requested.
Conditional branch point1033 tests for this condition and transfers control to the end of the routine at
terminal indicator1056 shown in FIG. 18B if no action is required. If the attention request has been properly made the status field COSTAT in the subchannel descriptor whose pointer is in Q will be equal to 1.
Conditional branch point1034 transfers control to the end of the routine at
terminal indicator1056 shown in FIG. 18B if the status value is not 1.
Conditional branch point1035 then checks to see that there is in fact a data packet waiting to be processed. The field NEXTOUT in the subchannel descriptor pointed to by Q points to the next data
output queue entry1016 shown in FIG. 17L to be processed. The queue of data waiting to be output will be empty if that entry is the same as the one pointed to by DATAQT of the subchannel descriptor. When there is no data to process,
conditional branch point1035 transfers control to the end of the routine at
terminal indicator1056 shown in FIG. 18B. Otherwise block 1036 sets temporary location R equal to the pointer of the queue entry to be processed.
The field DBLK of the data output queue entry points to the packet buffer to be processed. The pointer to that buffer is put in temporary location P by
block1037. The data in that packet buffer is a control message. In
block1038 temporary location MA is set equal to the pointer to the first specification in that message, and temporary location MB is set equal to the pointer to the second specification in the message.
Block1038 then transfers control to computed
branch point1039.
The point to which computed
branch point1039 switches control depends upon the value of the FUNCTION code contained in the first byte of the message. If the FUNCTION code is 0, control passes to block 1040, if FUNCTION code is 1 control passes to
conditional branch point1057, shown in FIG. 18C, if the FUNCTION code is 2 control passes to block 1068, shown in FIG. 18D, and if the FUNCTION code is 3 control passes to block 1069, also shown in FIG. 18D.
Consider first the sequence starting at
block1040. This is obeyed when a connect message is received.
Block1040 calls subroutine DECODE.ROUTE, with M14 set equal to the pointer in Mb, which is used to set up the loop descriptor pointer LOOPD, the terminal descriptor pointer, TERMINALD, and the trunk identification number TRUNKN in the specification pointed to by MB. This subroutine returns the pointer to the subchannel description to be used for control messages destined for the called device of the received connect message. This is stored in the temporary location X and control then passes to block 1041 shown in FIG. 18B.
1041 computes the checksum for the data packet pointed to by P and stores it in the word following the sixteen words of data in the packet. The data output attention queue entry is then set to 0 by
block1042 and the status field COSTAT in the subchannel descriptor pointed to by Q is set to 0 by
block1043 indicating that there is now no attention request outstanding for the subchannel. Control is then transferred to block 1044.
The operation performed by
block1044 is seen in flow chart 18B to be defined as NEXTOUT(Q)=NEXT(NEXTOUT(Q)). The meaning of this notation is as follows:
First consider the expression NEXTOUT(Q). NEXTOUT(Q) denotes the field NEXTOUT in the subchannel pointed to by the pointer in location Q. NEXTOUT(NEXTOUT(Q)) thus denotes the field NEXT which is pointed to by the pointer in location NEXTOUT.
Considering now the entire expression shown in
block1044, it will be remembered that the expression "A═B" is understood by those of ordinary skill in he programming art to mean "store the contents of location B in location A." Thus a symbol to the left of the "═" symbol denotes a location while a symbol to the right denotes the contents of a location.
Thus block 1044 is seen to transfer the contents of NEXT to location NEXTOUT. Control lis then transferred to
conditional branch point1045.
1045 transfers control to
conditional branch point1047 if the data output queue of the subchannel pointed to by Q is empty. That condition exists if the fields NEXTOUT and DATAQT are equal. If they are not equal control passes to block 1046 where a call is made on the subroutine REQOUT, with C7 set equal to the pointer in Q, to replace subchannel Q in the data output attention queue.
After
block1046,
conditional branch point1047 tests whether a destinatin for the control message was obtained. If location X contains 0 control passes to block 1062 shown in FIG. 18C. Otherwise, block 1048 copies the contents of field DATAQT in subchannel descriptor pointer to by X into temporary location B. Location B now contains the pointer of the next usable entry in the data output queue for subchannel X. The TYPE field in that entry is set equal to 2 by
block1049, and block 1050 sets the DBLK field to point to the packet buffer pointed to by P. Having thus constructed a new queue entry, the field VOL of the subchannel description pointed to by X is increased in value by the hexadecimal value $101 by
block1051, and the field DATAQT of the subchannel X is set to point to the next queue entry. The pointer of that entry is to be found in the field NEXT(B).
Conditional branch point1053 is then obeyed to check whether the subchannel field COSTAT is equal to 2. If so, control passes to block 1054, otherwise it passes to block 1055.
Block1054 calls subroutine S.BURST.OUT, with C(3)═X, which performs the housekeeping associated with the start of a new burst of data on subchannel X.
1055 calls subroutine REQOUT to place subchannel X in the appropriate data output attention queue.
After either
block1054 or
block1055 has been obeyed, control passes to the end of the call management routine at
terminal indicator1056.
It was mentioned above that, upon recognizing a FUNCTION code of 1, computed
branch point1039 transfers control to
conditional branch point1057 shown in FIG. 18C. The sequence starting at that point handles the allocation of a virtual channel as it transmits the acceptance message back to the calling device.
Conditional branch point1057 tests whether there is sufficient storage space available for the data output queue entries that will be needed by the virtual channel. The number of entries required equals the sum of the message fields AOUT for each of the two devices. Since the queue entries are four word items, the sum is compared with COUNT4, the number of free four word units on the free store chain FREE4. If insufficient space is available,
conditional branch point1057 transfers control to block 1062.
Conditional branch point1058 next checks that there is a thirty-two word block of store available to hold the channel descriptor for the new virtual channel. If no such block exists, control passes to block 1062. Otherwise block 1059 is obeyed.
1059 calls the DECODE.ROUTE subroutine which is given a pointer to the specification for the calling device to the requested channel. The subroutine sets up loop descriptor pointers, the terminal descriptor pointer, and the trunk number in the specification pointed to by MA. It returns as its result the subchannel pointer of the subchannel to be used to send control messages to that device. This result is stored in temporary storage location X.
1060 calls upon the subroutine TRACE.ROUTE which determines the loop descriptor pointer and terminal pointer of the calling device to the connection and places these data in the specification pointed to by MB. The subroutine returns a result that in the pointer of another subchannel descriptor if one already exists for the same channel number as is used by the called device. Next
conditional branch point1061 transfers control to block 1062 if such a subchannel already exists.
Block1064 next obtains one block of 32 words from the free store list FREE32. To do this it copies the pointer currently in FREE32 into temporary storage location C and copies the pointer in the field NEXT of the block pointed to by C into location FREE32.
Block1065 uses the subroutine CREATE.SUBCHANNEL to construct the subchannel descriptor for the subchannel which transfers data from the called device to the calling device. The subchannel descriptor is constructed in the sixteen words starting at that word pointed to by temporary
location C. Block1066 then uses the subroutine CREATE.SUBCHANNEL to construct the subchannel descriptor for the subchannel that transfers data from the calling device to the called device. That descriptor is made up of the sixteen locations which are the last sixteen in the thirty-two locations pointed to by C.
Having thus constructed the channel descriptors, the call management routine transfers the trunk number from the field TRUNKN from the calling device's specification to the same field of the called device's specification, as shown in
block1067. The sequence then ends with a transfer of control to block 1041 shown in FIG. 18B which is the first of the sequence which sends the control message out on the subchannel pointed to by X.
Consider now the sequence that starts with
block1062. That sequence is obeyed whenever the control message has to be abandoned. First in the sequence, a call is made on the subroutine RELEASE.SPACE as shown in
block1062. That subroutine is given the pointer P of the packet buffer containing the message to be discarded. The routine returns the packet buffer to the free storage list FREESPACE.
Block1063 next updates the data output queue pointers NEXTOUT in the subchannel Q that held the message. To do this, it copies the pointer in the field NEXT of the queue entry pointed to by NEXTOUT into the field NEXTOUT. Control then is transferred to the end of the call management routine at
terminal indicator1056.
It was seen from the above that control is transferred to block 1068 shown in FIG. 18D if a reject message is received. The reject message is passed directly back to the calling device without any further action on the part of the call management routine. To effect this, block 1068 uses subroutine DECODE.ROUTE to obtain the pointer, in X, of the subchannel on which control messages to the calling device should be sent. That pointer is the computed result of the subroutine DECODE.ROUTE. After doing this, the call management routine transfers control to the sequence beginning at
block1041.
Control messages with a FUNCTION code of 3 are used to terminate a connection and to deallocate a virtual channel. Upon detecting one of these messages computed
branch point1039 transfers control to block 1069.
Block1069 shown in FIG. 18D calls subroutine TRACE.ROUTE to compute the loop descriptor pointer and terminal descriptor pointer for the calling device. This data is stored in the specification for the calling device as pointed to by MA. The result of the subroutine TRACE.ROUTE is the pointer of the subchannel to be deleted. If no such subchannel is found,
conditional branch point1070 transfers control to block 1062. Otherwise, control passes to block 1071. The pointers of the two subchannels in the pair making one full-duplex channel differ by sixteen and, given the pointer of one, the other can be found by an EXCLUSIVE OR operation. In
block1071 the pointer of the subchannel which sends data to the called device is stored in temporary location C.
Conditional branch points1072 and 1073 transfer control to the end of the call management routine at
terminal indicator1056 if either of the status fields COSTAT in the two subchannels is equal to 1.
Block1074 transfers the value in field CHANNO of the subchannel pointed to by C to the TRUNKN field in the specification pointed to by MB. If TRLIST in the
type1 descriptor pointed to by SLOOP in the subchannel descriptor pointed to by C is negative, then the
type1 descriptor is a loop descriptor and
conditional branch point1075 transfers control to block 1077. Otherwise it is a line descriptor and control passes to block 1076.
Block1076 sets in X the pointer to the subchannel descriptor which is pointed to by field SIGCH of the above-mentioned line descriptor. Control then passes to block 1081 which calls subroutine REMOVE.SUBCHANNEL to deallocate the subchannel pointed to by
C. Block1082 then uses the same subroutine to deallocate the other subchannel of the same channel. In blocks 1083 and 1084 the thirty-two word block containing the two subchannel descriptors is added to the free store chain FREE32. The pointer of the block is obtained by removing the least significant five bits of the pointer in C. The current head of the free store chain is copied from FREE32 to NEXT of the block and the pointer of the block is set in FREE32. Control then passes to block 1041.
When the subchannel descriptor pointed to by C is associated with a loop descriptor,
conditional branch point1075 passes control to block 1077. In that block temporary location X is set equal to the pointer of the first channel in the chain from the field CHANNELS of the terminal descriptor whose pointer is in SINK of subchannel descriptor pointed to by C. The loop consisting of
conditional branch points1078 and 1079 and block 1080 then searches for the subchannel descriptor with CHANNO equal to 0. In each cycle around the loop, block 1080 sets equal to the pointer in NEXT of the subchannel previously inspected.
Conditional branch point1078 transfers control out of the loop if the end of the chain of subchannels is reached.
Conditional branch point1079 transfers control out of the loop if a subchannel descriptor with CHANNO equal to 0 is found. The pointer of the descriptor so found is left in X. When control is transferred out of the loop it goes to block l081 previously described.
The subroutine DECODE.ROUTE is shown in FIG. 19A. This subroutine is used to examine the specification for one device to a channel allocation request, that device's specification being pointed to by M14. The subroutine also computes a result which is the pointer to the subchannel descriptor which should be used to send control messages to the device specified.
The subroutine begins at
terminal indicator1090.
Conditional branch point1091 tests whether the field SWITCHNO specified for the device is equal to the unique identifying number for the switching unit in which the subroutine is being executed. If so, control passes to block 1097. If the call is being made to a device attached to another switching unit,
block1092 is used to obtain from the index of switching units the channel number of the channel to be used for messages to that switching unit. That index is SWLIST.
Block1092 sets C14 equal to the contents of the entry in SWLIST whose position in that list is equal to the switching unit number specified in the device specification. If C14 is set equal to 0,
conditional branch point1093 transfers control to block 1095.
Block1094 sets the loop descriptor pointer in the specification pointed to by M14 equal to the pointer in SLOOP of the subchannel descriptor pointed to by C14. The value in C14 is returned as the result of the subroutine as indicated in
block1095, and control is transferred to the end of the subroutine at
terminal indicator1096.
When the switching unit specified in the specification M14 is that of the switching unit in which this subroutine is being obeyed, control passes to block 1097. The line number specified in the specification M14 is then inspected and used to determine the position of an entry in the index LOOPLIST. In
block1097 the content of that entry is transferred location L14. L14 now contains either the pointer of the specified loop descriptor, or 0 if no such loop exists.
Conditional branch point1098 transfers control to block 1634 if the index entry is 0. The loop descriptor pointer for the specification pointed to by M14 is set equal to the value in L14. Next, the terminal number contained in the specification pointed to by M14 is transferred to location N14. That value is then used in
block1631 as the position of an index entry in the terminal index pointed to by TERMINALS of the loop descriptor pointed to by L14. In
block1631 the contents of that entry is copied to location T14. If T14 is 0, control is transferred to block 1634 by
conditional branch point1632.
1634 then sets C14 equal to 0 and transfers control to block 1639A. If T14 is
non-zero block1633 is obeyed. That block sets the field TERMINALD in the specification pointed by M14 equal to T14. Next, C14 is set equal to the first subchannel pointer in the list CHANNELS for the terminal descriptor pointed to by T14. The loop consisting of
conditional branch points1636 and 1637, and
block1638 serves to search out the subchannel with CHANNO equal to 0. Each time round the
loop block1638 sets the pointer of the next subchannel to be inspected in C14. That pointer is obtained from the field NEXT of the preceding subchannel currently pointed to by C14.
1636 transfers control out of the loop if C14 is 0.
Conditional branch point1637 transfers control out of the loop if the subchannel with a 0 in the CHANNO field is found. After this search has terminated, block 1639A is obeyed. From that block it is seen that the result of the subroutine is the value in C14.
Terminal indicator1639 is the end of the DECODE.ROUTE subroutine.
The subroutine shown in FIG. 19B is the TRACE.ROUT subroutine. It computes the loop descriptor and terminal descriptor pointers for the device that is the source of the control message now being processed and places these in the specification point to by M15. The subroutine returns a subchannel pointer as its result, that pointer being of the subchannel specified by the specification M15.
The subroutine starts at
block1640. In
block1641 it is seen that the
type1 descriptor pointer SLOOP in the subchannel descriptor pointed to by Q is copied into LOOPD for the specification M15.
Conditional branch point1642 tests whether the
type1 descriptor is a loop or line. If it is a loop the field TRLIST in the descriptor is negative and control passes to block 1645. If the
type1 descriptor is a line, control passes to block 1643. In
block1643 temporary storage location N15 is set equal to the trunk number in the specification pointed to by M15. Then in
block1644 temporary storage location C15 is set equal to the pointer CHLIST in the loop descriptor pointed to by SLOOP in subchannel descriptor Q. Control then passes to
conditional branch point1648. That branch point together with
block1650 form a loop in which a search is made for the subchannel descriptor with CHANNO equal to the value in N15. Each time round the
loop block1650 sets C15 equal to the pointer of the next subchannel and that pointer from the field NEXT of the subchannel currently pointed to by C15.
Conditional branch point1648 transfers control to block 1649A if the field CHANNO in the subchannel descriptor pointed to by C15 is equal to the value in N15. In block 1649A it is shown that the result of the subroutine is the value in C15. After block 1649A, control passes to the end of the subroutine at
terminal indicator1649.
Subroutine REMOVE.SUBCHANNEL is shown in FIG. 19C. This subroutine is used to deallocate a single subchannel. The subroutine requires a single input parameter C17 which is a pointer to the descriptor for the subchannel to be deallocated. The subroutine begins at
terminal indicator1125.
Conditional branch point1126 transfers control to block 1134 if subchannel C17 is allocated to transmit data to a TIU. That fact can be determined by inspecting the field TRLIST of the
type1 descriptor pointed to from the field SLOOP in the channel descriptor. If TRLIST is negative the
type1 descriptor is a loop descriptor, otherwise it is a line descriptor. If the
type1 descriptor is a line descriptor control is transferred to block 1127 where a pointer to that
type1 descriptor is copied into the temporary storage location L17. In
block1128 the temporary storage location A17 is set equal to the pointer contained in the field CHLIST of the
type1 descriptor pointed to by L17.
Conditional branch point1129 then transfers control to
conditional branch point1132 if the pointers in locations A17 and C17 are not equal. If they are equal then the subchannel pointed to by C17 is removed from the chain starting at field CHLIST by copying the pointer from NEXT in the subchannel C17 to the field CHLIST in the line descriptor pointed to by L17. Control then passes to block 1138.
The sequence that begins with
block1134 removes the subchannel from the chain of subchannels for the TIU descriptor with which it is associated.
Block1134 sets in T17 a pointer to the TIU descriptor which is pointed to from field SINK of the subchannel descriptor pointed to by C17.
Block1135 copies into A17 the pointer from field CHANNELS of the TIU descriptor addressed by T17.
Conditional branch point1136 transfers control to block 1137 if the pointer now in C17 equals that in A17. If they are unequal control passes to
conditional branch point1132.
Block1137 copies the pointer from NEXT of the subchannel descriptor addressed by C17 into CHANNELS of the TIU descriptor pointed to by T17. Control then passes to block 1138.
The
loop comprising block1131 and
conditional branch point1132 searches for the chain position occupied by subchannel descriptor C17. In each cycle of the loop, block 1131 sets a pointer to the subchannel descriptor previously inspected in A17 taking that pointer from the NEXT field of the subchannel descriptor previously pointed to by A17.
Conditional branch point1132 transfers control out of the loop to block 1133 when NEXT of the subchannel descriptor A17 is that addressed by C17.
Block1133 copies the pointer from NEXT in subchannel descriptor C17 into NEXT of subchannel descriptor A17. Control then passes to block 1138.
The number of queue entries in the data output queue for subchannel C17 is to be found in the field ALLOC. That number is added, by
block1138, to the storage location COUNT4. In block 1139 a pointer from field NEXTOUT of he subchannel descriptor pointed to by C17 is copied into B17.
Block1140 places on the free store chain starting at location FREE4 all queue entries attached to the subchannel descriptor pointed to by C17. To do this, it sets NEXT in the queue entry pointed to by PREV in the queue entry pointed to by B17, then copies the pointer from B17 to FREE4. Control then passes to the end of the subroutine at
terminal indicator1141.
Subroutine CREATE.SUBCHANNEL, shown in FIG. 19D, is used to allocate one virtual subchannel by completing the subchannel descriptor pointed to by C16. The specification for the destination of data on that subchannel is pointed to by M16. The subroutine starts at
terminal indicator1145.
Conditional branch point1146 transfers control to block 1148 if the pointer in M16 equals that in MA, otherwise it transfers control to block 1147. In
block1148 N16 is set equal to the pointer in MB, and in
block1147 N16 is set equal to the pointer in MA. Block 1149 sets the ALLOC field of the subchannel pointed to by C16 equal to the specification field AOUT in the specification pointed to by N16.
Block1150 sets the M.IN field of the subchannel pointed to by C16 equal to the value in the MOUT field of the specification pointed to by N16.
Conditional branch point1151 transfers control to block 1155 if the field ROUT of the specification pointed to by N16 is greater than a pre-specified constant RLIMIT, and block 1155 sets field MAXN.IN of the subchannel pointed to by C16 equal to 1.
Conditional branch point1152 transfers control to block 1153 if the field MOUT of the specification pointed to by N16 contains a value greater than thirty-two, and block 1153 sets thirty-two in the field MAXN.IN of the subchannel pointed to by C16.
Block1154 copies the value from the field MOUT of the specification pointed to by N16 into MAXN.IN of the subchannel pointed to by C16.
1156 makes a call on subroutine FIND.QUEUE to obtain in Q16 a pointer to the chain of queue entries. The length of that chain is set in L18 and is one more than the value in the AOUT field of the specification pointed to by N16.
Block1157 then copies the value from Q16 into the fields NEXTOUT, DATAQH and DATAQT, respectively, of the subchannel pointed to by C17. In
block1158 0 is set in field VOL of the subchannel pointed to by C16. Then the
values2 and 1 are set in the fields COSTAT and CRSTAT respectively of the subchannel descriptor pointed to by C16.
Block1161 copies the pointer from LOOPD of the specification pointed to by M16 into the field SLOOP of the subchannel pointed to by C16. If the field TRLIST of that
type1 descriptor is negative,
conditional branch point1162 transfers control to block 1175. Otherwise,
conditional branch point1163 checks to see if the field RIN of specification M16 is greater than the prespecified constant RLIMIT. If it is greater, control is transferred to block 1168, otherwise block 1164 is obeyed.
Block1164 copies from the field RIN of the specification pointed to by M16 into the field RATE of subchannel C16.
Conditional branch point1165 then tests the field MIN of the specification pointed to by M16 and if that field is greater than thirty-two, control passes to block 1166.
Block1167 copies from field MIN of the specification pointed to M16 into MAXN.OUT of the subchannel pointed to by C16.
Block1166 copies thirty-two into MAXN.OUT of the subchannel pointed to by C16. After either of these two blocks, control passes to block 1170. It was seen that control could be transferred to block 1168 from
conditional branch point1163. In
block1168 the field RATE of the subchannel pointed to by C16 is set equal to the prespecified constant RLIMIT. In
block1169 the
value1 is copied into field MAXN.OUT of the subchannel pointed to by C16, then control is transferred to block 1170 shown in FIG. 19E.
In blocks 1170, 1171 and 1172 the three fields M.OUT, SINK and CHANNO of the subchannel pointed to by C16 are set equal to the values in fields MIN, TERMINALD and CHANNELNO, respectively, of the specification pointed to by M16. The field NEXT in the subchannel pointed to by C16 is then set by
block1173 to be equal to the pointer in CHANNELS of the
type2 descriptor pointed to from field SINK of the subchannel pointed to by C16. The field CHANNELS of the
type2 descriptor is then set equal to the pointer in C16. Control then passes to the end of the subroutine at
terminal indicator1174.
1175 is obeyed, as was indicated above, when
conditional branch point1162 determines that the field SLOOP of the subchannel pointed to by C16 points to a line descriptor.
Blocks1175, 1176 and 1177 respectively copy values 1, and 0 into the fields M.OUT, RATE and SINK of the subchannel pointed to by C16.
Conditional branch point1178 transfers control to block 1182 if the pointer in M16 is the same as that in MA. Otherwise control passes to block 1179.
Block1179 copies from the field TRUNKN in the specification pointed to by M16 into the channel number field CHANNO of the subchannel pointed to by C16.
Block1180 sets temporary location L16 equal to the pointer in SLOOP of the subchannel pointed to by C16,
Block1181 copies the pointer from CHLIST in the line descriptor pointed to by L16 into the field NEXT of the subchannel pointed to by C16 before copying the pointer from C16 into the field CHLIST. After
block1181, control is transferred to the end of the subroutine at
terminal indicator1174.
When the pointers in MA and M16 are equal, the sequence beginning at
block1182 is obeyed. In
block1182 L16 is set equal to the pointer from field SLOOP of the subchannel pointed to by C16. A 1 is then added to the field TRUNKDEBT for the line descriptor pointed to by L16. In
block1184 temporary storage locations A16 and B16 are set equal to the value in fields CHHIGH and CHLOW of the line descriptor L16.
Block1185 then sets temporary storage locations K16 equal to the value in field CHLIST of the line descriptor pointed to by L16. A pointer to the field CHLIST of the line descriptor is set in J16. The loop comprising
conditional branch point1186 through 1189 and
blocks1193 through 1195 searches for an unused channel identification number in the chain of subchannel descriptors starting with that pointed to by K16.
Conditional branch point1186 transfers control to block 1190 if K16 contains 0.
Conditional branch points1187 then transfer control to block 1194 if the channel number in CHANNO of the subchannel descriptor addressed by K16 is either less than the value in B16 or not less than the value in A16. If the field CHANNO contains a value equal to that in A16,
conditional branch point1189 transfers control to block 1193. Otherwise, it transfers control out of the loop to block 1190. In
block1193 the content of location A16 is increased by one. Next, block 1194 copies the pointer from K16 to location J16. In
block1195 the pointer from field NEXT of the subchannel descriptor pointed to by K16 is copied into K16. Control then passes to block 1186.
As indicated above, the search for a spare channel identification number ends with a control transfer to block 1190. In
block1190 the field CHANNO of the channel descriptor pointed to by C16 is set equal to the value in A16. That value is then copied into the field TRUNKN of the specification pointed to by M16. The subchannel pointed to by C16 is then added to the chain of subchannels. This is done in block 1192 by copying the pointer from C16 into the field NEXT of the subchannel descriptor pointed to by J16, and by copying the pointer left in K16 into the field NEXT of the subchannel pointed to by C16. Control then is transferred to the end of the subroutine at
terminal indicator1174.
The subroutine FIND.QUEUE shown in FIG. 19F is used to obtain a new queue comprising four word queue entries assembled into a circular chain by the fields NEXT and PREV, as was described hereinbefore. The subroutine takes one parameter from L18 and that is the length of the queue required. The subroutine begins at
terminal indicator1660 shown in FIG. 19F.
Block1661 sets a pointer to the first free four word block in T18, and block 1662 sets B18 equal to the same value. The
loop comprising blocks1663 through 1666 takes the required number of four word blocks from the chain starting at T18.
Block1663 copies the pointer from B18 to location E18.
Block1664 copies into B18 the pointer NEXT from the block currently pointed to by B18.
Block1665 then reduces the content of L18 by 1.
Conditional branch point1666 then transfers control back to block 1663 if the value in L18 is still greater than 0. The pointer now in B18 is placed in the location FREE4.
Block1668 makes the chain circular by setting the pointer in T18 into the field NEXT of the queue entry pointed to by E18.
Block1669 copies the queue entry pointer from T18 to B18. The loop comprising blocks 1760 to 1673 build up the chain of reverse pointers in fields PREV of the queue.
Block1670 sets the pointer from E18 into the field PREV of the queue entry pointed to by B18.
Block1671 copies the pointer from B18 to E18.
Block1672 copies into B18 the pointer in the field NEXT of the queue entry currently pointed to by B18.
Conditional branch point1673 returns control to block 1670 if the pointer in B18 does not equal that in T18. The pointer in T18 is returned as the result of the subroutine as shown in
block1674, and then control passes to the end of the subroutine at
terminal indicator1675.
The data input routine is shown in detail in FIGS. 20A-20D. Referring to FIGS. 20A and 20C, it is seen that there are two program sequences in this routine. The first one, starting with
block1200, is obeyed at
level1. The other one, starting at
block1240, is obeyed at
level2.
Considering first the program sequence obeyed at
level1, shown in FIG. 20A, it is seen that this sequence is obeyed when the
line terminating unit31 has a data packet ready for collection by
control computer30. First in that program sequence is
conditional branch point1201 where a test is made on the working store location RDBLOCK. If that location is non-zero, then it will contain the address of a packet buffer which can be used to store a new incoming data packet. If RDBLOCK is zero, then the data input routine must obtain a packet buffer from the communal supply.
Conditional branch point1201 therefore transfers control to block 1208 if RDBLOCK already contains the address of a packet buffer. Otherwise, control passes to block 1202.
In order to avoid timing problems, the sequence beginning at
block1201 is obeyed with interrupts inhibited. The communical storage supply comprises a chain of packet buffers with the address of the first packet buffer stored in working store location FREESPACE.
In
block1203 it is seen that that address is copied into RDBLOCK, then
conditional branch point1204 checks whether the address so obtained was non-zero. If it was, the address of the next packet buffer on the chain of free storage locations is copied by
block1205 into the storage location FREESPACE and in
block1206 interrupts are allowed. If the free storage supply is empty, then
conditional branch point1204 transfers control to block 1207 where interrupts are allowed.
After
block1207, control passes to block 1214. Returning now to the usual course of events, after
block1206 is executed, control passes to block 1208 where the first sixteen-bit work is read from
line terminating unit31 into
control computer30 and stored in field IDW of the packet buffer addressed by RDBLOCK. Next, in
block1209, another sixteen-bit word is read from the
line terminating unit31 into
control computer30 and stored in field DLENGTH of the packet buffer addressed by RDBLOCK. The two sixteen-bit words read by
blocks1208 and 1209 comprise the first four bytes of the incoming data packet. The last of these bytes is a checksum which is the EXCLUSIVE OR of the first three bytes. Therefore, if no errors have occurred during data transmission, the EXCLUSIVE OR of all four bytes as computed by
block1210 should yield a result of 0. A test of that case is made by
conditional branch point1211 where control is transferred around
block1212 to block 1213 if the result is non-zeroand therefore indicates an error. When no error is detected control passes from
conditional branch point1211 to block 1212 where working store location RSTATE is set equal to 1 to indicate that the input of the data is in progress.
The interconnection of the
line terminating unit31 and the Tempo I computer makes use of the high rate I/O feature described in the aforementioned Tempo programmers reference manual. Using the mechanism described therein, the seventeen remaining words comprising the thirty-four remaining bytes of the incoming data packet are transferred autonomously into field BODY of the packet buffer pointed to by RDBLOCK as indicated in
block1213. When the autonomous transfer is complete, execution of the data input routine continues at
terminal indicator1214 shown in FIG. 20B.
1215 tests the value of RSTATE which is equal to 1 if, in fact, a data packet was being read. If that was not the case,
conditional branch point1215 transfers control to the end of the data input routine at
terminal indicator1228. Otherwise, control passes to block 1216. The first byte of the data packet is contained in the most significant eight bits of the field IDW in the packet buffer pointed to by RDBLOCK. That byte, as shown in
block1216 is extracted and transferred to temporary storage location ID. The value so obtained is the identity of a TIU, or trunk, and should not be greater than one hundred twenty-seven. If the contents of storage location ID exceed one hundred twenty-seven, then
conditional branch point1217 transfers control to the end of the data input routine at
terminal indicator1228. Otherwise control passes to block 1218.
Associated with the transmission line or loop on which the data packet arrived is a
type1 descriptor having the structure described above. The address of that descriptor is contained in storage location L. In that descriptor the field TERMINALS contains the address of a list of the
type2 descriptors relating to the terminals, or trunks, connected to that transmission line. The address of the
type2 descriptor contained in the list entry whose position in the list is equal to the value stored in temporary location ID relates to the TIU or trunk from which the data packet came. That descriptor address is transferred in
block1218 to temporary storage location T.
As was seen above, the
line terminating unit31 computes a sixteen-bit checksum of the data contained in the data packet and compares it with the final sixteen bits in the data packet.
Status line245 shown in FIG. 5E is used to test whether the comparison indicates that the data transmission error occurred. Another test for the data transmission error can be made by examining the status derived from
line224 shown in FIG. 5D. That line will be non-zero if the
byte assembler64 shown in FIG. 5E detected in a bipolar format error during the receipt of the data packet.
Conditional branch points1219 and 1220 test these error conditions and transfer control to the end of the data input routine at
terminal indicator1228 if either type of error was detected. Otherwise control passes to block 1221 where the field TERM in the packet buffer location addressed by RDBLOCK is set equal to the terminal descriptor address contained in temporary location T.
Having thus successfully read the data packet from the transmission line, the
level1 sequence of the data input routine adds the packet to a queue associated with the
type1 descriptor relating to the line or loop on which the packet arrives. In order to avoid timing troubles, this action is taken with interrupt inhibited as indicated by
locks1222 and 1224. The first-in-first-out queue is updated as shown in
block1223. The last entry currently existing on that queue is addressed by field DRTAIL in the
type1 descriptor addressed by L. To update the queue, the field NEXT in the packet buffer pointed to by RDBLOCK is set equal to the address of the end of the queue. Then field NEXT in the packet buffer currently at the end of the queue is set equal to the address contained in RDBLOCK. Finally, field DRTAIL in the
type1 descriptor addressed by location L is set equal to the address of the new end of the queue, namely, the address in RDBLOCK. Having thus disposed of the incoming data packet, and having used the packet buffer pointed to by RDBLOCK, the data input routine now writes 0 in RDBLOCK as illustrated in
block1225 and clears working store location RSTATE as illustrated in
block1226. Finally, in
block1227, the
level1 sequence of the data input routine sets an interrupt that will call the
level2 subprogram to be obeyed. A simple device controller connected to the Tempo I peripheral bus may be constructed in the manner which will be obvious to those of ordinary skill in the art so that when issued a Tempo I EDF instruction it sets the appropriate interrupt line.
That part of the data input routine which is obeyed at
level2 is shown in FIG. 20C, starting at
terminal indicator1240. That sequence tests the queue of data input packets stored in association with the
type1 descriptor with address L and for each packet contained on that queue performs the process starting at
block1240.
Conditional branch point1241 checks whether the queue is empty by inspecting the field DRHEAD contained in the
type1 descriptor with the address contained in storage location L. If the queue is empty, the address contained in DRHEAD is equal to the address of the field DRTAIL in the
same type1 descriptor. If that is the case, control passes to the end of the data input routine at
terminal indicator1242. Otherwise control passes to block 1243.
The next action taken at
level2 is to remove one data packet from the queue, pointed to by DRHEAD. That removal must be obeyed with interrupts inhibited if timing errors are to be avoided. Interrupts are therefore inhibited at
block1243 and the data packet is removed from the queue in
block1244. Finally, interrupts are allowed in
block1245. The specific action taken in
block1244 is first to store in temporary location D the address of the packet buffer containing the data packet being removed from the queue. The address of that packet buffer is obtained from field DRHEAD in the
type1 descriptor whose address is in L. A new value is then inserted in field DRHEAD of the
type1 descriptor, that address being the contents of the field NEXT in the packet buffer now addressed by temporary location B.
Field TERM of the packet buffer addressed by B contains the address of a
type2 descriptor and in
block1246 this address is transferred to temporary location T. Next, in
block1247 the current time measured in units of 250 microseconds is transferred in storage location TIME into field RTIME in the
type2 descriptor whose address is now contained in temporary location T. The sequence number of the data packet can be found in the most significant six bits of the least significant byte in field IDW of the packet buffer addressed by B. That sequence number is extracted in
block1248 and stored in temporary location S.
Next,
conditional branch point1249 compares S with field RSEQ in the
type2 descriptor whose address is contained in T. If these two six-bit numbers are unequal, then some transmitted data has probably been lost and a suitable error indication must be sent to the TIU or switching unit which originated the data. For this purpose,
conditional branch point1249 passes control to block 1250.
Block1250 calls subroutine REQSIG which places the request for transmission of the signal with function code three and CH field eight to the TIU or switching unit with the
type2 descriptor whose address is in T. After that call has been completed the packet buffer used to hold the incoming data packet must be returned to the common pool and for this purpose a call is made to subroutine RELEASE SPACE as shown in
block1251. The address of the packet buffer to be released is currently contained in temporary storage location B. After that, control passes back to the beginning of the
level2 sequence at
conditional branch point1241.
Returning now to
conditional branch point1249, it is seen that, if the sequence number contained in temporary location S is equal to the six-bit number stored in RSEQ of the
type2 descriptor whose address is contained in T, then control passes to block 1252. In
block1252 temporary storage location S is increased by 1, modulo 64, and the result is stored in field RSEQ of the
type2 descriptor addressed by T. In
block1253 the contents of field V.IN of the
type2 descriptor addressed by T is increased by 1. In
block1254, the address of the subchannel descriptor selected for data input is obtained from the field RSELCH in the
type2 descriptor addressed by T, and this subchannel descriptor address is stored in temporary location C.
The type of data packet received is to be found in the least significant two bits of the field IDW in the packet buffer addressed by
B. Block1255 is a computed branch point in which control is transferred to block 1258 if the type of the data packet is zero, to block 1257 if the type is equal to one, and to block 1256 if the type is equal to two. Thus,
block1256 is obeyed when the type of the incoming data packet equals two, indicating that it is the last packet in the message. The action taken in
block1256 is to call subroutine E.BURST.IN. This subroutine performs the housekeeping associated with the end of an input burst. After that subroutine returns, control passes to block 1258.
Block1257 is obeyed when the type of the incoming data packet is one, indicating that it is the last packet of a bundle. The action specified in
block1257 is to call subroutine S.BUNDLE.IN which performs the start-of-input-bundle housekeeping sequence on the subchannel addressed by C of the
type2 descriptor addressed by T. When that subroutine returns, control transfers to block 1258.
The next action to be taken is to place the input data packet on the first-in-first-out queue of packets belonging to the subchannel addressed by C and waiting for transmission on the next link of the subchannel. The end of that queue is to be found in field DATAQT of the subchannel descriptor addressed by C. The address of the queue entry is copied in
block1258 to temporary location Q. The field TYPE in queue entry addressed by Q is then set equal to two if the type of the incoming data packet is also equal to two. That action is shown in
block1259.
1260 then checks the type of the incoming data packet and transfers control to block 1261 if it is the last packet of a message. Otherwise it transfers to block 1262. The actions taken in these two blocks are required to maintain in the field VOL of the subchannel descriptor addressed by C a record of the volume of data held in the first-in-first-out queue. For each packet added to the queue, a 1 is added to the field VOL. In addition, for each end-of-message packet the hexadecimal value $100 is added to field VOL. Whichever action takes place, control then passes to block 1263, where the field DBLK in the queue entry addressed by Q is set equal to the address contained in location B, which is the address of the incoming packet. In
block1264 the field DATAQT in the subchannel descriptor addressed by C is updated so that it points to the next unused entry in the queue. Specifically, it is set equal to the contents of the field NEXT in the queue entry pointed to by Q.
1265 then tests the field COSTAT in the subchannel descriptor addressed by C. If that field is equal to two, the subchannel is waiting fro sufficient data to be collected to justify the start of a new output burst. Therefore, if COSTAT is equal to two,
conditional branch point1265 transfers control to block 1267 where a call is made to subroutine S.BURST.OUT which attempts to start a new output burst on the channel currently addressed by location C.
If the field COSTAT is not equal to two, then
conditional branch point1265 transfers control to block 1266 where a call is made to subroutine REQOUT which places a request for attention in the data output attention queue associated with the
type1 descriptor associated with line or loop which the subchannel specified by C sends data. After obeying either
block1267 or
block1266, control passes back to the beginning of the
level2 sequence of the data input, namely, to
conditional branch point1241.
Consider now the data output routine shown in FIGS. 21A and 21B. That routine is obeyed entirely at
level1 and starts when
line terminating unit31 is ready to take data packet from
control computer30. It is assumed that the data output routine is activated once every 250 microseconds, that is, for every master frame time on the T1 line. On each occasion this routine is executed, it processes one entry on the data output attention queue pointed to by field ATTNQ in the
type1 descriptor pointed to by L. At the start of execution of the data output routine the field DXLAST in the
type1 descriptor pointed to by L contains the position of the entry processed during the last activation of the data output routine, so the first action taken by this routine is to update the field DXLAST so that it now points to the next queue entry. This is shown in
block1271. Since the queue is cyclic, occupying consecutive storage locations, it is necessary to increase the value contained in field DXLAST by 1, modulo the length of the queue.
1272 uses the new value stored in field DXLAST as an index into the data output attention queue whose address is contained in ATTNQ of line descriptor addressed by L. The entry which this index gives is extracted from the list and copied into temporary location C. That entry will either be 0 or the address of a subchannel descriptor requiring attention by the data output routine.
Conditional branch point1273 tests to see which is the case and if it finds 0 transfers control to the end of the data output routine at
terminal indicator1300. Otherwise, control passes to block 1274. As shown in
block1274, the entry in the list ATTNQ, from which the value now contained in temporary storage location C was obtained, is set equal to 0.
When attention is requested on a subchannel, the field COSTAT in the subchannel descriptor is set equal to 1.
Conditional branch point1275 checks that this is true for the subchannel addressed by C, and, if it is not true, transfers control to the end of the data output routine at
terminal indicator1300. Otherwise, control passes to block 1276 where the field COSTAT in the subchannel descriptor pointed to by C is provisionally set equal to 0, thereby indicating that the attention request has been processed. The field SINK of the subchannel descriptor contains the address of the
type2 descriptor relating to the TIU or trunk to which data on that subchannel should be sent. The address of the
type2 descriptor is set in temporary location T as indicated in
block1277. In fact, the field SINK in the subchannel descriptor is 0, if the subchannel requires the use of a trunk but has not yet been assigned one.
1278 checks for this condition and transfers control to the end of the data output routtine at
terminal indicator1300 if no trunk has been assigned. If T in fact contains the address of the
type2 descriptor, then control passes from
conditional branch point1278 to
conditional branch point1279. At conditional branch point 1279 a test is made on the field SSTAT, which is the output status for the
type2 descriptor addressed by T. If that is non-zero then the terminal is not ready to output more data and
conditional branch point1279 transfers control to the end of the data output routine at
terminal indicator1300. Otherwise, control passes to
conditional branch point1280.
The first-in-first-out queue used to contain data packets waiting for transmission on a subchannel is pointed to by the field NEXTOUT contained in the subchannel descriptor. The last entry on that queue is pointed to by the field DATAQT of the subchannel descriptor. If the contents of these two fields are the same then there is no data to be output.
Conditional branch point1280 checks for this condition and if there is no data, then control is transferred to the end of the data output routine at
terminal indicator1300. Otherwise, control passes to block 1281.
The address of the queue entry for the packet next to be output is pointed to by the field NEXTOUT in the channel descriptor addressed by C. That pointer is copied into temporary location B by
block1281 and in
block1282 the field NEXTOUT is updated to point to the next queue entry, namely, the one pointed to by the field NEXT of the queue entry now pointed to by the temporary location D. Having now decided to output one more data packet, the data output routine adds one to the contents of the field V.OUT in the
type2 descriptor addressed by T. That action is taken in
block1283 shown in FIG. 21B.
If the new value of the field V.OUT is 0 then the packet must be the last of a bundle. If that is the case,
conditional branch point1284 transfers control to
conditional branch point1285, otherwise, control is passed to block 1288. Even if V.OUT is equal to 0, the data packet may be the last of a message. To test for this condition, the data output routine examines the field TYPE in the queue entry addressed by B. If that field contains the value two then the data packet is indeed the last of a message, and control is transferred from
conditional branch point1285 to block 1287. Otherwise, control passes to block 1286.
1286 sets the
value1 in temporary location F and block 1287 sets the value two in temporary location F, and each then transfers control to block 1292.
Turning attention now to block 1288, it is seen that this sets the value two in temporary location F if the data packet is the last of a message since the field TYPE in the queue entry addressed by B will in these circumstances be equal to two. In all other circumstances it is 0.
Conditional branch point1289 now compares the field NEXTOUT and DATAQT in the subchannel descriptor addressed by C. If these fields are equal, then no more data is immediately available for output and control passes to
conditional branch point1291. Otherwise, control passes to block 1290. The action specified in
block1290 is to place the subchannel addressed by C into the data output attention queue belonging to the
type1 descriptor addressed by L. The actions taken here are precisely the same as those taken in subroutine REQOUT but in order to avoid timing troubles block 1290 is a copy of the body of that subroutine rather than being a call to that subroutine.
In conditional branch point 1291 a check is made on the type of the data packet being transmitted as stored in temporary location F. If that is zero, then it is not the last packet of a bundle or message and further transmissions are possible without the need to wait for an acknowledgment. When this is the case, control passes from
conditional branch point1291 to block 1293 where the field SSTAT in the
type2 descriptor addressed by T is set equal to zero. After
block1293, control passes to block 1294. In the case where the type of the data packet to be transmitted is non-zero,
block1292 is obeyed and there the field SSTAT in the
type2 descriptor addressed by T is set equal to 1. That value indicates that further transmission cannot take place until an ACK signal has been received. Control then passes to bloc, 1294.
As indicated in
block1294, the time at which data is transmitted is stored in the field STIME of the
type2 descriptor addressed by T. That time is obtained from storage location TIME where it is increased by 1 once every 250 microseconds.
Block1295 computes the sequence number of the data packet to be transmitted. It does this by adding 1 to the field SSEQ contained in the
type2 descriptor addressed by T and this addition is done modulo 64 since the sequence number is a six-bit quantity.
The first word to be transmitted as part of the data packet contains the ID of the TIU or trunk to which the packet is destined. The ID is obtained from the field ID in he type 2 descriptor addressed by T. The second byte of the data packet contains the sequence number of the packet in the most significant six bits and the type of the packet in the least significant two bits. In this case the sequence number is obtained from the field SSEQ in the
type2 descriptor addressed by T and the type of the packet is that value currently contained in temporary location F. As shown in
block1296, the first and second bytes of the data packet are assembled to form a complete sixteen-bit word and stored in temporary location D.
1297 shows that the sixteen-bit value is transferred from
control computer30 to the
line terminating unit31 associated with the
type1 descriptor whose address is L. The third byte from the data packet is the length of data contained in the remaining part of the packet. In this case that length can be obtained from field DLENGTH in the packet buffer addressed by the field DBLK of the queue entry addressed by B. The third byte of the data packet is an eight-bit checksum which is the EXCLUSIVE OR of the preceding three bytes.
In
block1298 it is shown that the third and fourth bytes, respectively, of the data packet are assembled into a sixteen-bit word and written out to the line terminating unit associated with the
type1 descriptor pointed to by L. Transmission of the remaining seventeen words of the data packet is carried out autonomously using the aforementioned high-rate data transfer mechanism which is an integral part of the
Tempo1 computer. In this case, the seventeen words are obtained from the field BODY in the packet buffer addressed by the field DBLK which itself is contained in the queue entry addressed by B. This autonomous transfer is shown in
block1299, and once this transfer has been started, control passes immediately to the end of the data output routine at
terminal indicator1300.
The signal input routine is shown in FIGS. 22A-22F. That routine has sequences obeyed both at
level1 and at
level2. The sequence obeyed at
level1 starts at
block1310 in FIG. 22A and is obeyed when the
line terminating unit31 has a signal packet available for collection by
control computer30.
The
level1 sequence is used to transfer the contents of an incoming signal packet into a queue of signal packets awaiting the attention of the
level2 sequence for signal input. The next available position in that queue is pointed to by the field SRTAIL in the
type1 descriptor whose address is
L. Block1311 shows that the address of this queue entry is copied into the temporary working location B. Next, block 1312 shows that a sixteen-bit word is read from the
line terminating unit31 associated with the
type1 descriptor addressed by L into the field FN of the queue entry addressed by B. In
block1313, the second word of the incoming signal packet is read from the same
line terminating unit31 and placed in field CH of the queue entry addressed by temporary location B.
The fourth byte of a signal packet is always a checksum which is the EXCLUSIVE OR of the preceding three bytes. Therefore, by computing the EXCLUSIVE OR of all four bytes in the signal packet a result of 0 should be obtained. That computation is shown in block 1314 and a test for the 0 result is made in
conditional branch point1315. When a zero result is not obtained, a transmission error has probably occurred and control passes from
conditional branch point1315 to the end of the signal input routine at
terminal indicator1324. Otherwise, control passes from
conditional branch point1315 to block 1316. The first byte of the signal packet contains the identification of the terminal interface unit or trunk to which that signal packet relates. For the signal packet just read, the identification byte can be found in the most significant eight bits of the field FN in the queue entry addressed by
B. Block1316 shows that this identification field is transferred to the temporary storage location ID. When transmission is between a terminal interface unit and a switching unit, two different IDs are used, the difference between their values being 128. The smaller value is used for transmissions out of the terminal interface unit into the switching unit and the larger value is used for transmission out of the switching unit into the therminal interface unit. There is no such convention for packets transmitted between two switching units.
Conditional branch points1317 and 1318 therefore provide a test for packets transmitted by a switch around the transmission loop that is not being picked up by a terminal interface unit and therefore have arrived at the switching unit.
Conditional branch point1317 transfers control around
conditional branch point1318 to block 1319 if the
type1 descriptor pointed to by L is not a loop descriptor. That fact can be determined by looking for a negative value in the field TRLIST contained in the
type1 descriptor addressed by L.
In the case where L is a loop, control passes to
conditional branch point1318 where a test is made on the identification currently contained in location ID. If that value is greater than 127 then the signal packet is one that originated at the switch and has passed entirely around the loop and in that case control passes from
conditional branch point1318 to the end of the signal input routine at 1324. Otherwise, control passes to block 1319. The identification value contained in field ID is now used as an index into the list whose address is contained in the field TERMINALS in the
type1 descriptor addressed by L. Each entry in that list is the address of the
type2 descriptor, and block 1319 shows that the address of the
type2 descriptor which relates to the signal packet just read is transferred to temporary location T. If the entry in the list is 0 then the identification code does not correspond to any existing TIU or trunk and
conditional branch point1320 will transfer control to the end of the signal input routine at
terminal indicator1324. Otherwise, control will pass to block 1321.
The field TMNL in the queue entry addressed by B is now set by
block1321 equal to the address of the
type2 descriptor currently stored in location T. The queue pointer contained in SRTAIL of the
type1 descriptor L is now updated by
block1322 to contain the address of the next available queue entry and that address can be obtained from the field NEXT in the queue entry addressed by B. Having now stored details of the incoming signal packet in the signal input queue, an interrupt is set which will force
level2 action and subsequent processing by the
level2 sequence of the signal input routine. That interrupt is set by obeying an EDF instruction in the
Tempo1 computer. After
block1323, control passes to the end of the signal
input routine level1 at
terminal indicator1324.
The
level2 sequence for the signal input routine starts at
terminal indicator1330 as shown in FIG. 22B. At
level2, the signal input routine takes entries off the signal input queue which was loaded by the
level1 sequence of the signal input routine. The next entry to be processed on that queue is pointed out by the field SRHEAD contained in the
type1 descriptor addressed by L. In
block1331 the address of that queue entry is transferred to temporary location B. If the address contained in SRHEAD is equal to the address contained in SRTAIL, the signal input queue is in fact empty and
conditional branch point1332 transfers control to the end of the signal input routine at
terminal indicator1333. Otherwise, control passes to block 1334.
The field TMNL in the queue entry addressed by B contains the address of the
type2 descriptor to which the input signal relates. That address is transferred in
block1334 to temporary location T. The action to be taken with respect to the incoming signal packet now depends upon the function code in that signal packet and whether a switching unit or TIU generated it. The field TRCHAIN in the
type2 descriptor addressed by T will be less than 0 if the signal packet came from a terminal interface unit and will be positive if the signal packet came from another switching unit. Conditional branch point 1335 tests to see which of these conditions exists and transfers control to computed
branch point1336 if the source of the signal packet was a terminal interface unit and to computed
branch point1337 if the source was another switching unit. Computed branch points 1336 and 1337 transfer control to various different places depending upon the function code in the signal packet just read. That function code is in the least significant two bits of the field FN in the Q entry addressed by B.
The signal packet functions in the control transfers are as follows. First consider signal packets received from a terminal interface unit.
Function code0 identifies an ACK signal and results in control being transferred to
conditional branch point1337.
Function code1 identifies an SEL signal and results in control being transferred to block 1361. Function codes two and three should not arise from the terminal interface unit and are ignored by transferring control to the end of the
level2 processing sequence at
terminal indicator block1355. Next consider signal packets arriving from another switching unit.
Function code0 identifies an ACK signal and results in control being transferred to block 1375.
Function code1 identifies an STRT signal results in control being transferred to
conditional branch point1380. Function code two identifies an IDL signal and results in control being passed to block 1390. Function code three identifies an NACK signal and results in control being passed to block 1393.
Considering now the process used to handle an ACK signal arriving from terminal interface unit, the appropriate sequence begins at
conditional branch point1337. The third byte of that signal packet specifies whether the terminal interface unit detected an error. That byte is to be found in the CH field in the queue entry addressed by B.
Conditional branch point1337 checks its value. If non-zero, control is transferred to block 1393, otherwise control passes to block 1338. The most significant six bits of the second byte in the signal packet contain the sequence number of the last packet correctly received by the terminal interface unit. Since the second byte of the signal packet can currently be found in field FN of the queue entry addressed by B, block 1338 transfers the sequence number from the most significant six bits of that byte into storage location S. For the acknowledgment to be meaningful, that sequence number should be equal to the sequence number of the last transmission by the switching unit as indicated in the field SSEQ of the
type2 descriptor addressed by T.
Conditional branch point 1339 compares these two values and transfers control to the end of the
level2 signal input sequence at block 1335 if the sequence numbers are found to be unequal. Otherwise, control passes on to block 1340. The ACK signal acknowledges successful transmission from the switching unit to the terminal interface unit and that transmission relates to the subchannel addressed by field SSELCH in the
type2 descriptor addressed by
T. Block1340 shows that the address of this subchannel descriptor is transferred into temporary storage location C.
Computed branch point1341 shows that the action now to be taken in response to the received ACK signal depends upon the status in field SSTAT of the
type2 descriptor addressed by T.
0 and two require no further action on the part of the signal input routine and control is transferred from computed
branch point1341 to the end of the
level2 sequence of
block1355. If the status is equal to 1, the ACK signal acknowledges the receipt of a complete bundle of data and in this case control is passed to block 1342. Status three indicates that the ACK signal acknowledges the receipt of an SEL signal, and in that case control is transferred to block 1360.
Returning now to the case where the ACK signal acknowledges receipt of a bundle of data, it is seen that the signal input routine obeys the program sequence starting at
block1342 shown in FIG. 22C. The first task performed here is to examine the queue of the data blocks stored with the subchannel addressed by C and to release the space of any data blocks whose transmission has now been acknowledged. During this process a marker is kept in temporary storage location E indicating whether or not the acknowledged bundle of data contains the end of the message. That marker is initialized in
block1342 to zero.
Next,
conditional branch point1343 compares the address of the head of the queue contained in queue DATAQH with the value contained in field NEXTOUT of the same subchannel descriptor. If these two values are equal, then there is no data in the queue which was already being transmitted and in this case control passes from
conditional branch point1343 to
conditional branch point1349. If such data does exist control passes to block 1344.
The queue entry for the next block of data is extracted from field DATAQH in subchannel descriptor addressed by C and placed in temporary location B. In
block1345 it is seen that the field TYPE of the queue entry now addressed by location B contains the value two if the data packet is the last of a message, and this value is transferred to temporary location E. The queue pointer DATAQH in the subchannel descriptor addressed by C is updated to point to the next entry and the address of this next entry is to be found in field NEXT of the queue entry addressed by B. Block 1347 indicates that the RELEASE.SPACE subroutine is called with the intnetion of returning to the common supply of storage space the packet buffer containing the data associated with the queue entry addressed by B. The address of that packet buffer is contained in field DBLK of the queue entry addressed by
B. Block1348 then shows that the field VOL contained in the subchannel descriptor addressed by C is reduced by 1. That field contains a count of the number of data blocks resident in the queue. Control is then transferred back to
conditional branch point1443 to test whether further queue entries must be processed. If no such entries remain, control is transferred from
conditional branch point1343 to
conditional branch point1349.
If the bundle of data now acknowledged was the last of a message, then temporary location E will be non-zero and
conditional branch point1349 will transfer control to block 1350. Otherwise, it will transfer control to
conditional branch point1351. The field VOL in the subchannel descriptor addressed by C has the hexidecimal value $100 added to it for each message stored in the queue.
In
block1350 it is seen that the value contained in this field is reduced by hexidecimal $100. the end-of-message signals the end of a burst so control passes from
block1350 to block 1352 where a call is made on the subroutine E.BURST.OUT which performs the necessary housekeeping associated with a burst of output on the subchannel addressed by C of the
type2 descriptor addressed by T. After this action has been taken, control passes to block 1355. As was seen above, if the bundle acknowledged by the received ACK signal was not the last bundle of a message then control passes to
conditional branch point1351, at which point the field AOUT in the
type2 descriptor addressed by T is tested. When the terminal descriptor relates to a trunk, that field is 0. When the terminal descriptor relates to the terminal interface unit, the field is 0 if the last bundle of an output burst has been transmitted. In either case, the 0 value of this field will cause a transfer from
conditional branch point1351 to block 1352 and a non-zero value will cause a control transfer to block 1353.
It is seen in
block1353 that a call is made to subroutine S.BUNDLE.OUT which performs the necessary housekeeping associated with the start of a new output bundle on the subchannel descriptor addressed by C belonging to the
type2 descriptor addressed by T. Control is next transferred to block 1354 where a call is made on the subroutine REQOUT for the purpose of requesting attention by the data output routine. An entry giving the address of the subchannel descriptor pointed to by C is made in the data output attention queue for the data output routine and control is transferred to block 1355.
1355 is obeyed when one signal obtained from the signal input queue has been processed. That signal will still be the topmost entry in the queue and will be addressed by the field SRHEAD in the
type1 descriptor addressed by L. To remove that entry from the queue, the field SRHEAD is updated by placing in it the contents of field NEXT in the queue entry being removed. After doing this, control passes to block 1331 where an attempt is made to process other entries in the signal input queue.
Considering now the case when the received ACK signal acknowledges the receipt of and SEL signal, it was seen that computed
branch point1341 transferred control to block 1360. The action described in
block1360 shown in FIG. 22D is to call subroutine S.BURST.OUT which performs the housekeeping associated with the start of the new burst of data output on the subchannel descriptor addressed by C. After that subroutine returns, control passes to block 1355.
Consider now the processing of an SEL signal received from the terminal interface unit. As described above, computed
branch point1336 will in this case transfer control to block 1361. SEL signals, like data packets, are sequentially numbered and the sequence number is in the most significant six bits of the second byte of the packet of the signal packet just received. The second byte is contained in the most significant eight bits of the field FN in the queue entry addressed by B.
1361 indicates that the sequence number from this byte is transferred to temporary location S. That sequence number should match the number contained in the field RSEQ held in the
type2 descriptor addressed by T. If that is not the case, then some data transmission has probably been lost.
1362 makes a comparison and arranges to ignore the signal if an error is detected by transferring control to block 1355. If the sequence numbers are equal, control is passed to block 1364 where the sequence number of the next packet expected is computed. That sequence number is one greater than the number of the current packet, but since the sequence number is a six-bit quantity the addition is done modulo 64. In
block1364 the new sequence number is stored in field RSEQ of the
type2 descriptor addressed by T. In
block1365 the time at which the signal was processed is stored in the field RTIME in the
type2 descriptor addressed by T. Next, block 1366 calls subroutine E.BURST.IN which performs the housekeeping associated with the end of a burst of data input from the trunk or TIU whose descriptor is addressed by T.
The third byte of an SEL signal packet contains the number of a channel which is about to be selected. That number can be obtained from the most significant byte in the field CH of the queue entry addressed by B. As shown in
block1367, the new channel number is transferred to temporary location N. The next action to be taken is to search the list of channels associated with the
type2 descriptor addressed by T to find the channel which has the appropriate number. As will be seen later, this sequence is used also by the STRT signal. The sequence starts with
block1368 which obtains from the field channels in the
type2 descriptor addressed by T the address of the first subchannel descriptor associated with that channel.
Conditional branch point1369 checks to see if the address contained in temporary location C is 0. If it is, then no channel exists and the SEL signal is ignored by transferring control to block 1355. If temporary location C indeed contains the address of the subchannel, then
conditional branch point1370 shows that the channel number stored in temporary location N is compared with the channel number stored in the subchannel descriptor field CHANNO. If these two numbers are equal, then the requiredchannel has been found and control is passed to block 1371. Otherwise, the search must continue and control is passed to block 1372.
From
block1372 it is seen that the field NEXT in the subchannel descriptor addressed by C is used to obtain the address of the next subchannel descriptor to be inspected. That address is copied into location C and control is transferred back to
conditional branch point1369. The subchannel descriptors which are chained from a
type2 descriptor T are all those subchannels whose data output is destined for that TIU or trunk. The descriptors of the subchannels which handle the data input from that TIU or trunk are adjacent in the store to the subchannel descriptors listed. The address of the descriptor for the subchannel handling data input from TIU or trunk T can be computed by an EXCLUSIVE OR operation on the address currently contained in location C. In
block1371 it is seen that this computation is made and the resulting value of C is stored in the field RSELCH of the
type2 descriptor associated with T. By taking this action, subsequent data input from that TIU or trunk will be directed to the subchannel addressed by C. In
block1373 it is seen that the field N.IN in the
type2 descriptor addressed by T is set equal to the field NAX.N in the subchannel descriptor addressed by C. Then in
block1374 it is seen that a call is made to subroutine S.BURST.IN which performs the housekeeping associated with the start of a burst of input data on the subchannel addressed by C from the TIU or trunk whose descriptor is addressed by T. After the call has been completed control is transferred to block 1355.
Next to be considered in an ACK signal arriving from another switching unit. It will be seen in the discussion of
block1337 that when such a signal arrives control is transferred to block 1375 shown in FIG. 22E. The most significant six bits of the second byte in that signal packet contain the sequence number which is the number of the last packet successfully received by the other switching unit. The second byte of the signal packet is in the most significant eight bits of the field FN in the queue entry addressed by B.
1375 shows that the sequence number from that byte is transferred to temporary location S. In conditional branch point 1376 a comparison is made between the receive sequence number and the value stored in SSEQ of the
type2 descriptor addressed by T. If these two values are not equal, then the incoming ACK signal is ignored by transferring control to block 1355.
The incoming ACK signal is also ignored if the status SSTAT stored with the
type2 descriptor addressed by T is equal to neither one nor three. A test of this effect is made by
conditional branch points1377 and 1378. If neither of these values is to be found in field SSTAT then control is transferred by
conditinal branch point1378 to block 1355. Otherwise, control passes on to block 1379.
The incoming ACK signal from another switching unit contains in its third byte a sequence number which determines the length of the next burst that can be transmitted to that switching unit. The length of that burst is computed in
block1379. Since the third byte of the signal packet can be found in the most significant byte of field CH in the queue entry addressed B, the length of the next burst is the difference between this value and the sequence number stored in SSEQ of the
type2 descriptor addressed by T. As seen in
block1379, the length of that burst is stored in location V.OUT of the
type2 descriptor associated with T, and control is then transferred to block 1340. It will be recalled that the
sequence containing block1340 is used to handle an ACK signal coming from the terminal interface unit and is in fact equally applicable to an ACK signal coming in from another switching unit.
Turning again to computed
branch point1337, it is seen that an STRT signal with a function code of one results in a control transfer to
conditional branch point1380. The purpose of that signal is to indicate that a trunk has been assigned for the purpose of sending data into the switching unit receiving the STRT signal. The subchannel to which the trunk has been assigned is identified by a fourteen-bit number constructed from the most significant six bits in the second byte of the signal packet and the eight bits in the third byte of the signal packet. The action taken in
block1380 is to compute that number and store it in temporary location N.
1381 then checks the status of the
type2 descriptor addressed by T as stored in the field RSTAT. A status value of three here indicates that the trunk was marked as "idle" and in this case control transfers from
conditional branch point1381 to block 1385. In the case where the trunk is not idle, it is necessary to check to see whether the STRT is a duplicate of one received earlier or whether the
type2 descriptor was not updated when the trunk was released. For this purpose,
block1382 computes the address of the subchannel descriptor containing the number of the subchanels to which input data from the trunk is currently assigned. The address of the descriptor for that subchannel is contained in field RSELCH in the
type2 descriptor addressed by T.
Conditional branch point1383 then compares the number specified in the STRT signal with the channel number of the subchannel currently being used for data input from the trunk. If these are equal, the STRT signal is a duplicate of one received earlier and no processing is necessary. Control is therefore transferred to block 1355. If the values are unequal, the trunk was not properly released and that action is now taken in
block1384. To release the trunk a call is made to subroutine E.BURST.IN which performs all housekeeping associated with the end of an input burst from the trunk whose
type2 descriptor is addressed by T. After that action has been taken control is transferred to block 1385.
The sequence number of the first packet expected on the newly assigned trunk will be one greater than the sequence number currently contained in field RSEQ of the
type2 descriptor addressed by
T. Block1385 computes the new sequence number modulo 64 and stores it in the field RSEQ.
Block1386 copies the current time from the location TIME into the field RTIME in the
type2 descriptor addressed by T. the remaining action taken with respect to the STRT signal parallels that taken for the SEL signal. In particular, it is necessary to search through the list of channels for one with the appropriate number.
However, in the case of the STRT signal, the list of channels is pointed to by the field CHLIST in the
type1 descriptor addressed by L. Thus,
block1387 obtains the address of this list and stores it in temporary location C before transferring control into the middle of the sequence previously described to handle SEL signals. Control is then transferred to
conditional branch point1369.
An IDL signal received from the switching unit has function code two and causes a control transfer from computed
branch point1337 to block 1390 shown in FIG. 22F. The IDL signifies the release of a trunk and the sequence number in the most significant six bits of the second byte of the signal packet specify the number to be used when the trunk is next used. In
block1390 the sequence number is obtained from the most significant bits of the byte in the least significant position of the field FN in queue entry B, and that sequence number is stored in the field RSEQ of the
type2 descriptor addressed by T. To disassociate the trunk with the subchannel to which it is linked, the signal input routine calls upon the subroutine E.BURST.IN as shown in
block1391. This subroutine performs the necessary housekeeping associated with the end of an input burst from the TIU or trunk whose descriptor is addressed by T. Finally, the trunk is marked as "idle" by setting the field RSTAT in the
type2 descriptor addressed by T equal to three, and then control is transferred to block 1355.
1393 is obeyed on two accounts. In the first instance it is obeyed when an NACK signal is received from another switching unit, and in this case computed
branch point1337 transfers control directly to block 1393. Alternatively,
block1393 computes when an ACK signal is received from a terminal interface unit and when that ACK signal indicates that errors were detected by the terminal interface unit. As was described earlier, this situation prompts the transfer of control from
conditional branch point1337 directly to block 1393. The action taken in
block1393 is to call the subroutine RETREAT which steps back the queue pointers and associated controls for the subchannel currently transmitting data to the TIU or trunk whose descriptor is addressed by T. The distance of backtrack is determined by a sequence number known internally to the routine as S8. That sequence number must be the number of the last packet successfully transmitted and received. That number is to be found in the most significant six bits of the second byte of the signal packet currently located in the least significant byte point of the field FN in the queue entry whose address is B. Subroutine RETREAT takes special action in respect of error code eight which is used by the terminal interface unit to indicate that data or select signals are being sent on a channel which is not the same as the one being used for data transmission. The temporary working location W8 , used by subroutine RETREAT is set non-zero if that particular error condition exists. After completion of the call shown in
block1393, control is transferred to the end of the signal processing sequence of
block1355.
The signal output routine is illustrated in FIGS. 23A and 23B. It is seen that that routine is obeyed entirely at
level1 and starts at
block1400 shown in FIG. 23A when the line terminating unit with
type1 descriptor addressed by L is ready to take another signal packet. The routine services a queue built up by subroutine REQSIG. The head of that queue is contained in the field SXHEAD in the
type1 descriptor addressed by L. The action described in
block1401 is to transfer the address of the head of that queue into temporary location B. If the value in SXHEAD is equal to the value in SXTAIL, then the queue is empty and
conditional branch point1402 transfers control to the end of the signal output routine at terminal indicator 1407A. Otherwise, it proceeds to process that queue entry by passing control to block 1403. The address of the
type2 descriptor to which the signal output request relates is contained in the field TMNL in the queue entry addressed by B. As shown in
block1403, the address of that
type2 descriptor is transferred to temporary location T.
The action to be taken with respect to the signal being transmitted depends on the function code of that signal. The function code is contained in the least significant two bits of the field FN in the queue entry addressed by B.
Computed branch point1404 transfers control to block 1408 in the case where an ACK signal with function code zero is requested; it transfers control to block 1412 in the case where an SEL or STRT signal with function code one is requested; and otherwise transfers control to block 1405.
Considering now the transmission of packets with function codes two and three, these are handled by the sequence starting at
block1405. The first byte in each packet is the identity of the thermal interface unit or trunk to which that signal relates and can be obtained from the field ID in the
type2 descriptor addressed by T. The second byte in the signal packet has in its most significant six bits the sequence number currently contained in the field SSEQ of the
type2 descriptor addressed by T, and has in its least significant two bits the function code currently contained in the least significant two bits of the field FN in the queue entry addressed by
B. Block1405 shows that these values are assembled into a complete word stored in temporary location D. This word is written by the
control computer30 into the
line terminating unit31 associated with the
type1 descriptor addressed by L as shown in
block1406. The third byte of the signal packet is equal to that value currently contained in the field CH of the queue entry addressed by B, and the fourth byte is a checksum being the EXCLUSIVE OR of the values in the first three bytes.
Block1407 shows that the second and third bytes are assembled into a word which is then written out to the same line terminating unit. Control then is transferred to the end of the signal output routine at terminal indicator 1407A.
Consider now the case when an ACK signal is transmitted. As was seen above, control in this case will be transferred from computed
branch point1404 to block 1408. The first byte to be transmitted in the signal packet is equal to the identity of the terminal interface unit or trunk with which the signal is associated and that value is obtained from field ID in the
type2 descriptor addressed by T. The second byte of the signal packet has in its most significant six bits the value contained in field RSEQ of the
type2 descriptor addressed by T, and in the least significant two bits it has zero.
1408 explains what these two bytes are assembled together into a word and stored in temporary location D. That value is written into the
line terminating unit31 associated with
type1 descriptor addressed by line L as shown in
block1409. The third byte of an ACK signal must specify the sequence number to be used at the end of the next burst of transmission. The sequence number currently held in RSEQ of the
type2 descriptor addressed by T is that for the last transmission received. Furthermore, the values stored in field V.IN of the
type2 decriptor addressed by T is minus one times the number of packets which are authorized for transmission in the next burst. Therefore, by subracting V.IN from RSEQ, the sequence number to be used at the end of the next burst of transmission is obtained.
Block1410 shows that this number is stored in temporary location V. The third byte of the signal packet is a checksum being the EXCLUSIVE OR of the preceding three bytes.
Block1411 shows that the second word of the signal packet is assembled from the values stored in temporary location V on the computed checksum. This value is written to the line terminating unit associated with L. Control then transfers to the end of the signal output routine at terminal indicator 1407A.
1404 transfers control to block 1412 shown in FIGS. 23B when the request is made to transmit either an SEL signal or an STRT signal, both of which have the function code of one. In each case the sequence number held in SSEQ of the
type2 descriptor addressed by T is increased by one before the transmission takes place. That computation is made modulo 64 since the sequence number is a six-bit quantity. The value contained in the most significant six bits of the second byte of the signal packet depends upon whether that packet is an SEL signal or an STRT signal. If the signal is being sent on a trunk then it is an STRT signal, otherwise it is an SEL signal. A determination to this effect can be made by testing the field SRCHAIN in the
type2 descriptor addressed by T. That field is negative if what it relates to is a terminal interface unit, and positive if it relates to a trunk.
Control passes from
control point1413 to block 1415 when an SEL signal is being transmitted, and block 1415 then obtained the sequence number from the field SSEQ of the
type2 descriptor which is addressed by T, storing that number in temporary location S. When the signal is an STRT signal, the most significant six bits of the fourteen-bit channel number contained in the field SELNO of
type2 descriptor addressed by T, are extracted and stored in temporary location S, as shown in
block1414.
After execution of either
block1414 or
block1415, contro passes to block 1416 where the first word of the signal packet is assembled. The first byte of that packet is the terminal identity obtained from the field ID of the
type2 descriptor addressed by T. The second byte of that packet has in its most significant six bits the value currently contained in temporary location S and has 1 as the function code in its least significant two bits. As shown in
block1417, the assembled word which was stored in temporary location D is now output to the line terminating unit. The third byte of a signal packet is obtained from the least significant eight bits of the channel number held in the field SELNO of the
type2 descriptor addressed by T. As shown in
block1418, that value is transferred into temporary location S. The fourth byte of the signal packet is a checksum being the EXCLUSIVE OR of the preceding three bytes. It is shown in
block1419 that the second and third bytes are assembled and written to the line transmit unit associated with the
type1 descriptor addressed by L. Finally, control is transferred to the end of the signal output routine at terminal indicator 1407A.
FIGS. 24A and 24B show the time-out routine which is obeyed entirely at
level2 and is called once every two milliseconds. The function of this routine is primarily to detect when transmission has come to a halt due to the loss of the signal or failure to queue an output request when appropriate. Once every two milliseconds the routine inspects one
type2 descriptor of the
many type2 descriptors held in the system. All these terminal descriptors are linked together by the field NEXT and from a circular chain. The storage location SCANNED contains the address of the terminal descriptor processed in the last activation of the time-out routine. In block 1421 it is seen that the first act is to put into the location SCANNED the address of the
next type2 descriptor in the cyclic chain. The address of the
type2 descriptor now to be inspected is copied into temporary location T as shown in block 1422. The address of the descriptor of the subchannel currently associated with that terminal for data input is copied into temporary location C from field RSELCH in the
type2 descriptor addressed by T. The action now taken depends upon the status of the TIU or trunk as stored in the field RSTAT in the
type2 descriptor addressed by T. A status value of three calls for no particular action and control is transferred to computed
branch point1428. If the status value is two, control is transferred to block 1430, and if the status is 1, control is transferred to block 1431. In the case when the status is 0, normal data transmission is in progress and the routine proceeds to obey the
conditional branch point1425. At that branch a test is made on the field RTIME in the
type2 descriptor addressed by T. That field contains the time when the last transmission from the terminal was received, which is compared with the time stored in the location TIME. If the absolute value of the difference between these two values is greater than 2000, indicating that about half a second has elapsed since any transmission from the TIU or trunk was received, then control passes to block 1426. Otherwise, no action is taken and control passes to computed
branch point1428. It is seen in
block1426 that field RTIME is set equal to the current value of time and that in block 1427 a request for a signal output is made by calling subroutine REQSIG. That subroutine asks for the output of an ACK signal to be sent to the TIU or trunk whose descriptor is addressed by T. When the call is completed, control passes to computed
branch point1428.
In the case where the status value held in RSTAT is equal to 1, computed
branch point1424 transfers control to block 1431. That status value indicates that the TIU or trunk is waiting for space in order to be able to start the new bundle of input data transmission. A second attempt to start the bundle is made as shown in
block1431 by calling subroutines S.BUNDLE.IN. This performs the necessary housekeeping associated with the start of an input bundle from the TIU or trunk whose descriptor is addressed by T on the subchannel whose descriptor is addressed by C. Once this call has been completed, control is transferred to computed
branch point1428. In the case where the status value held in field RSTAT is a two, control passes from computed
branch point1424 to block 1430. That status value indicates that the TIU or trunk is waiting for a trunk in order to start an input burst. A second attempt to start the burst is made by calling on the subroutine S.BURST.IN as shown in
block1430. That subroutine performs all the necessary housekeeping associated with the start of an input burst from the TIU or trunk whose descriptor address is in T on the subchannel whose address is in C. After the call has been completed, control is transferred to computed
branch point1428.
Considering now the sequence starting at
computed branch point1428, the time-out routine extending the status of the TIV or trunk with respect to data transmission out of the switching unit. That status is stored in location SSTAT in the
type2 descriptor addressed by T.
Computed branch point1428 transfers control to various points depending upon the value of the status. The
status value0 results in a transfer to block 1429; status value one results in a transfer to
conditional branch point1432; status value two results in a transfer to block 1435; status value three results in a transfer to
conditional branch point1432; and status value four results in a transfer to block 1443.
Considering now the sequence beginning at
block1429 which is obeyed when
status value0 indicates that normal transmission activity is in progress. In this case the time-out routine calls subroutine S.BURST.OUT which is designed to have no effect unless the terminal is unnecessarily idle and to attempt to start a burst if that is the case. The subroutine performs its housekeeping with respect to the channel descriptor whose address can be obtained from the field SSELCH whose
type2 descriptor is addressed by T. After completing the call, control transfers to the end of the time-out routine at
terminal indicator1444. Returning to computed
branch point1428, when the status field SSTAT contains either
value1 or value three, it indicates that the switching unit is waiting for an ACK signal to arrive from a TIU or other switching unit. In these circumstances, control is transferred to
conditional branch point1432 shown in FIG. 24B.
First in the sequence a check is made on the field STIME in the
type2 descriptor addressed by T. That field is compared with the current value of time and if the absolute value of the difference between these two values is not greater than fifty no action is taken and control passes to the end of the time-out routine at
terminal indicator1444. In the case when the time difference is greater than fifty, action is taken by passing control to block 1433.
First, the field STIME is set equal to the current time as shown in
block1433, then a call is made to subroutine RETREAT. This subroutine backs up the output queue and associated controls, thereby enabling re-transmission to the TIV or trunk of the most recently transmitted information. The sequence number which the RETREAT subroutine requires is a specification for the distance of backup and is computed to be one less modulo 64 than the current value in field SSEQ of the
type2 descriptor addressed by T. After completion of the call control is transferred to the end of the time-out routine at
terminal indicator1444.
Returning again to computed
branch point1428, control is transferred to block 1435 if the status value in SSTAT is two. That status indicates that insufficient data has been collected on any channel which can be selected so, in fact, no channel at all has been selected for data output. The sequence beginning at
block1435 attempts to verify this situation and to find the channel which can be selected if that situation is in fact not the case.
First in that sequence, the address of the subchannel selected for data input from the TIU whose descriptor address is T is obtained from field RSELCH. That subchannel is one of a pair, the other subchannel carrying data in the opposite direction, that is, towards the TIU whose descriptor address is T. The address of the descriptor for the other subchannel is obtained by an EXCLUSIVE OR with value sixteen. It is shown in
block1435 that the address of the descriptor for that other channel is stored in temporary location N.
Next the time-out routine scans the list of channels for the TIU whose descriptor address is T. As shown in
block1436, the head of this list is copied into temporary location C.
Conditional branch point1437 checks to see of C is zero, and if it is, transfers control to the end of the time-out routine at
terminal indicator1444. Otherwise, control passes to
conditional branch point1438. If the field COSTAT of the channel descriptor whose address is C is less than two, then it has sufficient data to warrant the start of a new burst of transmission and
conditional branch point1438 transfers control to
clock1442. If the field COSTAT of the subchannel whose address is C contains the value two then sufficient data is not available and control is transferred to block 1441. Otherwise, COSTAT is equal to three, indicating that sufficient data exists but the channel was rejected as a suitable channel for selection by the TIU. In this case control passes to
conditional branch point1440.
If the address of the channel descriptor equals the address contained in temporary location N, then it is probable that the TIU will be prepared to select this channel so an attempt is made to start a new burst on that channel by transferring control to block 1442. If this is not the case control passes to block 1441 where the time-out routine moves down the chain of channel descriptors for TIU T. The field next in each subchannel descriptor contains the address of the next subchannel descriptor as shown in block 1441. Block 1441 passes control back to the beginning of the scanning
loop branch point1437.
Block1442 is obeyed when it is determined that a burst of transmission might be started to output the data currently stored in the subchannel whoseaddress is stored in C. As shown in block 1442 a call is made to subroutine S.BURST.OUT. This subroutine performs the necessary housekeeping associated with the start of a new burst of output on the channel whose descriptor address is contained in C. On completion of the call control is transferred to the end of the time-out routine at
terminal indicator1444.
Control is transferred to block 1443 when the field SSTAT of a trunk description contains the value four, indicating that the trunk is idle.
Block1443 calls subroutine SIGOUT which requests that an IDLE be sent to the switching unit at the other end of the trunk. When the subroutine returns, the time-out routine ends at
terminal indicator1444.
FIG. 15A shows the subroutine S.BURST.IN whose function is to perform the housekeeping associated with the start of a new input burst. On entry it requires two parameters. Parameter C13 contains the address of a subchannel descriptor, and parameter T13 contains the address of the associated
type2 descriptor. The subroutine begins at
terminal indicator1450. Under normal operating conditions, field SINK in the subchannel descriptor contains the address of the
type2 descriptor associated with that subchannel. In the case when the subchannel would normally use a trunk but at the current time is inactive, the field SINK contains zero.
Conditional branch point1451 tests this field or the subchannel descriptor whose address is in C13 and transfers control to block 1453 if the field is non-zero. Otherwise, it transfers control to block 1452 for the purpose of finding a trunk to that subchannel. As shown in
block1452 the assignment is done by calling the subroutine ASSIGN.TRUNK which uses as parameters the address of the subchannel descriptor contained in C13 and the address of the
type2 descriptor contained in T13. That subroutine has two exits. A success exit us used if the trunk was successfully assigned and a fail exit if no trunk was obtained at that time. Control passes from the success exit to block 1453 and from the fail exit to block 1456.
Assuming then that the assignment to the trunk was successful,
block1453 sets field CRSTAT in the subchannel descriptor addressed by C13 equal to 0. Then block 1454 calls upon the subroutine S.BUNDLE.IN to perform the housekeeping necessary to initiate the input of a new bundle. Parameters for that subroutine are the subchannel address currently contained in C13 and the
type2 descriptor address currently contained in T13. After completion of the cell, control passes to the end of the subroutine at
terminal indicator1455.
Returning now to consider the fail exit from
block1452, control passes from this to block 1456 where the field RSTAT in the
type2 descriptor whose address is contained in T13 is set equal to two. That number indicates that the terminal wishing to start a new input burst must wait until the trunk becomes available. Block 1457 is a call to subroutine REQSIG which in this case is requester to output an ACK signal to the TIU or trunk that would have started a new input burst. Since no transmission has yet been authorized, the ACK signal would instruct the TIU or trunk not to transmit any further data. Following from block 1457, block 1458 sets the field CRSTAT in the
type2 descriptor whose address is in T13 equal to one, indicating thereby that burst input is not in progress. Control then passes to the end of the subroutine in
terminal indicator1455.
FIG. 25B shows the subroutine E.BURST.IN which is used to perform the housekeeping function associated with the termination of an input burst. The single parameter required by the subroutine is the address of a
type2 descriptor. This address must be in working location T1. The routine begins in
terminal indicator1460. When an input burst terminates, any unused space assignment must be returned to the common pool. The volume of space involved here is obtained by subtracting V.IN from A.IN in the
type2 descriptor addressed by T1. That computation is shown in
block1461 and the result is stored in temporary location N1. In
block1462 the value contained in N1 is added to the value contained in the storage location UNASSIGNED SPACE and the result is put back in the storage location UNASSIGNED SPACE. In
block1463 it is seen that the field A.IN and the field V.IN in the
type2 descriptor addressed by T1 are both set equal to 0.
1464 shows a call to subroutine REQSIG whose function is to request that the signal output routine send an ACK signal to a TIU or trunk whose decriptor address is contained in T1. Control then passes to block 1465 where the field CRSTAT in the
type2 descriptor whose address is T1 is set equal to 1 indicating that burst transmission is no longer in progress, and control passes to the end of the subroutine at
terminal indicator1466.
FIG. 25C shows the subroutine S.BUNDLE.IN whose function is to perform the housekeeping associated with the start of a new input bundle. The input parameters required by this routine are C2, the address of a subchannel descriptor and T2, the address of its associated
type2 descriptor.
The routine begins at
terminal indicator1470. Cince no data can be read from the input line or loop until storage space is available to hold it, bundle transmission cannot start unless sufficient storage space has been assigned. Field A.IN in the
type2 descriptor addressed by T2 contains the number of blocks of storage which have currently been assigned to TIU or trunk T2 but have so far been unused. If A.IN is 0, then more space must be requested.
Conditional branch point1471 tests for this situation and, if space does remain, turns over control to block 1473. Otherwise, control passes to block 1472 where a call to ASSIGN.SPACE subroutine is made. Parameters for the space assignment subroutine are the subchannel address C2 and the address of the associated
type2 descriptor T2. The assigned space subroutine can exit in two ways. A success exit is used if space was successfully required, and a fail exit if not. Upon a success exit from
block1472, control passes to block 1473, and upon a fail exit control passes to block 1476.
Assuming now that the assignment of space was successful,
block1473 computes the maximum allowable size for the next bundle. That size is the smaller of the two values contained in N.IN and A.IN of the
type2 descriptor whose address is in T2. The computed result is deposited in temporary location N2. Field V.IN of the TIU or trunk descriptor contains munus one times the number of packets authorized for transmission in the next bundle. Therefore, in
block1474 it is seen that the field V.IN of a
type2 descriptor whose address is in T2 is set equal to minus the value currently found in N2. Then in
block1475 the value currently held in field A.IN of the
type2 descriptor addressed by T2 is reduced by the amount contained in N2. Control then passes to block 1476 where a request is made to send an ACK signal to the TIU or trunk associated with the descriptor with the address T2. For this purpose the subroutine REQSIG is used. Upon completion of the call to that subroutine, control passes to the end of the S.BUNDLE.IN subroutine at
terminal indicator1477.
FIG. 25D shows the subroutine S.BURST.OUT which handles the housekeeping associated with the start of a new burst of output transmission. The single parameter required by this routine is C3, the address of a subchannel descriptor.
The subroutine begins in
terminal indicator1480. The field SINK of a subchannel contains the address of the descriptor which relates to the TIU or trunk to which data is being sent. It is seen in
block1481 that the address of the
type2 descriptor is stored in temporary location T3.
Conditional branch point1482 then tests the field TRCHAIN which is found in the
type2 descriptor addressed by T3. It does this in order to determine whether the descriptor is that of a trunk or a terminal interface unit. The field TRCHAIN will be negative if the descriptor relates to a terminal interface unit and in that case control will pass through
conditional branch point1482 to
conditional branch point1491. In the case where T3 relates to a trunk, control passes to
conditional branch point1483. The test on field COSTAT in the channel descriptor address by C3 and shown in
conditional branch point1483 is made in order to determine whether an output request is already outstanding for this subchannel. In that case control passes from
conditional branch point1483 to the end of the subroutine at
terminal indicator1487, otherwise control passes to
conditional branch point1484.
The next test which is made is in
conditional branch point1484 and seeks to determine whether there is any data at all in the subchannel C3. The field VOL in the descriptor for that subchannel will be 0 if the data output queue is empty and in that case
conditional branch point1484 will transfer control to
conditional branch point1485. When data does exist in the output queue of C3, control passes to block 1488. Assuming now that the output queue is empty, a test is made on the field CRSTAT in the subchannel descriptor addressed by C3. That field will be 0 if there is an active burst transmission of data into the subchannel C3, otherwise it will be non-zero. If indeed there is active burst transmission, control passes to the end of the routine at
terminal indicator1487. Otherwise, control passes to block 1486 for the purpose of releasing the trunk which subchannel C3 has assigned to it. As is shown in
block1486, the trunk is released by using the subroutine RELEASE.TRUNK and by providing it with the subchannel descriptor address C3 and the
type2 descriptor address T3. After releasing the trunk control passes to the end of the routine at
terminal indicator1487.
Turning now to block 1488 where control passes if there is data collected in the subchannel C3, it is seen that the first two actions taken are to clear the fields COSTAT in the channel descriptor and SSTAT in the
type2 descriptor. Control then passes on to block 1490 where a request is made for the purpose of sending an ACK signal to the TIU or trunk associated with T3. To effect this request, the subroutine REQOUT is used. Following completion of the request, control passes to the end of the subroutine at
terminal indicator1487.
As was seen above, control passes from
conditional branch point1482 to
conditional branch point1491, if the
type2 descriptor whose address is contained in T3 described a terminal interface unit. The sequence which begings in
block1491 seeks to determine whether subchannel C3 should be selected for the purpose of sending a new burst of data to TIU T3. That question only arises when subchannel C3 is not currently selected for burst transmission to TIU T3 and the status is indicated by the contents of field SSTAT in the TIU descriptor. If that field contains value two, then
conditional branch point1491 will transfer control to block 1492. Otherwise, it will skip around the channel selection sequence to block 1497.
A status value of two indicates that no channel is currently selected as being suitable for burst transmission, presumably because no channel contains a sufficient volume of data to justify the start of transmission.
On the assumption that subchannel C3 does in fact justify the start of burst transmission, block 1492 sets the field SSELCH in the TIU descriptor T3 equal to the address of the subchannel descriptor contained in C3. Then block 1493 extracts the channel number for that subchannel from field CHANNO in the subchannel descriptor and puts the number in field SELNO, the TIU descriptor addressed by T3. Control then passes on to
conditional branch point1494. AT that pont a test is made on the field COSTAT in the subchannel descriptor addressed by C3. If that field contains the value three then in attempt has previously been made to transmit data on the subchannel C3 and that attempt was rejected by the terminal interface unit because the channel did not correspond to the channel then being used for data transmission.
If COSTAT is equal to three, control passes to
conditional branch point1495, otherwise it passes to
conditional branch point1497. If COSTAT was equal to three then it is presumed that there is no point in repeating the attempt to send data to the terminal interface unit unless the subchannel selected for data output from the terminal interface unit is part of the same channel that contains C3. Since the address of the descriptor for the subchannel selected for data output from the terminal interface unit is contained in the field RSELCH of the TIU descriptor addressed by T3, and since the subchannel descriptor for the two subchannels is one channel are sixteen words apart, the test shown in
conditional branch point1495 will transfer control to
conditional branch point1497 if the appropriate channel is not selected for data output from the TIU and will otherwise pass control to block 1496.
Block1496 enables a retry at burst transmission on subchannel C3 to TIU T3 by setting the value two in field COSTAT of the subchannel descriptor addressed by C3. Having done that control passes to
conditional branch point1497 shown in FIG. 25E.
The sequence starting at
conditional branch point1497 makes certain tests to see whether a start of burst output transmission is justified on subchannel C3. First,
conditional branch point1497 checks whether the subchannel specified as being selected is in fact subchannel C3. It does this by comparing the fields SSELCH in the TIU descriptor whose address is T3 with the value of C3. If they are unequal control passes to the end of the routine at
terminal indicator1508.
Next, a test is made in
block1498 to insure that the housekeeping operations are not performed while a data output transmission request remains extant. That is indicated by the
value1 in the field COSTAT belonging to the channel descriptor addressed by C3. If the
value1 is found, control is transferred to the end of the subroutine at
terminal indicator1508.
Conditional branch point1499 then checks to see whether the field COSTAT contains the value three, and, if so, transfers control to the end of the subroutine at
terminal indicator1508.
The test shown in
block1500 is made in order to insure that burst transmission to a terminal interface unit does not start until a certain specified number of packets has been collected. That number is contained in the field MOUT to the subchannel descriptor. By comparing this field with the field VOL,
conditional branch point1500 arranges to transfer control to block 1501 if either the requisite number of the packets have been collected or if among those packets that have been collected there is one which signifies that it is the end-of-message. In any other circumstance, control is transferred from
conditional branch point1500 to the end of the subroutine at
terminal indicator1508.
The sequence starting in
block1501 initializes burst output. First, the value contained in the field MOUT in the subchannel descriptor pointed to by C3 is copied into the field AOUT of the
type2 descriptor pointed to by T3.
Block1502 then indicates that normal transmission is to take place by setting the
value0 in the field COSTAT belonging to the subchannel descriptor addressed by C3.
1503 is obeyed next. Its function is to send an SEL signal to the terminal interface unit indicating the channel on which subsequent data is to be transmitted.
Block1503 produces this effect by calling subroutine REQSIG where the function code of one is in parameter F6.
Block1504 then sets the field SSTAT in the
type2 descriptor addressed by T3 equal to the value three, thereby indicating that the switching unit must wait for an ACK signal from the terminal interface unit. Following that, in
block1505 the current time is stored in the field STIME belonging to the
type2 descriptor whose address is in T3.
Block1506 then calls the subroutine S.BUNDLE.OUT to perform the housekeeping associated with bundle transmission on the subchannel addressed by C3 to the TIU whose descriptor is addressed by T3.
Block1507 shows a call to subroutine REQOUT whose effect is to place a request for attention by the data output routine. That request will specify subchannel C3. Control then passes to the end of the subroutine at
terminal indicator1508.
FIG. 25F shows the subroutine E.BURST.OUT whose purpose is to perform the housekeeping associated with the end of an output burst. The subroutine requires two input parameters. Parameter C4 is the address of the subchannel descriptor, and parameter T4 is the address of its associated
type2 descriptor.
The subroutine begins at
terminal indicator1510. The first action taken is shown in
conditional branch point1511 where a test is made on the field COSTAT in the subchannel descriptor addressed by C4. If that field contains the
value1 then the subchannel has been queued for attention by the data otuput routine and cannot at this time be processed for the end of burst transmission. In that case control passes from
conditional branch point1511 to the end of the subroutine at
terminal indicator1516. Otherwise, control passes to block 1512.
Block1512 provisionally sets the field COSTAT in the subchannel descriptor addressed by C4 equal to the value two. That value indicates that future transmission is conditional upon the requisite amount of data being collected in the subchannel addressed by C4.
Conditional branch point1513 then tests the field TRCHAIN in the
type2 descriptor pointed to by T4 to determine if it relates to a terminal interface unit or to a trunk. In the case that it is a trunk, control passes from the
control point1513 to block 1515, otherwise control passes to block 1514. The field SSTAT in the descriptor for a terminal interface unit contains the value two when the terminal interface unit has no burst transmission scheduled for it. It is that status which is set by
block1514.
Block1515 is a call to subrouine S.BURST.OUT which will make an attempt to start transmission of another burst of data to a TIU. Finally, control passes to the end of the subroutine at
terminal indicator1516.
FIG. 25G shows the subroutine S.BUNDLE.OUT which handles the housekeeping associated with the start of a new bundle for output transmission. The subroutine required one parameter, T5, which is the address of a
type2 descriptor.
The subroutine begins at
terminal indicator1520. The first action taken in this subroutine is to compute the maximum size that will be allowed for the bundle to be sent to the TIU or trunk whose descriptor is addressed by T5. That maximum is the smaller of the two values contained, respectively, in the fields A.OUT and N.OUT of the
type2 descriptor.
Block1521 shows that this value is computed and stored in the temporary location N5. Next to be obeyed is
block1522 wherein minus one times the value stored in temporary location N5 is inserted into the field V.OUT contained in the
type2 descriptor pointed to by T5. Next, in block 1523, the value currently contained in the field A.OUT of the
type2 descriptor addressed by T5 is reduced by the amount contained in the storage location N5; after that, control passes to the end of the subroutine at
terminal indicator1524.
FIG. 25H shows the subroutine REQSIG whose function is to place a request to the signal output routine for the transmission of a signal. That routine requires three parameters. T6 is the address of the
type2 descriptor relating to the TIU or trunk to which the signal is to be sent; F6 contains the function code for the signal to be sent; and H6 contains, where appropriate, the value to be used in the CH field of the signal.
The routine begins at
terminal indicator1530. The signal output routine operates by taking entry from the circular queue pointed to by the field SXTAIL and SXHEAD in the
type1 descriptor. If these two fields are equal, then the queue is full and no further entry should be made.
Conditional branch point1531 compares the values in these two fields and if they are equal passes control to the end of the subroutine at
terminal indictor1537. Otherwise, control passes on to block 1532. Field SXTAIL in the
type1 descriptor whose address is contained in L is the field which contains the address of the next queue entry to be used for the purpose of making requests for signal output. In
block1532 it is shown that this address is transferred to the temporary storage location B6. The ield FN in the queue entry addressed by B6 is set equal to the value contained in F6, then the CH field in the queue entry addressed by B6 is set equal to the value contained in H6. Next, the field TNML contained in the queue entry addressed by B6 is set equal to the value contained in T6. These actions are carried out respectively by
blocks1533, 1534, and 1535. Finally, the queue pointers are updated by copying into field SXTAIL in the
type1 descriptor whose address is in L the value of the next queue entry following the 1 addressed by B6. The addressed of that entry is contained in the field NEXT of the queue entry addressed by B6. After that action is taken, control passes to the end of the routine at
terminal indicator1537.
FIG. 251 shows the subroutine REQOUT whose function is to request attention by the data output routine. The single parameter of this subroutine is C7, the address of a subchannel descriptor, being the subchannel for which attention is required.
The subroutine begins at
terminal indicator1540.
Conditional branch point1541 tests the field COSTAT in the subchannel descriptor addressed by C7. Only if that field is 0 will an attempt be made to make an entry in the attention queue for the data output routine. In all other cases,
conditional branch point1541 transfers control to the end of the routine at
terminal indicator1550. To signify that a queue entry has been made field COSTAT is set equal to 1, as shown in
block1542. The queue entries themselves form a circular list in consecutive locations the first of which is pointed to by the field ATTNQ contained in the
type1 descriptor. One entry in this list is processed each master frame time, that is once each 250 microseconds. It is therefore possible to estimate the delay before a particular service request will be honored by computing the relative position of the queue entry in question and the last queue entry processed by the data output routine. The position of the latter is contained in the field DXLAST of the
type1 descriptor.
Since it is required to restrain the speed with which the switching unit sends data packets to a terminal interface unit, the subroutine REQOUT attempts to make a data output attention queue entry a specific distance ahead of the position indicated by the field DXLAST. The distance in question is stored as field RATE in the channel descriptor.
Resuming then the step-by-step description of the queuing action,
block1543 initializes a counter in temporary location X7.
Block1544 then puts in temporary location L7 the address of the
type1 descriptor associated with channel C7. In
block1545 the position in the data output attention queue of which it is required to make an entry is computed. That position is the sum of the values in the field RATE of the subchannel descriptor and the value in the field DXLAST in the
type1 descriptor. This computation is performed modulo the length of the queue which is contained in field DXLENGTH of the
type1 descriptor pointed to by L7. As shown in
block1545, the position of the queue entry is stored in temporary location B7.
Conditional branch point1546 then shows that the current content of the specified queue entry is examined and if it is 0 control passes to block l551 where the subchannel address contained in C7 is copied into the queue entry. If the queue entry is non-zero, then control passes to block 1547 for the purpose of computing an alternative position into which to make the queue entry. As is seen in
block1547, the alternative position is computed by adding one to the current position and doing this addition modulo the length of the queue. The new position is stored in location B7.
Block1548 shows that the contents of the temporary location X7 are then increased by one and
conditional branch point1549 transfers control back to
conditional branch point1546 for another attempt at making a queue entry if the resulting value in X7 is less than 0. The effect of this action is to insure that only a limited number of queuing attempts are made. When X7 no longer contains a negative number, control passes from
conditional branch point1549 to the end of the routine at
terminal indicator1550.
FIG. 25J shows subroutine ASSIGN.SPACE whose purpose is to obtain a space assignment for the purposes of data input and storage. The parameters required by that routine are C11, which is the address of a subchannel descriptor, and T11 which is the address of a
type2 descriptor relating to that subchannel.
The routine begins at terminal indicator 15513. In
block1552 it is seen that the temporary storage location V11 is set equal to the number which is in the least significant eight bits of the field VOL in the subchannel descriptor addressed by C11. The value so obtained is equal to the total number of data blocks currently queued for data transmission with subchannel C11. The ASSIGN.SPACE subroutine will attempt to assign the number of storage locations equal to the number stored in the field NIN of the subchannel descriptor addressed by T11. However, if, in making that assignment, the total number of blocks assigned to channel C11 will exceed the number stored in the field ALLOC of the subchannel C11, then the assignment will not take place and the demand will be considered excessive at this time.
Conditional branch point1553 makes the necessary tests and transfers control to block 1559 if the demand is excessive. Otherwise, control passes to
conditional branch point1554.
The storage location UNASSIGNED SPACE contains a value equal to the number of storage locations in the common pool available for assignment. Clearly if the space assignment is to be successful, that number of free storage locations must not be less than the number which the ASSIGN.SPACE subroutine wishes to assign to channel C11.
Conditional branch point1554 makes the necessary determination by comparing the value in the storage location UNASSIGNED SPACE with the value in the field M.IN of the subchannel descriptor associated with C11. If the storage assignment cannot be made, control is transferred to block 1559, otherwise control proceeds to block 1555. In order to record that the assignment has been made, the value stored in field M.IN of subchannel descriptor C11 is transferred to field A.IN in the
type2 descriptor whose address is contained in T11. That action is shown in
block1555.
In
block1556 it is seen that the value stored in the location UNASSIGNED SPACE is reduced by the amount of the value contained in the field M.IN of the subchannel descriptor addressed by C11. To indicate that data transfer can now take place, a 0 is written into the field RSTAT of the
type2 descriptor addressed by T11 as is shown in
block1557. Immediately thereafter, control passes to the end of the subroutine at
terminal indicator1558. This subroutine is written to return to the calling routine in two different ways, one signifying success and the other signifying failure. When control reaches terminal indicator 1558 a success exit occurs
Referring now to block 1559, it was seen that control reached this point if the space assignment could not in fact be made. To indicate this fact the
value1 is stored in the field RSTAT of the
type2 descriptor addressed by T11. Control then passes to
terminal indicator1560 which is the end of the subroutine and its fail exit to the calling routine.
FIG. 25K shows the subroutine RELEASE.SPACE whose function is to return to the common pool a packet buffer which once was assigned and used for storing data. The single input parameter to this subroutine is B12, the address of the packet buffer to be released.
The subroutine begins at
terminal indicator1565. In order to avoid timing problems, the greater part of this routine is obeyed with interrupts inhibited, as shown in
blocks1566 and 1569. After inhibiting interrupts, control passes to block 1567 where the first step in placing the packet buffer on the free space list is taken. The list of free packet buffer starts in working store location FREESPACE.
Block1567 shows that the address of the current head of the free storage list is transferred to the field NEXT of the packet buffer addressed by B12. Then block 1568 shows that the address contained in B12 is transferred to the storage location FREESPACE, thus placing the packet buffer addressed by B12 on the free storage list. After allowing interrupts in
block1569 the contents of the storage location UNASSIGNEDSPACE is increased by 1 to indicate that there is now one more packet buffer in the free list. That is shown in
block1570 which is the last before the end of the subroutine at
terminal indicator1571.
FIG. 25L shows at subroutine ASSIGN.TRUNK whose function is to obtain an idle trunk and assign it to a specified subchannel. The address of the descriptor for the subchannel in question is the single parameter for the subroutine and is denoted by C9.
The subroutine starts at
terminal indicator1575. When the subchannel C9 is intended to transfer data on a trunk to another switching unit then the field SLOOP in the descriptor for that subchannel will contain the address of a descriptor for a transmission line and associated with that transmission line will be a number of trunks each described by a
single type2 descriptor. In
block1576 the address of the
type1 descriptor is transferred to temporary storage location L9. All those trunks, which are not currently active and assigned to work for specific channels, are chained together and hang from the field TRLIST of the line descriptor L9. If that field in the line descriptor is 0, then no free trunk is available.
Conditional branch point1577 determines whether this is in fact the case and, if there is no trunk available, transfers control to the end of the subroutine at
terminal indicator1578. The subroutine has in fact two ends and two styles of returning to the calling routine. In one case the return signifies successful assignment of a trunk, in the other case the return signifies a failure to assign a trunk.
Terminal indicator1578 is the fail exit from subroutine ASSIGN.TRUNK.
Returning now to
conditional branch point1577, control will be transferred to block 1579 if the list of free trunks is not empty. In 1579 it is shown that the address of the descriptor for the first of these trunks is copied into temporary storage location D9. The list which starts in field TRLIST passes through the fields TRCHAIN in the trunk descriptors through all trunks that are free. Therefore, the assignment shown in
block1580 has the effect of removing one trunk from the list. In
block1580 the value contained in the field TRCHAIN of the trunk addressed by D9 is copied into the field TRLIST of the line descriptor addressed by L9. At this point D9 contains the address of the trunk descriptor for the trunk that is to be assigned to the channel C9. To complete the assignment the following actions are taken. The value three is stored in the field SSTAT of the trunk description addressed by D9, and in
block1582 0 is written into the field A.OUT and V.OUT of that trunk descriptor.
In
block1581 it is seen that the address of the subchannel, namely, that value which is contained in C9, is transferred into the field SSELCH of the trunk descriptor whose address is contained in D9. Next, in
block1582, the value two is stored in the field COSTAT found in the subchannel descriptor whose address is contained in C9. The field SINK in the subchannel descriptor normally contains the address of the trunk assigned to serve that subchannel. So, in
block1583, the value contained in D9 is stored in the field SINK of the subchannel descriptor addressed by C9. The channel number used in STRT signal is contained in the field CHANNO of the subchannel descriptor and block 1584 it is seen that this value is transferred to the field SELNO of the trunk descriptor addressed by D9.
Having thus completed the assignment of a trunk to the subchannel C9, an STRT signal is sent along the trunk to the switching unit of the receiving end. To cause this to happen, a call is made to subroutine REQSIG with input parameter F6 equal to 1. The action taken by that subroutine has already been specified. After completion of the call, control passes to the successful exit of the subroutine at
terminal indicator1586.
FIG. 25M shows the subroutine RELEASE TRUNK whose purpose is to disassociate a trunk from a particular channel and make that trunk available to all channels sharing the same transmission line. The input parameters to this subroutine are T10, the address of the trunk descriptor for the trunk to be released, and C10, the address of the channel descriptor currently associated with the trunk.
The routine starts at
terminal indicator1590. When the subchannel C10 is not being served by a trunk, the field SINK in the descriptor for that subchannel must be set to 0. That action is taken in
block1591.
Block1592 sets in temporary storage location L10 the address of the descriptor for the line over which transmissions from subchannel C10 are sent. The address of that line descriptor is found in field SLOOP of the subchannel descriptor addressed by C10.
In order to make the trunk available for reassignment, it must be added to the chain of free trunks which starts at the field TRLIST in the line descriptor whose address is now contained in temporary location L10. All these trunks in that list are connected by the fields TRCHAIN in the trunk descriptor. Thus block 1593 is seen to add the trunk whose descriptor address is T10 to the list starting in TRLIST of the line descriptor whose address is contained in L10.
Having thus released the trunk,
block1594 is obeyed wherein the value four is stored in the status field SSTAT of the trunk T10. This indicates that the trunk is now idle. Finally, an IDL signal must be sent over that trunk to the switching unit of the receiving end. That action is shown in
block1595 where a call is made to subroutine REQSIG with the input parameter F6 set equal to two. After completion of that call, control passes to the end of the subroutine at
terminal indicator1596.
FIG. 25N shows the subroutine RETREAT whose function is to backtrack over the queue of data waiting to be transmitted in association with a particular subchannel. Input parameters to the subroutine are T8, the address of the
type2 descriptor for the TIU or trunk affected by the backtrack operation, and S8, a sequence number which determines how far the backtrack operation should go. In fact S8 is the sequence number of the last packet successfully transmitted and therefore the sequence number of the most recently transmitted packet that need not be involved in the backtrack operation.
The subroutine starts in
terminal indicator1600. It is seen that in
block1601 the temporary storage location C8 is set equal to the address of the descriptor for the subchannel which the TIU or trunk T8 is currently serving. The field SSELCH of the
type2 descriptor addressed by T8 contains the address of the subchannel descriptor in question. If that subchannel is currently queued for attention by the data output routine then the backtrack operation cannot be made. That determination is made by
conditional branch point1602 which, if the backtrack cannot take place, transfers control to the end of the subroutine at
terminal indicator1621. Otherwise, control passes on to
conditional branch point1603. The action required on backtrack depends on the type of packet most recently transmitted to the TIU or trunk described by T8.
If the state as stored in the field SSTAT of the
type2 descriptor contains value three then an SEL or STRT signal was transmitted and the switching unit is waiting for an ACK signal from the TIU or trunk. If that is the case,
conditional branch point1603 transfers control to block 1616. Otherwise, control passes to
conditional branch point1604. If the field SSTAT contains the value two or the value four then the TIU or trunk T8 is no longer involved in data transfer and no backtrack is possible. In this case,
conditional branch point1604 transfers control to the end of the subroutine at
terminal indicator1621. Otherwise, control passes to block 1605.
The distance of backtrack is determined by the calculation shown in
block1605. That distance is the difference between the value contained in field SSEQ of the
type2 descriptor addressed by T8 and the sequence number S8 supplied an input parameter to the RETREAT subroutine. The difference between these two numbers is computed modulo 64 since the sequence number is a six-bit quantity and that difference is stored in the temporary location D8. If D8 is 0, then no backtrack is required and
conditional branch point1606 will transfer control to
conditional branch point1613. Otherwise, control passes to block 1607.
In
block1607 it is seen that the value stored in D8 is subtracted from the value contained in the field V.OUT of the
type2 descriptor addressed by T8. Then, in
block1608 the sequence number S8 is stored in the field SSEQ of the
type2 descriptor addressed by T8. The status field SSTAT of the
type2 descriptor addressed by T8 is set equal to 0 in
block1609 and the field COSTAT of the channel descriptor addressed by C8 is set equal to 0 in
block1610. The program
loop involving blocks1611, 1612, and 1615 provides the backtrack operation across untransmitted data blocks. Control passes once around this loop for each data block across which backtrack must pass.
Block1611 subtracts one from D8 each time around the loop and
conditional branch point1612 checks to see when D8 goes negative transferring control out of the loop to
conditional branch point1613 when that happens.
Thus it is seen that control passes around the loop exactly the number of times that is contained in the temporary storage location D8 before the loop execution begins. Each time around the
loop block1615 is obeyed. That block shows how the pointer NEXTOUT contained in the channel descriptor addressed by C8 is updated. That pointer points to a block in the queue of data associated with the subchannel and the field PREV in each queue entry contains the address of the queue entry for the data which would previously have been transmitted. Thus, to backtrack across one block of data it is necessary to copy the contents of the field PREV from the queue entry addressed by NEXTOUT into the field NEXTOUT.
Turning now to the action which takes place when control has passed out of the loop to
conditional branch point1613, it is seen that that branch point tests the input parameter W8. That parameter will be non-zero if the reason for obeying the RETREAT routine is that the terminal interface unit corresponding to T8 rejected transmissions on the ground that they were on a channel not the same as the one on which the terminal interface unit was currently transmitting. If that were the case, then control passes to block 1620, otherwise it moves on to block 1614. In
block1614 is a call on the subroutine REQOUT whose purpose is to make an entry in the list requesting the attention of the data output routine. After completion of that call control passes to the end of the subroutine at
terminal indicator1621.
Returning to
conditional branch point1603, it is recalled that control passes through there to block 1616 if the backtrack operation was requested when the switching unit was waiting for an acknowledgment from the SEL or STRT signal. The action taken here is, first, to transfer the sequence number contained in S8 to the field SSEQ of the
type2 descriptor addressed by T8, then
conditional branch point1617 tests the input parameter W8 to see if it is zero. If non-zero, it indicates that a channel-select was sent to a terminal interface unit and the terminal interface unit rejected the channel-select on the ground that the channel number did not correspond to the number of the channel on which data transmission was currently taking place. If that is the case, control will pass through
conditional branch point1617 to block 1619. Otherwise, it will pass to block 1618.
It is seen that
block1618 calls for a retransmission of the SEL or STRT signal. That block shows a call to subroutine REQSIG whose purpose is to make a queue entry for the signal output routine. After requesting transmission of this signal control passes to the end of the subroutine at
terminal indicator1621. When
block1619 is obeyed, the field CSTAT in the channel descriptor addressed by C8 is set equal to three. The effect that this has is to prevent that channel from being automatically selected again until the same channel is selected for data transmission out of the terminal interface unit.
From
block1619 to block 1620 it is seen that the field SSTAT in the
type2 descriptor addressed by T8 is set equal to two. The purpose here is to indicate that there is no known subchannel which is in a position to transmit data to the TIU or trunk described by T8. After setting this status field control passes to the end of the subroutine at
terminal indicator1621. ##SPC1## ##SPC2## ##SPC3## ##SPC4##