Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
ENCODING OF ERROR DETECTING RLL CODES
Document Type and Number:
WIPO Patent Application WO/2014/130380
Kind Code:
A1
Abstract:
A method of encoding a data set including one or more n-bit symbols in an encoder of a computing system includes determining a plurality of n+2-bit code words having two or greater Hamming distance from one another. In an embodiment, encoding employs a 8B10B error detecting RLL code with maximum runlength 6 and bounded disparity, providing 14 codewords for representing data and 14 control words.

Inventors:
TANTOS, Andras (LCA - International PatentsOne Microsoft Wa, Redmond Washington, 98052-6399, US)
Application Number:
US2014/016655
Publication Date:
August 28, 2014
Filing Date:
February 17, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
MICROSOFT CORPORATION (One Microsoft Way, Redmond, Washington, 98052-6399, US)
International Classes:
H03M5/14; H03M13/31
Foreign References:
US20120060070A12012-03-08
Other References:
MARTIN, IBM TDB: "A Rate 8/10 DC Balanced CODE With Local Parity", IP.COM JOURNAL, IP.COM INC., WEST HENRIETTA, NY, US, ORIGINAL DISCLOSURE ON 01.02.0985 IN IBM TDB, 18 February 2005 (2005-02-18), XP013052426, ISSN: 1533-0001
CHIEN-CHAN LIANG: "IMPROVEMENT OF PERFORMANCE IN DIGITAL RECORDING WITH DISTANCED MODULATION CODE", PROCEEDINGS OF THE INTERNATIONAL CONFERENCE ON CONSUMER ELECTRONICS,ROSEMONT, JUNE 8-10, 1993 IEEE, US, vol. CONF. 12, 8 June 1993 (1993-06-08), pages 120 - 121, XP000427551
None
Download PDF:
Claims:
CLAIMS

1. A method of encoding a data set including one or more n-bit pre-coded symbols in an encoder of a computing system, the method comprising:

determining a plurality of n+2-bit code words, each of the plurality of n+2-bit code words having two or greater Hamming distance from one another;

mapping each of the plurality of n+2-bit code words to a corresponding source symbol;

receiving the one or more n-bit pre-coded symbols at the encoder;

matching each n-bit pre-coded symbol to a corresponding n+2-bit code word based on the mapping to produce encoded data; and

outputting the encoded data.

2. The method of claim 1, further comprising outputting an error correction symbol, the error correction symbol particular to the encoded data.

3. The method of claim 2, wherein the error correction symbol comprises a checksum for the encoded data.

4. The method of claim 2, wherein the error correction symbol comprises a cyclic redundancy check (CRC) symbol for the encoded data or an XOR sum of bits of the encoded data.

5. The method of claim 1, wherein each of the plurality of code words includes at most six consecutive bits of the same value.

6. The method of claim 1, further comprising generating a table of valid code words including the plurality of n+2-bit code words and outputting the table of valid code words.

7. An encoding system comprising:

a logic machine; and

a storage machine configured to store instructions executable by the logic machine to:

generate a plurality of code words, each of the plurality of n+2-bit code words having two or greater Hamming distance from one another; and

map each of the plurality of n+2-bit code words to a corresponding source symbol.

8. The system of claim 7, the instructions further executable to transmit an error correction symbol to a computing device, the error correction symbol particular to the encoded data.

9. The system of claim 7, wherein each of the plurality of code words includes ten bits and each of the corresponding source symbols includes eight bits.

10. The system of claim 7, wherein the plurality of code words includes 256 data codes and 14 control codes.

Description:
ENCODING OF ERROR DETECTING RLL CODES

BACKGROUND

[0001] Data may be encoded by matching an n-bit symbol of the data to a corresponding coded symbol having n+2 bits. Transmission losses and other conditions may result in error within the encoded data. In order to detect the error, some encoding schemes transmit additional symbols with the encoded data. Once detected, the errors may be corrected by resending the data or by performing complex data correction schemes with information in other supplementary symbols.

SUMMARY

