The present disclosure relates to systems and methods for generating a digital clock signal according to a timing loop, and more particularly to injecting a digital frequency offset into the timing loop.
The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent the work is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
A digital clock signal (e.g., a digital clock signal used for timing functions, such as recovering timing of a read channel, in a hard disk drive) may be generated by interpolating an output of a voltage controlled oscillator (VCO) according to a digital phase adjustment provided by a timing loop. The digital clock signal may be required to operate within a range between a minimum clock rate (clockmin) and a maximum clock rate (clockmax). In other words, the digital clock signal may be required to be adjustable between clockmin and clockmax.
Typically, the VCO operates at a fixed frequency (i.e., the output of the VCO may have a fixed frequency fVCO), and/or changing the frequency of the output of the VCO may be difficult. Further, changing the frequency of the output of the VCO may introduce a transient in the output frequency. This transient is not appropriate for some applications, e.g., when a quick or even instantaneous frequency update is needed, or during ongoing read or write operations. Accordingly, a frequency offset Δf may be incorporated by the timing loop to change the rate of the digital clock signal without changing the frequency of VCO output.
The timing loop 104 (which corresponds to, for example only, a second order timing loop) receives a timing error e corresponding to a difference between a desired signal value and an actual signal value (e.g., of a signal corresponding to the digital clock signal generated by the interpolator 116). The timing error e includes each of phase error information and frequency error information associated with the digital clock signal. The timing loop 104 includes a frequency loop portion 120 and a phase loop portion 124.
The frequency loop portion 120 receives the timing error “e” as modified by a coefficient β, which is selected to convert the timing error e into a corresponding frequency error. For example, multiplier 128 multiplies the timing error e by the coefficient β. A frequency accumulator 132 generates a frequency offset Δf based on the frequency error, which is fed back to be summed with the frequency error by summer 136.
The phase loop portion 124 receives the timing error e as modified by a coefficient α, which is selected to convert the timing error e into a corresponding phase error. For example, multiplier 140 multiplies the timing error e by the coefficient α to generate phase error, which is summed with the frequency offset Δf at summer 144. A phase accumulator 148 generates an accumulated phase φ based on an output of summer 152, which sums the output of the summer 144, the output of the phase accumulator 148, and a zero phase start (ZPS) phase jump φZPS. The phase φ is provided to the interpolator 116 to adjust the phase of the digital clock signal. For example only, for a clock period T of the digital clock signal, increasing the phase φ may delay the digital clock signal (e.g., by up to 1 T). The achievable range for the frequency of the digital clock signal may correspond to [fVCO*(1+Δfmin), fVCO*(1+Δfmax)], where Δfmin and Δfmax correspond to a minimum frequency offset and a maximum frequency offset, respectively. Accordingly, the values Δfmin and Δfmax determine the ability of the timing loop to operate between the required minimum clock rate clockmin and maximum clock rate clockmax.
A (Zero Phase Start) ZPS module 156 generates the ZPS phase jump φZPS. For example, the ZPS module 156 generates the ZPS phase jump φZPS based on an evaluation of phase information of an underlying sinusoidal waveform. For example, one period of the sinusoidal waveform (e.g., corresponding to a read signal read from a storage medium of the HDD) includes four desired sampling points corresponding to a 0, a positive peak, a 0, and a negative peak. The ZPS module 156 performs the ZPS to cause the sampling phase to coincide with the desired sampling points of the sinusoidal waveform. For example, the ZPS module 156 may calculate a total phase jump value ψ, which may have a range of, for example only, [−1, 0] or [0, 1] (i.e., a total of 1 T). The total phase jump value ψ may be divided into N steps (i.e., N different phase jumps φZPS), where the sum of the N phase jumps equals the total phase jump value ψ (i.e., ψ=ΣφZPS). In other words, the ZPS module 156 outputs N phase jumps of φZPS to the summer 152 over N consecutive clock cycles to provide the total phase jump value ψ. Accordingly, if ψ is within the range of [0, 1] and N=4, then the range of each individual one of the N jumps φZPS may be in [0, ¼].
A system for providing an accumulated phase to an interpolator of a read channel, the interpolator configured to provide a digital clock signal, includes a frequency accumulator configured to generate a frequency offset based on a difference between the digital clock signal and a desired clock signal. A zero phase start module is configured to, during a zero phase start, output an incremental phase jump. A phase accumulator is configured to generate the accumulated phase based on the difference between the digital clock signal and the desired clock signal, and, during the zero phase start, the incremental phase jump output by the zero phase start module, or the frequency offset generated by the frequency accumulator or a predetermined frequency offset.
A method for providing an accumulated phase to an interpolator of a read channel, the interpolator configured to provide a digital clock signal, includes generating a frequency offset based on a difference between the digital clock signal and a desired clock signal, and, during a zero phase start, outputting an incremental phase jump. The method further includes generating the accumulated phase based on the difference between the digital clock signal and the desired clock signal, and, during the zero phase start, the incremental phase jump, the generated frequency offset, or a predetermined frequency offset.
Further areas of applicability of the present disclosure will become apparent from the detailed description, the claims and the drawings. The detailed description and specific examples are intended for purposes of illustration only and are not intended to limit the scope of the disclosure.
In the drawings, reference numbers may be reused to identify similar and/or identical elements.
In a system implementing a timing loop to recover timing of a read channel, a total phase jump Ω may be injected over N clocks cycles according to the equation φ(t)=φ(t−1)+Δφ(t), where a phase change rate Δφ(t)=Δf(t)+α*e(t)+φZPS(t), and where φZPS(t) corresponds to the ZPS phase jump. Prior to ZPS, e(t)=0 and φZPS(t)=0, so Δf(t)=Δf(t). During ZPS e(t)=0, so Δφ(t)=Δf(t)+φZPS(t). Subsequent to the zero phase start being completed, φZPS(t)=0, so Δφ(t)=Δf(t)+α*e(t). The α*e(t) term corresponds to a timing loop adaptation contribution. If a phase change rate Δφ(t) exceeds a certain range, operational glitches in an analog portion of the system may occur. For example, typically it is desirable for Δφ(t) to be within [Δφmin, Δφmax]. Therefore, a working range of Δf is limited according to the constraints on Δφ(t).
During a zero phase start, in an example where Δφmin=− 1/16 and Δφmax= 5/16, φZPS(t) may be required to be within a range defined by 0<=φZPS(t)<=¼. Accordingly, a working range for a frequency offset Δf is defined by a minimum frequency offset Δfmin, corresponding to Δfmin=Δφmin−φZPS(t), or − 1/16−¼(i.e., − 5/16), and a maximum frequency offset Δfmax, corresponding to Δfmax=Δφmax−φZPS(t), or 5/16−¼(i.e., 1/16).
Subsequent to the zero phase start, in the example where Δφmin=− 1/16 and Δφmax= 5/16, α*e(t) may be required to be within a range defined by − 1/64=α*e(t)<= 1/64 (corresponding to a minimum α*e(t), or min(α*e(t)), of − 1/64 and a maximum α*e(t), or max(α*e(t)), of 1/64). Accordingly, the working range for the frequency offset Δf is defined by the minimum frequency offset Δfmin, corresponding to Δfmin=Δφmin−min(α*e(t)), or − 1/16−(− 1/64) (i.e., − 3/64), and a maximum frequency offset Δfmax, corresponding to Δfmax=Δφmax−max(α*e(t)), or 5/16− 1/64 (i.e., 19/64).
The minimum and maximum frequency offsets must meet the range requirements for each of the ranges during the zero phase start (i.e., 0− 1/16, 1/16) and subsequent to the zero phase start (i.e., − 3/64, 19/64). Accordingly, the minimum and maximum frequency offsets Δfmin and Δfmax are constrained by (− 3/64, 1/16).
Systems and methods according to embodiments of the present disclosure increase the working range of the frequency offset Δf. For example, a total desired phase increase Ω during N phase jumps (i.e., N incremental jumps over N clock cycles) of the ZPS corresponds to Ω=N*Δf+ψ, where Δf is constant during the N phase jumps. The N phase jumps (i.e., increments) during the ZPS correspond to Δf+φZPS, 0, where φZPS, 0 corresponds to a first ZPS phase jump value, Δf+φZPS, 1, . . . , and Δf+φZPS, N-1. However, instead of attempting to increase the phase by the total desired phase increase Ω during ZPS, the phase increase Ω may be reduced by an integer number (e.g., correspond to a number of clock cycles) to Ω′ (e.g., from 1.6 to 0.6).
For example, if N=4, φZPS is within [0, ¼], ψ is within [0, 1], Δφmin=− 1/16, and Δφmax= 5/16, Ω′=Ω−k, where k=an integer part of Ω (e.g., if the total phase jump Ω is 1.6, then k=1, and Ω′=0.6). Further, the integer k can be used to adjust a system framing (i.e., perform reframing) associated with the timing loop (e.g., expected peaks or 0s of a sampled sinusoidal waveform). Accordingly, an adjusted incremental phase jump φ′ZPS can be calculated such that Σφ′ZPS=Ω′. In other words, if N=4 and Ω′=0.6, then φ′ZPS=0.6/4, or 0.15, and therefore is within a range defined by [0, ¼]. In this manner, the adjusted incremental phase jump φ′ZPS is applied to the timing loop over N clock cycles of the ZPS to achieve a total phase jump of 0.6 without exceeding the range [0, ¼] for each φ′ZPS. Further, during the ZPS, the timing loop is modified such that the frequency offset Δf is not accumulated into the phase offset.
The timing loop 204 (which corresponds to, for example only, a second order timing loop) receives a timing error e corresponding to a difference between a desired signal value and an actual signal value (e.g., of a signal corresponding to the digital clock signal generated by the interpolator 216). The timing error e includes each of phase error information and frequency error information associated with the digital clock signal. The timing loop 204 includes a frequency loop portion 220 and a phase loop portion 224.
The frequency loop portion 220 receives the timing error e as modified by a coefficient β, which is selected to convert the timing error e into a corresponding frequency error. For example, multiplier 228 multiplies the timing error e by the coefficient β. A frequency accumulator 232 generates a frequency offset Δf based on the frequency error, which is fed back to be summed with the frequency error by summer 236. In some embodiments, the frequency offset Δf may be provided (e.g., programmed or predetermined) by a user.
A multiplexer 240 receives the output of the frequency accumulator 232 and a “0” input, and a ZPS selection signal zps_jump. The ZPS selection signal selects between the output of the frequency accumulator 232 and the 0. For example, when the ZPS selection signal is 0, indicating that a ZPS phase jump is not being performed, the multiplexer 240 passes the output of the frequency accumulator 232 (i.e., the frequency offset Δf). Conversely, when the ZPS selection signal is 0, indicating that a ZPS phase jump is being performed, the multiplexer 240 passes the 0. Accordingly, during ZPS (i.e., during ZPS phase jumps), the multiplexer 240 outputs a 0 and the frequency offset Δf as output by the multiplexer 240 is excluded from being accumulated into the phase information provided to the interpolator 216. Instead, the frequency offset Δf is incorporated into an adjusted incremental phase jump φ′ZPS.
The phase loop portion 224 receives the timing error e as modified by a coefficient α, which is selected to convert the timing error e into a corresponding phase error. For example, multiplier 244 multiplies the timing error e by the coefficient α to generate phase error, which is summed with the output of the multiplexer 240 (i.e., 0 during the ZPS and the frequency offset Δf after the ZPS is complete) at summer 248. A phase accumulator 252 generates an accumulated phase φ based on an output of summer 256, which sums the output of the summer 248, the output of the phase accumulator 252, and the adjusted incremental ZPS phase jump φ′ZPS. The phase φ is provided to the interpolator 216 to adjust the phase of the digital clock signal.
A ZPS module 260 generates the adjusted incremental ZPS phase jump φ′ZPS according to an embodiment of the present disclosure. For example, the ZPS module 260 calculates and outputs the adjusted incremental ZPS phase jump φ′ZPS as described above over N clock cycles, where Σφ′ZPS over N clock cycles corresponds to Ω′, where Ω′=Ω−k, where Ω=N*Δf+ψ, and k is the integer part of Ω. For example only, the ZPS module 260 may also generate the ZPS selection signal zps_jump.
Accordingly, using the example values provided above, the working range for Δf now corresponds to the minimum frequency offset and the maximum frequency offset subsequent to the ZPS, and the constraints on the working range for Δf during ZPS are excluded. In other words, the only constraints on the working range of Δf are the minimum frequency offset Δfmin corresponding to Δfmin=Δφmin−min(α*e(t)), or − 1/16−(− 1/64) (i.e., − 3/64), and the maximum frequency offset Δfmax corresponding to Δfmax=Δφmax−max(α*e(t)), or 5/16− 1/64 (i.e., 19/64), resulting in an increase from 1/16 to 19/64 for the maximum frequency offset.
The output frequency fVCO of the VCO may be selected to further maximize a frequency range [Δfmin, Δfmax]. Accordingly, fVCO is selected based on a middle point of Δfmin Δφmin and Δfmax Δφmax (e.g., using arithmetic averaging, geometric averaging, etc.), and fVCO may be set such that a biasing digital frequency component equal to approximately (Δφmin+Δφmax)/2 is applied to achieve the desired fVCO.
For example only, an example desired range [clockmin, clockmax] of the digital clock signal corresponds to [900 MHz, 1100 MHz], where Δfmin=Δφmin−min(α*e(t)), or − 1/16−(− 1/64) (i.e., − 3/64), and Δfmax=Δφmax−max(α*e(t)), or 5/16− 1/64 (i.e., 19/64). Accordingly, the arithmetic middle point of Δfmin and Δfmax corresponds to (− 3/64+¼)/2= 13/128, and the arithmetic middle point of [clockmin, clockmax] corresponds to (900+1100)/2=1000 MHz. The output frequency fVCO then corresponds to fVCO=sqrt(clockmin*clockmax)/(1+(Δfmin+Δfmax)/2), or 1000/(1+ 13/128)=907.8 MHz. As such, the frequency offset Δf for the clockmin of 900 MHz corresponds to −0.0086, the Δf for the middle point clock of 907.8 MHz corresponds to 0, and the Δf for the clockmax of 1100 MHz corresponds to 0.2117.
Accordingly, the supported digital clock frequency range with an α*e range of [− 1/64, 1/64]=[fVCO*Δfmin, fVCO*Δfmax], or [865.2 MHz, 1134.8 MHz]. Alternatively, within a clock range of [900 MHz, 1100 MHz], the range of α*e can be increased from [− 1/64, 1/64] to [−0.0539, 0.0539].
At 312, the method 300 excludes the frequency offset Δf provided by the frequency accumulator 232 from phase accumulation (e.g., by selecting a “0” to be output from a multiplexer instead of the frequency offset Δf). At 320, the method 300 calculates a desired total phase increase Ω to be applied over N steps (e.g., clock cycles). For example only, Ω=N*Δf+ψ. At 324, the method 300 reduces the desired total phase increase Ω by an integer number (e.g., by 1, 2, 3, etc.) to Ω′. At 328, the method 300 calculates an adjusted incremental phase jump φ′ZPS, where ΣΦ′zps=Ω′. At 332, the method 300 performs the adjusted incremental phase jump φ′ZPS. At 336, the method 300 determines whether N of the adjusted incremental phase jumps φ′ZPS have been performed. If true, the method 300 continues to 316. If false, the method 300 continues to 332. At 316, the method 300 incorporates the frequency offset Δf provided by the frequency accumulator 232 into phase accumulation (e.g., by selecting the frequency offset Δf to be output from the multiplexer instead of the “0”). The method ends at 340.
In some implementations, the frequency of the digital clock signal output by the interpolator 216 can be adjusted by injecting an additional frequency offset. Accordingly, the accumulated phase φ output by the phase accumulator 252 to shift the phase of the digital clock signal may need to be adjusted to compensate for the additional frequency offset injected into the digital clock signal.
For example, if a 1% phase shift is injected into the digital clock signal with every clock cycle, the resulting digital clock signal will effectively have a 1% frequency offset. For a digital clock signal having a period of TVCO, the interpolator 216 is configured to shift rising edges or falling edges of the digital clock signal by 1% to cause a 1% frequency offset (e.g., a 1% higher (or lower) frequency, corresponding to a 1% shorter (or longer) adjusted period TINT). Accordingly, for a 1% shift, TINT=0.99TVCO. The interpolator 216 can shift the digital clock signal either forward or backward.
The ZPS module 260 therefore may provide a phase jump that incorporates both the ZPS phase jump as described above in
For example, the period TVCO corresponds to M time increments (ticks). For example only, M is 128, and one tick corresponds to 1/128*TVCO. For an example total phase jump ψ (e.g., 0.2 T, 0.4 T, etc.), ψ is converted to a corresponding number of the total number of M ticks (i.e., 124 out of the 128 ticks). If the interpolator 216 injects a frequency offset Δf (e.g., corresponding to 4 ticks), the interpolator period TINT corresponds to 128+4, or 132, ticks (or 128−4, or 124, ticks, depending on whether the frequency offset is positive or negative). Accordingly, the total phase jump performed by the ZPS module 260 is first modified by a correction factor (1−Δf) according to ψ*(1−Δf), where Δf corresponds to the desired frequency offset (which can be positive or negative) to be injected by the interpolator 216. For example only, the modified total phase jump is represented as ψ′. If Δf is 0, then the total phase jump ψ′ merely corresponds to ψ. Conversely, if Δf is 1% and TVCO=128 ticks, then ψ′=ψ*(1−1%). In this manner, the phase jump ψ′ provided by the ZPS module 260, which corresponds to a clock domain of the interpolator 216, is converted, using the correction factor, to a clock domain of fVCO. In other words, if TVCO corresponds to 128 ticks, then TINT corresponds to 128*(1−Δf) ticks, and the total phase jump ψ is calculated with reference to 128*(1−Δf) ticks per period TINT.
In an example implementation, the interpolator 216 may be limited to performing a maximum phase jump, per clock cycle, in the range of [−6, 16] in a forward jump mode (i.e., 6 ticks out of 128 in a reverse direction and 16 ticks out of 128 in a forward direction). Conversely, in a reverse jump mode, the interpolator 216 may be limited to performing a phase jump in the range of [−6, 6] (i.e., 16 ticks out of 128 in the reverse direction and 6 ticks out of 128 in the forward direction). For example, whether the interpolator 216 set in the forward jump mode or the reverse jump mode may depend on the desired output frequency (e.g., if the desired output frequency is above a threshold, such as 1.1 GHz, the interpolator 216 is set in the forward jump mode, and if the desired output frequency is less than or equal to the threshold, the interpolator 216 is set in the reverse jump mode).
Accordingly, if a total desired phase jump (e.g., a relatively large phase jump during the ZPS that corresponds to greater than 16 ticks in the forward direction) is greater than a phase jump able to be performed by the interpolator 216 in a single clock cycle, the total desired phase jump (represented by a number of ticks) including the ZPS phase jump can be performed over multiple (e.g., 4-8) clock cycles. For example, if the ZPS phase jump corresponds to a phase jump of 0.875 T (112 ticks) and the frequency offset to be injected corresponds to a phase jump of 4 ticks, then the total desired phase jump is 116 ticks. The ZPS module 260 according to the principles of the present disclosure is configured to distribute the relatively large phase jump during the ZPS over multiple (e.g., 4-8) clock cycles, where one cycle corresponds to 1 T.
The total desired ZPS phase jump ψ is calculated and converted using the correction factor to ψ′ according to ψ*(1−Δf) as described above. The total phase jump ψ′ is further adjusted according to ψ′+N*Δf, where N is the number of clock cycles used to perform the total phase jump. For example, if N is 8, then the total actual phase jump to be performed over the 8 cycles is ψ′+N*Δf.
Assuming a frequency offset Δf corresponding to 4 ticks, where TVCO is 128 ticks, TINT corresponds to 128+4, or 132 ticks. The 4 ticks corresponding to the frequency offset are well within the range [−6, 16] of the interpolator 216, and can merely be performed every 1T cycle. However, accounting for the total phase jump ψ provided by the ZPS module 260 results in Ω=ψ*(1−Δf)+N*Δf). If Ω is less than or equal to 128 and N is, for example, 8, then interpolator 216 can simply perform the phase shift Ω over the 8 clock cycles since 128/8 is 16. In other words, the interpolator 216 is able to perform a phase shift of up to 16 ticks in the forward direction for 8 cycles, resulting in a maximum phase shift over 8 cycles of 128, and thereafter perform the phase shift of 4 ticks per cycle to achieve the frequency offset f of 4. For example, if Ω corresponds to 128 ticks, then the interpolator 216 can perform, over the 8 cycles, phase jumps of 16, 16, 16, 16, 16, 16, 16, and 16 ticks. However, if Ω corresponds to 40 ticks, then the interpolator 216 can perform, over the 8 cycles, phase jumps of 16, 16, 8, 0, 0, 0, 0, and 0 ticks, and then thereafter only perform the phase shift corresponding to the frequency offset.
If Ω′ is greater than 128 and less than 132 and N is, for example, 8, then the ZPS module 260 can simply reframe the sampling timing to remove 1T (i.e., 128 132 ticks) from Ω. For example, if Ω is 130, after reframing Ω becomes −2 ticks (i.e., 130−132=−2), and the interpolator 216 may perform a phase shift of 2 ticks in the reverse direction, which together corresponds to a phase shift of 130 ticks in the forward direction.
If Ω is greater than 132, then the ZPS module 260 can reframe the sampling timing to remove kT (i.e., 132, 264, etc. ticks) from Ω and output incremental phase jumps according to the remaining Ω. For example, if Ω is 168 ticks, the ZPS module 260 removes 132 ticks to reduce Ω to 36 ticks, and then outputs phase jumps of 16, 16, 4, 0, etc.
At 428, the method 400 performs a portion of the total phase jump θ′ corresponding to one clock cycle (e.g., 16 or fewer ticks). At 432, the method 400 determines whether any additional amount of the modified total phase jump θ′ needs to be performed. If true, the method 400 continues to 432. If false, the method 400 ends at 436.
The foregoing description is merely illustrative in nature and is in no way intended to limit the disclosure, its application, or uses. The broad teachings of the disclosure can be implemented in a variety of forms. Therefore, while this disclosure includes particular examples, the true scope of the disclosure should not be so limited since other modifications will become apparent upon a study of the drawings, the specification, and the following claims. As used herein, the phrase at least one of A, B, and C should be construed to mean a logical (A OR B OR C), using a non-exclusive logical OR, and should not be construed to mean “at least one of A, at least one of B, and at least one of C.” It should be understood that one or more steps within a method may be executed in different order (or concurrently) without altering the principles of the present disclosure.
In this application, including the definitions below, the term ‘module’ or the term ‘controller’ may be replaced with the term ‘circuit.’ The term ‘module’ may refer to, be part of, or include: an Application Specific Integrated Circuit (ASIC); a digital, analog, or mixed analog/digital discrete circuit; a digital, analog, or mixed analog/digital integrated circuit; a combinational logic circuit; a field programmable gate array (FPGA); a processor circuit (shared, dedicated, or group) that executes code; a memory circuit (shared, dedicated, or group) that stores code executed by the processor circuit; other suitable hardware components that provide the described functionality; or a combination of some or all of the above, such as in a system-on-chip.
The module may include one or more interface circuits. In some examples, the interface circuits may include wired or wireless interfaces that are connected to a local area network (LAN), the Internet, a wide area network (WAN), or combinations thereof. The functionality of any given module of the present disclosure may be distributed among multiple modules that are connected via interface circuits. For example, multiple modules may allow load balancing. In a further example, a server (also known as remote, or cloud) module may accomplish some functionality on behalf of a client module.
The term code, as used above, may include software, firmware, and/or microcode, and may refer to programs, routines, functions, classes, data structures, and/or objects. The term shared processor circuit encompasses a single processor circuit that executes some or all code from multiple modules. The term group processor circuit encompasses a processor circuit that, in combination with additional processor circuits, executes some or all code from one or more modules. References to multiple processor circuits encompass multiple processor circuits on discrete dies, multiple processor circuits on a single die, multiple cores of a single processor circuit, multiple threads of a single processor circuit, or a combination of the above. The term shared memory circuit encompasses a single memory circuit that stores some or all code from multiple modules. The term group memory circuit encompasses a memory circuit that, in combination with additional memories, stores some or all code from one or more modules.
The term memory circuit is a subset of the term computer-readable medium. The term computer-readable medium, as used herein, does not encompass transitory electrical or electromagnetic signals propagating through a medium (such as on a carrier wave); the term computer-readable medium may therefore be considered tangible and non-transitory. Non-limiting examples of a non-transitory, tangible computer-readable medium include nonvolatile memory circuits (such as a flash memory circuit or a mask read-only memory circuit), volatile memory circuits (such as a static random access memory circuit and a dynamic random access memory circuit), and secondary storage, such as magnetic storage (such as magnetic tape or hard disk drive) and optical storage.
The apparatuses and methods described in this application may be partially or fully implemented by a special purpose computer created by configuring a general purpose computer to execute one or more particular functions embodied in computer programs. The computer programs include processor-executable instructions that are stored on at least one non-transitory, tangible computer-readable medium. The computer programs may also include or rely on stored data. The computer programs may include a basic input/output system (BIOS) that interacts with hardware of the special purpose computer, device drivers that interact with particular devices of the special purpose computer, one or more operating systems, user applications, background services and applications, etc.
The computer programs may include: (i) assembly code; (ii) object code generated from source code by a compiler; (iii) source code for execution by an interpreter; (iv) source code for compilation and execution by a just-in-time compiler, (v) descriptive text for parsing, such as HTML (hypertext markup language) or XML (extensible markup language), etc. As examples only, source code may be written in C, C++, C#, Objective-C, Haskell, Go, SQL, Lisp, Java®, ASP, Perl, Javascript®, HTML5, Ada, ASP (active server pages), Perl, Scala, Erlang, Ruby, Flash®, Visual Basic®, Lua, or Python®.
None of the elements recited in the claims is intended to be a means-plus-function element within the meaning of 35 U.S.C. §112(f) unless an element is expressly recited using the phrase “means for”, or in the case of a method claim using the phrases “operation for” or “step for”.
This application claims the benefit of U.S. Provisional Application No. 61/844,358, filed on Jul. 9, 2013 and U.S. Provisional Application No. 61/936,748, filed on Feb. 6, 2014. The entire disclosures of the applications referenced above are incorporated herein by reference.
Number | Name | Date | Kind |
---|---|---|---|
6009549 | Bliss et al. | Dec 1999 | A |
6307900 | Choi | Oct 2001 | B1 |
6900676 | Tamura | May 2005 | B1 |
20030076903 | Ashley et al. | Apr 2003 | A1 |
20030137765 | Yamazaki et al. | Jul 2003 | A1 |
Number | Date | Country | |
---|---|---|---|
61844358 | Jul 2013 | US | |
61936748 | Feb 2014 | US |