USRE36388E - Sine/cosine generator and method - Google Patents

Sine/cosine generator and method Download PDF

Info

Publication number
USRE36388E
USRE36388E US08/400,811 US40081195A USRE36388E US RE36388 E USRE36388 E US RE36388E US 40081195 A US40081195 A US 40081195A US RE36388 E USRE36388 E US RE36388E
Authority
US
United States
Prior art keywords
fine
angles
sin
coarse
cos
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
US08/400,811
Inventor
James G. Fox
William R. Young
David B. Chester
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harris Corp
Original Assignee
Harris Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harris Corp filed Critical Harris Corp
Priority to US08/400,811 priority Critical patent/USRE36388E/en
Assigned to INTERSIL CORPORATION reassignment INTERSIL CORPORATION AMEND TO ADD PROPERTIES RECORDED ON REEL 10247, FRAME 0043. Assignors: HARRIS CORPORATION
Assigned to CREDIT SUISSE FIRST BOSTON, AS COLLATERAL AGENT reassignment CREDIT SUISSE FIRST BOSTON, AS COLLATERAL AGENT SECURITY INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: INTERSIL CORPORATION
Application granted granted Critical
Publication of USRE36388E publication Critical patent/USRE36388E/en
Assigned to MORGAN STANLEY & CO. INCORPORATED reassignment MORGAN STANLEY & CO. INCORPORATED SECURITY AGREEMENT Assignors: D2AUDIO CORPORATION, ELANTEC SEMICONDUCTOR, INC., INTERSIL AMERICAS INC., INTERSIL COMMUNICATIONS, INC., INTERSIL CORPORATION, KENET, INC., PLANET ATE, INC., QUELLAN, INC., TECHWELL, INC., ZILKER LABS, INC.
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
    • G06F7/5338Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm each bitgroup having two new bits, e.g. 2nd order MBA
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • G06F1/035Reduction of table size
    • G06F1/0353Reduction of table size by using symmetrical properties of the function, e.g. using most significant bits for quadrant control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • G06F1/035Reduction of table size
    • G06F1/0356Reduction of table size by using two or more smaller tables, e.g. addressed by parts of the argument
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/04Trigonometric functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49994Sign extension