[0002] Embodiments are disclosed herein for encoding n-bit pre-coded data with n+2 -bit code words. For example, a method of encoding a data set including one or more n-bit pre- coded symbols in an encoder of a computing system includes determining a plurality of n+2 -bit code words, each of the plurality of n+2 -bit code words having two or greater Hamming distance from one another. Each of the plurality of n+2 -bit code words may be mapped to a corresponding source symbol in order to form a key for encoding data. The method may further include receiving the one or more n-bit pre-coded symbols at the encoder, matching each n-bit pre-coded symbol to a corresponding n+2-bit code word based on the mapping to produce encoded data, and outputting the encoded data.

[0003] This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter. Furthermore, the claimed subject matter is not limited to implementations that solve any or all disadvantages noted in any part of this disclosure.

BRIEF DESCRIPTION OF THE DRAWINGS

[0004] FIG. 1 shows an example encoding and/or decoding system in accordance with an embodiment of the present disclosure.

[0005] FIGS. 2A-2C show an example list of n+2-bit code words corresponding to n-bit source code symbols in accordance with an embodiment of the present disclosure.

[0006] FIG. 3 shows an example method of encoding n-bit pre-coded data to produce encoded data in accordance with an embodiment of the present disclosure.

[0007] FIG. 4 shows an example method of decoding n+2-bit encoded data in accordance with an embodiment of the present disclosure. [0008] FIG. 5 is a block diagram of an example computing device in accordance with an embodiment of the present disclosure.

DETAILED DESCRIPTION

[0009] Some encoding methods utilize 8b/10b or similar encoding schemes that may result in "lost bandwidth," as the extra two bits in encoded code words do not provide any additional error correction or detection capabilities. Further, these methods may employ complex mechanisms for detecting and correcting errors in received encoded data. The present disclosure provides methods and systems for encoding data such that any two valid code words have at least two bits with different logical values than one another. In this way, single bit errors may be detected by a physical layer, as a received code word with a single bit error would not correspond to any valid code word. The physical layer may mark the symbol as bad, allowing higher layers to correct the symbol with forward error correction mechanisms.

[0010] FIG. 1 illustrates an example encoding and/or decoding system 100. The system 100 may include an encoder 102 and a decoder 104. As depicted, one or more elements of the system 100 may be integrated into a single computing device and/or distributed across multiple computing devices. For example, the encoder 102 may be included in a first computing device, while the decoder 104 may be included in a second computing device. The first computing device may be configured to transmit data to the second computing device in accordance with any suitable wireless and/or wired protocols.

[0011] The encoder 102 and the decoder 104 may be configured to process data in accordance with the pipeline illustrated in FIG. 1. For example, pre-coded data symbols having n bits each may be input into the encoder 102. The encoder 102 generates and/or consults a table 106 responsive to receiving the pre-coded data symbols. For example, the table 106 may be a lookup table of valid n+2-bit code words. The encoder 102 may generate encoded data including encoded n+2-bit code words based on the table 106.

[0012] As shown in FIG. 1, the table 106 may include each valid n+2-bit code word for each n-bit source symbol. Each n-bit source symbol may be matched to one or more n+2- bit code words such that more than one n+2-bit code words may correspond to the same source symbol. During encoding, the encoder 102 may match a particular pre-coded n-bit data symbol to an n-bit source symbol and output an n+2-bit code word corresponding to the n-bit source symbol. For example, as shown in the table 106, a pre-coded n-bit data symbol of 00000100 may be associated with an n+2-bit code word of 0001100111. Therefore, the encoder 102 may output 0001100111 in response to receiving a pre-coded symbol of 00000100. In some embodiments, the encoder 102 may append or otherwise include one or more error correction symbols for the encoded data. The error correction symbols may include checksum information, cyclic redundancy check information, and/or any other suitable error correction information, as described in more detail below.

[0013] The decoder 104 may receive the encoded data, consult the table 106 and/or a local version of the table 106, and output recovered n-bit data symbols. Accordingly, the decoder 104 may match a received or otherwise input encoded n+2-bit code word to the n+2-bit code words in the table 106, then output an n-bit source symbol corresponding to the n+2-bit code word as the recovered n-bit data symbol. In contrast to the matching of source symbols to code words, any n+2-bit code word may be matched with only one n-bit source symbol in order to prevent uncertainty during decoding. Using the example above, if the decoder 104 receives the code word 0001100111 from the encoder 102, the decoder 104 may output 00000100 as the recovered n-bit data symbol. The decoder 104 may utilize the one or more error correction symbols from the encoder 102 to ensure that the recovered n-bit data symbols correctly represent and/or match the pre-coded n-bit data symbols.

