Patent Publication Number: US-5633636-A

Title: Half-gray digital encoding method and circuitry

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to parallel analog-to-digital converters (ADCs) and more particularly to digital encoding techniques for reducing the output errors of an ADC. 
     2. Description of the Related Art 
     The objective of ADC circuits is to receive an analog signal and produce an error free digitized version of that analog signal. A well known ADC circuit is the parallel or flash ADC, which receives an analog signal to be digitized at an input node and compares its voltage to a set of reference voltages. For n bits of resolution in the ADC&#39;s digital output, a known voltage is applied to a ladder of 2 n  series resistors to provide reference voltages at the nodes between the resistors. Comparators, typically implemented with high gain amplifiers, receive respective reference voltages at one input and the analog input signal at another input to produce either a low output (binary 0) if the comparator&#39;s reference voltage is greater than the analog input, or a high output (binary 1) if the analog input is higher than the comparator&#39;s reference voltage. Ideally, the resulting digital comparator outputs, referred to as a thermometer code, are a series of binary 0s for comparators which receive reference voltages greater than the analog input signal, and a series of binary is for comparators which receive a reference voltage less than the analog input signal. The transition from binary 0s to 1s indicates the amplitude of the analog input signal. 
     To generate a digital output, the thermometer code is first applied to a 1-of-(2 n  -1) decoder that generates a 2 n  line output code with only one active output line, which corresponds to the binary 0-to-1 transition in the thermometer code. The decoder&#39;s active output selects and enables a single address in a 1-of-2 n  -to-Binary encoder that has a set of encoded n-bit standard Binary codes for each address. The n-bit standard Binary code and the corresponding address are matched. For example, if n=4 the first address, AO, has a binary code 0000, the second address, A1, has a binary code 0001, and so on to the sixteenth address, A15, having a binary code 1111. The encoder address selected provides the standard Binary code output of the ADC which corresponds to the strength of the analog input signal. The encoder is typically implemented using read only memory (ROM). 
     A common problem with the parallel ADC is that, when it is operated at high analog input slew rates, irregular comparator outputs may be produced due to timing skews between adjacent comparators, the analog input signal and the comparators&#39; strobe signal. Comparator output irregularities result in more than one binary 0-to-1 transition in the thermometer code. This in turn causes more than one decoder output to be activated, which in turn causes multiple encoder addresses to be selected. The encoder output is typically the logical OR or the logical AND of these addresses, producing an ADC output that is an inaccurate digitized version of the input. 
     Several digital encoding methods exist which reduce the errors resulting from the conversion of the thermometer code to an n-bit Binary ADC output. The encoding methods operate by passing the decoder output through an encoder which has a set of error reducing n-bit codes at each input address that compensate for the possibility of receiving multiple binary 0-to-1 transition points from the comparators. The error reducing encoder output is then decoded to a standard Binary code which is the ADC&#39;s error reduced output. 
     One well known error reducing encoding method is the Gray code, which provides only a one bit change in the encoder codes of adjacent addresses. For example, adjacent addresses A2 and A3 have corresponding codes of 0011 and 0010, respectively. As another example, adjacent addresses A7 and A8 have corresponding codes of 0100 and 1100, respectively. The logical OR of any two Gray codes from adjacent addresses is thus always equal to one of the codes, resulting in an error in the Grey code decoder output of at most one in 2 n  parts (this is assuming that the error occurs at adjacent encoder input addresses). The n-bit Gray code encoder output is then converted into an n-bit standard Binary code through a decoder circuit to produce the ADC output. A problem with the Gray-to-Binary decoder circuit is that it takes several gate delays to convert the Gray code encoder output to standard Binary form, significantly slowing down the ADC&#39;s throughput rate. Also, the Gray code has limited error reduction capacity for errors that are not at adjacent encoder addresses. 
     Another encoding technique is the Quasi-Gray code, which is disclosed in Japanese Patent Application No. S60-171023, Kamoto et. al., Aug. 5, 1985. The Quasi-Gray code improves on the throughput rate of the Gray code by converting its encoder output to standard Binary code in only a single gate delay. The error reducing performance of the Quasi-Gray code, however, is limited for multiple binary 0-to-1 transition points separated by two or more encoder addresses. The modified Quasi-Gray digital encoding technique, disclosed in U.S. Pat. No. 4,975,698 to Kagey, Dec. 4, 1990, improves on the error correction performance of the Quasi-Gray code for simultaneous transition points separated by two or more encoder addresses. The modified Quasi-Gray code is the same as the Quasi-Gray code in all but the least significant bit position, which alternates in the same manner as the standard Binary code. 
     SUMMARY OF THE INVENTION 
     The present invention is a novel parallel ADC digital encoding circuit which reduces ADC output errors as compared to existing systems. 
     This is accomplished by converting the 1-of-(2 n  -1) decoder output, which has 2 n  binary lines with one active line representing the amplitude of the ADC&#39;s analog input signal, into a novel n-bit &#34;Half-Gray&#34; code. The Half-Gray code is provided by a 1-of-2-to-&#34;Half-Gray &#34; code encoder, which has 2 n  addresses, with each address having an associated n-bit &#34;Half-Gray&#34; word. The n-bit &#34;Half-Gray&#34; word for each encoder address is characterized by the following algorithm: 
     
         HG(i)=B(i) for i=N and i=N/2 
    
     
         HG(i)=B(i)XOR B(i+1) for (N/2)&lt;i&lt;N and 0&lt;i&lt;(N/2) 
    
     For this algorithm, HG is the n-bit &#34;Half-Gray&#34; word output of the 1-of-2 n  -to-Half-Gray code encoder and B is the standard Binary word. N is the total number of bits in the &#34;Half-Gray&#34; word and can be any even integer greater than 2 (i.e. 4, 6, 8 . . . ). i is an individual bit and XOR is the exclusive-OR logic function. 
     The Half-Gray words compensate for errors in the decoded thermometer code. The encoder combines the Half-Gray words at each of its decoder activated addresses to produce a single n-bit Half-Gray output. This is performed by combining the respective bits at each encoder address by the logic OR function, or the logic AND function. A Half-Gray-to-Binary decoder converts the n-bit Half-Gray word encoder output into an n-bit standard Binary word, which is the output of the ADC. The following algorithm characterizes the conversion of a Half-Gray word to standard Binary code: 
     
         B(i)=HG(i) for i=N and i=N/2 
    
     
         B(i)=HG(i) XOR B(i+1) for (N/2)&lt;i&lt;N and 0&lt;i&lt;(N/2) 
    
     For this algorithm, B is the n-bit standard Binary Half-Gray-to-Binary decoder output, HG is an n-bit Half-Gray word and i is an individual bit. N is the total number of bits in the Half-Gray-to-Binary decoder output and can be any even integer greater than 2 (i.e. 4, 6, 8 . . . ). XOR is a symbol for the exclusive-OR logic function. B is calculated from the highest bit to the lowest bit, so that the binary value of B(i+1) is established before calculating B(i). 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1a is a schematic diagram of an ADC in accordance with the present invention, and FIGS. 1b and 1c are schematic diagrams of Wired-OR and Wired-AND Half-Gray ROM encoders, respectively. 
     FIG. 2a presents the upper portions of Table A, which is a 6-bit standard Binary code, and Table B, which is a 6-bit Half-Gray code, while FIG. 2b presents the lower portions of Tables A and B. 
     FIG. 3 is a schematic diagram of a Half-Gray-to-binary decoder circuit. 
     FIGS. 4a, 4b and 4c are three tables of different possible types of thermometer code errors. 
     FIG. 5 is a table of simulated test results, showing the maximum ADC output errors for different error reducing encoding methods, including the present invention. FIG. 6 is a table of the mean values for the errors provided in the table of FIG. 5. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     Referring first to FIG. 1a, a parallel ADC 2 of the present invention receives an analog input voltage Vin and compares it simultaneously to a series of reference voltages to produce an n-bit digital output Dout which corresponds to Vin. For the purposes of this invention, n is an even integer greater than 2; as n is increased, the resolution of Dout is increased. A reference voltage Vref is applied to a ladder of 2 n  resistors, R1-R(2 n ), that are connected in series to produce (2 n  -1) reference voltages at the nodes between the resistors. Each reference voltage is applied to the non-inverting input terminal of a respective comparator from an array of (2 n  -1) comparators, C1-C(2 n  -1). Vin is applied to the inverting terminal of the comparators for comparing Vin to each comparator&#39;s respective reference voltage. For example, the reference voltage at the node between R(2 n ) and R(2 n  -1) is applied to C(2 n  -1)&#39;s non-inverting input and Vin is applied to C(2 n  -1)&#39;s inverting input. Each comparator, typically implemented with a high gain amplifier, compares its reference voltage to Vin and provides a high voltage output (binary 1) if its reference voltage is lower than Vin, or a low voltage output (binary 0) if its reference voltage is higher than Vin. The comparator outputs from C1 to C(2 n  -1) are referred to as a thermometer code and ideally include a series of binary 0&#39;s for bits above the input voltage and a series of binary 1&#39;s for bits below the input voltage. 
     An example of a thermometer code is provided in FIG. 1a, with binary 0 outputs for C(2 n  -1), C(2 n  -2) and C(2 n  -3), followed by binary 1 outputs for C(2 n  -4) down to C1. This indicates that Vin is less than the node voltage between R(2 n  -2) and R(2 n  -3), but greater than the node voltage between R(2 n  -3) and R(2 n  -4). If n is increased, the number of resistors R1 to R(2 n ) also increases, providing smaller voltage increments between the reference voltages received by the comparators C1-C(2 n  -1). This increases the resolution of Dout. 
     The outputs of the comparators are provided to a 1-of-(2 n  -1) decoder 4, which produces a single active output line corresponding to the position of the binary 0-to-1 transition in the thermometer code. The decoder 4 in FIG. 1a is implemented using 2 n  three input AND gates, D0-D (2 n  -1). D(2 n  -1) receives outputs from C(2 n  -1), C(2 n  -2) and C(2 n  -3) to provide a binary 1 output only if all of its inputs are binary 1. This corresponds to the situation where Vin is greater than the voltage at the node between R(2 n ) and R(2 n  -1). AND gates D(2 n  -2) down to D2 receive three consecutive comparator outputs starting with C(2 n  -1) for D(2 n  -2). Each successive one of these AND gates after D(2 n  -2) receives comparator outputs that start from one comparator output level lower than the highest comparator output level received by its prior AND gate. Thus, if D(2 n  -2) receives outputs from C(2 n  -1), C(2 n  -2) and C(2 n  -3), then D(2 n  -3) receives outputs from C(2 n  -2), C(2 n  -3) and C(2 n  -4), and so on, with D(2) receiving outputs from C3, C2 and C1. D(2 n  -2) to D2 each have an inverter at their highest level input so that a binary 011 thermometer code input will produce a binary 1 output, indicating the binary 0-to-1 transition of the thermometer code has occurred between their two highest level inputs. As an example, the inputs to D(2 n  -2) are the inverted output of C(2 n  -1) and the non-inverted outputs of C(2 n  -2) and C(2 n  -3), which result in a binary 101 input to D(2 n  -2) when the input analog signal is between R(2 n  -1)/R(2 n  -2) and R(2 n  -2)/R(2 n  -3) levels. D(2 n  -2)&#39;s output is thus binary 0. The inputs to D(2 n  -4) on the other hand, are the inverted output of C(2 n  -3) and the non-inverted outputs of C(2 n  -4) and C(2 n  -5), which result in a binary 111 input to D(2 n  -4) for the same analog input voltage; this produces a binary 1 output for D(2 n  -4). D(2 n  -4), thus corresponds to the binary 0-to-1 transition point for the thermometer code. 
     AND gate D1 receives the inverted outputs of C3 and C2 and the non-inverted output of C1 to produce a binary 1 output when the outputs of the last three comparators are binary 001. All of the inputs to AND gate D0, from C3, C2 and C1 are inverted to produce a binary 1 output when the outputs of the last three comparators are binary 000. 
     Although D0-D(2 n  -1) are implemented using three input AND gates, two input or four input AND gates could also be used. 
     FIG. 1a shows the ideal decoder 4 output which includes only one active line (indicated by a binary 1). In practice, however, when the ADC 2 is operated at high analog input slew rates, irregular comparator outputs may be produced due to timing skews between adjacent comparators, Vin and the comparators&#39; strobe signal. Irregular comparator outputs result in more than one binary 0-to-1 transition in the thermometer code. This in turn causes more than one decoder 4 output to be activated, which results in an errant Dout. 
     The circuitry of the ADC 2 described up to this point, which includes resistors R1-R(2 n ), comparators C1-C(2 n  -1) and the circuitry of the decoder 4, is conventional. The novel aspect of the present invention lies in the circuitry designed to limit the potential errors in Dout due to decoder 4 output errors. This circuitry includes a 1-of-(2 n ) to-&#34;Half-Gray&#34; code encoder 6 that converts the decoder 4 outputs D0-D(2 n  -1), received at addresses A0-A(2 n  -1), respectively, into an n-bit Half-Gray word, HG(1) to HG(n). A &#34;Half-Gray&#34;-to-Binary decoder 8 receives lines HG(1) to HG(n) and converts them to an n-bit standard Binary output, B(1) to B(n), which is Dout. 
     The Half-Gray encoder 6 has 2 n  address inputs, A0-A(2 n  -1), each of which has a corresponding encoded n-bit Half-Gray word. An active decoder 4 output line activates the encoder address input to which it is connected. The encoder 6 in turn provides the encoded &#34;Half-Gray&#34; word at its activated address as an n-bit output, HG(n)-HG(1). The encoder 6 is implemented using Read Only Memory (ROM) technology, with A0-A(2 n  -1) being the ROM address inputs and HG(n)-HG(1) being the ROM data outputs. 
     If more than one decoder 4 output is active as in the case of a thermometer code error, then the encoded Half-Gray words at the encoder&#39;s activated addresses are combined by their corresponding bits to form a single n-bit Half-Gray word encoder 6 output, HG(n)-HG(1). This is performed according to either the OR function or the AND function. 
     FIG. 1b shows a portion of the circuitry for a 6-bit Wired-OR ROM Half-Gray encoder 6, which combines multiple activated addresses by the OR function. The circuitry includes 6-bit input addresses A5-A8, which are encoded with Half-Gray codes, and the encoder outputs HG(6)-HG(1). The complete circuitry for a 6-bit ROM encoder has 64 addresses, A0-A63. In FIG. 1b, for each address bit that is encoded with a binary 1, a MOSFET transistor is connected by its gate terminal to the address input line, by its source to a power supply and by its drain to the encoder output for that bit. With this connection, an active input (binary 1) to a MOSFET&#39;s gate terminal will turn the MOSFET on, providing its source voltage to its drain. This sends a high voltage (binary 1) to the encoder output bit connected to that drain. There is no connection for a bit that is encoded a binary 0. Although the encoder of FIG. 1b is implemented with MOSFET transistors, bipolar transistors could also be used. 
     To illustrate the operation of the Wired-OR ROM encoder of FIG. 1b, address line A5 is shown encoded with Half-Grey code 000111 for output bits HG(6)-HG(1) (In FIG. 1b, the binary value for each bit is indicated on the address line in parenthesis). This is performed by connecting MOSFET Q1 by its gate to decoder output line D5 (which feeds into A5), by its source to power supply Vcc and by its drain to output line HG(3). MOSFETs Q2 and Q3 are similarly connected, except that their drains are connected to output lines HG(2) and HG(1), respectively. In operation, if D5/A5 is active, as indicated by a binary 1 next to D5/-A5, then the gates of Q1, Q2 and Q3 receive a high voltage line. This turns Q1, Q2 and Q3 on which provide their source voltages to their drains, producing high voltage signals (binary 1s) at output bits HG(3), HG(2) and HG(1), respectively. There are no connections between D5/A5 and HG(6), HG(5), and HG(4) since they are encoded binary 0; thus, these output bits receive a binary 0. As another example, address line A8 is encoded with Half-Gray code 001000 for HG(6)-HG(1) by connecting MOSFET Q4&#39;s gate to decoder output line D8/encoder input address A5, by its source to power supply Vcc and by its drain to output line HG(4). There are no connections between D8 and HG(6), HG(5), HG(3), HG(2) and HG(1) since they are encoded binary 0. Through similar connections for MOSFETs Q5, Q6 and Q7, addresses A6 and A7 are encoded with binary 000101 and 000-100, respectively. 
     If more than one decoder output is activated, which may occur due to a thermometer code error, then multiple addresses will be activated. The encoder of FIG. 1b combines the corresponding output bits of these addresses by the OR function. Thus, a single binary 1 address output bit will override any binary 0 produced by another address at that output bit to provide a combined output of binary 1. For example, if address lines A5 and A7 are activated as indicated by binary 1&#39;s at D5 and D7, then A5 will send a binary 1 to addresses HG(3)-HG(1) and A7 will send a binary 1 to HG(3). At output bits HG(6)-HG(4), both addresses have no connections and thus provide a binary 0. At output bits HG(3)-HG(1), at least one of the two addresses provides a binary 1, resulting in a binary 1 at HG(3)HG (1). 
     FIG. 1c shows a portion of the circuitry for a 6-bit Wired-AND ROM Half-Gray encoder 6, which combines multiple activated addresses by the function. The circuitry includes 6-bit input addresses A5-A8 encoded with Half-Gray codes, and the encoder outputs HG(6)-HG(1). The complete circuitry for a 6-bit ROM encoder has 64 addresses, A0-A63. In FIG. 1c, for each address bit that is encoded with a binary 0, a MOSFET transistors is connected by its gate terminal to the decoder output line, by its drain to ground and by its source to the encoder output for that bit. With this connection, an active input (binary 1) to a MOSFET&#39;s gate terminal will turn the MOSFET on, grounding its source to its drain. This in turn grounds the encoder output bit connected to that source terminal, resulting in a binary 0 at that output bit. An address bit that is encoded with binary 1 is directly connected to its corresponding output bit to send an active (binary 1) address input to the output bit. 
     To illustrate the Wired-AND ROM&#39;s operation, address line A5 is encoded with Half-Gray code 000111 for HG(6)HG(1) by connecting MOSFET Q8 by its gate to decoder output line D5, by its drain to ground and by its source to output line HG(6). MOSFETs Q9 and Q10 are similarly connected, except that their sources are connected to output lines HG(5) and HG(4), respectively. In operation, if D5 is active the gates of Q8, Q9 and Q10 receive a high voltage line. This turns Q8, Q9 and Q10 on, which then act like switches, grounding their sources. This provides a binary 0 to HG(6), HG(5) and HG(4). HG(3), HG(2), and HG(1) receive the binary 1 from D5 directly. Through similar connections for MOSFETs Q11-Q24, addresses A6, A7 and A8 are encoded with binary 000101, 000100 and 001000, respectively. 
     If more than one decoder output is activated due to a thermometer code error, then multiple activated addresses are combined according to the AND function. This is achieved because a MOSFET that produces binary 0 at an address bit grounds any binary 1 produced by another address at the same bit. A binary 1 output bit will result only if all of the activated addresses produce a binary 1 at that bit. To illustrate, if address lines A5 and A7 are activated, as indicated by a binary 1 at D5 and D7, then both Q8 and Q15 ground HG(6), producing a binary 0 at HG(6). Similarly, Q9 and Q16 ground HG(5) and Q10 and Q17 ground HG(4), producing a binary 0 at those output bits. Since A5 and A7 are directly connected to HG(3), a binary 1 is produced at HG(3). Q18 grounds HG(2) while A5 provides a binary 1 at HG(2). This binary 1 is grounded by Q18, producing a binary 0 at HG(2). Similarly, Q19 grounds HG(1), producing a binary 0 at HG(1). The resulting output HG(6)HG(1) is binary 000100, which is the AND combination of the corresponding bits of A5 and A7. 
     FIGS. 2a and 2b compare a standard Binary code in Table A with the corresponding &#34;Half-Gray&#34; code in Table B, for the example of a 6-bit word. Table A includes address lines A&#39;0-A&#39;63 increasing vertically upward from A&#39;0 to A&#39;63. Horizontally across each address is a 6-bit standard Binary code, B(6)-B(1), associated with that address. B(6) is the most significant bit (MSB) and B(1) is the least significant bit (LSB). Table B shows address lines A0-A63 for a 6-bit Half-Gray encoder increasing vertically upward from A0 to A63. Horizontally across each address is the 6-bit encoded Half-Gray word, HG(6)-HG(1), associated with each address. 
     Art algorithm for creating an n-bit Half-Gray word from an n-bit standard Binary word in accordance with the present invention is provided below. 
     
         HG(i)=B(i) for i=N and i=N/2 
    
     
         HG(i)=B(i) XOR B(i+1) for (N/2)&lt;i&lt;N and 0&lt;i&lt;(N/2) 
    
     For this algorithm, HG is the n-bit &#34;Half-Gray&#34; word output of the 1-of-2 n  -to-Half-Gray code encoder and B is the standard Binary word. N is the total number of bits in the &#34;Half-Gray&#34; word and can be any even integer greater than 2 (i.e. 4, 6, 8 . . . ). i is an individual bit and is an integer. XOR is the exclusive-OR logic function. 
     To establish HG for a particular address, the corresponding address in the standard Binary code is accessed and applied to the above equations. For example, if the Half-Gray word for the address A30 is to be established, the address A&#39;30 is accessed; this has the standard Binary code 011110 from B6 to B1. Since N=6 in this case, for i equal to 6 and 3, HG(i)=B(i). For 3&lt;i&lt;6 (i=4 and i=5) and for 0&lt;i&lt;3 (i=1 and i=2), HG(i)=B(i) XOR B(i+1). Accordingly, HG(6)=B(6)=0; HG(5)=B(5) XOR B(6)=1 XOR 0=1; HG(4)=B(4) XOR B(5)=1 XOR 1=0; HG(3)=B(3)=1; HG(2)=B(2) XOR B(3)=1 XOR 1=0; and HG(1)=B(1) XOR B(2)=0 XOR 1=1. The Half-Gray word, HG(6)-HG(1), for address A30 is thus 010101 as indicated in Table B. 
     The Half-Gray-to-Binary decoder 8 converts the n-bit Half-Gray code produced by the encoder 6 into an n-bit standard Binary code which is the ADC&#39;s digital output, B(1)-B(n). The following algorithm characterizes the conversion from &#34;Half-Gray&#34; to standard Binary. 
     
         B(i)=HG(i) for i=N and i=N/2 
    
     
         B(i)=HG(i) XOR B(i+1) for (N/2)&lt;i&lt;N and 0&lt;i&lt;(N/2) 
    
     For this algorithm, B is the n-bit Half-Gray-to-Binary decoder output and HG is the n-bit Half-Gray word produced by the encoder 6. N is the total number of bits in the Half-Gray-to-Binary decoder output and can be any even integer greater than 2 (i.e. 4, 6, 8 . . . ). i is an individual bit and is an integer. XOR is a symbol for the exclusive-OR logic function. B is calculated from the highest bit to the lowest bit, so that the binary value of B(i+1) is established before calculating B(i). 
     To calculate B, HG is applied to the above equations. For example, if N=6, the encoder 6 produces 010101 from HG(6)-HG(1) when address A30 is accessed by the decoder. Since N=6 in this case, for i equal to 6 and 3, B(i)=HG(i). For 3&lt;i&lt;6 (i=4 and i=5) and for 0&lt;i&lt;3 (i=1 and i=2), B(i)=HG(i) XOR B(i+1). Applying HG(6)-HG(1) of A30 to the above equations, B(6) is first established by B(6)=HG(6)=0; B(5) is then established by B(5)=HG(5) XOR B(6)=1 XOR 0=1. It can be seen that to determine B(5), it is necessary to first calculate B(6). B(4) is then calculated by B(4)=HG(4) XOR B(5)=0 XOR 1=1. It is necessary to determine the bit higher than B(4), which is B(5), before calculating B(4). B(3) is independently established by B(3)=HG(3)=1; B(2) and B(1) are calculated in a manner similar to calculating B(5) and B(4). Thus, B(2)=HG(2) XOR B(3)=0 XOR 1=1, and B(1)=HG(1) XOR B(2)=1 XOR 1=0. B(6)-B(1) is therefore binary 011110. 
     FIG. 3 is a schematic diagram of preferred digital circuitry for the Half-Gray-to-Binary decoder 8. The decoder 8 receives inputs HG(6)-HG(1) and produces outputs B(6)-B(1) according to the decoder 8 algorithm described above. The circuitry includes a first buffer 10 which receives HG(6) and provides an output of B(6) equal to HG(6). A two input first XOR gate 12 receives HG(6) at one of its inputs and HG(5) at its other input to produce B(5). A two input second XOR gate 14 receives the first XOR gate output B(5) at one of its inputs and HG(4) at its other input to produce B(4). A second buffer 16 receives HG(3) and has an output B(3) equal to HG(3). HG(3) is provided as one input to a third two input XOR gate 18 which receives HG(2) at its other input to produce B(2). A fourth two input XOR gate 20 receives HG(1) at one of its inputs and B(2) at its other input to produce B(1). 
     FIGS. 4a, 4b and 4c illustrate the possible errors that can occur in the thermometer code. FIGS. 5 and 6, on the other hand, respectively provide simulated test results of the maximum and the mean ADC output errors for different error reducing encoding methods, including the Half-Gray code of the present invention. 
     Referring to Table 1 of FIG. 4a, the ideal thermometer code includes a series of binary 0 comparator outputs followed by an uninterrupted series of binary 1 comparator outputs. The depth refers to the position of the comparator outputs relative to one another, with the comparator output at depth +6 being at a greater digital value immediately above the comparator output at depth +5, which in turn is at a greater digital value immediately above the comparator output at depth +4, and so on. Relating this to the comparators shown in FIG. 1a, comparator C(2 n  -1)&#39;s output is above comparator C(2 n  -2)&#39;s output, which is above comparator C(2 n  -3)&#39;s output. The transition point from binary 0 to binary 1 in the ideal thermometer code is designated depth 0. 
     Columns A-G of Table 1 provide examples of single position errors that can occur in the thermometer code. The error is indicated by a binary 0 among the series of binary is of the thermometer code. For example, errors in the thermometer code occur at depth +1 under column A and at depth 0 under column B. Columns H-L provide examples of multiple single position errors that can occur in the thermometer code. A multiple single position error means that more than one binary 0 is found in the series of binary is of the thermometer code, but each binary 0 is by itself. For example, under column H, two binary 0 errors occur in the thermometer code at depths +1 and -1, while under column I, two binary 0 errors occur at depth 0 and -2. 
     Referring to FIG. 4a, examples of two-position errors are shown under columns A-G of Table 2 , with two successive binary 0 comparator outputs occurring in the series of binary 1 comparator outputs. For example, under column A, binary 0 errors occur at depths +2 and +1 while under column B, binary 0 errors occur at depths +1 and 0. Referring to FIG. 4c, table 3 shows examples of three-position errors under columns A-H, where three successive binary 0 comparator outputs occur in the string of binary 1 comparator outputs. For example, under column A, binary 0 errors occur at depths +3,+2 and +1 while under column B, binary 0 errors occur at depths +2, +1 and 0. 
     Table 4 in FIG. 5 provides the maximum 6-bit ADC output errors for different error reducing encoding methods, including the Half-Gray code of the present invention with a Wired-OR ROM encoder. The vertical axis of Table 4 indicates the type of errors that can occur in the thermometer code as described in reference to Tables 1-3 of FIGS. 4a, 4b and 4c. Table 4&#39;s horizontal axis, on the other hand, indicates the type of error reducing encoding method that was tested for each thermometer code error. Binary code, Gray code, Quasi-Gray code and Half-Gray encoding methods were tested. The two columns under each code refer to the type of AND function used to decode the thermometer code with 3i and 4i indicating three input and four input AND gates, respectively. The number under each column is the maximum ADC output error, given in number of addresses, in response to an error in the thermometer code. For example, if there is a single position error at depth -1 in the thermometer code of an ADC with a Binary encoder and a decoder having three input AND gates, the ADC output is at a maximum 30 addresses in error from the correct output. Referring to table A of FIGS. 2a and 2b, a 30 address error means that if the expected ADC output is A&#39;30 with the binary code 011110, an errant output of A&#39;60 with the binary code of 111100 is provided for Dout. As another example, if there is a two position thermometer code error at depths -4 and -3 for a three input AND gate Quasi-Gray code encoding method, then the maximum position error is 12 addresses. The corresponding maximum position error for the three input AND gate Half-Gray ADC is 8 addresses. 
     Table 5 in FIG. 6 is similar to Table 4, but shows the mean rather than the maximum number of addresses in the ADC output error when there is an error in the thermometer code. For all thermometer code errors tested, the Half-Gray code ADC has either an equal or a lower mean output error than the other ADC&#39;s tested. 
     While particular embodiments of the invention have been shown and described, numerous alternate embodiments will occur to those skilled in the art. Accordingly, it is intended that the invention be limited only in terms of the appended claims.