Definitions

  • the present invention relates to electronic devices, and, more particularly, to semiconductor circuits and methods useful in frequency conversion of digital data streams.
  • Communications systems such as broadcast radio use frequency division multiplexing (FDM) to simulaneously transmit differing information signals from several sources in a single locale.
  • FDM frequency division multiplexing
  • each source modulates its carrier frequency with its information signal and keeps within its allocated frequency band.
  • Extraction of a desired information signal from a received broadband of simultaneous broadcasts may be performed by mixing down (by the selected carrier frequency) followed by lowpass filtering and demodulation as schematically illustrated by system 100 in FIG. 1.
  • system 100 receives radio frequency signals (e.g., a broadband of 100-200 MHz) at antenna 102, filters and mixes the signals down to intermediate frequencies (e.g., 1-10 MHz) with a wideband analog tuner 104, converts from analog to digital format with sampling analog-to-digital converter 106, extracts the selected frequency band (e.g., a band of width 15 KHz) with digital down converter 108, and demodulates and reconstructs an analog information signal with demodulator/processor 110.
  • radio frequency signals e.g., a broadband of 100-200 MHz
  • intermediate frequencies e.g., 1-10 MHz
  • digital tuner 104 converts from analog to digital format with sampling analog-to-digital converter 106, extracts the selected frequency band (e.g., a band of width 15 KHz) with digital down converter 108, and demodulates and reconstructs an analog information signal with demodulator/processor 110.
  • analog-to-digital converter 106 will sample at 20 MHz or more (at least the Nyquist rate), and digital down converter 108 will output the selected band at a sampling rate of 30 KHz. That is, digital down converter 108 may decrease the sampling rate due to the small bandwidth of its output without loss of information.
  • Digital down converter 108 functionally contains blocks as shown FIG. 2.
  • the phase generator 202, sin/cos generator 204, and multipliers 205-206 mix down the broadband input data stream by the selected band center frequency, and then the lowpass quadrature filter 208 eliminates all bands except the selected band.
  • the problems of construction of system 100 include realizing digital down converter 108 operating at a high sampling frequency while maintaining a low ripple sharp cutoff filter which has programmable down conversion frequency and programmable bandwidth.
  • Known realizations of a down conversion function include the combination of a numerically controlled oscillator/modulator (NCOM) such as the HSP45016 manufactured by Harris Corporation together with two decimating digital filters (one for the in-phase and one for the quadrature outputs of the NCOM) such as the HSP43220 also manufactured by Harris Corporation.
  • NCOM numerically controlled oscillator/modulator
  • a single chip realization such as the GC1011 digital receiver chip manufactured by Graychip, Inc.
  • Crochiere and Rabiner, Multirate Digital Signal Processing provides general information regarding signal processing using sampling rate changes and quadrature modulation.
  • the sin/cos generator in FIG. 2 takes an input phase (angle) and outputs the sine and cosine of that input angle.
  • the angle can be restricted to the first quadrant (0 to ⁇ /2) because the sine and the cosine of angles in the other quadrants can be expressed in terms of sines and cosines in the first quadrant.
  • a sin/cos generator could be realized in various ways, for example, as a direct computation of the sine and cosine from a Taylor's series or as a lookup table retrieving stored sine and cosine values from a memory with the input angle determining the memory address for retrieval.
  • the memory retrieval approach would use read-only memory (ROM) storage of sine and cosine values for all angles in the first quadrant.
  • ROM read-only memory
  • the present invention provides a sin/cos generator with reduced ROM storage due to symmetric storage including symmetry about ⁇ /4 for the coarse angle and in some embodiments symmetry about 0 for the fine angle.
  • Storing the cosine of the fine angle in the encoded form requires only 1 or 2 bits plus one additional partial product in the output calculation. This removes the restriction on the fine angle to be such that the rounded value of the cosine of the fine angle be 1 or the use of the approximation that cosine of the fine angle is 1 and allows a more optimized total ROM size.
  • the size of the coarse ROM can be reduced and the fine ROM size increased for a total ROM size reduction.
  • FIG. 1 illustrates an application of a digital down converter
  • FIG. 2 show functional blocks of a digital down converter including a sin/cos generator
  • FIG. 3 illustrates first preferred embodiment sin/cos generator in block form
  • FIG. 4 shows first preferred embodiment coarse angle intervals
  • FIG. 5 shows first preferred embodiment fine angles
  • FIG. 6 is a functional block daigram of the first preferred embodiment
  • FIG. 7 shows a multiplexer-exclusive NOR cell of the first preferred embodiment
  • FIG. 8 illustrates second preferred embodiment sin/cos generator in block form
  • FIG. 9 shows a Wallace tree
  • FIG. 10 shows a sign extension word logic
  • the preferred embodiments provide sin/cos generators using input angle decomposition into a coarse angle A plus a fine angle B together with ROM lookup tables for sin(A), cos(A), sin(B), and cos(B). However, the preferred embodiments compress the sin(A) and cos(A) ROMs by exploiting the complementary symmetry of the sine and cosine in the 0
  • FIG. 3 illustrates in schematic functional block form first preferred embodiment sin/cos generator, generally denoted by reference numeral 300.
  • Sin/cos generator 300 uses both the coarse angle complementary reduced ROM and a symmetric about 0 fine angle reduced ROM.
  • sin/cos generator 300 includes coarse angle ROM 310, fine angle ROM 330, and sum of angles hardware 350, plus input terminal sets 381-383 for the phase word bits encoding the input angle and output terminals 391-392 for the sine and cosine of the input angle.
  • Coarse angle ROM 310 includes coarse sine ROM 311, coarse cosine ROM 312, multiplexers 315-316 for exchanging the sin(A) and cos(A) outputs of ROMs 311-312, coarse sine register 321, coarse cosine register 322, pass/one's complementer 324 for the coarse input phase, and XOR gate 326 for quadrant information input.
  • Coarse sine ROM 311 and coarse cosine ROM 312 could physically be a single double-word-wide ROM.
  • Fine angle ROM 330 includes fine sine ROM 331, fine cosine ROM 332, multiplexers 335-336 for sin(B) output selection related to the multiplier-recoded format storage in ROM 331, fine sine register 341, fine cosine register 342, pass/two's complementer 344 for the fine input phase, and XOR gates 345-346 for quadrant information input.
  • Sum of angles hardware includes coarse cosine sign register 351, coarse sine sign register 352, a multiplier-adder for computing sin(A)cos(B)+cos(A)sin(B) made of multiplexer-exclusive NOR array 355 plus Wallace tree 361 and final adder 363, and a multiplier-adder for computing cos(A)cos(B)-sin(A)sin(B) made of multiplexer-exclusive NOR array 356 plus Wallace tree 362 and final adder 364.
  • Sin/cos generator 300 uses a symmetrical fine angle and an offset coarse angle, as will be explained in the discussion of the ROM storage.
  • An input phase word partitions into two quadrant bits QUADRANT LSB and MSB at inputs 381, coarse angle bits COARSE LSB . . . MSB at input 382, and fine angle bits FINE ANGLE LSB . . . MSB at input 383.
  • an LSB increment of 1 in the phase word corresponds to an input angle increment of 2 ⁇ /2 N , and overflow in the phase word matches 2 ⁇ periodicity in the encoded angle.
  • 18-bit phase words could be partitioned into two quadrant bits (encoding which of the four quadrants contains the input angle), eight coarse bits encoding the coarse angle, and eight fine bits encoding the fine angle. This provides input angle increments of 2 ⁇ /2 18 or about 0.00137 degrees.
  • the operation of sin/cos generator 300 will be analyzed after the storage method for the ROMs has been detailed.
  • the example of 8-bit coarse phase and 8-bit fine phase will be used for purposes of explanation of the sine and cosine ROM storage of the first preferred embodiment.
  • the precision of the stored values will be 18 or 19 bits for the coarse angles and 17 or 18 bits for the fine angles; the extra bit of coarse angle precision relates to a scale factor for avoidance of saturation when the values are in two's complement format.
  • the leading bits of the fine sine values will be primarily 0s (or 1s if negative and in two's complement format) and the fine cosine values will all be close to 1.
  • other precisions for the sine and cosine values may be used without change except as to storage size.
  • the first quadrant 0 to ⁇ /2 is divided into 2 8 "coarse" intervals of equal length ⁇ /2 9 .
  • the coarse intervals are [0, ⁇ /2 9 ], [ ⁇ /2 9 , 2 ⁇ /2 9 , [2 ⁇ /2 9 , 3 ⁇ /2 9 , . . . , [(2 8 -2) ⁇ /2 9 , (2 8 -1) ⁇ /2 9 ], and [(2 8 -1) ⁇ /2 9 , ⁇ /2] as illustrated in FIG. 4.
  • Each 8-bit coarse phase determines one of these coarse intervals. Now if the coarse interval left endpoints (0, ⁇ /2 9 , 2 ⁇ /2 9 , 3 ⁇ /2 9 . . .
  • FIG. 4 shows these coarse angles as pointed to by arrows. Note that this choice of coarse angles excludes both 0 and ⁇ /4 and ⁇ /2. As illustrated by the connecting arrows in FIG. 4, these coarse angles are complementary in that
  • the 8-bit coarse phase encodes a coarse angle as follows:
  • the 8-bit coarse phase encoding the angle ⁇ /2-A is simply the one's complement of the 8-bit coarse phase encoding A.
  • the coarse ROMs 311-312 need only be one half the size of ROMs which store the sines and cosines for an entire quadrant of coarse angles.
  • These seven bits are addresses for sine ROM 311 and cosine ROM 312 which output to multiplexers 315-316 driven by the MSB through XOR gate 326 (to account for quadrant encoding which leads to further complementing). Note that all of the stored sines and cosines are positive numbers because 0 is not a coarse angle.
  • the coarse angles need not be the centers of the coarse intervals, but could be shifted within the intervals provided the shift for an angle less than ⁇ /4 is the complement of the shift of its complementary angle.
  • Such noncentered coarse angles lead to more involved fine angle encoding because the required fine angle range would not be the same for all coarse intervals.
  • Each coarse interval (which has length ⁇ /2 9 ) is divided into 2 8 "fine" subintervals of equal length ⁇ /2 17 .
  • FIG. 5 illustrates the fine angles in a coarse interval.
  • the 8-bit fine phase encodes the fine angles as follows.
  • cosine ROM 332 only has a few values, depending upon the precision in cos(B) needed.
  • sin/cos generator 300 outputs 17-bit two's complement values, thus only the equivalent of 18 signed bits need be stored in the ROMs 331 and 332, and thus only one bit is needed to encode D in the symmetric fine angle case if the values are restricted to 0 and 2 -17 .
  • Input 18-bit phase words encode angles in the range 0 to 2 ⁇ , including 0 and excluding 2 ⁇ .
  • a phase word is partitioned as follows: the two most significant bits encode the quadrant of the encoded angle, the next 8 bits encode a coarse angle A in the first quadrant, and the least significant 8 bits encode a small fine angle B.
  • Each increment by 1 in the LSB of the phase word increments the encoded angle by 2 ⁇ /2 18 .
  • the first quadrant is the range 0 to ⁇ /2, including 0 and excluding ⁇ /2; similarly the second quadrant is the range ⁇ /2 to ⁇ , including ⁇ /2 and excluding ⁇ ; and so forth.
  • QUADRANT MSB and QUADRANT LSB at terminals 381 in FIG. 3 encode the quadrant and the sines and cosines are as follows.
  • the MSB determines the sign of sine and directly feeds sine sign register 352.
  • the XOR of the MSB and the LSB determines the sign of cosine, and XOR gate 358 supplies it to cosine sign register 351.
  • These registers directly feed the multiplier-adders (multiplexers plus Wallace tree plus final adder). Further, when the LSB equals 1, the sine and cosine are interchanged.
  • FIG. 6 shows the overall relations, including the coarse angle switching (multiplexers 601) of sine and cosine which goes with the half-quadrant-only storage 603 of sines and cosines.
  • FIG. 3 uses a multiplier with recoded sin(B) and cos(B) values in ROM 611 to reduce the number of partial products in the multiplications plus Wallace trees for adding the partial products.
  • sin/cos generator 300 can be most easily explained by the following tables which show the net effect of the two quadrant bits, the coarse phase MSB and the fine phase MSB on the computation of the output sine and the computation of the output cosine.
  • the 18-bit input phase word determines the angle A+B+q ⁇ /2 where q is the binary number made of the two quadrant bits, A is the coarse angle (positive), and B is the fine angle (positive or negative).
  • each of the terms in the righthand column is stored, so the hardware in sin/cos generator 300 uses the four bits to retrieve the proper stored values and generate the proper signs.
  • the coarse phase MSB and fine phase MSB control complementing of the coarse and fine ROM addresses, respectively.
  • the exclusive OR of the quadrant LSB with the coarse phase MSB performs the coarse sine/cosine interchange.
  • the quadrant bits determine signs of the sine and cosine of the coarse angle, respectively.
  • the exclusive OR of the exclusive OR of the quadrant LSB and MSB and quadrant MSB, respectively, with the fine phase MSB performs the negation of the fine angle sine for use in computing the total angle sine and cosine.
  • the fine sines and cosines have been stored as recoded versions to be used in Booth-algorithm type multipliers, and Wallace trees have been used to add the partial products.
  • the recoded sin(B) and cos(B) control the multiplexing and shifting. Consequently, a brief discussion of Booth-type recoding multipliers and Wallace trees will be presented.
  • each partial product may be generated by merely shifting the multiplicand for a corresponding 1 in the multiplier and is simply 0 for a corresponding 0 in the multiplier. If these numbers are in two's complement format, then sign extension bits would be added to extend the leading 1's in negative partial products out to the sign bit position. The summing of the 16 partial products consumes the bulk of the multiplication time.
  • the summing of the partial products may be accelerated in two independent ways: the summing may be done in a Wallace tree plus final adder (see FIG. 3) and the multiplier may be recoded to reduce the number of partial products by use of a Booth-type algorithm.
  • Sin/cos generator 300 uses both Wallace trees 361 and 362 and recodes the multipliers (the fine sine and the fine cosine) as illustrated in FIG. 3 with arrays 355 and 356 performing the shifting pursuant to the recoded multipliers.
  • FIG. 7 schematically shows a single cell of arrays 355 or 356. Each cell outputs a bit to the Wallace tree that comes from the sum of the two partial products which correspond to the pair of bits recoded.
  • each array 355 or 356 must include at least 133 (19 ⁇ 7) cells. Further, the two's complement format for negative numbers generates sign extension bits in the partial products and consequently more cells.
  • a Wallace tree consists of an array of full adders (carry save adders) which have three inputs and two outputs (the sum bit plus the carry out to higher order bits).
  • each layer of a Wallace tree roughly reduces the number of terms by a factor of 3 to 2.
  • FIG. 9 shows a Wallace tree for adding nine numbers called A, B, C, . . . H, and I with a subscript indicating bit order.
  • these inputs are multiple shifted and possibly-negated versions of the words in coarse sine register 321 and coarse cosine register 322.
  • the shifting and negation comes from arrays 355 and 356.
  • the rectangles indicate the adders 901-938 and the broken vertical lines group bits of the same order with the least significant bits on the right. Note that every carry out goes into the adjacent grouping to the left. As indicated by FIG. 9, after four levels the nine numbers have been added to form at most one sum bit and one carry bit in each bit position. The regularity of the tree is apparent in the lefthand portion of FIG. 9. These sum and carry bits are added in a final adder as shown by adders 363 and 364 in FIG. 3.
  • Recoding a multiplier to lessen the number of partial products may be done in various ways including the straightforward approach of grouping the multiplier bits in pairs to add the partial products in pairs prior to summing in a Wallace tree or other adder. In more detail, if a pair of bits of a multiplier is 00, then the sum of the partial products they generate is simply 0. Similarly, pairs 01 and 10 generate a pair of partial products with a trivially performed sum. The case of a pair 11 differs and requires a summing of the two partial products or the generation of 3 times the multiplicand.
  • the pair 11 (which represents 3) is rewritten as 100-01 (which is 4-1) and the 100 treated as a carry into the next more significant bit pair, then the sum of the two partial products has again been reduced to one partial product.
  • This process of eliminating a sum with a carry can be made consistent as shown in the following table: the first column is a bit pair, the next column is a carry in from the adjacent less significant bit pair, the third column is the carry out to the adjacent more significant bit pair, and the righthand column is the recoded bit pair which has no 11 terms and thus no sum.
  • a -01 bit pair means that the multiplicand is two's complemented for negation and that a -10 bit pair means that the mulitplicand is multiplied by 2 (shifted left 1 bit) and then two's complemented:
  • each partial product must have sign extension bits if it is negative, or some equivalent.
  • Sin/cos generator 300 uses a more sophisticated recoding of the fine sine in that the recoded bit pair sign is replaced by two terms, "+” and "-", which will adjust for the sign difference of the sin(B) terms in the sine and cosine sum of angles formulas. That is, with positive angles cos(A+B) still has a subtraction.
  • the recoding of an original bit pair also depends upon the original next more significant bit pair in the 10 original bit pair case as follows:
  • FIG. 3 shows the recoded bit pair as labeled "2,1” and loading straight from fine sine ROM 331 into fine sine register 341 and then feeding multiplexer arrays 355 and 356.
  • the "2,1" labelling just reflects the recoded bit pair's multiplication magnitude.
  • Multiplexer 336 selects between “+” and “-” from fine sine ROM 331 and feeds this to fine sine register 341 and then to array 356 for the cosine output computation.
  • the XOR of the fine phase MSB and the quadrant MSB drives multiplexer 336, and with an input 1 multiplexer 336 selects the "-" recoding due to the subtraction in the formula for cos(A+B).
  • multiplexer 335 selects between "+” and “-” from fine sine ROM 331 and feeds this to fine sine register 341 and then to array 355 for the sine output computation.
  • the XOR of fine phase MSB and XOR (Quadrant MSB, Quadrant LSB) drives multiplexer 335. With a 1 input, multiplexer 335 will select the "+” recoding due to the addition in the formula for sin(A+B)
  • FIG. 7 shows the structure of a cell of arrays 355 and 356 with the recoded pair as the "2" and “1” inputs, two bits from the multiplicand as "A N-1 " and “A N “ inputs, and the "+” input from fine sine register 341.
  • a N-1 and A N correspond to adjacent bits within two partial products.
  • the "+” input will receive either the “+” or the "-” output from fine sine ROM 331. Note that a 00 input for "2” and “1” will output a 0 because the "+” input is always 0 due to both "+” and "-” from fine sine register 341 being 0; see the first line in the foregoing table. With the 01 and 10 inputs for "2" and “1", the "+” input just determines the sign of the output.
  • multiplexers 335 and 336 will both be driven by the fine phase MSB because the quadrant MSB and LSB provide 0s to XORs 345 and 346.
  • a fine phase MSB 0; this corresponds to a negative fine angle.
  • multiplexer 336 will pass the "-" recoding to fine sine register 341 and then onto array 356 for cosine output computation, and multiplexer 335 will pass the "+" recoding to fine sine register 341 and onto array 355 for sine output computation.
  • the multiplication cos(A)sin(-B) generates negative partial products, and thus each partial product in two's complement format needs sign extension bits. All of the sign extension bits can be added together to form a sign extension word.
  • the following simple example of multiplication of -26 by 13 without recoding the multiplier and with each factor in 8-bit two's complement format illustrates the idea of sign extension word construction.
  • the partial products are: ##EQU2## Now the product of two 8-bit two's complement format numbers will be 16-bit two's complement format.
  • each of the nonzero partial products (each of which is negative) must be recast in 16-bit format by extending each partial product's sign bit out to and including the sign bit in the 16th bit position in order to establish the partial product as a negative number.
  • the multiplication becomes: ##EQU3## All of the sign extension bits introduced may be added together .Iadd.to .Iaddend.form a sign extension word which can be added into the original partial product sum for the case of a negative multiplicand (and positive multiplier).
  • Recoding the multiplier to reduce the number of partial products still permits accumulation of all of the partial product sign extension bits into a sign extension word although different partial products may have different signs due to the recoded multiplier including both positive and negative recoded bit pairs.
  • the recodings previously discussed illustrate both positive and negative recoded bit pairs.
  • Sin/cos generator 300 always has terms like cos(A)sin(-B) added to terms like sin(A)cos(-B). Thus there may be both a sign extension word from the fine angle sine multiplication and a sign extension word from the fine angle cosine multiplication, and these sign extension words may need to be added.
  • cos(-B) almost equals one and is taken to be 1-D where D may be encoded by a single bit for the 17-bit precision with symmetric fine angles of the first preferred embodiment.
  • multiplication by cos(-B) is multiplication by 1 (no operation) plus a multiplication by -D. And the multiplication by -D has only one partial product.
  • the sign bit for the single partial product of multiplier D will either align with the LSB of the sign extension word of the partial products from the recoded sin(-B) multiplication or align one bit to the right (one bit less significant) of the .[.ISB.]. .Iadd.LSB .Iaddend.of the sign extension word, depending upon how the least significant bit pair recodes. Consider these two bit alignment cases separately.
  • the first case is the LSB of the sign extension word aligning with the sign bit of the multiplication by D partial product.
  • SX denote the sign bit and the remaining bits, respectively, of the D partial product.
  • SSSX is the sum ##EQU4## where C is the complement of S.
  • the sign extension word may be written as the sum ##EQU5## where sew is the one's complement of the signs of the other partial products.
  • sew is the one's complement of the signs of the other partial products.
  • adding the D partial product and the sign extension word is the same as the following sum: ##EQU6## and this simplifies to the sum ##EQU7##
  • the second case of the LSB of the sign extension word for sin(-B) aligning one bit to the left of the sign bit of the D partial product also has the sum of the D partial product and the sign extension word of sin(-B) expressable as a sum: ##EQU8## and this simplifies to ##EQU9##
  • the sign extension for the D partial product and the sign extension word for sin(-B) can be combined to simplify the sum.
  • Recoding the sin(-B) multiplier in pairs of bits implies that the least significant bit of the sign extension word is shared with the most significant bit of the least significant partial product.
  • the least significant recoded partial product multiplier is 0, 1, or -1
  • the least significant bit of the sign extension word represents the complement of the sign of that partial product.
  • the least significant partial product multiplier is 2 or -2
  • the least significant bit of the sign extension word represents the most significant bit of that partial product.
  • the Sign Extension Word LSB is 0 when the multiplicand is negative and the least significant partial product multiplier value is 1 or -2 or when the multiplicand is positive and the multiplier is -1 or 2.
  • N and M be defined as in the table and be stored in the fine sine ROM for the least significant partial product multiplier.
  • N is 1 when the least significant partial product's multiplier is -1 or 2
  • M equal 1 when the least significant partial product's multiplier is 1 or -2.
  • FIG. 10 shows logic for sign extension computation where S n , is the nth bit of the sign extension word and + n is the "+" for the nth recoded bit pair. This logic computes the sign extension word in an efficient manner.
  • FIG. 2 shows input data samples x(n) multiplying the output of the sin/cos generator as part of the down conversion.
  • the data samples and the sin/cos generator output typically will have two's complement format, and thus the multiplication of -1 from the sin/cos generator with a .[.frill.]. .Iadd.full .Iaddend.scale negative data sample may arise and cause an overflow.
  • Sin/cos generator 300 avoids the overflow possibility by scaling its output by a factor slightly less than 1. The effect of this scaling can be undone as part of the filtering which follows the multiplication in FIG. 2.
  • sin/cos generator 300 stores the coarse angle sines and cosines in scaled form. Indeed, the coarse cosine ROM stored values are generated using the formula:
  • Coarse Phase Count is the number in the range 0 to 255 corresponding to the 8-bit coarse phase as a binary number.
  • the scale factor 1-2 -17 -2 -18 insures proper results when final rounding to 17 bits two's complement format occurs in the sum of products computation of sin(A+B) and cos(A+B).
  • the coarse sine ROM stored values derive from:
  • FIG. 3 illustrates the location of multiplexers 315-316 as between ROMs 311-312 and registers 321-322 and, similarly, the location of multiplexers 335-336 as between ROM 331 and register 341.
  • the multiplexers are essentially located at the ROM sense amplifiers and avoid the time delay of multiplexer location downstream of the registers.
  • the ROMs use a sense amplifier with sufficient drive to set the registers.
  • FIG. 8 illustrates a second preferred embodiment sin/cos generator 800 which duplicates much of the circuitry of sin/cos generator 300.
  • sin/cos generator 800 stores sines and cosines of only nonnegative fine angles. This implies increase in ROM size because the symmetry of the fine angle about 0 will not be exploited and the cosine approximation worsens by a factor of about 4, but this also permits a simplification of the hardware related to the fine ROMs as is apparent in FIG. 8.
  • the fine phase encodes fine angles as follows.
  • the 18-bit phase 000 . . . 00 word no longer encodes the angle 0. Rather it encodes the coarse angle offset, ⁇ /2 10 .
  • 00 0000 0000 1000 0000 is subtracted from the input phase word.
  • Sin/cos generator 800 operates as follows. As with sin/cos generator 300, the the two quadrant bits determine signs (COS(A) SIGN REG and SIN(A) SIGN REG), selection between "+” and "-” recoding of the fine sines, and the quadrant LSB determines coarse angle sine/cosine interchange for quadrant changes (XOR gate 102). In fact, nonnegative fine angles implies that the fine phase MSB is used to address the fine angle ROM, and the quadrant bits directly control MUX 155 and MUX 157. See FIG. 8. The coarse angle encoding for sin/cos generator 800 duplicates that of sin/cos generator 300, and MUX 105 plus MUX 107 again provide the sine/cosine interchange for complementary angles.
  • Sin/cos generator 800 contains the same multiplexer-exclusive NOR arrays and Wallace trees as sin/cos generator 300.
  • the fine angle ROM in sin/cos generator 800 is twice the size of the fine angle ROM in sin/cos generator 300, but it eliminates the two's complement addressing circuitry and its associated delay. The delay reduction means less address setup time is required.
  • the coarse angles and the fine angles include 0, so there is the possibility of a multiplication of -1 times -1 in the multipliers which will cause an overflow for numbers in two's complement format unless an extra bit is used.
  • the overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2 -17 -2 -18 which can be compensated for subsequently in the system.
  • the recoded fine sine and cosines remain the same.
  • the third preferred embodiment sin/cos generator is similar to the second preferred embodiment but with the coarse angles at the lower endpoints of the coarse intervals. That is, the coarse phase encodes coarse angles as follows.
  • the coarse angles are again symmetric about ⁇ /4, but the two's complement of a coarse phase encodes the complement of the angle, except for angle 0.
  • angle ⁇ /4 is encoded by a two's complement invariant address.
  • the storing only of coarse sines and cosines up to ⁇ /4 can again be coupled with the interchange of sine/cosine to cover the entire first quadrant. Rather than a one's complement on the address a two's complement driven by the coarse phase MSB is required.
  • the phase 000 . . . 000 encodes the angle 0.
  • the coarse angles and the fine angles both include 0, so there is the possibility of a multiplication of -1 times -1 which will cause an overflow for numbers in two's complement format unless an extra bit is used.
  • the overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2 -17 -2 -18 which can be compensated for subsequently in the system.
  • the recoded fine sine and cosines remain the same.
  • the fourth preferred embodiment is again similar to the first preferred embodiment in that the coarse angles are symmetrical about ⁇ /4 plus centered in the coarse intervals and the fine angles are symmetric about 0.
  • the number of coarse intervals is not a power of 2. This requires a change in the phase generation but not in the sin/cos generator hardware.
  • phase generator could count up to 100 and then reset the fine phase count and increment the coarse phase count. When the coarse phase count reaches 1000, the phase generator resets the coarse phase count and increments the quadrant count.
  • the fine and coarse ROMs will have 7-bit and 10-bit addresses, but symmetry of the storage will be more involved in general. However, an address symmetric phase could be used and thereby permit the phase to be the address and thus use the same address complementers as in sin/cos generator 300. In particular, the fine phase count could start at 0001110 (14) and count to 1110001 (113) and then reset plus increment the coarse phase count.
  • 0001110 encodes the largest magnitude negative fine angle.
  • the coarse phase count could start at 00000 01100 (12) and count to 11111 10011 (1011) with one's complement of the phase corresponding to the address of the coarse angle symmetry about ⁇ /4.
  • the coarse angles and the fine angles both include 0, so there is the possibility of a multiplication of -1 times -1 which will cause an overflow for numbers in two's complement format unless an extra bit is used.
  • the overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2 -17 -2 -18 which can be compensated for subsequently in the system.
  • the recoded fine sine and cosines remain the same.
  • the preferred embodiments may be modified in many ways while retaining one of more of the features of symmetrical coarse angles about ⁇ /4, symmetrical fine angles about 0, and storing recoded fine angle sines and cosines to provide multiplier controls for the multiplier/adders used to compute the output sine and cosine values.
  • the coarse interval size, the number of coarse and fine angles, the input phase word size, and the output precision could all be separately varied; this would change the number and sizes of the ROMS, especially if the coarse intervals were of nonuniform sizes.
  • the use of fine ROM shown in FIG. 3 could be a full size ROM thus eliminating the delay associated with computing the two's complement of the input address and its associated circuitry.

Abstract

A sine/cosine generator with coarse and fine angles having compressed sine and cosine read only memories (ROMS) by use of symmetry of coarse angles about π/4 and, optionally, symmetry of fine angles about 0. The output of the ROMs directly feed multiplexers for utilization of the compressed storage. Addressing of complementary coarse angles is with one's complementing of the address and of complementary fine angles is with two's commplementing of the address. Fine sines and cosines are stored in recoded version for direct use in multipliers for computations using the sum of angles formulas.

Description

CROSS-REFERENCE TO RELATED APPLICATIONS
The follower applications assigned to the assignee of this application disclose related subject matter Ser. Nos. 07/930,170; 07/930,930; 07/930,169; and 07/930,072, all cofiled with this application.
BACKGROUND AND SUMMARY OF THE INVENTIONS
The present invention relates to electronic devices, and, more particularly, to semiconductor circuits and methods useful in frequency conversion of digital data streams.
Digital Systems with Down Converters
Communications systems such as broadcast radio use frequency division multiplexing (FDM) to simulaneously transmit differing information signals from several sources in a single locale. Typically, each source modulates its carrier frequency with its information signal and keeps within its allocated frequency band. Extraction of a desired information signal from a received broadband of simultaneous broadcasts may be performed by mixing down (by the selected carrier frequency) followed by lowpass filtering and demodulation as schematically illustrated by system 100 in FIG. 1. Indeed, system 100 receives radio frequency signals (e.g., a broadband of 100-200 MHz) at antenna 102, filters and mixes the signals down to intermediate frequencies (e.g., 1-10 MHz) with a wideband analog tuner 104, converts from analog to digital format with sampling analog-to-digital converter 106, extracts the selected frequency band (e.g., a band of width 15 KHz) with digital down converter 108, and demodulates and reconstructs an analog information signal with demodulator/processor 110. For example, if wideband tuner 104 has a 10 MHz output bandwidth, then analog-to-digital converter 106 will sample at 20 MHz or more (at least the Nyquist rate), and digital down converter 108 will output the selected band at a sampling rate of 30 KHz. That is, digital down converter 108 may decrease the sampling rate due to the small bandwidth of its output without loss of information.
Digital down converter 108 functionally contains blocks as shown FIG. 2. The phase generator 202, sin/cos generator 204, and multipliers 205-206 mix down the broadband input data stream by the selected band center frequency, and then the lowpass quadrature filter 208 eliminates all bands except the selected band. The input data samples are real numbers, but mixing down is multiplication by a complex exponential and thus generates both real part and imaginary part data streams. That is, for a real data sample stream x(n) [n=-2,-1,0,1,2,3 . . . ] with sampling frequency fs, multiplication by cos(2πnfc /fs) and -sin(2πnfc /fs) mixes down x(n) by frequency fc because cos(2πnfc /fs) and -sin(2πnfc /fs) are the real and imaginary parts of samples of the complex exponential exp(-j2πfc t) at sampling frequency fs.
Similarly, mixing down by a frequency -fc will yield equivalent results due to the spectral adjoint symmetry of real data streams. And such mixing by multiplication by sine and cosine is generally termed quadrature modulation.
The problems of construction of system 100 include realizing digital down converter 108 operating at a high sampling frequency while maintaining a low ripple sharp cutoff filter which has programmable down conversion frequency and programmable bandwidth. Known realizations of a down conversion function include the combination of a numerically controlled oscillator/modulator (NCOM) such as the HSP45016 manufactured by Harris Corporation together with two decimating digital filters (one for the in-phase and one for the quadrature outputs of the NCOM) such as the HSP43220 also manufactured by Harris Corporation. A single chip realization such as the GC1011 digital receiver chip manufactured by Graychip, Inc.
Crochiere and Rabiner, Multirate Digital Signal Processing (Prentice-Hall 1983) provides general information regarding signal processing using sampling rate changes and quadrature modulation.
Sin/Cos Generator
The sin/cos generator in FIG. 2 (and in general) takes an input phase (angle) and outputs the sine and cosine of that input angle. Of course, the angle can be restricted to the first quadrant (0 to π/2) because the sine and the cosine of angles in the other quadrants can be expressed in terms of sines and cosines in the first quadrant. A sin/cos generator could be realized in various ways, for example, as a direct computation of the sine and cosine from a Taylor's series or as a lookup table retrieving stored sine and cosine values from a memory with the input angle determining the memory address for retrieval. Typically, the memory retrieval approach would use read-only memory (ROM) storage of sine and cosine values for all angles in the first quadrant. Further, there is a tradeoff between ROM size and additional arithmetic hardware. This tradeoff arises from expressing the input angle as a sum of a coarse angle plus a fine angle (roughly analogous to expressing a number between 0 and 99 as a multiple of 10 plus a multiple of 1) and using the sum of angles identities for the sine and cosine:
sin(A+B)=sin(A)cos(B)+cos(A)sin(B)
cos(A+B)=cos(A)cos(B)-sin(A)sin(B)
That is, compute the sine and cosine of the input angle in terms of the sines and cosines of the coarse angle and sines and cosines of the fine angle. Hence, only the sines and cosines of the coarse angles and the fine angles need be stored. Of course, the multiplications and additions require additional hardware.
As an example of the ROM size/hardware tradeoff consider 16-bit angle resolution for the interval 0 to π/2. If every sine and cosine were stored, then 2×216 (128K) words would be stored. And if 17-bit accuracy in the stored values were required, then each word is 17 bits and the total ROM capacity needed would be 2×216 ×17=2228224 bits. This is more than 2 megabits and would occupy a large area of a chip.
But with the expression of an input 16-bit angle as a sum of an 8-bit coarse angle plus an 8-bit fine angle, then only 2×28 coarse angle sines and cosines need be stored along with the 2×28 fine angle sines and cosines. The 256 (=28) coarse angles would run from 0 to 255π/512 with increments of π/512. The 256 fine angles would run from 0 to 255π/217 with increments π/217. In this case the total ROM capacity need only be 2×2×28 ×17=17408 bits. Thus the storage capacity can be reduced by a factor of 128 at the cost of multipliers and adders to implement the sum of angles computations.
Such a tradeoff between hardware and ROM size can be found in U.S. Pat No. 5,113,361, issued, May 12, 1992, and assigned to the assignee of the present application. However, ROM size is still a problem and the extra hardware has a problem of complexity and needs simplification.
Features
The present invention provides a sin/cos generator with reduced ROM storage due to symmetric storage including symmetry about π/4 for the coarse angle and in some embodiments symmetry about 0 for the fine angle.
Storing the cosine of the fine angle in the encoded form requires only 1 or 2 bits plus one additional partial product in the output calculation. This removes the restriction on the fine angle to be such that the rounded value of the cosine of the fine angle be 1 or the use of the approximation that cosine of the fine angle is 1 and allows a more optimized total ROM size. The size of the coarse ROM can be reduced and the fine ROM size increased for a total ROM size reduction.
BRIEF DESCRIPTION OF THE DRAWINGS
The present invention will be described with reference to the accompanying drawings, which are schematic for clarity:
FIG. 1 illustrates an application of a digital down converter;
FIG. 2 show functional blocks of a digital down converter including a sin/cos generator;
FIG. 3 illustrates first preferred embodiment sin/cos generator in block form;
FIG. 4 shows first preferred embodiment coarse angle intervals;
FIG. 5 shows first preferred embodiment fine angles;
FIG. 6 is a functional block daigram of the first preferred embodiment;
FIG. 7 shows a multiplexer-exclusive NOR cell of the first preferred embodiment;
FIG. 8 illustrates second preferred embodiment sin/cos generator in block form;
FIG. 9 shows a Wallace tree; and
FIG. 10 shows a sign extension word logic.
DESCRIPTION OF THE PREFERRED EMBODIMENTS Overview of Preferred Embodiments
The preferred embodiments provide sin/cos generators using input angle decomposition into a coarse angle A plus a fine angle B together with ROM lookup tables for sin(A), cos(A), sin(B), and cos(B). However, the preferred embodiments compress the sin(A) and cos(A) ROMs by exploiting the complementary symmetry of the sine and cosine in the 0
to π/2 interval. That is, for coarse angles A in the interval 0
to π/2, either A is less than π/4 or π/2-A is less than π/4. Thus the identities sin(A)=cos(π/2-A) and cos(A)=sin(π/2-A) reduce the sines and cosines that must be stored to coarse angles in the interval 0 to π/4, and the preferred embodiment accesses both with a single address. This cuts in half the coarse angle ROM storage requirements at the cost of minimal extra hardware. But as the preferred embodiments show, the ROM savings exceed the extra hardware. Differing preferred embodiments illustrate differing fine angle storage and hardware details.
First Embodiment Architecture
FIG. 3 illustrates in schematic functional block form first preferred embodiment sin/cos generator, generally denoted by reference numeral 300. Sin/cos generator 300 uses both the coarse angle complementary reduced ROM and a symmetric about 0 fine angle reduced ROM. In particular, sin/cos generator 300 includes coarse angle ROM 310, fine angle ROM 330, and sum of angles hardware 350, plus input terminal sets 381-383 for the phase word bits encoding the input angle and output terminals 391-392 for the sine and cosine of the input angle. Coarse angle ROM 310 includes coarse sine ROM 311, coarse cosine ROM 312, multiplexers 315-316 for exchanging the sin(A) and cos(A) outputs of ROMs 311-312, coarse sine register 321, coarse cosine register 322, pass/one's complementer 324 for the coarse input phase, and XOR gate 326 for quadrant information input. Coarse sine ROM 311 and coarse cosine ROM 312 could physically be a single double-word-wide ROM. Fine angle ROM 330 includes fine sine ROM 331, fine cosine ROM 332, multiplexers 335-336 for sin(B) output selection related to the multiplier-recoded format storage in ROM 331, fine sine register 341, fine cosine register 342, pass/two's complementer 344 for the fine input phase, and XOR gates 345-346 for quadrant information input. Sum of angles hardware includes coarse cosine sign register 351, coarse sine sign register 352, a multiplier-adder for computing sin(A)cos(B)+cos(A)sin(B) made of multiplexer-exclusive NOR array 355 plus Wallace tree 361 and final adder 363, and a multiplier-adder for computing cos(A)cos(B)-sin(A)sin(B) made of multiplexer-exclusive NOR array 356 plus Wallace tree 362 and final adder 364. Sin/cos generator 300 uses a symmetrical fine angle and an offset coarse angle, as will be explained in the discussion of the ROM storage.
An input phase word partitions into two quadrant bits QUADRANT LSB and MSB at inputs 381, coarse angle bits COARSE LSB . . . MSB at input 382, and fine angle bits FINE ANGLE LSB . . . MSB at input 383. With an N-bit phase word encoding the input angle, an LSB increment of 1 in the phase word corresponds to an input angle increment of 2π/2N, and overflow in the phase word matches 2π periodicity in the encoded angle. For example, 18-bit phase words could be partitioned into two quadrant bits (encoding which of the four quadrants contains the input angle), eight coarse bits encoding the coarse angle, and eight fine bits encoding the fine angle. This provides input angle increments of 2π/218 or about 0.00137 degrees. The operation of sin/cos generator 300 will be analyzed after the storage method for the ROMs has been detailed.
Complementary Coarse Sine and Coarse Cosine ROM Storage
The example of 8-bit coarse phase and 8-bit fine phase will be used for purposes of explanation of the sine and cosine ROM storage of the first preferred embodiment. The precision of the stored values will be 18 or 19 bits for the coarse angles and 17 or 18 bits for the fine angles; the extra bit of coarse angle precision relates to a scale factor for avoidance of saturation when the values are in two's complement format. The leading bits of the fine sine values will be primarily 0s (or 1s if negative and in two's complement format) and the fine cosine values will all be close to 1. Of course, other precisions for the sine and cosine values may be used without change except as to storage size.
The first quadrant 0 to π/2 is divided into 28 "coarse" intervals of equal length π/29. Thus the coarse intervals are [0, π/29 ], [π/29, 2π/29, [2π/29, 3π/29, . . . , [(28 -2)π/29, (28 -1)π/29 ], and [(28 -1)π/29, π/2] as illustrated in FIG. 4. Each 8-bit coarse phase determines one of these coarse intervals. Now if the coarse interval left endpoints (0, π/29, 2π/29, 3π/29 . . . (28 -2)π/29, (28 -1)π/2) were taken to be the coarse angles whose sines and cosines would be stored in ROM, then the complementary relations sin(A)=cos(π/2-A) and cos(A)=sin(π/2-A) could not be fully utilized. In fact, when A equalled 0 or π/4 the complementary angle would be π/2 or π/4, respectively, and thus not a different coarse angle. Consequently, the preferred embodiment coarse angles are taken to be the centers of the coarse intervals, that is, the 28 coarse angles are π/210, 3π/210, 5π/210 . . . , (28 -1)π/210, (28 +1)π/210, . . . , (29 -3)π/210, (29 -1)π/210). FIG. 4 shows these coarse angles as pointed to by arrows. Note that this choice of coarse angles excludes both 0 and π/4 and π/2. As illustrated by the connecting arrows in FIG. 4, these coarse angles are complementary in that
π/210 +(29 -1)π/210 =π/2,
3π/210 +(29 -3)π/210 =π/2, . . . ,
(28 -1)π/210 +(28 +1)π/210 =π/2. Hence, the complementary relations for sine and cosine apply between pairs of coarse angles. The 8-bit coarse phase encodes a coarse angle as follows:
______________________________________                                    
8-bit Coarse Phase                                                        
                Coarse Angle                                              
______________________________________                                    
0000 0000       2.sup.10                                                  
  0000 0001 32.sup.10                                                     
  0000 0010 52.sup.10                                                     
  . .                                                                     
  . .                                                                     
  . .                                                                     
  0111 1111 (2.sup.8 - 1)2.sup.10                                         
  1000 0000 (2.sup.8 + 1)2.sup.10                                         
  . .                                                                     
  . .                                                                     
  . .                                                                     
  1111 1101 (2.sup.9 - 5)2.sup.10                                         
  1111 1110 (2.sup.9 - 3)2.sup.10                                         
  . .                                                                     
  . .                                                                     
  . .                                                                     
  1111 1111 (2.sup.9 - 1)2.sup.10                                         
______________________________________                                    
Observe that the one's complement of a coarse phase encodes the complement of the original encoded angle. This simplifies the coarse ROM addressing as follows. The sines of the coarse angles less than π/4 are stored in sine ROM 311 and the cosines of these coarse angles are stored in cosine ROM 312. Thus each ROM needs only seven address bits and the 8-bit coarse phase can be directly used as the address bits by simply ignoring the MSB (which is 0). Then for coarse angles A between π/4 and π/2, the 8-bit coarse phase encoding A has a MSB=1, and sin(A) is to be retrieved from cosine ROM 312 by using sin(A)=cos(π/2-A). But as noted, the 8-bit coarse phase encoding the angle π/2-A is simply the one's complement of the 8-bit coarse phase encoding A. Thus to retrieve sin(A) take the one's complement of the 8-bit coarse phase encoding A and apply this one's complement (which has MSB=0) as the address to cosine ROM 312. Similarly for cos(A) use the 8-bit coarse phase as address for cosine ROM 312 if the phase MSB=0 and take the one's complement of the 8-bit coarse phase as address for sine ROM 311 if the phase MSB=1. Hence, the coarse ROMs 311-312 need only be one half the size of ROMs which store the sines and cosines for an entire quadrant of coarse angles. The hardware cost for this compression of the storage is a one's complement and multiplexer (to switch between sine ROM 311 cosine ROM 312) if MSB=1. In FIG. 3 the upper lefthand portion shows the coarse phase MSB feeding exclusive OR (XOR) gates of pass/one's complementer 324 on each of the other seven bits of the coarse phase inputs 382. This provides a pass through if MSB=0 and a one's complement if MSB=1. These seven bits are addresses for sine ROM 311 and cosine ROM 312 which output to multiplexers 315-316 driven by the MSB through XOR gate 326 (to account for quadrant encoding which leads to further complementing). Note that all of the stored sines and cosines are positive numbers because 0 is not a coarse angle.
Alternatively, the coarse angles need not be the centers of the coarse intervals, but could be shifted within the intervals provided the shift for an angle less than π/4 is the complement of the shift of its complementary angle. Such noncentered coarse angles lead to more involved fine angle encoding because the required fine angle range would not be the same for all coarse intervals.
Symmetrical Fine Sine and Cosine ROM Storage
Each coarse interval (which has length π/29) is divided into 28 "fine" subintervals of equal length π/217. Each 8-bit fine phase determines one of these fine subintervals and a total angle (coarse angle plus fine angle) in the (closed) subinterval. Because each coarse angle is the center of its coarse interval, the fine angles are taken to include negative values so that an 8-bit fine phase 0000 0000 determines the left endpoint (smallest total angle) of the corresponding coarse interval. That is, the fine angles are -27 /217 (=-π/210), -(27 -1)π/217,-(27 -2)π/217,-(27 -3)π/217, . . . , -π/217, 0, π/217, . . . (27 -2)π/217, (27 -1)π/217. FIG. 5 illustrates the fine angles in a coarse interval. The 8-bit fine phase encodes the fine angles as follows.
______________________________________                                    
8-bit Fine Phase                                                          
               Fine Angle                                                 
______________________________________                                    
0000 0000      -2.sup.7 2.sup.17                                          
  0000 0001 -(2.sup.7 - 1)2.sup.17                                        
  0000 0010 -(2.sup.7 - 2)2.sup.17                                        
  . .                                                                     
  . .                                                                     
  . .                                                                     
  0111 1111 -2.sup.17                                                     
  1000 0000 0                                                             
  1000 0001 2.sup.17                                                      
  . .                                                                     
  . .                                                                     
  . .                                                                     
  1111 1101 (2.sup.7 - 3)2.sup.17                                         
  1111 1110 (2.sup.7 - 2)2.sup.17                                         
  1111 1111 (2.sup.7 - 1)2.sup.17                                         
______________________________________                                    
This assignment of fine angles implies that the full 16-bit phase of 000 . . . 000 does encode the total angle 0 because the coarse angle will be π/210 and the fine angle will be -π/210 so they add to 0. Likewise, the 16-bit phase 111 . . . 111 encodes π/2-π/217, which is the largest angle in the first quadrant because π/2 will be considered the start of the second quadrant.
Observe that the two's complement of an 8-bit fine phase encodes the negative of the originally encoded fine angle, except for the special cases of phases 0000 0000 and 1000 0000. This two's complement relationship simplifies the addressing hardware because sine ROM 331 takes advantage of sin(-B)=-sin(B) to store only one half of the fine angle sines. Similarly, cos(-B)=cos(B), so cosine ROM 332 also need only store one half of the fine angle cosines. In particular, ROMs 331 and 332 are designed as fully decoded 28 word memories with only 27 words implemented. The addressing is two's complement addressing with the MSB functioning as the two's complement command and only the addresses 0000 0000 through 0111 1111 implemented. Note that this corresponds to negative fine angles. When the address 1000 0000 (corresponding to fine angle equal to 0) is sent to the ROMS, its two's complement will be formed because the MSB=1 and this regenerates nonimplemented address 1000 0000. This address will not select any word line and the default ROM output will occur. The default ROM output can be established by design of the ROMs to be any desired pattern of 0s and 1s. Thus the sine ROM 331 default output will be 0 and the cosine ROM 332 default output will be 1. Alternatively, the 8th address bit could be implemented and a 129 word ROM used.
The cosine of a small angle is close to 1, so cosine ROM 332 only has a few values, depending upon the precision in cos(B) needed. The use of fine angles which may be positive or negative has two effects: first, it cuts the size of the sine and cosine ROMs in half because of the fact that sine is an odd function and the cosine is an even function, and second, it cuts the maximum amplitude of the fine angle in half which implies better approximations for cos(B). Indeed, cos(B)=1-B2 /2+. . . for B expressed in radians, so a maximum amplitude of B as π/210 implies cos(B) differs from 1 by at most about 10/221 which lies between 2-18 and 2-17. This means for 18-bit magnitude precision cos(B) can be stored as just two bits; the two bits determine a number D to be one of 0, 2-18, or .[.217 .]. .Iadd.2-17 .Iaddend.and cos(B)=1-D. Contrarily, if only positive fine angles were used, then the maximum B would be twice as large at π/29 and cos(B) would differ from 1 by up to about 10/219 which lies between 2-16 and 2-15. This would require four bits to encode D. However, sin/cos generator 300 outputs 17-bit two's complement values, thus only the equivalent of 18 signed bits need be stored in the ROMs 331 and 332, and thus only one bit is needed to encode D in the symmetric fine angle case if the values are restricted to 0 and 2-17.
Quadrant Encoding
Input 18-bit phase words encode angles in the range 0 to 2π, including 0 and excluding 2π. A phase word is partitioned as follows: the two most significant bits encode the quadrant of the encoded angle, the next 8 bits encode a coarse angle A in the first quadrant, and the least significant 8 bits encode a small fine angle B. Each increment by 1 in the LSB of the phase word increments the encoded angle by 2π/218. The first quadrant is the range 0 to π/2, including 0 and excluding π/2; similarly the second quadrant is the range π/2 to π, including π/2 and excluding π; and so forth.
The values of sine and cosine in the first quadrant determine the values in the other three quadrants by the identities sin(X+π/2)=cos(X), cos(X+π/2)=-sin(X), sin(X+π)=-sin(X), cos(X+π)=-cos(X), and sin(X+3π/2)=-cos(X), cos(X+3π/2)=sin(X) where X is in the first quadrant and will equal A+B. With the multiple qπ/2 to get into a quadrant (so q is just the binary number equal to the phase word most significant two bits), QUADRANT MSB and QUADRANT LSB at terminals 381 in FIG. 3 encode the quadrant and the sines and cosines are as follows.
______________________________________                                    
Quadrant MSB    LSB      sin(X + q2)                                      
                                  cos(X + q2)                             
______________________________________                                    
I        0      0        +sin(X)  +cos(X)                                 
  II 0 1 +cos(X) -sin(X)                                                  
  III 1 0 -sin(X) -cos(X)                                                 
  IV 1 1 -cos(X) +sin(X)                                                  
______________________________________                                    
Thus the MSB determines the sign of sine and directly feeds sine sign register 352. The XOR of the MSB and the LSB determines the sign of cosine, and XOR gate 358 supplies it to cosine sign register 351. These registers directly feed the multiplier-adders (multiplexers plus Wallace tree plus final adder). Further, when the LSB equals 1, the sine and cosine are interchanged.
FIG. 6 shows the overall relations, including the coarse angle switching (multiplexers 601) of sine and cosine which goes with the half-quadrant-only storage 603 of sines and cosines. The "Sum Angle Computation" block 605 performs the computations of sin(X)=sin(A+B)=sin(A)cos(B)+cos(A)sin(B) and cos(X)=cos(A+B)=cos(A)cos(B)-sin(A)sin(B), and the multiplexers 607 and complementers 608-609 on the righthand side of FIG. 6 perform the quadrant sign and sine/cosine interchanges in the foregoing table. Note that any multiplier and adder could be used, but the embodiment of FIG. 3 uses a multiplier with recoded sin(B) and cos(B) values in ROM 611 to reduce the number of partial products in the multiplications plus Wallace trees for adding the partial products.
Operation
The overall operation of sin/cos generator 300 can be most easily explained by the following tables which show the net effect of the two quadrant bits, the coarse phase MSB and the fine phase MSB on the computation of the output sine and the computation of the output cosine. In particular, the 18-bit input phase word determines the angle A+B+qπ/2 where q is the binary number made of the two quadrant bits, A is the coarse angle (positive), and B is the fine angle (positive or negative). However, the coarse sines and cosines have only been stored for half of the coarse angles (angles A between 0 and π/4 where coarse phase MSB=0) and the fine sines and cosines have been stored only for half of the fine angles (negative angles B where fine phase MSB=0), so this requires hardware to invoke trigonometric operations as follows:
______________________________________                                    
Quad     Coarse  Fine                                                     
  MSB LSB MSB MSB                                                         
______________________________________                                    
                          sin(A + B + q2)                                 
  00 0 0 sin(A)cos(B) + cos(A)sin(B)                                      
  00 0 1 sin(A)cos(-B) - cos(A)sin(-B)                                    
  00 1 0 cos(2 - A)cos(B) +                                               
     sin(2 - A)sin(B)                                                     
  00 1 1 cos(2 - A)cos(-B) -                                              
     sin(2 - A)sin(-B)                                                    
  01 0 0 cos(A)cos(B) - sin(A)sin(B)                                      
  01 0 1 cos(A)cos(-B) + sin(A)sin(-B)                                    
  01 1 0 sin(2 - A)cos(B) -                                               
     cos(2 - A)sin(B)                                                     
  01 1 1 sin(2 - A)cos(-B) +                                              
     cos(2 - A)sin(-B)                                                    
  10 0 0 -sin(A)cos(B) - cos(A)sin(B)                                     
  10 0 1 -sin(A)cos(-B) + cos(A)sin(-B)                                   
  10 1 0 . . .                                                            
  . . . .                                                                 
  . . . .                                                                 
  . . . .                                                                 
     cos(A + B + q2)                                                      
  00 0 0 cos(A)cos(B) - sin(A)sin(B)                                      
  00 0 1 cos(A)cos(-B) + sin(A)sin(-B)                                    
  00 1 0 sin(2 - A)cos(B) -                                               
     cos(2 - A)sin(B)                                                     
  00 1 1 sin(2 - A)cos(-B) +                                              
     cos(2 - A)sin(-B)                                                    
  01 0 0 -sin(A)cos(B) - cos(A)sin(B)                                     
  01 0 1 -sin(A)cos(-B) + cos(A)sin(-B)                                   
  01 1 0 -cos(2 - A)cos(B) -                                              
     sin(2 - A)sin(B)                                                     
  01 1 1 -cos(2 - A)cos(-B) +                                             
     sin(2 - A)sin(-B)                                                    
  10 0 0 -cos(A)cos(B) + sin(A)sin(B)                                     
  10 0 1 -cos(A)cos(-B) - sin(A)sin(-B)                                   
  10 1 0 . . .                                                            
  .                                                                       
  .                                                                       
  .                                                                       
______________________________________                                    
Each of the terms in the righthand column is stored, so the hardware in sin/cos generator 300 uses the four bits to retrieve the proper stored values and generate the proper signs. In particular, the coarse phase MSB and fine phase MSB control complementing of the coarse and fine ROM addresses, respectively. The exclusive OR of the quadrant LSB with the coarse phase MSB performs the coarse sine/cosine interchange. The quadrant bits determine signs of the sine and cosine of the coarse angle, respectively. The exclusive OR of the exclusive OR of the quadrant LSB and MSB and quadrant MSB, respectively, with the fine phase MSB performs the negation of the fine angle sine for use in computing the total angle sine and cosine.
Further, the fine sines and cosines have been stored as recoded versions to be used in Booth-algorithm type multipliers, and Wallace trees have been used to add the partial products. This means that the multiplications such as sin(A)cos(B) and cos(A)sin(B) are recast as multiplexed shifts of sin(A) from coarse sine register 321 and of cos(A) from coarse cosine register 322 which are simultaneously added in a Wallace tree. The recoded sin(B) and cos(B) control the multiplexing and shifting. Consequently, a brief discussion of Booth-type recoding multipliers and Wallace trees will be presented.
First consider an example of multiplication of a 17-bit multiplicand (the coarse sine or cosine) by a 16-bit multiplier (the fine sine or cosine). Written out, this product is seen to be the sum of easily-generated partial products. For example, the multiplication of 11110000111100001 by 0101010101011101 is: ##EQU1## Clearly, each partial product may be generated by merely shifting the multiplicand for a corresponding 1 in the multiplier and is simply 0 for a corresponding 0 in the multiplier. If these numbers are in two's complement format, then sign extension bits would be added to extend the leading 1's in negative partial products out to the sign bit position. The summing of the 16 partial products consumes the bulk of the multiplication time. The summing of the partial products may be accelerated in two independent ways: the summing may be done in a Wallace tree plus final adder (see FIG. 3) and the multiplier may be recoded to reduce the number of partial products by use of a Booth-type algorithm. Sin/cos generator 300 uses both Wallace trees 361 and 362 and recodes the multipliers (the fine sine and the fine cosine) as illustrated in FIG. 3 with arrays 355 and 356 performing the shifting pursuant to the recoded multipliers. FIG. 7 schematically shows a single cell of arrays 355 or 356. Each cell outputs a bit to the Wallace tree that comes from the sum of the two partial products which correspond to the pair of bits recoded. Thus with 18-bit coarse sines and cosines plus fine sines of roughly ten significant bits and fine cosines a 2-bit difference from 1, each array 355 or 356 must include at least 133 (19×7) cells. Further, the two's complement format for negative numbers generates sign extension bits in the partial products and consequently more cells.
Typically, a Wallace tree consists of an array of full adders (carry save adders) which have three inputs and two outputs (the sum bit plus the carry out to higher order bits). Hence, each layer of a Wallace tree roughly reduces the number of terms by a factor of 3 to 2. FIG. 9 shows a Wallace tree for adding nine numbers called A, B, C, . . . H, and I with a subscript indicating bit order. For sin/cos generator 300 these inputs are multiple shifted and possibly-negated versions of the words in coarse sine register 321 and coarse cosine register 322. Of course, the shifting and negation comes from arrays 355 and 356. The rectangles indicate the adders 901-938 and the broken vertical lines group bits of the same order with the least significant bits on the right. Note that every carry out goes into the adjacent grouping to the left. As indicated by FIG. 9, after four levels the nine numbers have been added to form at most one sum bit and one carry bit in each bit position. The regularity of the tree is apparent in the lefthand portion of FIG. 9. These sum and carry bits are added in a final adder as shown by adders 363 and 364 in FIG. 3.
Recoding a multiplier to lessen the number of partial products may be done in various ways including the straightforward approach of grouping the multiplier bits in pairs to add the partial products in pairs prior to summing in a Wallace tree or other adder. In more detail, if a pair of bits of a multiplier is 00, then the sum of the partial products they generate is simply 0. Similarly, pairs 01 and 10 generate a pair of partial products with a trivially performed sum. The case of a pair 11 differs and requires a summing of the two partial products or the generation of 3 times the multiplicand. However, if the pair 11 (which represents 3) is rewritten as 100-01 (which is 4-1) and the 100 treated as a carry into the next more significant bit pair, then the sum of the two partial products has again been reduced to one partial product. This process of eliminating a sum with a carry can be made consistent as shown in the following table: the first column is a bit pair, the next column is a carry in from the adjacent less significant bit pair, the third column is the carry out to the adjacent more significant bit pair, and the righthand column is the recoded bit pair which has no 11 terms and thus no sum. Note that a -01 bit pair means that the multiplicand is two's complemented for negation and that a -10 bit pair means that the mulitplicand is multiplied by 2 (shifted left 1 bit) and then two's complemented:
______________________________________                                    
Original                       Recoded                                    
  Bit Pair Carry in Carry out Bit Pair                                    
______________________________________                                    
00       0            0        00                                         
  00 1 0 01                                                               
  01 0 0 01                                                               
  01 1 0 10                                                               
  10 0 1 -10                                                              
  10 1 1 -01                                                              
  11 0 1 -01                                                              
  11 1 1 00                                                               
______________________________________                                    
Thus the summing in pairs of the partial products may be accomplished with the foregoing recoding which requires extra hardware for the two's complementing negations. Of course, each partial product must have sign extension bits if it is negative, or some equivalent.
Sin/cos generator 300 uses a more sophisticated recoding of the fine sine in that the recoded bit pair sign is replaced by two terms, "+" and "-", which will adjust for the sign difference of the sin(B) terms in the sine and cosine sum of angles formulas. That is, with positive angles cos(A+B) still has a subtraction. The recoding of an original bit pair also depends upon the original next more significant bit pair in the 10 original bit pair case as follows:
______________________________________                                    
              Original                                                    
  Original Carry next more Recoded Carry                                  
  Bit Pair in significant Bit Pair out "+"  "-"                           
______________________________________                                    
00     0      **        00     0     0     0                              
  00 1 ** 01 0 0 1                                                        
  01 0 ** 01 0 0 1                                                        
  01 1 ** 10 0 0 1                                                        
  10 0 *0/0* 10 0 0 1                                                     
  10 0 11 10 1 1 0                                                        
  10 1 ** 01 1 1 0                                                        
  11 0 ** 01 1 1 0                                                        
  11 1 ** 00 1 0 0                                                        
______________________________________                                    
 Note that * indicates don't case                                         
FIG. 3 shows the recoded bit pair as labeled "2,1" and loading straight from fine sine ROM 331 into fine sine register 341 and then feeding multiplexer arrays 355 and 356. The "2,1" labelling just reflects the recoded bit pair's multiplication magnitude. Multiplexer 336 selects between "+" and "-" from fine sine ROM 331 and feeds this to fine sine register 341 and then to array 356 for the cosine output computation. The XOR of the fine phase MSB and the quadrant MSB drives multiplexer 336, and with an input 1 multiplexer 336 selects the "-" recoding due to the subtraction in the formula for cos(A+B). Similarly, multiplexer 335 selects between "+" and "-" from fine sine ROM 331 and feeds this to fine sine register 341 and then to array 355 for the sine output computation. The XOR of fine phase MSB and XOR (Quadrant MSB, Quadrant LSB) drives multiplexer 335. With a 1 input, multiplexer 335 will select the "+" recoding due to the addition in the formula for sin(A+B)
FIG. 7 shows the structure of a cell of arrays 355 and 356 with the recoded pair as the "2" and "1" inputs, two bits from the multiplicand as "AN-1 " and "AN " inputs, and the "+" input from fine sine register 341. AN-1 and AN correspond to adjacent bits within two partial products. The "+" input will receive either the "+" or the "-" output from fine sine ROM 331. Note that a 00 input for "2" and "1" will output a 0 because the "+" input is always 0 due to both "+" and "-" from fine sine register 341 being 0; see the first line in the foregoing table. With the 01 and 10 inputs for "2" and "1", the "+" input just determines the sign of the output.
For example, with an angle in the first quadrant, multiplexers 335 and 336 will both be driven by the fine phase MSB because the quadrant MSB and LSB provide 0s to XORs 345 and 346. Consider a fine phase MSB=0; this corresponds to a negative fine angle. Then multiplexer 336 will pass the "-" recoding to fine sine register 341 and then onto array 356 for cosine output computation, and multiplexer 335 will pass the "+" recoding to fine sine register 341 and onto array 355 for sine output computation. This implies no negation in the partial products corresponding to -sin(A)sin(B) in the cosine output computation because sin(B) is negative and sin(A) positive; and negation in the partial products corresponding to +cos(A)sin(B) in the sine output computation. Conversely, if fine phase MSB=1 to encode a nonnegative angle, multiplexers 335 and 336 will switch and multiplexer 336 will pass "+" and multiplexer 335 will pass the "-" recoding to fine sine register 341 and then onto arrays 355-356. This corresponds to terms +sin(A)sin(-B) in the cosine output and -cos(A)sin(-B) for the sine output, respectively.
Sign Extension
The multiplication cos(A)sin(-B) generates negative partial products, and thus each partial product in two's complement format needs sign extension bits. All of the sign extension bits can be added together to form a sign extension word. The following simple example of multiplication of -26 by 13 without recoding the multiplier and with each factor in 8-bit two's complement format illustrates the idea of sign extension word construction. The partial products are: ##EQU2## Now the product of two 8-bit two's complement format numbers will be 16-bit two's complement format. Thus each of the nonzero partial products (each of which is negative) must be recast in 16-bit format by extending each partial product's sign bit out to and including the sign bit in the 16th bit position in order to establish the partial product as a negative number. Thus the multiplication becomes: ##EQU3## All of the sign extension bits introduced may be added together .Iadd.to .Iaddend.form a sign extension word which can be added into the original partial product sum for the case of a negative multiplicand (and positive multiplier).
Recoding the multiplier to reduce the number of partial products still permits accumulation of all of the partial product sign extension bits into a sign extension word although different partial products may have different signs due to the recoded multiplier including both positive and negative recoded bit pairs. In particular, the recodings previously discussed illustrate both positive and negative recoded bit pairs. Then the sign for a partial product is taken to be the exclusive OR of the sign of the multiplicand and the sign of the corresponding recoded bit pair of the multiplier (e.g., +=1 in the foregoing recoding table for a negative recoded bit pair if the multiplier is not zero or zero if the multipler is zero. And the sum of these partial product signs (in bit positions corresponding to their partial products) is then two's complemented to form the sign extension word. Copending U.S. patent application Ser. No. 07/434,798, filed Nov. 13, 1989 naming Young and Malinowski as inventors, and assigned to the assignee of the present application, more fully describes this sign extension word construction and is hereby incorporated by reference.
Sin/cos generator 300 always has terms like cos(A)sin(-B) added to terms like sin(A)cos(-B). Thus there may be both a sign extension word from the fine angle sine multiplication and a sign extension word from the fine angle cosine multiplication, and these sign extension words may need to be added. As previously discussed, cos(-B) almost equals one and is taken to be 1-D where D may be encoded by a single bit for the 17-bit precision with symmetric fine angles of the first preferred embodiment. Thus multiplication by cos(-B) is multiplication by 1 (no operation) plus a multiplication by -D. And the multiplication by -D has only one partial product. The sign bit for the single partial product of multiplier D will either align with the LSB of the sign extension word of the partial products from the recoded sin(-B) multiplication or align one bit to the right (one bit less significant) of the .[.ISB.]. .Iadd.LSB .Iaddend.of the sign extension word, depending upon how the least significant bit pair recodes. Consider these two bit alignment cases separately.
The first case is the LSB of the sign extension word aligning with the sign bit of the multiplication by D partial product. Let SX denote the sign bit and the remaining bits, respectively, of the D partial product. Then extending the sign of SX to the full number of bits in the final sum yields SSS . . . SSSX. An alternative expression of SSS . . . SSSSX is the sum ##EQU4## where C is the complement of S. Now if the sign extension word for sin(-B) has a least significant bit aligned with the sign bit of .[.SY..]. .Iadd.SX.Iaddend., then the sign extension word may be written as the sum ##EQU5## where sew is the one's complement of the signs of the other partial products. Thus adding the D partial product and the sign extension word is the same as the following sum: ##EQU6## and this simplifies to the sum ##EQU7## The second case of the LSB of the sign extension word for sin(-B) aligning one bit to the left of the sign bit of the D partial product also has the sum of the D partial product and the sign extension word of sin(-B) expressable as a sum: ##EQU8## and this simplifies to ##EQU9## Thus the sign extension for the D partial product and the sign extension word for sin(-B) can be combined to simplify the sum.
Recoding the sin(-B) multiplier in pairs of bits implies that the least significant bit of the sign extension word is shared with the most significant bit of the least significant partial product. When the least significant recoded partial product multiplier is 0, 1, or -1, the least significant bit of the sign extension word represents the complement of the sign of that partial product. When the least significant partial product multiplier is 2 or -2, the least significant bit of the sign extension word represents the most significant bit of that partial product. In tabular form:
______________________________________                                    
          Least significant                                               
                      Sign Extension                                      
  Multiplicand partial product Word least                                 
  Sign multiplier value significant bit N M                               
______________________________________                                    
0         0           1            0   0                                  
  1 0 1 0 0                                                               
  0 1 1 0 1                                                               
  1 1 0 0 1                                                               
  0 -1 0 1 0                                                              
  1 -1 1 1 0                                                              
  0 2 0 1 0                                                               
  1 2 1 1 0                                                               
  0 -2 1 0 1                                                              
  1 -2 0 0 1                                                              
______________________________________                                    
Thus the Sign Extension Word LSB is 0 when the multiplicand is negative and the least significant partial product multiplier value is 1 or -2 or when the multiplicand is positive and the multiplier is -1 or 2. Let N and M be defined as in the table and be stored in the fine sine ROM for the least significant partial product multiplier. Thus N is 1 when the least significant partial product's multiplier is -1 or 2 and M equal 1 when the least significant partial product's multiplier is 1 or -2. Using these signals, FIG. 10 shows logic for sign extension computation where Sn, is the nth bit of the sign extension word and +n is the "+" for the nth recoded bit pair. This logic computes the sign extension word in an efficient manner.
Scaling
FIG. 2 shows input data samples x(n) multiplying the output of the sin/cos generator as part of the down conversion. The data samples and the sin/cos generator output typically will have two's complement format, and thus the multiplication of -1 from the sin/cos generator with a .[.frill.]. .Iadd.full .Iaddend.scale negative data sample may arise and cause an overflow. Sin/cos generator 300 avoids the overflow possibility by scaling its output by a factor slightly less than 1. The effect of this scaling can be undone as part of the filtering which follows the multiplication in FIG. 2. In particular, sin/cos generator 300 stores the coarse angle sines and cosines in scaled form. Indeed, the coarse cosine ROM stored values are generated using the formula:
Round{2.sup.18 (1-2.sup.-17 -2.sup.-18)cos(π[Coarse Phase Count]/2.sup.9)}/2.sup.18
where Coarse Phase Count is the number in the range 0 to 255 corresponding to the 8-bit coarse phase as a binary number. The scale factor 1-2-17 -2-18 insures proper results when final rounding to 17 bits two's complement format occurs in the sum of products computation of sin(A+B) and cos(A+B). Similarly, the coarse sine ROM stored values derive from:
Round{2.sup.18 (1-2.sup.-17 -2.sup.-18)sin(π[Coarse Phase Count]/2.sup.9)}/2.sup.18
Note that the coarse sine and coarse cosine must be represented to 18 bits.
Multiplexer Location
FIG. 3 illustrates the location of multiplexers 315-316 as between ROMs 311-312 and registers 321-322 and, similarly, the location of multiplexers 335-336 as between ROM 331 and register 341. In fact, the multiplexers are essentially located at the ROM sense amplifiers and avoid the time delay of multiplexer location downstream of the registers. The ROMs use a sense amplifier with sufficient drive to set the registers.
Second Preferred Embodiment
FIG. 8 illustrates a second preferred embodiment sin/cos generator 800 which duplicates much of the circuitry of sin/cos generator 300. However, sin/cos generator 800 stores sines and cosines of only nonnegative fine angles. This implies increase in ROM size because the symmetry of the fine angle about 0 will not be exploited and the cosine approximation worsens by a factor of about 4, but this also permits a simplification of the hardware related to the fine ROMs as is apparent in FIG. 8. Again using the 8-bit coarse and 8-bit fine phase example, the fine phase encodes fine angles as follows.
______________________________________                                    
8-bit Fine Phase                                                          
                Fine Angle                                                
______________________________________                                    
0000 0000       0                                                         
  0000 0001 2.sup.17                                                      
  0000 0010 22.sup.17                                                     
  . . . . . .                                                             
  0111 1111 (2.sup.7 - 1)2.sup.17                                         
  1000 0000 2.sup.10                                                      
  1000 0001 (2.sup.7 + 1)2.sup.17                                         
  . . . . . .                                                             
  1111 1101 (2.sup.8 - 3)2.sup.17                                         
  1111 1110 (2.sup.8 - 2)2.sup.17                                         
  1111 1111 (2.sup.8 - 1)2.sup.17                                         
______________________________________                                    
Because the coarse angles are offset and centered in the coarse intervals, the 18-bit phase 000 . . . 00 word no longer encodes the angle 0. Rather it encodes the coarse angle offset, π/210. Thus to align the input phase with the angle encoded, 00 0000 0000 1000 0000 is subtracted from the input phase word.
Sin/cos generator 800 operates as follows. As with sin/cos generator 300, the the two quadrant bits determine signs (COS(A) SIGN REG and SIN(A) SIGN REG), selection between "+" and "-" recoding of the fine sines, and the quadrant LSB determines coarse angle sine/cosine interchange for quadrant changes (XOR gate 102). In fact, nonnegative fine angles implies that the fine phase MSB is used to address the fine angle ROM, and the quadrant bits directly control MUX 155 and MUX 157. See FIG. 8. The coarse angle encoding for sin/cos generator 800 duplicates that of sin/cos generator 300, and MUX 105 plus MUX 107 again provide the sine/cosine interchange for complementary angles. Sin/cos generator 800 contains the same multiplexer-exclusive NOR arrays and Wallace trees as sin/cos generator 300. The fine angle ROM in sin/cos generator 800 is twice the size of the fine angle ROM in sin/cos generator 300, but it eliminates the two's complement addressing circuitry and its associated delay. The delay reduction means less address setup time is required.
The coarse angles and the fine angles include 0, so there is the possibility of a multiplication of -1 times -1 in the multipliers which will cause an overflow for numbers in two's complement format unless an extra bit is used. The overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2-17 -2-18 which can be compensated for subsequently in the system. Thus the recoded fine sine and cosines remain the same.
Third Preferred Embodiment
The third preferred embodiment sin/cos generator is similar to the second preferred embodiment but with the coarse angles at the lower endpoints of the coarse intervals. That is, the coarse phase encodes coarse angles as follows.
______________________________________                                    
8-bit Coarse Phase                                                        
                Coarse Angle                                              
______________________________________                                    
0000 0000       0                                                         
  0000 0001 2.sup.9                                                       
  0000 0010 22.sup.9                                                      
  . . . . . .                                                             
  0111 1111 (2.sup.7 - 1)2.sup.9                                          
  1000 0000 4                                                             
  1000 0001 (2.sup.7 + 1)2.sup.9                                          
  . . . . . .                                                             
  1111 1101 (2.sup.8 - 3)2.sup.9                                          
  1111 1110 (2.sup.8 - 2)2.sup.9                                          
  1111 1111 (2.sup.8 - 1)2.sup.9                                          
______________________________________                                    
The coarse angles are again symmetric about π/4, but the two's complement of a coarse phase encodes the complement of the angle, except for angle 0. And angle π/4 is encoded by a two's complement invariant address. The storing only of coarse sines and cosines up to π/4 can again be coupled with the interchange of sine/cosine to cover the entire first quadrant. Rather than a one's complement on the address a two's complement driven by the coarse phase MSB is required. With fine angles encoded as in the second preferred embodiment, the phase 000 . . . 000 encodes the angle 0.
The coarse angles and the fine angles both include 0, so there is the possibility of a multiplication of -1 times -1 which will cause an overflow for numbers in two's complement format unless an extra bit is used. The overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2-17 -2-18 which can be compensated for subsequently in the system. Thus the recoded fine sine and cosines remain the same.
Fourth Preferred Embodiment
The fourth preferred embodiment is again similar to the first preferred embodiment in that the coarse angles are symmetrical about π/4 plus centered in the coarse intervals and the fine angles are symmetric about 0. However, in the fourth preferred embodiment the number of coarse intervals is not a power of 2. This requires a change in the phase generation but not in the sin/cos generator hardware.
For example, if a quadrant were divided into 1000 coarse intervals and each coarse interval divided into 100 fine intervals, then 10-bit coarse phase and 7-bit fine phase will be required. The phase generator could count up to 100 and then reset the fine phase count and increment the coarse phase count. When the coarse phase count reaches 1000, the phase generator resets the coarse phase count and increments the quadrant count. The fine and coarse ROMs will have 7-bit and 10-bit addresses, but symmetry of the storage will be more involved in general. However, an address symmetric phase could be used and thereby permit the phase to be the address and thus use the same address complementers as in sin/cos generator 300. In particular, the fine phase count could start at 0001110 (14) and count to 1110001 (113) and then reset plus increment the coarse phase count. This preserves the two's complement of a fine address correspondence to the negative of the encoded angle. 0001110 encodes the largest magnitude negative fine angle. Similarly, the coarse phase count could start at 00000 01100 (12) and count to 11111 10011 (1011) with one's complement of the phase corresponding to the address of the coarse angle symmetry about π/4.
The coarse angles and the fine angles both include 0, so there is the possibility of a multiplication of -1 times -1 which will cause an overflow for numbers in two's complement format unless an extra bit is used. The overflow can also be avoided by either employing saturation logic or by scaling the coarse sines and cosines by a factor such as 1-2-17 -2-18 which can be compensated for subsequently in the system. Thus the recoded fine sine and cosines remain the same.
FURTHER MODIFICATIONS AND VARIATIONS
The preferred embodiments may be modified in many ways while retaining one of more of the features of symmetrical coarse angles about π/4, symmetrical fine angles about 0, and storing recoded fine angle sines and cosines to provide multiplier controls for the multiplier/adders used to compute the output sine and cosine values.
For example, the coarse interval size, the number of coarse and fine angles, the input phase word size, and the output precision could all be separately varied; this would change the number and sizes of the ROMS, especially if the coarse intervals were of nonuniform sizes. Further, the use of fine ROM shown in FIG. 3 could be a full size ROM thus eliminating the delay associated with computing the two's complement of the input address and its associated circuitry.

Claims (20)

What is claimed is:
1. A sin/cos generator, comprising:
(a) a coarse memory storing sines and cosines of coarse angles with said coarse angles within the first octant;
(b) a fine memory storing sines .[.and cosines.]. of fine angles with the magnitudes of said fine angles within .Iadd.half .Iaddend.the difference between successive coarse angles;
(c) a phase input decoder, said decoder decoding an input phase to yield a coarse memory address and a fine memory address; and
(d) arithmetic circuitry .[.coupling said first and second memories with addition, multiplication, and sign circuitry whereby.]. .Iadd.coupled to said memories for computing .Iaddend.the sine and cosine of an angle encoded by said input phase .[.is computed.]. using .[.the.]. trigonometric formulas .[.sin(A+B)=sin(A)cos(B)+cos(A)sin(B) and cos(A+B)=cos(A)cos(B)-sin(A)sin(B).]..
2. The sin/cos generator of claim 1, wherein.[.:
(a).]. said decoder partitions an input phase of 2+N+M bits into 2 quadrant bits, N coarse phase bits, and M fine phase bits.[.; and
(b) when said N coarse phase bits encode a coarse angle in the second octant, said decoder one's complements the least significant N-1 bits of said N coarse phase bits to provide an address for said coarse memory which encodes a complementary angle in the first octant.]..
3. The sin/cos generator of claim 2, wherein:
(a) said fine angles include both positive and negative angles; and
(b) said fine memory stores sines .[.and cosines.]. of only nonpositive fine angles.
4. The sin/cos generator of claim 3, wherein:
(a) when said M fine phase bits encode a positive fine angle, said decoder two's complements said M fine phase bits to provide an address for said fine memory which encodes a negative angle.
5. The sin/cos generator of claim 4, wherein:
(a) the default address of said fine memory stores the sine of one fine angle, and all other fine angles are in symmetric pairs.
6. The sin/cos generator of claim 4, wherein:
(a) said 2 quadrant bits, the MSB of said N coarse phase bits, and the MSB of said M fine phase bits determine signs and sine-cosine exchanges used in said trigonometric formulas.
7. The sin/cos generator of claim 2, wherein:
(a) N equals 8; and
(b) M equals 8.
8. The sin/cos generator of claim 2, wherein:
(a) said fine angles includes only nonnegative angles.
9. The sin/cos generator of claim 1, wherein:
(a) said arithmetic circuitry includes a multiplier using a recoded input and Wallace tree plus final adder for addition of partial products; and
(b) said fine sines are stored in recoded format in said fine memory.
10. The sin/cos generator of claim 9, wherein:
(a) said recoded format is bit pairwise recoding as follows:
______________________________________                                    
              Original                                                    
  Original Carry next more Recoded Carry                                  
  Bit Pair in significant Bit Pair out "+"  "-"                           
______________________________________                                    
00     0      **        00     0     0     0                              
  00 1 ** 01 0 0 1                                                        
  01 0 ** 01 0 0 1                                                        
  01 1 ** 10 0 0 1                                                        
  10 0 *0/0* 10 0 0 1                                                     
  10 0 11 10 1 1 0                                                        
  10 1 ** 01 1 1 0                                                        
  11 0 ** 01 1 1 0                                                        
  11 1 ** 00 1 0 0.                                                       
______________________________________                                    
11. The sin/cos generator of claim 10, wherein:
(a) said arithmetic circuitry has multiplexers for partial product insertion into said Wallace trees which each include: a first AND gate with inputs the MSB of the recoded bit pair and the N-1 bit of the multiplicand, a second AND gate with inputs the LSB of the recoded bit pair and the N bit of the multiplicand, a NOR gate with inputs connected to the outputs of said first and second AND gates, and an exclusive NOR gate with inputs connected to the output of said NOR gate and the "+" associated with the recoded bit pair.
12. The sin/cos generator of claim 11, wherein:
a) said arithmetic circuitry has sign extension word circuitry with the bits Sj of the sign extension word output by: for S0 the NOR of (i) the AND of signal "M" and the sign of the multiplicand and (ii) the AND of signal "N" and the complement of the sign of the multiplicand with "N" and "M" as in the following table; for S1 the NAND of (i) 0th recoded bit pair is 10 and (ii) the OR of (a) the AND of the signal "+" for the 0th recoded bit pair and the sign of the multiplicand and (b) the NOR of the signal "+" for the 0th recoded bit pair and the sign of the multiplicand; for Sn the NAND of (i) nth recoded bit pair is 01 and (ii) the OR of (a) the AND of the signal "+" for the nth recoded bit pair and the sign of the multiplicand and (b) the NOR of the signal "+" for the nth recoded bit pair and the sign of the multiplicand; for Sn+1 the NAND of (i) nth recoded bit pair is 10 and (ii) the OR of (a) the AND of the signal "+" for the nth recoded bit pair and the sign of the multiplicand and (b) the NOR of the signal "+" for the nth recoded bit pair and the sign of the multiplicand; and
(b) the the "N" and "M" signals are as follows and stored with the least significant partial product multiplier:
______________________________________                                    
          Least significant                                               
                      Sign Extension                                      
  Multiplicand partial product Word least                                 
  Sign multiplier value significant bit N M                               
______________________________________                                    
0         0           1            0   0                                  
  1 0 1 0 0                                                               
  0 1 1 0 1                                                               
  1 1 0 0 1                                                               
  0 -1 0 1 0                                                              
  1 -1 1 1 0                                                              
  0 2 0 1 0                                                               
  1 2 1 1 0                                                               
  0 -2 1 0 1                                                              
  1 -2 0 0 1.                                                             
______________________________________                                    
13. A method of generating the sine and cosine of an angle, comprising the steps of:
(a) partitioning an input angle into an input quadrant indicator, an input coarse angle, and an input fine angle where said input coarse angle is one of a plurality of coarse angles located in the first quadrant and said input fine angle is one of a plurality of fine angles located .[.in a range of extent equal to the difference.]. between successive coarse angles;
(b) providing a first lookup table of sines and cosines of coarse angles for coarse angles in the first octant;
(c) using said first lookup table to find the sine and cosine of said input coarse angle, and when said input coarse angle is in the second octant its complementary angle is used in said first lookup table;
(d) providing a second lookup table of sines .[.and cosines.]. of fine angles;
(e) using said second lookup table to find the sine .[.and cosine.]. of said input fine angle; and
(f) combining said sine and cosine of said input coarse angle and said sine and .Iadd.a .Iaddend.cosine of said fine angle according to said quadrant indicator to yield the sine .Iadd.and cosine .Iaddend.of said input angle.
14. The method of claim 13, wherein:
said fine angles include both positive and negative angles and said second lookup table contains .[.only.]. sines .[.and cosines.]. of nonpositive fine .[∠]. .Iadd.angles.Iaddend., and when said input fine angle is positive its .[.true's.]. .Iadd.two's .Iaddend.complement is used in said second lookup table.
15. The method of claim 13, wherein:
said fine angles are nonnegative.
16. The method of claim 15, wherein:
said input angle is encoded as a 2+N+M bit phase, and the 2 most significant bits form said quadrant indicator, the N next most significant bits encode said coarse angle, and the M least significant bits encode the fine angle, and said N bits provide addressing for said first lookup table and said M bits provide addressing for said second lookup table. .Iadd.
17. The generator of claim 1 wherein said fine memory stores values of one minus the cosines of said fine angles. .Iaddend..Iadd.18. The generator of claim 1 wherein said trigonometric formulas are sin(A+B)=sin(A)-Dsin(A)+cos(A)sin(B) and cos(A+B)=cos(A)-Dcos(A)-sin(A)sin(B), where A is one of said coarse angles, B is one of said fine angles, and D is one minus cos(B). .Iaddend..Iadd.19. The generator of claim 18 wherein said cos(B) is set to the value one. .Iaddend..Iadd.20. The generator of claim 18 wherein cos(B) is 1-(ax 2-x +ax+1 2-(x+1) + . . . ), and wherein said fine memory stores at least ax. .Iaddend..Iadd.21. The generator of claim 1 wherein said sines and cosines are stored in said coarse memory as positive numbers. .Iaddend..Iadd.22. The generator of claim 21 wherein said sines and cosines in said coarse memory are scaled by a scale factor slightly less than one. .Iaddend..Iadd.23. The generator of claim 22 wherein said scale factor is no greater than (1-2-x), where x is a predetermined number related to the desired precision of the sine and cosine computed by said arithmetic circuitry. .Iaddend..Iadd.24. The generator of claim 1 wherein said fine memory stores cosines of fine angles. .Iaddend..Iadd.25. The generator of claim 1 wherein when said N coarse phase bits encode one of said coarse angles in the second octant, said decoder one's complements the least significant bits to provide an address for said coarse memory which encodes a complementary angle in the
first octant. .Iaddend..Iadd.26. The generator of claim 1 wherein said fine memory stores sines of fine angles with the magnitude of said fine angles within one-half the difference between successive coarse angles. .Iaddend..Iadd.27. The method of claim 13 wherein the second lookup table includes the values of one minus the cosine of fine angles. .Iaddend..Iadd.28. The method of claim 13 wherein the step of combining comprises use of the trigonometric formulas sin(A+B)=sin(A)-Dsin(A)+cos(A)sin(B) and cos(A+B)=cos(A)-Dcos(A)sin(A)sin(B), where A is one of the coarse angles, B is one of the fine angles, and D is one minus cos(B). .Iaddend..Iadd.29. The method of claim 13 wherein the cosines of fine angles are in the second lookup table. .Iaddend..Iadd.30. A method of providing sines and cosines of phase angles input to a sin/cos generator, each of the input angles including a quadrant indicator, a coarse angle and a fine angle within the difference between successive coarse angles, the method comprising the steps of:
(a) providing sines and cosines of the coarse angles within the first octant from a coarse memory;
(b) providing sines of the fine angles from a fine memory;
(c) determining whether the cosine of each of the fine angles is the value one, or the value (1-D), where D is a predetermined number related to the precision of the fine angles; and
(d) computing sines and cosines of input angles according to the quadrant indicator using trigonometric formulae that include multiplications of sines and cosines from the memories and the determined fine angle cosine value. .Iaddend..Iadd.31. The method of claim 30 where, in the event a multiplication of a fine angle sine produces a first product with a sign extension word, and a multiplication of a fine angle cosine produces a D partial product with a sign extension word, further comprising the step of,
combining the sign extension words from the first and D partial products.
.Iaddend..Iadd.32. In a circuit having means for computing the sine and cosine of any phase angle 0° to 360° using trigonometric formulas and means for storing values related to phase angles, the improvement wherein said computing means comprises means for performing calculations using trigonometric formulas (1) sin(A+B)=sin(A)-Dsin(A)+cos(A)sin(B) and (2) cos(A+B)=cos(A)-Dcos(A)-sin(A)sin(B), where A is one of said coarse angles, B is one of said fine angles, and D is one minus cos(B). .Iaddend..Iadd.33. The circuit of claim 32 wherein said means for storing values related to phase angles is limited to values within a contiguous
45°. .Iaddend..Iadd.34. The circuit of claim 32 wherein said means for storing values includes a coarse memory for coarse angles within said contiguous 45° and a fine memory for fine angles within one-half of the difference between successive coarse angles. .Iaddend..Iadd.35. The circuit of claim 34 wherein said fine memory stores values of one minus the cosines of said fine angles. .Iaddend..Iadd.36. In a sin/cos generator having input means for receiving an input signal related to a selected one of 360° phase angles, storage means for storing data related to the sin/cos of phase angles within a contiguous 45° of the 360°, and circuit means for calculating the sin/cos of any selected phase angle of the 360° using the data from said storage means, the improvement wherein said calculating means includes means for calculating any selected angle of the 360° using only said input signal and the stored data related to the sin/cos of the phase angles within said contiguous 45°. .Iaddend.
US08/400,811 1992-08-14 1995-03-08 Sine/cosine generator and method Expired - Lifetime USRE36388E (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US08/400,811 USRE36388E (en) 1992-08-14 1995-03-08 Sine/cosine generator and method

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/930,926 US5276633A (en) 1992-08-14 1992-08-14 Sine/cosine generator and method
US08/400,811 USRE36388E (en) 1992-08-14 1995-03-08 Sine/cosine generator and method

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US07/930,926 Reissue US5276633A (en) 1992-08-14 1992-08-14 Sine/cosine generator and method

Publications (1)

Publication Number Publication Date
USRE36388E true USRE36388E (en) 1999-11-09

Family

ID=25459969

Family Applications (2)

Application Number Title Priority Date Filing Date
US07/930,926 Ceased US5276633A (en) 1992-08-14 1992-08-14 Sine/cosine generator and method
US08/400,811 Expired - Lifetime USRE36388E (en) 1992-08-14 1995-03-08 Sine/cosine generator and method

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US07/930,926 Ceased US5276633A (en) 1992-08-14 1992-08-14 Sine/cosine generator and method

Country Status (1)

Country Link
US (2) US5276633A (en)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6434582B1 (en) * 1999-06-18 2002-08-13 Advanced Micro Devices, Inc. Cosine algorithm for relatively small angles
US20030188136A1 (en) * 2002-03-28 2003-10-02 Intel Corporation Addressing mode and/or instruction for providing sine & cosine value pairs
US20030229658A1 (en) * 2002-06-06 2003-12-11 Guidry David W. Method of pattern lossless compression
US20040249874A1 (en) * 2003-03-14 2004-12-09 Petri Jarske Method of generating sinusoidal signal
US20050278403A1 (en) * 2004-06-14 2005-12-15 Miller Brian M Numerically controlled oscillator and method of operation
US20090300088A1 (en) * 2008-05-29 2009-12-03 Harris Corporation Sine/cosine generator
US20100013527A1 (en) * 2008-07-15 2010-01-21 Warnick Karl F Apparatus, system, and method for integrated phase shifting and amplitude control of phased array signals
US20110055303A1 (en) * 2009-09-03 2011-03-03 Azuray Technologies, Inc. Function Generator
US20110109507A1 (en) * 2009-11-09 2011-05-12 Linear Signal, Inc. Apparatus, system, and method for integrated modular phased array tile configuration
US20140195579A1 (en) * 2006-11-09 2014-07-10 Pentomics, Inc. Efficient Angle Rotator Configured for Dynamic Adjustment
US9244483B1 (en) * 2006-11-09 2016-01-26 Pentomics, Inc. Excess-fours processing in direct digital synthesizer implementations
US9547327B2 (en) 2006-11-09 2017-01-17 Alan N. Willson, Jr. Excess-fours processing in direct digital synthesizer implementations
US9875084B2 (en) 2016-04-28 2018-01-23 Vivante Corporation Calculating trigonometric functions using a four input dot product circuit
CN111258542A (en) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 Multiplier, data processing method, chip and electronic equipment

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5467294A (en) * 1994-03-09 1995-11-14 Hu; Vince High speed, low power direct digital synthesizer
US5615139A (en) * 1994-03-23 1997-03-25 Advanced Micro Devices, Inc. Apparatus and method for synthesizing a sinusoidal signal
DE69534097T2 (en) * 1994-12-21 2006-02-09 Koninklijke Philips Electronics N.V. Booth multiplier for trigonometric functions
KR970016929A (en) * 1995-09-25 1997-04-28 김광호 How to express numbers
FR2741173B1 (en) * 1995-11-10 1997-12-05 Sextant Avionique FAST MULTIPLIER TO MULTIPLY A DIGITAL SIGNAL BY A PERIODIC SIGNAL
JPH1032531A (en) * 1996-07-16 1998-02-03 Nec Corp Phase angle data and trigonometric function conversion circuit, and synthesis diversity receiver
US5774082A (en) * 1997-03-13 1998-06-30 Raytheon Company Digital phase to digital sine and cosine amplitude translator
KR100324314B1 (en) * 1998-11-06 2002-06-20 김영환 Sign / Cosine Function Generation Circuit
US6661852B1 (en) 1999-07-21 2003-12-09 Raytheon Company Apparatus and method for quadrature tuner error correction
US6640237B1 (en) 1999-07-27 2003-10-28 Raytheon Company Method and system for generating a trigonometric function
US7203718B1 (en) * 1999-10-29 2007-04-10 Pentomics, Inc. Apparatus and method for angle rotation
US6874006B1 (en) 1999-10-29 2005-03-29 Pentomics, Inc. Apparatus and method for rectangular-to-polar conversion
US6772181B1 (en) 1999-10-29 2004-08-03 Pentomics, Inc. Apparatus and method for trigonometric interpolation
US6373316B1 (en) * 2000-01-18 2002-04-16 International Business Machines Corporation Digital cosine and sine multiplication circuits
US6647075B1 (en) 2000-03-17 2003-11-11 Raytheon Company Digital tuner with optimized clock frequency and integrated parallel CIC filter and local oscillator
US6590948B1 (en) 2000-03-17 2003-07-08 Raytheon Company Parallel asynchronous sample rate reducer
US6879627B1 (en) * 2000-06-01 2005-04-12 Shiron Satellite Communications (1996) Ltd. Variable rate continuous mode satellite modem
US7007052B2 (en) * 2001-10-30 2006-02-28 Texas Instruments Incorporated Efficient real-time computation
WO2004082146A2 (en) * 2004-02-10 2004-09-23 Raytheon Company Digital-phase to digital amplitude translator with first bit off priority coded output for input to unit weighed digital to analog converter
US7580964B2 (en) * 2006-01-25 2009-08-25 Teledyne Technologies Incorporated Hardware-efficient phase-to-amplitude mapping design for direct digital frequency synthesizers
US8090756B2 (en) * 2007-01-29 2012-01-03 International Business Machines Corporation Method and apparatus for generating trigonometric results
US8312551B2 (en) * 2007-02-15 2012-11-13 Harris Corporation Low level sequence as an anti-tamper Mechanism
US7937427B2 (en) * 2007-04-19 2011-05-03 Harris Corporation Digital generation of a chaotic numerical sequence
US7921145B2 (en) * 2007-05-22 2011-04-05 Harris Corporation Extending a repetition period of a random sequence
US8611530B2 (en) * 2007-05-22 2013-12-17 Harris Corporation Encryption via induced unweighted errors
US7995757B2 (en) 2007-05-31 2011-08-09 Harris Corporation Closed galois field combination
US7962540B2 (en) * 2007-06-07 2011-06-14 Harris Corporation Mixed radix number generator with chosen statistical artifacts
US7974413B2 (en) * 2007-06-07 2011-07-05 Harris Corporation Spread spectrum communications system and method utilizing chaotic sequence
US7970809B2 (en) * 2007-06-07 2011-06-28 Harris Corporation Mixed radix conversion with a priori defined statistical artifacts
US8005221B2 (en) * 2007-08-01 2011-08-23 Harris Corporation Chaotic spread spectrum communications system receiver
US7995749B2 (en) * 2007-10-30 2011-08-09 Harris Corporation Cryptographic system configured for extending a repetition period of a random sequence
US8180055B2 (en) * 2008-02-05 2012-05-15 Harris Corporation Cryptographic system incorporating a digitally generated chaotic numerical sequence
US8363830B2 (en) 2008-02-07 2013-01-29 Harris Corporation Cryptographic system configured to perform a mixed radix conversion with a priori defined statistical artifacts
US8040937B2 (en) * 2008-03-26 2011-10-18 Harris Corporation Selective noise cancellation of a spread spectrum signal
US8139764B2 (en) * 2008-05-06 2012-03-20 Harris Corporation Closed galois field cryptographic system
US8320557B2 (en) 2008-05-08 2012-11-27 Harris Corporation Cryptographic system including a mixed radix number generator with chosen statistical artifacts
US8145692B2 (en) * 2008-05-29 2012-03-27 Harris Corporation Digital generation of an accelerated or decelerated chaotic numerical sequence
US8064552B2 (en) * 2008-06-02 2011-11-22 Harris Corporation Adaptive correlation
US8068571B2 (en) * 2008-06-12 2011-11-29 Harris Corporation Featureless coherent chaotic amplitude modulation
US8325702B2 (en) * 2008-08-29 2012-12-04 Harris Corporation Multi-tier ad-hoc network in which at least two types of non-interfering waveforms are communicated during a timeslot
US8165065B2 (en) * 2008-10-09 2012-04-24 Harris Corporation Ad-hoc network acquisition using chaotic sequence spread waveform
US8351484B2 (en) * 2008-12-29 2013-01-08 Harris Corporation Communications system employing chaotic spreading codes with static offsets
US8406276B2 (en) * 2008-12-29 2013-03-26 Harris Corporation Communications system employing orthogonal chaotic spreading codes
US8392492B2 (en) * 2009-01-19 2013-03-05 Himax Media Solutions, Inc. Sine/cosine value generation apparatus
US8457077B2 (en) * 2009-03-03 2013-06-04 Harris Corporation Communications system employing orthogonal chaotic spreading codes
US8428102B2 (en) * 2009-06-08 2013-04-23 Harris Corporation Continuous time chaos dithering
US8509284B2 (en) * 2009-06-08 2013-08-13 Harris Corporation Symbol duration dithering for secured chaotic communications
US8428103B2 (en) * 2009-06-10 2013-04-23 Harris Corporation Discrete time chaos dithering
US8406352B2 (en) 2009-07-01 2013-03-26 Harris Corporation Symbol estimation for chaotic spread spectrum signal
US8428104B2 (en) 2009-07-01 2013-04-23 Harris Corporation Permission-based multiple access communications systems
US8369376B2 (en) * 2009-07-01 2013-02-05 Harris Corporation Bit error rate reduction in chaotic communications
US8379689B2 (en) * 2009-07-01 2013-02-19 Harris Corporation Anti-jam communications having selectively variable peak-to-average power ratio including a chaotic constant amplitude zero autocorrelation waveform
US8340295B2 (en) * 2009-07-01 2012-12-25 Harris Corporation High-speed cryptographic system using chaotic sequences
US8363700B2 (en) 2009-07-01 2013-01-29 Harris Corporation Rake receiver for spread spectrum chaotic communications systems
US8385385B2 (en) 2009-07-01 2013-02-26 Harris Corporation Permission-based secure multiple access communication systems
US8369377B2 (en) 2009-07-22 2013-02-05 Harris Corporation Adaptive link communications using adaptive chaotic spread waveform
US8848909B2 (en) 2009-07-22 2014-09-30 Harris Corporation Permission-based TDMA chaotic communication systems
US8345725B2 (en) 2010-03-11 2013-01-01 Harris Corporation Hidden Markov Model detection for spread spectrum waveforms
RU2012102842A (en) 2012-01-27 2013-08-10 ЭлЭсАй Корпорейшн INCREASE DETECTION OF THE PREAMBLE
CN103999078B (en) * 2011-10-27 2017-03-22 英特尔公司 Vector processor having instruction set with vector convolution funciton for FIR filtering
US9813223B2 (en) 2013-04-17 2017-11-07 Intel Corporation Non-linear modeling of a physical system using direct optimization of look-up table values
US9923595B2 (en) 2013-04-17 2018-03-20 Intel Corporation Digital predistortion for dual-band power amplifiers
US9904311B1 (en) * 2016-08-09 2018-02-27 Stmicroelectronics S.R.L. System and a method for a waveform generator
CN106533393B (en) * 2016-12-28 2023-06-06 佛山科学技术学院 Sine wave digital phase shifting circuit
CN108155910B (en) * 2017-12-21 2021-11-09 中国船舶重工集团公司第七0七研究所 High-speed sine and cosine encoder decoding method based on FPGA
JP7262028B2 (en) * 2019-07-01 2023-04-21 ラピスセミコンダクタ株式会社 trigonometric function unit
US20220317972A1 (en) * 2021-03-30 2022-10-06 Micron Technology, Inc. Hardware for concurrent sine and cosine determination

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4077063A (en) * 1976-08-11 1978-02-28 The Singer Company Apparatus for rapidly determining the trigonometric functions of an input angle
US4486846A (en) * 1982-06-28 1984-12-04 Motorola Inc. Numerically controlled oscillator using quadrant replication and function decomposition
US5073869A (en) * 1989-08-25 1991-12-17 Titan Linkabit Corporation Suppression of spurious frequency components in direct digital frequency synthesizer
US5113361A (en) * 1990-08-02 1992-05-12 Harris Corporation Sin/cos generator implementation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4077063A (en) * 1976-08-11 1978-02-28 The Singer Company Apparatus for rapidly determining the trigonometric functions of an input angle
US4486846A (en) * 1982-06-28 1984-12-04 Motorola Inc. Numerically controlled oscillator using quadrant replication and function decomposition
US5073869A (en) * 1989-08-25 1991-12-17 Titan Linkabit Corporation Suppression of spurious frequency components in direct digital frequency synthesizer
US5113361A (en) * 1990-08-02 1992-05-12 Harris Corporation Sin/cos generator implementation

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6434582B1 (en) * 1999-06-18 2002-08-13 Advanced Micro Devices, Inc. Cosine algorithm for relatively small angles
US20030188136A1 (en) * 2002-03-28 2003-10-02 Intel Corporation Addressing mode and/or instruction for providing sine & cosine value pairs
US7260592B2 (en) * 2002-03-28 2007-08-21 Intel Corporation Addressing mode and/or instruction for providing sine and cosine value pairs
US20030229658A1 (en) * 2002-06-06 2003-12-11 Guidry David W. Method of pattern lossless compression
US20040249874A1 (en) * 2003-03-14 2004-12-09 Petri Jarske Method of generating sinusoidal signal
US7321911B2 (en) * 2003-03-14 2008-01-22 Nokia Corporation Method of generating sinusoidal signal
US20050278403A1 (en) * 2004-06-14 2005-12-15 Miller Brian M Numerically controlled oscillator and method of operation
US7437391B2 (en) * 2004-06-14 2008-10-14 Agilent Technologies, Inc. Numerically controlled oscillator and method of operation
US20140195579A1 (en) * 2006-11-09 2014-07-10 Pentomics, Inc. Efficient Angle Rotator Configured for Dynamic Adjustment
US9244483B1 (en) * 2006-11-09 2016-01-26 Pentomics, Inc. Excess-fours processing in direct digital synthesizer implementations
US9547327B2 (en) 2006-11-09 2017-01-17 Alan N. Willson, Jr. Excess-fours processing in direct digital synthesizer implementations
US9268529B2 (en) * 2006-11-09 2016-02-23 Pentomics, Inc. Efficient angle rotator configured for dynamic adjustment
US20090300088A1 (en) * 2008-05-29 2009-12-03 Harris Corporation Sine/cosine generator
US8200728B2 (en) * 2008-05-29 2012-06-12 Harris Corporation Sine/cosine generator
US8195118B2 (en) 2008-07-15 2012-06-05 Linear Signal, Inc. Apparatus, system, and method for integrated phase shifting and amplitude control of phased array signals
US20100013527A1 (en) * 2008-07-15 2010-01-21 Warnick Karl F Apparatus, system, and method for integrated phase shifting and amplitude control of phased array signals
US20110055445A1 (en) * 2009-09-03 2011-03-03 Azuray Technologies, Inc. Digital Signal Processing Systems
US20110055303A1 (en) * 2009-09-03 2011-03-03 Azuray Technologies, Inc. Function Generator
US8872719B2 (en) 2009-11-09 2014-10-28 Linear Signal, Inc. Apparatus, system, and method for integrated modular phased array tile configuration
US20110109507A1 (en) * 2009-11-09 2011-05-12 Linear Signal, Inc. Apparatus, system, and method for integrated modular phased array tile configuration
US9875084B2 (en) 2016-04-28 2018-01-23 Vivante Corporation Calculating trigonometric functions using a four input dot product circuit
CN111258542A (en) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 Multiplier, data processing method, chip and electronic equipment
CN111258542B (en) * 2018-11-30 2022-06-17 上海寒武纪信息科技有限公司 Multiplier, data processing method, chip and electronic equipment

Also Published As

Publication number Publication date
US5276633A (en) 1994-01-04

Similar Documents

Publication Publication Date Title
USRE36388E (en) Sine/cosine generator and method
US5757794A (en) Digital down converter and method
US5606575A (en) FFT-based channelizer and combiner employing residue-adder-implemented phase advance
EP0323675B1 (en) An arrangement for generating an SSB signal
US3891803A (en) Single sideband system for digitally processing a given number of channel signals
US5574671A (en) True/complementer for a half-band filter
US5430764A (en) Direct digital frequency synthesizer
FI85076C (en) Digital radio frequency receiver
EP0545546B1 (en) Digital radio modulator/demodulator
CA1068410A (en) Error correction code and apparatus for the correction of differentially encoded quadrature phase shift keyed data (dqpsk)
AU573966B2 (en) Zero-if digital receiver
Torosyan et al. A 300-MHz quadrature direct digital synthesizer/mixer in 0.25-μm CMOS
WO1998023030A1 (en) Signal processing system and method for enhanced cascaded integrator-comb interpolation filter stabilization
US20140195579A1 (en) Efficient Angle Rotator Configured for Dynamic Adjustment
US4514825A (en) High speed digital modem
JPS61210734A (en) Digital circuit for decoding digitized demodulation fm stereo signal
US20080183790A1 (en) Efficient Angle Rotator Configured for Dynamic Adjustment
US9094761B2 (en) Digital technique for FM modulation of infrared headphone interface signals
US6526110B1 (en) Embedded RAM based digital signal processor
US4873500A (en) Phase accumulation continuous phase modulator
US4723288A (en) Stereo decoding by direct time sampling
KR100957321B1 (en) Software mobile terminal and signal processing method using that
US4691318A (en) Data transmission system with error correcting data encoding
US4550339A (en) Binary divider as for a digital auto flesh circuit
CA1212437A (en) Data transmission system with error correcting data encoding

Legal Events

Date Code Title Description
AS Assignment

Owner name: INTERSIL CORPORATION, FLORIDA

Free format text: AMEND TO ADD PROPERTIES RECORDED ON REEL 10247, FRAME 0043.;ASSIGNOR:HARRIS CORPORATION;REEL/FRAME:010884/0394

Effective date: 19990813

AS Assignment

Owner name: CREDIT SUISSE FIRST BOSTON, AS COLLATERAL AGENT, N

Free format text: SECURITY INTEREST;ASSIGNOR:INTERSIL CORPORATION;REEL/FRAME:010351/0410

Effective date: 19990813

FPAY Fee payment

Year of fee payment: 8

FEPP Fee payment procedure

Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

FPAY Fee payment

Year of fee payment: 12

AS Assignment

Owner name: MORGAN STANLEY & CO. INCORPORATED,NEW YORK

Free format text: SECURITY AGREEMENT;ASSIGNORS:INTERSIL CORPORATION;TECHWELL, INC.;INTERSIL COMMUNICATIONS, INC.;AND OTHERS;REEL/FRAME:024390/0608

Effective date: 20100427