[0014] The scenario described above assumes an error-free transmission, in which the decoder 104 receives the exact same symbol output by the encoder 102. In some scenarios, however, transmission errors may occur in which a received symbol does not directly correspond to a transmitted symbol. For example, errors may occur at various locations of a system, such as an input and/or output of an element or within the transmission medium. In order to detect and subsequently correct such errors, the encoder 102 may be configured to determine a plurality of code words such that each code word includes at least two different bits from each other code word. The determined code words may be generated by the encoder or received from an external table generator. This difference is referred to as a Hamming distance and is illustrated at box 108 of FIG. 1. As shown in box 108, the seventh and eighth bits (reading left to right) of the first code word are each different from the seventh and eighth bits of the second code word. All other bits are the same. As such, the illustrated example N+2-bit code words have a hamming distance equal to two.

[0015] By determining a list of valid code words each having a Hamming distance of two or greater from one another, a single bit error that occurs during transmission of a valid code word may be detected as an invalid code word at a receiving element. For example, the encoder 102 may output the code word 0001100111, but an error may cause the code word 0001101111 to be received at the decoder 104. The code word 0001101111 would not be a valid code word, because it has a Hamming distance of 1 from the valid code word 0001100111. When the decoder 104 consults the table 106, the received code word will not be located. Accordingly, the decoder may mark the code word as a bad symbol, such that it may be corrected. Once the code word is marked as a bad symbol, higher layers of the system may be configured to correct the error. The error detection based on receiving an invalid code word may allow the system to utilize more simplistic error correction mechanisms than systems that do not perform such error detection.

[0016] Further considerations for determining valid n+2-bit code words may be included to maintain and/or increase performance parameters in comparison to other encoding methods. For example, the encoding of the system 100 may adhere to some standards of 8b/10b encoding schemes. In some embodiments, the valid code words may have a bounded disparity of ones and zeros such that the number of ones and zeros sent over a period of time is substantially equal and the transmission is DC balanced. Some source symbols may be associated with two valid code words. Selection of a code word for a particular pre-coded symbol matching one of these source symbols may be performed based on the code words that have been transmitted prior to encoding the particular pre- coded symbol. For example, if a running disparity of the transmission is negative, in which the number of zeros transmitted is greater than the number of ones, the code word having more ones than zeros may be selected to correspond to the particular pre-coded symbol.

[0017] The valid n+2-bit code words may also be selected to have no more than a maximum number of consecutive ones and/or a maximum number of consecutive zeros in order to achieve a particular edge rate. Receiving adjacent bits with different logical values (e.g., toggling from one to zero) allows a system to perform clock synchronization and correct drift that may be experienced after receiving a string of bits having the same logical value. Therefore, the valid n+2-bit code words may be configured to match a suitable edge rate. For example, the n+2-bit code words may include no more than six consecutive bits of the same logical value to achieve an edge rate of 1/6. As shown in table 106, each of the example code words have at most 3 consecutive bits of the same logical value - 3 zeros and 3 ones in the first code word and 3 zeros in the second code word. It is appreciated that the encoder and/or table generator may select code words configured to achieve any suitable edge rate; however a number of possible valid n+2-bit code words decreases as the edge rate decreases.

[0018] The n+2-bit code words may also be selected such that a particular number of control codes is available. For example, when encoding 8-bit pre-coded symbols with 10- bit code words, 270 symbols may be represented by the code words. As the 8-bit pre- coded symbols have 256 possible combinations, 256 of the 270 code words may be reserved for representing data, while the remaining 14 symbols may represent control codes. Control codes may include any suitable code for controlling an aspect of the encoding and/or decoding system, including but not limited to start-of-frame, end-of- frame, etc.

