reference herein to “ one embodiment ” or “ an embodiment ” means that a particular feature , structure , or characteristic described in connection with the embodiment can be included in at least one embodiment of the invention . the appearances of the phrase “ in one embodiment ” in various places in the specification are not necessarily all referring to the same embodiment , nor are separate or alternative embodiments necessarily mutually exclusive of other embodiments . the same applies to the term “ implementation ”. it should be understood that the steps of the exemplary methods set forth herein are not necessarily required to be performed in the order described , and the order of the steps of such methods should be understood to be merely exemplary . likewise , additional steps might be included in such methods , and certain steps might be omitted or combined , in methods consistent with various embodiments of the present invention . also for purposes of this description , the terms “ couple ”, “ coupling ”, “ coupled ”, “ connect ”, “ connecting ”, or “ connected ” refer to any manner known in the art or later developed in which energy is allowed to transfer between two or more elements , and the interposition of one or more additional elements is contemplated , although not required . conversely , the terms “ directly coupled ”, “ directly connected ”, etc ., imply the absence of such additional elements . signals and corresponding nodes or ports might be referred to by the same name and are interchangeable for purposes here . the term “ or ” should be interpreted as inclusive unless stated otherwise . further , elements in a figure having subscripted reference numbers ( e . g . 100 1 , 100 2 , . . . 100 k ) might be collectively referred to herein using the reference number 100 . the present invention will be described herein in the context of illustrative embodiments of an offset voltage calibration or compensation circuit adapted for use in a serializer / deserializer or the like . it is to be appreciated , however , that the invention is not limited to the specific apparatus and methods illustratively shown and described herein . as data rates increase for serializer / deserializer ( serdes ) applications , the channel quality degrades . decision feedback equalization ( dfe ) in conjunction with an optional finite impulse response ( fir ) filter in a transmitter ( tx ) and a receiver analog front - end equalizer within a receiver are generally used to achieve the bit error rate ( ber ) performance needed for reliable communications . it is understood that the fir function of the transmitter can be moved from the transmitter to the receiver and incorporated into the receiver &# 39 ; s analog front end . fig1 is a block diagram of an exemplary system 100 for calibrating a slicer - latch 102 . calibration in this application means compensating or canceling any offset voltage in the slicer - latch , i . e ., adjusting the slicer - latch to change state at a desired input voltage as described in more detail below . the source of the offset voltage is well known and might occur due to manufacturing variations across the chip the slicer - latch is implemented in . exemplary sources of offset in the slicer portion of the slicer - latch 102 are slight differences in input transistor sizes as formed in the chip , small current differences or temperatures in the input transistors , etc . offset voltages in a typical slicer implemented in 90 nm or smaller geometry complementary - metal - oxide - silicon ( cmos ) fabrication technology are generally less than 50 mv and are typically less than 40 mv . the slicer - latch 102 is conventional and can be implemented in a variety of circuit topologies and typically implemented in an integrated circuit . a slicer - latch is for purposes here a circuit that samples an input signal in response to a clock signal ( not shown ) and quantizes the signal to a binary “+ 1 ” or “− 1 ” based on the sampled analog input signal and a slicer threshold setting , s t . if the input to the slicer 102 at time k is y k , then the detected data bit output , â k of the slicer 102 is given as follows : in a typical application of the slicer - latch and when receiving data , the slicer - latch has a slicer threshold setting s t of zero . in other embodiments , the binary representations of the quantized signal could be reversed , the slicer threshold setting s t could be nonzero , or the output bits have values of “ 1 ” and “ 0 ”. in other embodiments , the slicer threshold setting s t is a known value or voltage , e . g ., + 200 mv . in still other embodiments , the threshold setting is a current instead of a voltage and the input signals applied to the slicer - latch might be currents instead of voltages . in the embodiment shown in fig1 , the slicer - latch 102 has multiple inputs . when used in a serial - deserializer receiver , the slicer - latch 102 receives an input signal on input 104 and feedback signals on input ( s ) 106 . input 108 is used to receive an offset cancellation signal ( voltage ) to cancel any offset voltage in the slicer - latch 102 . this offset cancellation voltage comes from a digital - to - analog converter ( dac ) 110 in response to a codeword from a processor or finite - state - machine 112 . inputs 104 and 108 can be coupled to a common voltage with a known value , e . g . 700 mv , by the processor 112 configuring switches 114 , 116 to decouple connect inputs 104 and 106 , respectively , from signals and instead couple the inputs to the common voltage . in this embodiment , inputs 104 and 106 are differential inputs each having complementary inputs ( e . g ., positive and negative inputs ) that are all coupled by switches 114 , 116 to the common voltage so that the differential voltage applied to the inputs 104 and 106 is essentially zero volts during calibration . as used herein with differential input embodiments , the threshold voltage of the slicer - latch refers to the differential signal applied to the inputs thereof to cause the output of the slicer - latch to transition . it is understood that non - differential implementations of the slicer - latch 102 can be calibrated using the techniques described herein . as is typically done in the prior art to calibrate the slicer - latch 102 , the processor 112 configures the switches 114 , 116 to force a common voltage signal on the inputs 104 and 106 . then the processor , responsive to the output 120 of the slicer - latch 102 , changes or sweeps the offset cancelation voltage from dac 110 from one voltage limit to a second voltage limit by incrementing or decrementing a codeword applied to the dac 110 until the output 120 changes or transitions state . the processor 112 then “ fixes ” or holds the voltage from the dac 110 by “ freezing ” or stopping the codeword at the level it was when the transition in the output 120 occurs . however , this technique might result in an incorrect offset voltage due to noise that might be induced into the dac 110 and on the signal on input 108 . in fig2 and in accordance with one embodiment , an exemplary process 200 for calibrating the slicer - latch 102 as executed by the processor 112 is shown . beginning with step 202 , the processor 112 configures switches 114 , 116 to couple a known voltage to the signal inputs 104 , 106 of the slicer - latch 102 . next , in step 204 , the processor generates a codeword to dac 110 so that the dac outputs a minimum offset calibration voltage and applies it to input 108 . then the processor 112 increments the codeword in step 206 and in step 208 the processor checks the output 120 of the slicer - latch 102 to determine if the output has switched state by detecting a transition ( e . g ., going from a zero to a one or vice versa ). if no transition occurred , then steps 206 and 208 are repeated until a transition is detected . once a transition is detected , then in step 210 the codeword that resulted in the transition is stored for later use . next , in step 212 , the processor generates a codeword to dac 110 so that the dac outputs a maximum offset calibration voltage and applies it to input 108 . then the codeword decrements the codeword in step 214 and in step 216 the processor checks the output 120 of the slicer - latch 102 to determine if the output has switched state by detecting a transition . if no transition occurred , then steps 214 and 216 are repeated until a transition is detected . once a transition is detected , then in step 218 the codeword that resulted in the transition detected in step 216 is averaged with the stored codeword from step 210 by adding the stored codeword to the codeword from step 216 and dividing the result by two . the averaged codeword is then applied to the dac 102 in step 220 and the input signals and feedback signals are reapplied to the slicer - latch 102 in step 222 . by determining a first codeword by increasing the offset calibration voltage and then determining a second codeword by decreasing the offset calibration voltage and averaging the codewords together address , any impact of nonlinearities in the dac ( e . g ., unequal voltage steps for each change in the codeword ), noise that might be present in the dac and slicer - latch , and non - ideal sensitivity of the slicer - latch , that might otherwise corrupt the determination of the offset calibration voltage by prior art methods is reduced . it is understood that the steps described above can be reordered . for example , steps 204 , 206 , 208 and steps 212 , 214 , 216 can be interchanged . in this way , the decrementing steps are done before the incrementing steps . the same results can be expected regardless of whether the incrementing or decrementing steps are done first or last . moreover , the steps 204 - 218 can be repeated multiple times and the codewords from each repetition averaged together before executing step 220 . operation of the above process is illustrated in fig3 and 4 . in fig3 , the dac codeword begins with all zeros , corresponding to a minimum dac output voltage , here − 60 mv . this exemplary voltage , when applied to the input 108 of the slicer - latch 102 , guarantees a one from the slicer - latch 102 . as the processor increments the codeword , the dac output , here the offset calibration voltage to input 108 of the slicer - latch 102 , increases in voltage as signified by the arrow , each increase in the dac codeword increasing the output voltage by 4 mv . as the dac output increases , the output 120 of the slicer - latch 102 changes from a one to a zero , signaling the processor 112 to stop incrementing the codeword . in this example , the transition in the output of slicer - latch 102 occurs when the dac output voltage changes from − 36 mv to − 32 mv , making the codeword 00111 ( corresponding to − 32 mv ) the offset calibration codeword for this part of the offset calibration process . next , as shown in fig4 , the dac codeword begins with all ones , corresponding to a maximum dac output voltage , here + 60 mv . like the − 60 mv discussed above , applying + 60 mv to the input 108 guarantees a zero from the slicer - latch 102 . as the processor decrements the codeword , the dac output decreases in 4 mv steps as signified by the arrow . as the dac output decreases , the output 120 of the slicer - latch 102 changes from a zero to a one , signaling the processor 112 to stop decrementing the codeword . in this example , the transition in the output of the slicer - latch 102 occurs when the dac output voltage changes from − 24 mv to − 28 mv , making the codeword 01000 ( corresponding to − 28 mv ) the offset calibration codeword for this part of the calibration process . then , the two codewords are added together and divided by two , making the offset calibration voltage − 30 mv . however , since the minimum step size is 4 mv , there is no dac codeword corresponding to − 30 mv . to address this , the averaging is done with any remainder ignored . in this example , using binary notation , the average is calculated as ( 00111 (− 32 mv )+ 01000 (− 28 mv ))/ 2 = 01000 (− 28 mv ). the starting values in steps 204 and 212 are chosen to be less than a minimum expected offset voltage and greater than a maximum expected offset voltage , respectively , ( i . e ., to exceed the expected offset voltage ) to assure that the output of the slicer - latch 102 can be set to a known value over all manufacturing , temperature , and operating voltages of the slicer - latch . in the example used here , − 60 mv and + 60 mv was chosen to these voltages exceed the expected offset voltages by the slicer - latch . it is understood that these voltages are strictly exemplary and other voltages might be used as well . use of the slicer - latches 102 as part of a receiver is illustrated in fig5 . here , a receiver 500 , typically implemented in an integrated circuit , includes a half - rate unrolled digital feedback equalizer ( dfe ) and has two branches , an even branch 502 and an odd branch 522 . each branch has an upper slicer - latch 504 , 524 and lower slicer latch 506 , 526 . these slicer - latches are substantially the same as the slicer - latch 102 in fig1 including switches 114 and 116 , although the functionality of these switches might be implemented elsewhere in the receiver 500 ( e . g ., in the input signal path 552 and in the summer , respectively ). outputs of the slicer - latches couple to corresponding multiplexer - latches 508 , 528 . outputs of the multiplexer - latches couple to inputs of corresponding set - reset latches ( sr latches ) 510 , 530 . outputs of the set - reset latches couple to inputs of corresponding serially - coupled latches 512 , 532 . weighted even - order taps from the latches 512 and weighted even - order taps from latches 532 are summed by summer 514 and the sum passed back to slicer - latches 504 , 506 . similarly , odd - order weighted taps from latches 512 and odd - order weighted taps from latches 532 are summed by summer 534 and the sum passed back to slicer - latches 524 , 526 . for each branch , which slicer - latch output is passed to a sr latch by the multiplexer - latch is determined by the output of the sr latch of the other branch . in this embodiment , the multiplexer select input s of multiplexer - latch 508 receives the output of the sr - latch 530 , and the multiplexer select input s of multiplexer - latch 528 receives the output of the sr - latch 510 . thus , selection of which slicer - latch output is passed on to the sr latch in one branch is controlled by data passing through the other branch . the latches in the receiver 500 are clocked by one of two complementary clock phases ( not shown ). generally , sequential latches in each branch are clocked with a clock phase opposite that of the adjoining latches ( i . e ., a first latch is clocked with a first phase , the next latch clocked with the phase opposite the first phase , then the next latch clocked with the first phase , etc .) and corresponding latches between the two branches are clocked with opposite phase clocks ( e . g ., sr latch 510 is clocked with a clock having the opposite phase to the clock for sr latch 530 ). one or more un - weighted taps from latches 512 , 532 are coupled to switch 540 . switch 540 , under the control of a clock ( not shown ) selects , depending on the state of the clock , data from either latches 512 or latches 532 to provide output data of the receiver . operation of the receiver 500 is known in the art and can be understood generally in “ a 78 mw 11 . 1 gb / s 5 - tap dfe receiver with digitally calibrated current - integrating summers in 65 nm cmos ” by j . f . bulzacchelli et al ., paper 21 . 6 presented at the 2009 ieee solid - state circuits conference , february 2009 , and “ a 7 . 5 gb / s 10 - tap dfe receiver with first tap partial response , spectrally gated adaptation , and 2 nd - order data - filtered cdr ” by b . s leibowitz el al ., paper 12 . 4 presented at the 2007 ieee solid - state circuits conference , february 2007 , both of which are incorporated herein by reference in their entirety . a processor 550 , in one embodiment a finite - state machine due to its simplicity , receives the outputs of the sr latches 510 , 530 , to perform a calibration process described below in connection with fig6 . the processor 550 controls dacs 516 , 518 , 536 , and 538 . outputs from the dacs are coupled to corresponding inputs of the slicer - latches 504 , 506 , 524 , and 526 , respectively , to provide an offset calibration voltage thereto , each offset calibration voltage specific to that slicer - latch . once the receiver 500 has been calibrated , the dacs maintain the offset calibration voltages at the same voltage during operation of the receiver until a new calibration is performed . the processor 550 might be used for other operations , e . g ., tap weight adaptation by the dfe . in addition to the calibration voltage and feedback from the corresponding summer as discussed above , each slicer - latch 504 , 506 , 524 , 526 receives an input signal on input 552 and a weighted signal +/− h1 . in this embodiment , h1 is a conventional tap weight generated by a dac ( not shown ) in response to the processor 550 when the processor is used for tap weight adaptation by the dfe . processor 550 also controls the slicer - latches 504 , 506 , 524 , 526 so that the inputs to the summer in each slicer - latch can be connected to a known voltage for calibration . an exemplary calibration process for the slicer - latches in the receiver 500 is shown in fig6 . the calibration process 600 employs the calibration process for individual slicer - latches shown in fig2 . generally , the slicer - latches in the even branch 502 are calibrated first , then the slicer - latches in the odd branch 522 are calibrated but it is understood that the odd branch slicer - latches can be calibrated before the even branch slicer - latches . in each branch , one ( e . g . lower ) slicer - latch is calibrated then the other ( e . g ., higher ) slicer - latch calibrated . selection of which of the slicer - latches to be calibrated in a branch is by configuring the multiplexer therein to couple the output of the slicer - latch to be calibrated to an output accessed by the processor 550 . by having the dacs coupled to slicer - latches in the other branch forcing the outputs of those slicer - latches to have the same known logic state , the configuration of the multiplexer is determined by the codeword applied to the dacs and thus under control of the processor 550 without adding additional logic circuitry to the receiver 500 to configure the multiplexer - latches . beginning with step 602 , the received data signal is removed and an input signal having a known voltage , e . g ., a common voltage is applied to the receiver 500 . next , in step 604 , the dacs 536 , 538 are forced by the processor 550 to output a calibration voltage to the slicer - latches 524 , 526 so that both slicer - latches output a zero ( e . g ., by applying the codeword = 11111 to dacs 536 , 538 ). this configures the multiplexer in multiplexer - latch 508 to receive the output of the slicer - latch 506 . next , in step 606 , the calibration routine 200 is executed to calibrate the lower slicer - latch 506 . then in step 608 the dacs 536 , 538 are forced by the processor 550 to output a calibration voltage to the slicer - latches 524 , 526 so that both slicer - latches output a one ( i . e ., by applying the codeword = 00000 to dacs 536 , 538 ). this configures the multiplexer in 508 to receive the output of slicer - latch 504 so that in step 610 , when the calibration routine 200 is executed , the upper slicer - latch 504 is calibrated . the result is the slicer - latches in the even branch 502 are now calibrated . calibration of the slicer - latches in the odd branch 522 is similar to that described above for the even branch 502 . however , before beginning the calibration of the odd branch 522 , in step 612 the codewords for dacs 516 and 518 as determined in steps 606 and 610 are temporarily stored until needed in step 622 . beginning with step 614 , the dacs 516 , 518 are forced by the processor 550 to output a calibration voltage to the slicer - latches 504 , 506 so that the slicer - latches output a zero ( e . g ., by applying the codeword = 11111 to dacs 516 , 518 ). this configures the multiplexer in multiplexer - latch 528 to receive the output of the slicer - latch 526 . next , in step 616 , the calibration routine 200 is executed to calibrate the lower slicer - latch 526 . then in step 618 the dacs 516 , 518 are forced by the processor 550 to output a calibration voltage to the slicer - latches 504 , 506 so that the slicer - latches output a one ( i . e ., by applying the codeword = 00000 to dacs 516 , 518 ). this configures the multiplexer in 528 to receive the output of slicer - latch 524 so that in step 620 , when the calibration routine 200 is executed , the upper slicer - latch 524 is calibrated . the result is the slicer - latches in the odd branch 522 are now calibrated . in step 622 , the stored codewords for dacs 516 and 518 are retrieved and applied to the corresponding dacs , completing the calibration of receiver 500 , and the received data signal is applied to the receiver 500 . it is understood that not all the steps or portions of the steps in the calibration routine 200 needs to be executed in each of the steps 606 , 610 , 616 , and 620 . for example , step 222 in fig2 might be skipped when additional multiple slicer - latches are to be calibrated or other steps , e . g . step 622 , performs this step at least in part . while embodiments have been described with respect to circuit functions , the embodiments of the present invention are not so limited . possible implementations , either as a stand - alone serdes or as a serdes embedded with other circuit functions , may be embodied in or part of a single integrated circuit , a multi - chip module , a single card , system - on - a - chip , or a multi - card circuit pack , etc . but are not limited thereto . as would be apparent to one skilled in the art , the various embodiments might also be implemented as part of a larger system . such embodiments might be employed in conjunction with , for example , a digital signal processor , microcontroller , field - programmable gate array , application - specific integrated circuit , or general - purpose computer . it is understood that embodiments of the invention are not limited to the described embodiments , and that various other embodiments within the scope of the following claims will be apparent to those skilled in the art . it is understood that various changes in the details , materials , and arrangements of the parts which have been described and illustrated in order to explain the nature of this invention may be made by those skilled in the art without departing from the scope of the invention as expressed in the following claims .