[0019] Assignment of pre-coded symbols and control codes to the code words may be arbitrary, with the exception of a "COM" or "comma" symbol. The "COM" or "comma" symbol may define alignment of the code words and may be assigned to a particular and/or predefined code word and/or source symbol. The assignment of the COM symbol may be selected such that, in any valid incoming bit-stream, the only place the 10-bit series corresponding to the COM symbol can appear is where a COM symbol was actually transmitted. In other words, the COM symbol is assigned to a code word that may not be formed from any combination of remaining code words. For example, the COM symbol may be assigned to symbol number 0x003 (code word 0001011110) when encoding 8-bit pre-coded data with 10-bit code words in accordance with the present disclosure. The encoder and/or table generator may search the 10-bit code words for a suitable COM symbol. Further, in order to ensure detection of the COM symbol even in the presence of bit-errors, the COM symbol may be transmitted two or more times in a row.

[0020] FIGS. 2A-2C show an example list 200 of 270 code words determined to satisfy the above-described encoding considerations and assigned to 256 code words and 14 control codes. The list 200 shows the 270 source codes (in hexadecimal representation) and each corresponding code word (in binary representation). As discussed above, the Hamming distance between each of the 270 code words is at least 2, allowing for detection of single-bit corruption in a received symbol. In other words, each of the plurality of code words has a two or greater Hamming distance from one another. Further, the code words have a minimum edge rate of 1/6 and include 14 control codes. FIG. 2C illustrates these 14 control codes as corresponding to source codes 0x101 through OxlOd and source code 0x003 (COM symbol).

[0021] FIG. 3 illustrates a method 300 of encoding a data set including one or more n-bit pre-coded symbols in an encoder of a computing system. For example, the method of 300 may be performed by encoder 102 of FIG. 1 or computing system 500 of FIG. 5. The method 300 includes, at 302, determining a plurality of n+2-bit code words. For example, as discussed above, 8b/ 10b encoding may be utilized such that 10-bit code words are determined in order to encode 8-bit data symbols. However, the method 300 may be utilized with any suitable n/n+2 encoding scheme, including but not limited to 16b/ 18b encoding, 32b/34b encoding, etc. As indicated at 304, the code words may be selected or otherwise determined such that each n+2-bit code word has a 2 or greater Hamming distance from one another.

[0022] The method 300 includes mapping each n+2-bit code word to a corresponding source symbol, as indicated at 306. For example, as shown in the list 200 of FIG. 2, each 10-bit code is mapped to a corresponding 8-bit source symbol. At 308, the method 300 includes receiving one or more n-bit pre-coded symbols. The pre-coded symbols may be received at an input of the encoder and/or from an external computing device. It is to be understood that the plurality of code words may be determined after and/or responsive to receiving the one or more n-bit pre-coded symbols at 308.

[0023] The method 300 further includes matching each n-bit pre-coded symbol to a corresponding n+2-bit code word based on the mapping of 308 in order to produce encoded data at 310. At 312, the method includes outputting the encoded data. In some embodiments, the encoded data may be output and/or transmitted to a computing device external to the encoder that performs the method 300. In additional or alternative embodiments, the encoded data may be output and/or transmitted to an element that is local to the encoder.

[0024] The two or greater Hamming distance between each of the code words may allow a physical layer to determine and/or mark invalid symbols, thereby detecting single- bit error in the encoded data. As indicated at 314, the encoder may also transmit an error correction symbol particular to the encoded data to allow forward error correction for the encoded data. The encoder may transmit a checksum for the encoded data, as indicated at 316, and/or a cyclic redundancy check (CRC) symbol for the encoded data, as indicated at 318. For example, while the physical layer may perform error detection based on receiving invalid symbols, a higher layer of the OSI model, such as the link layer, may perform error correction using the extra symbol transmitted at 314. Such error correction may allow for retry-less communication links while maintaining mean time between failure values that are thought to approach or even exceed one million hours.

[0025] The error detection and correction for encoded data is described in more detail with respect to FIG. 4, which shows a method 400 for decoding data in accordance with an embodiment of the present disclosure. For example, the method 400 may be performed by the decoder 104 of FIG. 1 or computing system 500 of FIG. 5. The method 400 includes, at 402, receiving encoded data including one or more n+2-bit code words. The encoded data may include an error correction symbol, as indicated at 404. For example, the encoded data may be encoded and output as described in method 300.

[0026] The method 400 further includes, at 406, determining that an n+2-bit code word includes a single-bit error responsive to determining that the n+2-bit code word is an invalid code word. Determining that the n+2-bit code word is an invalid code word may optionally include comparing the n+2-bit code word to a table of valid n+2-bit code words, as indicated at 408. For example, upon generating or otherwise determining a plurality of n+2-bit code words, an encoder may store the valid code words locally and/or at an external storage device. A decoder may receive the valid code words from the encoder and/or retrieve the valid code words from an accessible storage device. In some embodiments, the encoder may transmit a table of valid code words and/or an identifier for a storage location of the table of valid code words to the decoder responsive to determining the valid code words. In additional or alternative embodiments, the decoder may request the table of valid code words upon receiving encoded data. The encoded data may include information for locating and/or requesting the table of valid code words.

[0027] As indicated at 410, the method 400 includes correcting the n+2-bit code word based on the error correction symbol. In accordance with the Open Systems Interconnection (OSI) model, a computing device may be segmented into stacked layers that each serve an immediately higher layer and are served by an immediately lower layer. The error detection indicated at 406 and 408 may be performed at any suitable element or layer of a computing device including a decoder. For example, the error detection may be performed at a physical, or lowest, layer of infrastructure of the computing device, such that the invalid symbol is marked when received at the physical layer.

[0028] However, the error correction indicated at 410 may be performed by a higher layer than the physical layer, such as the link layer. The higher layer may utilize the error correction symbol to perform forward error correction such that the symbol may be recovered without resending the symbol. Since the symbol that includes a single-bit error is known, checksum symbols, CRC symbols, and/or XOR-based single-symbol corruption correction schemes may be utilized to correct the symbol marked as invalid or "bad". For example, in XOR-based single-symbol corruption schemes, an XOR sum of bits of the encoded data may be determined and transmitted as a parity bit. When received, the receiver may reconstruct a corrupted data symbol marked invalid or "bad" by the physical layer by: modifying the stream by replacing the corrupted data symbol with a 0 bit, calculating the new XOR parity on the modified stream, and XOR-ing the locally computed parity with the received parity. The result of the XOR operation is the recovered data symbol. Therefore, given the information in the error correction symbol and the knowledge of the "bad" symbol, the upper layer of the computing device may be able to recover the n-bit data symbols from the encoded data, as indicated at 412.

[0029] The combination of error detection at the physical layer and error correction at an upper layer enables forward error correction that reduces bandwidth usage when compared to other encoding mechanisms. For example, the decoder may correct errors utilizing one extra symbol of data and without resending data or consulting complex error correction appendices. Further, by providing more control codes than other encoding schemes, the encoding methods and systems of the present disclosure allows for more flexibility in protocol design than other encoding methods.

[0030] In some embodiments, the methods and processes described herein may be tied to a computing system of one or more computing devices. In particular, such methods and processes may be implemented as a computer-application program or service, an application-programming interface (API), a library, and/or other computer-program product.

[0031] FIG. 5 schematically shows a non-limiting embodiment of a computing system 500 that can enact one or more of the methods and processes described above. The computing system 500 is shown in simplified form. The computing system 500 may take the form of one or more mobile computing devices, head-mounted display devices, gaming consoles, mobile communication devices (e.g., smart phone), tablet computers, server computers, home-entertainment computers, network computing devices, personal computers, and/or other computing devices. For example, the computing system 500 may include or be included within the encoder 102 and/or the decoder 104 of FIG. 1.

[0032] The computing system 500 includes a logic machine 502 and a storage machine 504. The computing system 500 may optionally include a display subsystem 506, an input subsystem 508, a communication subsystem 510, and/or other components not shown in FIG. 5.

[0033] The logic machine 502 includes one or more physical devices configured to execute instructions. For example, the logic machine may be configured to execute instructions that are part of one or more applications, services, programs, routines, libraries, objects, components, data structures, or other logical constructs. Such instructions may be implemented to perform a task, implement a data type, transform the state of one or more components, achieve a technical effect, or otherwise arrive at a desired result.

[0034] The logic machine may include one or more processors configured to execute software instructions. Additionally or alternatively, the logic machine may include one or more hardware or firmware logic machines configured to execute hardware or firmware instructions. Processors of the logic machine may be single-core or multi-core, and the instructions executed thereon may be configured for sequential, parallel, and/or distributed processing. Individual components of the logic machine optionally may be distributed among two or more separate devices, which may be remotely located and/or configured for coordinated processing. Aspects of the logic machine may be virtualized and executed by remotely accessible, networked computing devices configured in a cloud-computing configuration.

[0035] The storage machine 504 includes one or more physical devices configured to store and hold instructions (e.g., computer-readable and/or machine readable instructions) executable by the logic machine to implement the methods and processes described herein. For example, the logic machine 502 may be in operative communication with a sensor interface and the storage machine 504. When such methods and processes are implemented, the state of the storage machine 504 may be transformed— e.g., to hold different data.

[0036] The storage machine 504 may include removable and/or built-in devices. The storage machine 504 may include optical memory (e.g., CD, DVD, HD-DVD, Blu-Ray Disc, etc.), semiconductor memory (e.g., RAM, EPROM, EEPROM, etc.), and/or magnetic memory (e.g., hard-disk drive, floppy-disk drive, tape drive, MRAM, etc.), among others. Storage machine 904 may include volatile, nonvolatile, dynamic, static, read/write, read-only, random-access, sequential-access, location-addressable, file- addressable, and/or content-addressable devices.

[0037] It will be appreciated that the storage machine 504 includes one or more physical devices. However, aspects of the instructions described herein alternatively may be propagated by a communication medium (e.g., an electromagnetic signal, an optical signal, etc.).

[0038] Aspects of the logic machine 502 and the storage machine 504 may be integrated together into one or more hardware-logic components. Such hardware-logic components may include field-programmable gate arrays (FPGAs), program- and application-specific integrated circuits (PASIC / ASICs), program- and application-specific standard products (PSSP / ASSPs), system-on-a-chip (SOC), and complex programmable logic devices (CPLDs), for example.

[0039] When included, the display subsystem 506 may be used to present a visual representation of data held by the storage machine 504. This visual representation may take the form of a graphical user interface (GUI). As the herein described methods and processes change the data held by the storage machine, and thus transform the state of the storage machine, the state of display subsystem 506 may likewise be transformed to visually represent changes in the underlying data. The display subsystem 506 may include one or more display devices utilizing virtually any type of technology. Such display devices may be combined with the logic machine 502 and/or the storage machine 504 in a shared enclosure, or such display devices may be peripheral display devices.

[0040] When included, the input subsystem 508 may comprise or interface with one or more user-input devices such as a touch screen, keyboard, mouse, microphone, or game controller. In some embodiments, the input subsystem may comprise or interface with selected natural user input (NUI) componentry. Such componentry may be integrated or peripheral, and the transduction and/or processing of input actions may be handled on- or off-board. Example NUI componentry may include a microphone for speech and/or voice recognition; an infrared, color, stereoscopic, and/or depth camera for machine vision and/or gesture recognition; a head tracker, eye tracker, accelerometer, and/or gyroscope for motion detection and/or intent recognition; as well as electric-field sensing componentry for assessing brain activity.

[0041] When included, the communication subsystem 510 may be configured to communicatively couple the computing system 500 with one or more other computing devices. The communication subsystem 510 may include wired and/or wireless communication devices compatible with one or more different communication protocols. As non-limiting examples, the communication subsystem may be configured for communication via a wireless telephone network, or a wired or wireless local- or wide- area network. In some embodiments, the communication subsystem may allow the computing system 500 to send and/or receive messages to and/or from other devices via a network such as the Internet. For example, the communication subsystem 510 may allow the encoder 102 of FIG. 1 to send and/or receive messages to and/or from the decoder 104. The communication subsystem 510 may similarly allow the encoder 102 and/or the decoder 104 to send, receive, and/or otherwise access the table 106 of FIG. 1. [0042] It will be understood that the configurations and/or approaches described herein are exemplary in nature, and that these specific embodiments or examples are not to be considered in a limiting sense, because numerous variations are possible. The specific routines or methods described herein may represent one or more of any number of processing strategies. As such, various acts illustrated and/or described may be performed in the sequence illustrated and/or described, in other sequences, in parallel, or omitted. Likewise, the order of the above-described processes may be changed.

[0043] The subject matter of the present disclosure includes all novel and nonobvious combinations and subcombinations of the various processes, systems and configurations, and other features, functions, acts, and/or properties disclosed herein, as well as any and all equivalents thereof.