KR20220170751A - Cordic computation of sin/cos using combined approach in associative memory - Google Patents

Cordic computation of sin/cos using combined approach in associative memory Download PDF

Info

Publication number
KR20220170751A
KR20220170751A KR1020220070831A KR20220070831A KR20220170751A KR 20220170751 A KR20220170751 A KR 20220170751A KR 1020220070831 A KR1020220070831 A KR 1020220070831A KR 20220070831 A KR20220070831 A KR 20220070831A KR 20220170751 A KR20220170751 A KR 20220170751A
Authority
KR
South Korea
Prior art keywords
lut
index
angle
iterations
associative memory
Prior art date
Application number
KR1020220070831A
Other languages
Korean (ko)
Inventor
모쉐 레이져
사무엘 리프쉬
알모그 레비
Original Assignee
쥐에스아이 테크놀로지 인코포레이티드
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 쥐에스아이 테크놀로지 인코포레이티드 filed Critical 쥐에스아이 테크놀로지 인코포레이티드
Publication of KR20220170751A publication Critical patent/KR20220170751A/en

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/544Methods 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 for evaluating functions by calculation
    • G06F7/5446Methods 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 for evaluating functions by calculation using crossaddition algorithms, e.g. CORDIC
    • 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/4806Computations with complex numbers
    • G06F7/4818Computations with complex numbers using coordinate rotation digital computer [CORDIC]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
    • G06F17/175Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method of multidimensional data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/04Trigonometric functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Abstract

A method for an associative memory device comprises the steps of providing a look up table (LUT) with all possible solutions for N first iterations of a CORDIC algorithm; receiving a plurality of input angles; concurrently computing a location index for each of the plurality of input angles, and concurrently storing each index in a column of the associative memory device; copying a solution from the LUT in the location index to a plurality of columns associated with the index; and concurrently performing M additional iterations of the CORDIC algorithm in the plurality of columns to compute the value of a trigonometrical function for each angle.

Description

연상 메모리에서 통합된 접근법을 사용하는 사인/코사인의 CORDIC 계산{CORDIC COMPUTATION OF SIN/COS USING COMBINED APPROACH IN ASSOCIATIVE MEMORY}CORDIC COMPUTATION OF SIN/COS USING COMBINED APPROACH IN ASSOCIATIVE MEMORY}

관련 출원들에 대한 상호 참조CROSS REFERENCES TO RELATED APPLICATIONS

본 출원은 2021 년 6 월 23 일 출원된 미국 가출원 제 63/213,780 호의 우선권을 주장하는데, 이 문헌은 원용에 의해 본 명세서에 통합된다.This application claims priority from U.S. Provisional Application Serial No. 63/213,780, filed on June 23, 2021, which is incorporated herein by reference.

본 발명은 일반적으로 삼각함수를 계산하는 것에 관한 것이고, 특히 연상 메모리 디바이스 내에서 CORDIC 알고리즘을 사용하는 것에 관한 것이다.The present invention relates generally to computing trigonometric functions, and more particularly to the use of CORDIC algorithms within associative memory devices.

CORDIC(COordinate Rotation DIgital Computer) 알고리즘은 사인 및 코사인과 같은 삼각 함수를 계산하기 위한 알고리즘이다. 이것은 모든 인기 있는 그래픽 계산기에 있는 근사화 함수와 같이 사용된다.The CORDIC (COordinate Rotation Digital Computer) algorithm is an algorithm for calculating trigonometric functions such as sine and cosine. It is used like an approximation function in all popular graphing calculators.

CORDIC 알고리즘은 복소수를, 일련의 상수 값으로 승산함으로써 복소수의 위상을 "회전"시키는 사상을 중심으로 발전되어 왔다. 승산은 천이 및 가산을 사용하여 하드웨어로 구현될 수 있는 2의 거듭제곱에 의한 것일 수 있다.The CORDIC algorithm has developed around the idea of "rotating" the phase of a complex number by multiplying it by a series of constant values. The multiplication may be by a power of two, which may be implemented in hardware using transitions and additions.

이제부터 참조하는 도 1a는 단위 원(반경이 1과 동일한 원)에 있는 포인트(x, y)를 예시한다. 포인트(x, y)는 각도 α의 다음과 같은 두 개의 삼각 함수와 같이 표현될 수 있다: x = cos(α) 및 y = sin(α).Figure 1A, to which reference is now made, illustrates a point (x, y) on a unit circle (a circle with a radius equal to 1). The point (x, y) can be expressed as two trigonometric functions of angle α: x = cos(α) and y = sin(α).

CORDIC 알고리즘은 각도

Figure pat00001
를 감소시킴으로써 시계방향 및/또는 반시계방향 회전의 연속적인 반복을 수행한다. 반복은 각도 0에서 시작할 수 있고, 여기에서 알고리즘의 각각의 단계는 각도 α를 향한 회전을 수행한다. 또는, 반복은 각도 α에서 시작할 수 있고, 여기에서 알고리즘의 각각의 단계는 각도 0을 향한 회전을 수행한다.The CORDIC algorithm is angular
Figure pat00001
Perform successive iterations of clockwise and/or counterclockwise rotation by decreasing . The iteration can start at angle 0, where each step of the algorithm performs a rotation towards angle α. Or, the iteration can start at angle α, where each step of the algorithm performs a rotation towards angle zero.

이제부터 참조하는 도 1b는 각도 α의 사인 또는 코사인의 값을 결정하기 위하여 반복적으로 사용되는 CORDIC 알고리즘의 일 예이고, 각도 0에서부터 시작한다. 첫 번 째 반복에서, 제 1 회전각(

Figure pat00002
)은 반시계방향으로 회전하여 단위 원의 포인트 v1에 도달할 수 있다. 이러한 예에서 각도 α는
Figure pat00003
보다 크다; 그러므로, 다음 반복 시에, 회전각(
Figure pat00004
)도 역시 반시계방향이고 각도 α에 더 가깝게 도착하여 포인트 v2에 도달한다. 결과적으로 얻어지는 각도(
Figure pat00005
+
Figure pat00006
)는 각도 α보다 크고, 따라서 다음 반복 시에, 회전각(
Figure pat00007
)은 시계방향으로 회전하여 각도 α에 더 가까운 각도(
Figure pat00008
)가 될 수 있다. 각도
Figure pat00009
가 α에 더 가까워지게 하는 회전 프로시저는 미리 결정된(T) 회수의 반복을 계속한다. 결과적으로 얻어지는 각도
Figure pat00010
및 α 사이의 차이는 이러한 프로시저에서의 최대의 오차(mistake)를 나타내고, 이것은 1/2T이다.FIG. 1B, to which reference is now made, is an example of a CORDIC algorithm used iteratively to determine the value of the sine or cosine of angle α, starting at angle zero. In the first iteration, the first rotation angle (
Figure pat00002
) can rotate counterclockwise to reach the point v 1 on the unit circle. In this example the angle α is
Figure pat00003
greater than; Therefore, in the next iteration, the rotation angle (
Figure pat00004
) is also counterclockwise and arrives closer to angle α to point v 2 . The resulting angle (
Figure pat00005
+
Figure pat00006
) is greater than the angle α, so in the next iteration, the rotation angle (
Figure pat00007
) rotates clockwise to an angle closer to angle α (
Figure pat00008
) can be Angle
Figure pat00009
The rotation procedure, which brings x closer to α, continues for a predetermined (T) number of iterations. the resulting angle
Figure pat00010
The difference between α and α represents the maximum misstake in this procedure, which is 1/2 T.

포인트(x, y)가 벡터

Figure pat00011
로서 표현되는 경우, 모든 반복은 회전을 연산하고, 이것은 벡터
Figure pat00012
를 수학식 1에 표현된 각도
Figure pat00013
를 나타내는 회전 매트릭스
Figure pat00014
로 승산함으로써 수행된다:point(x, y) is a vector
Figure pat00011
, every iteration computes a rotation, which is a vector
Figure pat00012
the angle expressed in Equation 1
Figure pat00013
Rotation matrix representing
Figure pat00014
This is done by multiplying by:

Figure pat00015
Figure pat00015

회전 매트릭스

Figure pat00016
는 수학식 2에 의해서 규정된다:rotation matrix
Figure pat00016
is defined by Equation 2:

Figure pat00017
Figure pat00017

Figure pat00018
이 되도록 회전각
Figure pat00019
를 선택하면, 탄젠트로 승산하는 것을 수학식 3에 표현된 것처럼 2의 거듭제곱으로 나누는 것으로 대체할 수 있다(그리고 위에서 언급된 바와 같이, 2의 거듭제곱으로 나누는 것은 HW에서 천이 동작에 의하여 구현될 수 있다).
Figure pat00018
Rotation angle so that
Figure pat00019
, we can replace multiplication by tangent with division by a power of 2 as expressed in Equation 3 (and as mentioned above, division by a power of 2 can be implemented by a transition operation in HW). can).

Figure pat00020
Figure pat00020

수학식 4에 의해 표현되는

Figure pat00021
의 값은, 각각의
Figure pat00022
에 대해서 사전에 계산될 수 있다expressed by Equation 4
Figure pat00021
The value of each
Figure pat00022
can be calculated in advance for

Figure pat00023
Figure pat00023

Figure pat00024
에서의
Figure pat00025
의 값은 회전 방향을 결정하고, 여기에서 +1은 반시계방향 회전이고 -1은 시계방향 회전이다.
Figure pat00024
in
Figure pat00025
The value of determines the rotation direction, where +1 is counterclockwise rotation and -1 is clockwise rotation.

CORDIC 알고리즘의 반복들의 시퀀스를 사용하여 코사인 및 사인 값을 계산하기 위하여 사용되는 결과적으로 얻어지는 수학식은 수학식 5 및 6 각각에 의하여 표현될 수 있다. 값 x는 코사인이고, 값 y는 사인이다.The resulting equations used to compute cosine and sine values using a sequence of iterations of the CORDIC algorithm can be expressed by equations 5 and 6, respectively. The value x is the cosine, and the value y is the sine.

Figure pat00026
Figure pat00026

Figure pat00027
Figure pat00027

본 명세서에서 전술된 바와 같이, CORDIC 알고리즘은 반복들의 세트를 포함하고, 여기에서 각각의 단계에서, 알려진 크기의 각도가 이전의 단계에서 계산된 임시 각도에 가산되거나 감산되는데, 코사인 및 사인 값(x 및 y 값)이 요구되는 각도 α의 크기에 도달하는 것이 목적이다.As described herein above, the CORDIC algorithm includes a set of iterations, where at each step an angle of known magnitude is added or subtracted from the temporary angle calculated in the previous step, cosine and sine values (x and y value) to reach the size of the required angle α.

대안적으로(실제 계산을 수행하는 대신에), T 번 반복되는 CORDIC 알고리즘의 모든 가능한 결과는 룩업 테이블(LUT) 내에 사전에 저장될 수 있다. LUT 내의 각각의 엔트리

Figure pat00028
는 CORDIC 알고리즘의
Figure pat00029
회의 반복을 수행한 이후에 각도 α에 대한 사인 및 코사인 값을 제공한다.
Figure pat00030
회의 반복 이후에 CORDIC 알고리즘의 결과를 저장하는 테이블의 크기는 T=
Figure pat00031
이다.Alternatively (instead of performing the actual computation), all possible results of the CORDIC algorithm iterated T times may be pre-stored in a look-up table (LUT). Each entry in the LUT
Figure pat00028
is the CORDIC algorithm
Figure pat00029
After performing round iterations, we give the sine and cosine values for angle α.
Figure pat00030
After meeting iterations, the size of the table storing the results of the CORDIC algorithm is T=
Figure pat00031
to be.

회전 T의 횟수가 결과의 정확도를 결정한다는 것, 그리고 회전의 횟수를 증가시킴으로써 결과(사인/코사인 값)의 정확도가 올라간다는 것이 이해될 수 있다.It can be understood that the number of rotations T determines the accuracy of the result, and that increasing the number of rotations increases the accuracy of the result (sine/cosine value).

LUT를 사용할 때, 반복 T의 횟수는 테이블의 크기 및 테이블을 가리키는 인덱스의 비트수를 결정한다. 실제 계산을 수행할 경우, 반복 T의 횟수는 계산 복잡도를 결정한다.When using a LUT, the number of iterations T determines the size of the table and the number of bits in the index pointing to the table. When performing actual calculations, the number of iterations T determines the computational complexity.

본 발명의 바람직한 실시형태에 따르면, 연상 메모리 디바이스를 위한 방법이 제공된다. 이러한 방법은, CORDIC 알고리즘의 N 회의 최초 반복에 대한 가능한 모든 솔루션을 가지는 룩업 테이블(LUT)을 제공하는 단계, 복수 개의 입력 각도를 수신하는 단계, 상기 복수 개의 입력 각도의 각각의 입력 각도에 대한 위치 인덱스를 동시에 계산하는 단계, 및 각각의 인덱스를 상기 연상 메모리 디바이스의 열 내에 동시에 저장하는 단계를 포함한다. 이러한 방법은 상기 위치 인덱스에 있는 상기 LUT로부터의 솔루션을 상기 인덱스와 연관된 복수 개의 열에 복사하는 단계, 및 상기 복수 개의 입력 각도의 각각의 상기 입력 각도에 대한 삼각 함수의 값을 계산하도록, 상기 복수 개의 열에서 상기 CORDIC 알고리즘의 M 회의 추가적 반복을 동시에 수행하는 단계를 더 포함한다.According to a preferred embodiment of the present invention, a method for an associative memory device is provided. The method includes providing a look-up table (LUT) having all possible solutions for the first N iterations of the CORDIC algorithm, receiving a plurality of input angles, a position of the plurality of input angles for each input angle concurrently computing indices, and concurrently storing each index into a row of the associative memory device. The method includes copying a solution from the LUT at the position index into a plurality of columns associated with the index, and calculating a value of a trigonometric function for each of the plurality of input angles, and concurrently performing M additional iterations of the CORDIC algorithm in the column.

더욱이, 본 발명의 바람직한 실시형태에 따르면, 상기 위치 인덱스를 동시에 계산하는 것은, 각각의 상기 입력 각도에 대하여 동시에 수행되고, 다음 단계들: 임시 각도를 상기 입력 각도의 값으로 초기화하는 단계, 비트의 값 및 부호를 상기 임시 각도와 0 사이의 비교에 기반하여 결정하는 단계, 상기 비트를 상기 위치 인덱스에 할당하는 단계, 상기 부호 및 미리 결정된 각도에 기반하여 회전각을 계산하는 단계, 및 상기 회전각을 상기 임시 각도에 가산하는 단계를 포함한다. 상기 초기화, 결정, 할당 및 계산하는 단계들은 N 회 반복되고 N 개의 비트의 위치 인덱스를 생성하게 된다.Furthermore, according to a preferred embodiment of the present invention, calculating the position index simultaneously is performed for each of the input angles simultaneously, and the following steps: initializing the temporary angle to the value of the input angle, bit determining a value and sign based on a comparison between the temporary angle and zero, assigning the bit to the position index, calculating a rotation angle based on the sign and a predetermined angle, and the rotation angle and adding to the temporary angle. The steps of initializing, determining, assigning, and calculating are repeated N times and result in an N-bit position index.

더욱이, 본 발명의 바람직한 실시형태에 따르면, N = 5 이고 M = 5이다.Moreover, according to a preferred embodiment of the present invention, N = 5 and M = 5.

또한, 본 발명의 바람직한 실시형태에 따르면, 상기 솔루션을 복사하는 단계는, 상기 LUT의 모든 엔트리에 걸쳐서 순차적으로 진행하고, 상기 LUT 내의 위치 인덱스로부터의 X 값 및 Y 값을 동일한 계산된 위치 인덱스를 가지는 모든 열에 동시에 복사하는 것을 포함한다.Further, according to a preferred embodiment of the present invention, the step of copying the solution proceeds sequentially through all entries of the LUT, and converts the X values and Y values from the position indexes in the LUT to the same computed position index. Branching involves copying to all columns simultaneously.

본 발명의 대한 바람직한 실시형태에 따르면, 사인 및 코사인 추정기가 제공된다. 사인 및 코사인 추정기는, CORDIC 알고리즘의 N 회의 최초 반복에 대해서 사전에 계산된 사인 및 코사인 값을 저장하기 위한 룩업 테이블(LUT), 복수 개의 각도에 관련된 정보를 저장하기 위한 연상 메모리 어레이, 상기 복수 개의 각도 인덱스들 각각에 대하여 미리 규정된 회전 각도의 회전을 반영하는 인덱스를 동시에 구축하기 위한 LUT 인덱스 빌더, 상기 LUT 내의 엔트리로부터의 값을 동일한 인덱스를 공유하는 상기 연상 메모리 어레이의 열에 할당하기 위한 LUT 값 할당기, 및 상기 CORDIC 알고리즘의 M 회의 추가적 반복을 상기 연상 메모리 어레이의 복수 개의 열에서 동시에 계산함으로써, 상기 CORDIC 알고리즘의 N + M 회의 반복 이후의 사인 및 코사인 값을 상기 복수 개의 각도에 제공하기 위한 CORDIC 컴퓨터를 포함한다.According to a preferred embodiment of the present invention, sine and cosine estimators are provided. The sine and cosine estimator includes a look-up table (LUT) for storing previously calculated sine and cosine values for the first N iterations of the CORDIC algorithm, an associative memory array for storing information related to a plurality of angles, and the plurality of A LUT index builder for simultaneously building an index reflecting a rotation of a predefined rotation angle for each of the angular indices, a LUT value for assigning a value from an entry in the LUT to a column of the associative memory array that shares the same index. an allocator, and simultaneously computing M additional iterations of the CORDIC algorithm on a plurality of columns of the associative memory array, thereby providing sine and cosine values after N + M iterations of the CORDIC algorithm to the plurality of angles. Includes CORDIC computers.

더 나아가, 본 발명의 바람직한 실시형태에 따르면, 상기 LUT는 25 개의 엔트리를 포함하고, N = 5이다.Furthermore, according to a preferred embodiment of the present invention, the LUT contains 2 5 entries, N = 5.

본 발명으로 여겨지는 기술 요지는 본 명세서의 결론부에서 특정하게 지적되고 명확하게 청구된다. 그러나, 그 목적, 특징, 및 장점과 함께 장치(organization) 및 작동 방법 모두로서의 본 발명은, 첨부 도면과 함께 읽을 때에 후속하는 발명을 실시하기 위한 구체적인 내용을 참조함으로써 가장 잘 이해될 수 있을 것이다:
도 1a는 단위 원에 있는 포인트(x, y)의 개략적인 예시이다;
도 1b는 각도 α의 사인 또는 코사인의 값을 결정하기 위하여 반복적으로 사용되는 최신식 CORDIC 알고리즘의 개략적인 예시이다;
도 2는 N 회의 반복 이후의 CORDIC 알고리즘의 모든 가능한 결과를 저장하는 룩업 테이블(LUT)의 예시도이다;
도 3은 각도 α의 사인 및 코사인을 계산하기 위한 통합된 접근법을 기술하는, 본 발명의 일 실시형태에 따라서 동작하는 흐름의 개략도이다;
도 4는 본 발명의 일 실시형태에 따라 구성되고 동작하는 사인/코사인 추정기의 개략도이다;
도 5는 각각의 입력에 대하여 LUT를 가리키는 각도 인덱스를 생성하기 위한, 도 4의 사인/코사인 추정기에 의하여 수행되는 본 발명의 일 실시형태에 따르는 흐름의 개략도이다;
도 6은 LUT의 값을 연상 메모리 어레이의 열로 복사하기 위한, 도 4의 사인/코사인 추정기에 의하여 수행되는 본 발명의 일 실시형태에 따르는 흐름의 개략도이다;
도 7은 CORDIC 알고리즘의 추가적인 반복을 계산하기 위한, 도 4의 사인/코사인 추정기에 의하여 수행되는 본 발명의 일 실시형태에 따르는 흐름의 개략도이다; 그리고
도 8은 도 4 사인/코사인 추정기에 의하여 사용되고 본 발명의 일 실시형태에 따라 구성되고 동작하는 연상 메모리 어레이의 개략도이다.
간결하고 명확한 설명을 위하여, 도면에 도시된 요소들이 반드시 척도에 맞게 그려진 것은 아니라는 것이 이해될 것이다. 예를 들어, 요소들 중 일부의 치수는 다른 요소에 비하여 과장되어 분명하게 표시될 수도 있다. 더 나아가, 적합하다면, 참조 번호는 도면들에서 반복 사용되어 대응하거나 유사한 요소를 표시할 수도 있다.
The subject matter which is regarded as the present invention is particularly pointed out and distinctly claimed in the concluding section of this specification. However, the present invention, both as an organization and a method of operation, together with its objects, features and advantages, will be best understood by reference to the specific details for carrying out the invention that follow when read in conjunction with the accompanying drawings:
1A is a schematic illustration of a point (x, y) on a unit circle;
Figure lb is a schematic illustration of a state-of-the-art CORDIC algorithm used iteratively to determine the value of the sine or cosine of angle α;
Figure 2 is an exemplary diagram of a lookup table (LUT) storing all possible results of the CORDIC algorithm after N iterations;
3 is a schematic diagram of a flow operating in accordance with one embodiment of the present invention, describing a unified approach for computing the sine and cosine of angle α;
4 is a schematic diagram of a sine/cos estimator constructed and operative in accordance with one embodiment of the present invention;
Fig. 5 is a schematic diagram of a flow according to one embodiment of the present invention, performed by the sine/cos estimator of Fig. 4, for generating an angular index pointing to a LUT for each input;
Figure 6 is a schematic diagram of a flow according to one embodiment of the present invention, performed by the sine/cos estimator of Figure 4, for copying the values of a LUT into a column of an associative memory array;
Fig. 7 is a schematic diagram of a flow according to one embodiment of the present invention, performed by the sine/cos estimator of Fig. 4, for computing additional iterations of the CORDIC algorithm; And
8 is a schematic diagram of an associative memory array used by the FIG. 4 sine/cos estimator and constructed and operative in accordance with one embodiment of the present invention.
For purposes of concise and clear explanation, it will be understood that elements shown in the drawings are not necessarily drawn to scale. For example, the dimensions of some of the elements may be clearly displayed exaggerated relative to other elements. Furthermore, where appropriate, reference numbers may be used repeatedly in the drawings to indicate corresponding or similar elements.

후속하는 상세한 설명에서, 본 발명의 완전한 이해를 제공하기 위하여 여러 특정한 세부사항들이 진술된다. 그러나, 당업자들은 이러한 특정 세부사항들이 없어도 본 발명이 실시될 수 있다는 것을 이해할 것이다. 다른 사례들에서, 본 발명의 양태들을 불필요하게 모호하게 하지 않도록 주지의 방법, 프로시저들 및 구성요소들은 상세히 설명되지 않는다.In the detailed description that follows, numerous specific details are set forth in order to provide a thorough understanding of the present invention. However, those skilled in the art will understand that the invention may be practiced without these specific details. In other instances, well-known methods, procedures and components have not been described in detail so as not to unnecessarily obscure aspects of the invention.

레이더 펄스로부터 이미지를 생성하기 위하여 사용되는 합성 애퍼쳐 레이더(SAR) 알고리즘과 같은 다수의 애플리케이션은 다수의 각도의 삼각 함수를 효율적으로 동시에 계산할 것을 요구한다. 출원인은, 출원인에 의해 공동 소유되고 본 명세서에서 원용에 의해 통합되는 미국 특허 번호 제 9,558,812(발명의 명칭, "SRAM multi-cell operations") 및 미국 특허 번호 제 10,832,746)(발명의 명칭, "Non-volatile in-memory computing device")에 설명된 것과 같은 연상 메모리 디바이스가 여러 각도에 대한 사인 및 코사인 값을 동시에 그리고 효율적으로 계산할 수 있다는 것을 알아냈다.Many applications, such as synthetic aperture radar (SAR) algorithms used to generate images from radar pulses, require efficient simultaneous computation of trigonometric functions of multiple angles. Applicant claims U.S. Patent No. 9,558,812 (entitled "SRAM multi-cell operations") and U.S. Patent No. 10,832,746 (entitled "Non- It has been found that associative memory devices such as those described in “volatile in-memory computing devices” can simultaneously and efficiently compute sine and cosine values for multiple angles.

출원인은, CORDIC 알고리즘을 이러한 디바이스 내에 구현하면 일정한 복잡도로 동시 삼각 함수 계산을 제공할 수 있다는 것을 알아냈다. 복잡도는 CORDIC 알고리즘에 의해서 수행되는 반복(T)의 총 수에만 의존하고 사인 또는 코사인 값이 필요한 입력 각도의 개수(이것은 많은 개수일 수 있고, 예를 들어 32K 개의 각도일 수 있음)에는 의존하지 않을 수 있다.Applicants have found that implementing the CORDIC algorithm within such a device can provide simultaneous trigonometric function calculations with constant complexity. The complexity depends only on the total number of iterations (T) performed by the CORDIC algorithm and will not depend on the number of input angles for which sine or cosine values are required (this can be a large number, for example 32K angles). can

출원인은, CORDIC 알고리즘의 첫 번째 N 회의 반복의 결과가 LUT 내에 저장된 후에 CORDIC 알고리즘에 의해 규정되는 계산이 추가적인 M 회의 반복에 대해서 수행되는 통합된 접근법이, T 회의 반복 전체에 대해서 LUT를 사용하거나 CORDIC 알고리즘의 T 회의 반복을 수행하는 것과 비교하여 총 계산(T = M + N 회의 반복)의 성능을 개선할 수 있다는 것을 역시 알아냈다.Applicant argues that a unified approach in which the calculations specified by the CORDIC algorithm are performed for additional M iterations after the results of the first N iterations of the CORDIC algorithm are stored in the LUT, either use the LUT for all T iterations or CORDIC We also find that we can improve the performance of the total computation (T = M + N iterations) compared to performing T iterations of the algorithm.

통합된 접근법의 일 실시형태에서, LUT는 CORDIC 알고리즘의 5 회의 반복 이후에 획득될 수 있는 모든 가능한 값을 사전에 저장할 수 있고, CORDIC 알고리즘의 그 다음 5 회의 반복은 연상 메모리 어레이 내에서 동시에 수득될 수 있다. CORDIC 알고리즘의 10 회의 반복 이후의 결과의 정확도는

Figure pat00032
0.00097656203 일 수 있다.In one embodiment of the unified approach, the LUT may pre-store all possible values that can be obtained after 5 iterations of the CORDIC algorithm, and the next 5 iterations of the CORDIC algorithm will be simultaneously obtained in the associative memory array. can The accuracy of the result after 10 iterations of the CORDIC algorithm is
Figure pat00032
It can be 0.00097656203.

이제부터 참조할 도 2는 각각의 0<

Figure pat00033
<N에 대하여
Figure pat00034
이 성립하도록 선택될 수 있는, N 개의 미리 규정되고 감소되는 크기를 가지는 각도
Figure pat00035
를 사용한 N 회의 반복 이후의 CORDIC 알고리즘의 모든 가능한 결과를 저장하는 LUT(20)의 일 예이다.2, to which reference will now be made, each 0<
Figure pat00033
About <N
Figure pat00034
angles having N predefined and decreasing magnitudes, which can be selected such that
Figure pat00035
An example of a LUT 20 that stores all possible results of the CORDIC algorithm after N iterations using

LUT(20)의 열(21)은 LUT를 가리키는 인덱스를 제공할 수 있다. LUT를 가리키는 인덱스는 인덱스의 각각의 비트

Figure pat00036
가 반복
Figure pat00037
에서의 회전각
Figure pat00038
의 방향을 표시하도록 구축될 수 있다. 인덱스의 LSB의 값은 첫 번째 회전의 방향을 표시하고, 다음 비트는 다음 회전의 방향을 표시하는 식인데, 이것은 마지막 회전의 방향을 표시하는 MSB에 도달할 때까지 마찬가지이다. 인덱스 내의 비트
Figure pat00039
에 대한 값 0은
Figure pat00040
만큼의 반시계방향 회전을 표시하고, 인덱스 내의 비트
Figure pat00041
에 대한 값 1은
Figure pat00042
만큼의 시계방향 회전을 표시한다.Column 21 of LUT 20 may provide an index pointing to the LUT. The index pointing to the LUT is each bit of the index
Figure pat00036
repeat
Figure pat00037
angle of rotation at
Figure pat00038
It can be built to indicate the direction of The value of the LSB of the index represents the direction of the first rotation, the next bit represents the direction of the next rotation, and so on, until the MSB representing the direction of the last rotation is reached. bits in index
Figure pat00039
A value of 0 for
Figure pat00040
indicates a counterclockwise rotation by the number of bits in the index
Figure pat00041
A value of 1 for
Figure pat00042
indicates clockwise rotation.

LUT(20)의 열(22)은 각각의 가능한 인덱스에 대한 CORDIC 알고리즘의 5 회의 반복 이후의 X(cos(

Figure pat00043
)의 값을 제공할 수 있고, 열(23)은 각각의 가능한 인덱스에 대한 CORDIC 알고리즘의 5 회의 반복 이후의 Y(sin(
Figure pat00044
)의 값을 제공할 수 있다.Column 22 of LUT(20) is X(cos(
Figure pat00043
), column 23 is Y(sin() after 5 iterations of the CORDIC algorithm for each possible index.
Figure pat00044
) can be provided.

LUT(20) 내의 각각의 행(24)은 미리 규정된 각도

Figure pat00045
의 연속 회전에 의하여 유도되는 각도
Figure pat00046
의 사인(Y) 및 코사인(X) 값을 제공할 수 있다.Each row 24 in the LUT 20 has a predefined angle
Figure pat00045
angle induced by successive rotations of
Figure pat00046
can provide the sine (Y) and cosine (X) values of

이제부터 참조할 도 3은 통합된 접근법을 기술하는, 본 발명의 일 실시형태에 따라 동작하는 흐름(300)의 개략도이다. 통합된 접근법에서, 다수의 각도에 대한 사인 및 코사인 계산은 2N 개의 LUT 룩업 및 다음 M 회의 반복에 대한 CORDIC 알고리즘의 병렬 계산으로부터 통합될 수 있다. 다수의 각도

Figure pat00047
에 대한 CORDIC 알고리즘의 처음 N 회의 반복을 대체하는 2N 개의 LUT 룩업, 및 모든 각
Figure pat00048
에 대한 CORDIC 알고리즘의 다음 M 회의 반복의 병렬 계산은 T 회의 회전(T = N + M 개의 회전각)의 전체 범위를 커버한다.3, to which reference is now made, is a schematic diagram of a flow 300 operating in accordance with one embodiment of the present invention, describing an integrated approach. In the unified approach, the sine and cosine calculations for multiple angles can be integrated from parallel computations of the CORDIC algorithm for 2 N LUT lookups and the next M iterations. multiple angles
Figure pat00047
Figure pat00047
2 N LUT lookups replacing the first N iterations of the CORDIC algorithm for , and every
Figure pat00048
The parallel computation of the next M iterations of the CORDIC algorithm for , covers the full range of T rotations (T = N + M rotation angles).

단계 320에서, 흐름(300)은 코사인 및 또는 사인 값이 필요한 다수의 각도

Figure pat00049
를 수신할 수 있다.At step 320, flow 300 directs a number of angles for which cosine and/or sine values are required.
Figure pat00049
can receive

단계 340에서, 흐름(300)은 LUT를 사용하는 통합된 접근법의 제 1 부분을 수행할 수 있다. 단계 340에서, 흐름(300)은 각각의 각도

Figure pat00050
에 대하여, LUT를 가리키는 인덱스를 동시에 계산할 수 있고, LUT 값으로부터 CORDIC 알고리즘의 처음 N 회의 반복에 대해서 사전에 계산된 각각의 각도
Figure pat00051
에 대한 값들
Figure pat00052
Figure pat00053
를 독출할 수 있다.At step 340, flow 300 may perform a first part of a unified approach using a LUT. At step 340, flow 300 is directed to each angle
Figure pat00050
For , the index pointing to the LUT can be calculated simultaneously, and each angle calculated in advance for the first N iterations of the CORDIC algorithm from the LUT value
Figure pat00051
values for
Figure pat00052
and
Figure pat00053
can be read.

단계 360에서, 흐름(300)은 통합된 접근법의 제 2 부분을 수행할 수 있고, CORDIC 계산의 M 회의 추가적 반복을 수행할 수 있다. 단계 360에서, 흐름(300)은 각각의 각도

Figure pat00054
에 대하여, 단계(340)에 의해서 제공된 값들
Figure pat00055
Figure pat00056
로부터 시작하여 CORDIC 알고리즘의 다음 M 회의 반복을 동시에 계산하고 총 T 회의 반복 이후에
Figure pat00057
Figure pat00058
의 최종 값들을 생성할 수 있다.At step 360, flow 300 may perform a second portion of the unified approach and may perform M additional iterations of the CORDIC computation. At step 360, flow 300 is directed to each angle
Figure pat00054
For , the values provided by step 340
Figure pat00055
and
Figure pat00056
Simultaneously compute the next M iterations of the CORDIC algorithm starting from, and after a total of T iterations
Figure pat00057
and
Figure pat00058
can produce the final values of

단계 380에서, 흐름(300)은 T = N + M 회의 반복 이후의 코사인 및 사인 삼각 함수의 추정된 값인 최종 값

Figure pat00059
Figure pat00060
를 제공할 수 있다.At step 380, flow 300 returns the final value, which is the estimated value of the cosine and sine trigonometric functions after T = N + M iterations.
Figure pat00059
and
Figure pat00060
can provide.

이제부터 참조할 도 4는 본 발명의 일 실시형태에 따라 구성되고 동작하는 사인/코사인 추정기(400)의 개략적인 예시이다. 사인/코사인 추정기(400)는 통합된 접근법을 사용할 수 있고, 도 3의 흐름(300)을 구현할 수 있다. 사인/코사인 추정기(400)는 연상 메모리 어레이(410), LUT(420), LUT 인덱스 빌더(430), LUT 값 할당기(440) 및 CORDIC 컴퓨터(450)를 포함한다.4, to which reference is now made, is a schematic illustration of a sine/cos estimator 400 constructed and operative in accordance with one embodiment of the present invention. Sine/cos estimator 400 may use a unified approach and may implement flow 300 of FIG. 3 . The sine/cos estimator 400 includes an associative memory array 410, a LUT 420, a LUT index builder 430, a LUT value assigner 440, and a CORDIC computer 450.

연상 메모리 어레이(410)는 비트 라인(413)(열) 및 워드 라인(415)(행)을 가지는 매트릭스로 배치되는 복수 개의 셀(411)을 포함할 수 있다. 동일한 열 내의 모든 셀(411)은 동일한 비트 라인(413)에 연결될 수 있고, 동일한 행 내의 모든 셀(411)은 동일한 워드 라인(415)에 연결될 수 있다. 연상 메모리 어레이(410)는 본 명세서에서 후술되는 도 7에서 상세히 설명된다. 각도

Figure pat00061
에 관련된 모든 중간 계산 결과가 연상 메모리 어레이(410)의 열 k에 저장될 수 있다.The associative memory array 410 may include a plurality of cells 411 arranged in a matrix having bit lines 413 (columns) and word lines 415 (rows). All cells 411 in the same column can be connected to the same bit line 413, and all cells 411 in the same row can be connected to the same word line 415. Associative memory array 410 is described in detail in FIG. 7 discussed later herein. Angle
Figure pat00061
All intermediate calculation results related to may be stored in column k of the associative memory array 410 .

LUT(420)는 N 회(예를 들어, 5 회)의 회전 이후의 CORDIC 알고리즘의 결과를 저장하는 LUT(20)(도 2)의 일 실시형태일 수 있다. 이러한 실시형태에서, LUT(420)를 가리키는 인덱스 내의 비트수는 5 일 수 있고, LUT(420)의 크기는 25 = 32 일 수 있다. 본 발명의 실시형태들에서, LUT(420)의 크기(32 개의 엔트리)가 사인/코사인 추정기(400)를 구축하기 위해서 사용되는 하드웨어의 현재 성능에 맞춰서 최적화될 수 있다는 것이 이해될 수 있다. LUT(420)의 크기는 앞서 표시된 크기로 한정되지 않고, 하드웨어 성능이 개선됨에 따라 최선의 성능을 얻기 위해서 변할 수 있다.LUT 420 may be an embodiment of LUT 20 (FIG. 2) that stores the result of the CORDIC algorithm after N (eg, 5) rotations. In such an embodiment, the number of bits in the index pointing to LUT 420 may be 5, and the size of LUT 420 may be 2 5 = 32. In embodiments of the invention, it can be appreciated that the size of the LUT 420 (32 entries) can be optimized to match the current performance of the hardware used to build the sine/cos estimator 400. The size of the LUT 420 is not limited to the size indicated above and can be changed to obtain the best performance as hardware performance improves.

본 발명의 일 실시형태에 따라서 구성되고 동작하는 LUT 인덱스 빌더(430)는, 각각의 각도

Figure pat00062
에 대해서, LUT(420)를 가리키는 인덱스로서 사용될 인덱스 Jk를 동시에 생성할 수 있다. LUT 인덱스 빌더(430)는 생성된 인덱스 Jk를 연상 메모리 어레이(410)의 각도
Figure pat00063
에 관련된 그러한 비트 라인(413)에 기록할 수 있다. 각각의 각도
Figure pat00064
에 대한 인덱스 Jk를 생성하기 위한 흐름은 본 명세서에서 후술되는 도 5에서 설명된다.The LUT index builder 430, constructed and operated according to an embodiment of the present invention,
Figure pat00062
For , an index J k to be used as an index pointing to the LUT 420 can be generated at the same time. The LUT index builder 430 is an angle of the memory array 410 associated with the generated index J k .
Figure pat00063
You can write to those bit lines 413 related to . each angle
Figure pat00064
A flow for generating an index J k for is described in FIG. 5 described later in this specification.

본 발명의 일 실시형태에 따라서 구성되고 동작하는 LUT 값 할당기(440)는 LUT(420) 내의 모든 엔트리를 통해서 진행할 수 있고, 각각의 인덱스 Jk에 대한 값

Figure pat00065
Figure pat00066
를 인덱스 Jk와 연관된 연상 메모리 어레이(410)의 그러한 열에 동시에 기록할 수 있다. LUT 값 할당기(440)에 의해 수행되는 흐름은 본 명세서에서 후술되는 도 6에서 설명된다.A LUT value allocator 440 constructed and operating in accordance with one embodiment of the present invention can proceed through all entries in the LUT 420, and a value for each index J k
Figure pat00065
and
Figure pat00066
can be simultaneously written to those columns of the associative memory array 410 associated with index J k . The flow performed by LUT value assigner 440 is illustrated in FIG. 6 described later herein.

본 발명의 일 실시형태에 따라서 구성되고 동작하는 CORDIC 컴퓨터(450)는 각각의 각도

Figure pat00067
에 대해서, 연상 메모리 어레이(410)의 열 내에 저장된 값
Figure pat00068
Figure pat00069
로부터 시작하여 CORDIC 알고리즘의 M 회의 반복을 동시에 계산할 수 있다. CORDIC 컴퓨터(450)에 의해 수행되는 흐름은 본 명세서에서 후술되는 도 7에서 설명된다.A CORDIC computer 450 constructed and operating in accordance with one embodiment of the present invention is
Figure pat00067
For , the value stored in the column of the associative memory array 410
Figure pat00068
and
Figure pat00069
Starting from , M iterations of the CORDIC algorithm can be computed simultaneously. The flow performed by CORDIC computer 450 is illustrated in FIG. 7 discussed later herein.

이제부터 참조할 도 5는 본 발명의 일 실시형태에 따라 구현되고 LUT 인덱스 빌더(430)에 의해 수행되는, 각각의 각도

Figure pat00070
에 대한 인덱스를 계산하기 위한 흐름(500)의 개략도이다. 각각의 입력 각도 αk에 대한 LUT(420)를 가리키는 인덱스는 해당 인덱스 내의 각각의 비트에 대하여 반복적으로 계산될 수 있다.5, to which reference is now made, each angle, implemented in accordance with one embodiment of the present invention and performed by the LUT index builder 430.
Figure pat00070
A schematic diagram of a flow 500 for calculating an index for . An index pointing to the LUT 420 for each input angle α k may be iteratively calculated for each bit within that index.

단계 501에서, LUT 인덱스 빌더(430)는 사인 또는 코사인 값이 요구되는 복수 개의 각도

Figure pat00071
를 수신할 수 있다.In step 501, the LUT index builder 430 selects a plurality of angles for which sine or cosine values are required.
Figure pat00071
can receive

단계 510에서, LUT 인덱스 빌더(430)는 각각의

Figure pat00072
를 입력 각도 αk의 값으로 초기화하고, 반복자(iterator)
Figure pat00073
(해당 인덱스의 비트들에 걸쳐서 반복하기 위하여 사용됨)를 0으로 초기화할 수 있다.At step 510, the LUT index builder 430
Figure pat00072
is initialized to the value of the input angle α k , and an iterator
Figure pat00073
(used to iterate over the bits of that index) can be initialized to 0.

단계 520에서, LUT 인덱스 빌더(430)는 최초의 반복을 모든 각도

Figure pat00074
에 대해서 동시에 시작할 수 있다. 단계들(530, 543, 546, 550 및 560)에서, LUT 인덱스 빌더(430)는 회전을 수행할 수 있고, LUT(420)를 가리키는 복수 개의 인덱스 Jk (인덱스는 각각의 각도 αk에 관련됨) 내의 비트들의 값을 결정할 수 있다. LUT 인덱스 빌더(430)는 각각의 인덱스 Jk에 대하여 N 개의 비트를 계산하기 위하여 N 회의 회전을 수행할 수 있다. 각각의 반복
Figure pat00075
에서, 인덱스 Jk의 비트
Figure pat00076
는 임시 각도
Figure pat00077
의 값을 0과 비교하고 관련된 값(0 또는 1)을 Jk의 비트
Figure pat00078
에 할당함으로써 결정될 수 있다.At step 520, the LUT index builder 430 converts the first iteration to all angles.
Figure pat00074
can start at the same time. At steps 530, 543, 546, 550 and 560, the LUT index builder 430 may perform a rotation, and a plurality of indices J k pointing to the LUT 420 (an index associated with each angle α k ). ) It is possible to determine the values of the bits in. The LUT index builder 430 may perform N rotations to compute N bits for each index J k . each iteration
Figure pat00075
In, the bit of index J k
Figure pat00076
is the temporary angle
Figure pat00077
The value of k is compared to 0 and the associated value (0 or 1) is the bit of J k
Figure pat00078
It can be determined by assigning to

단계 530에서, LUT 인덱스 빌더(430)는 각각의 각도

Figure pat00079
의 값을 0과 비교할 수 있다. 만일 각도
Figure pat00080
가 0보다 작으면, LUT 인덱스 빌더(430)는 단계(546)로 계속 진행할 수 있고, 거기에서
Figure pat00081
에는 값 (-1)이 할당될 수 있으며, 각각의 인덱스 Jk의 비트
Figure pat00082
의 값에는 값 1이 할당될 수 있다. 만일 각도
Figure pat00083
가 0보다 크면, LUT 인덱스 빌더(430)는 단계(543)로 계속 진행할 수 있고, 거기에서
Figure pat00084
에는 값 1이 할당될 수 있으며, 각각의 인덱스 Jk의 비트
Figure pat00085
의 값에는 값 0이 할당될 수 있다. 단계 550에서, LUT 인덱스 빌더(430)는 각각의 인덱스 Jk의 비트
Figure pat00086
의 값을 업데이트하고, 임시 각도
Figure pat00087
에 가산될 수 있는 현재의 회전
Figure pat00088
을 계산할 수 있다(
Figure pat00089
Figure pat00090
로 승산함으로써). 그러면, LUT 인덱스 빌더(430)는 반복자
Figure pat00091
를 증분시켜서 각각의 인덱스 Jk의 다음 비트를 핸들링하게 할 수 있다.At step 530, the LUT index builder 430 calculates each angle
Figure pat00079
The value of can be compared to 0. if angle
Figure pat00080
If is less than zero, LUT index builder 430 may continue to step 546, where
Figure pat00081
A value (-1) may be assigned to, and the bits of each index J k
Figure pat00082
A value of 1 may be assigned to the value of . if angle
Figure pat00083
If is greater than zero, LUT index builder 430 may continue to step 543, where
Figure pat00084
may be assigned a value of 1, and the bits of each index J k
Figure pat00085
A value of 0 may be assigned to the value of . At step 550, the LUT index builder 430 uses the bits of each index J k
Figure pat00086
update the value of , the temporary angle
Figure pat00087
turns of the current that can be added to
Figure pat00088
can be calculated (
Figure pat00089
cast
Figure pat00090
by multiplying by ). Then, the LUT index builder 430 is an iterator
Figure pat00091
It is possible to handle the next bit of each index J k by incrementing .

단계 560에서, LUT 인덱스 빌더(430)는 Jk의 모든 비트가 계산되었는지를 점검할 수 있다. 이러한 인덱스가 준비되지 않으면 LUT 인덱스 빌더(430)는 단계(520)로 복귀할 수 있고, 해당 인덱스가 완료되면 LUT 인덱스 빌더(430)는 출력으로서 각각의 입력 각도

Figure pat00092
에 대한 인덱스 Jk를 제공하고(단계(570)), 계산된 인덱스 Jk를 연상 메모리 어레이(410)의 열에 기록할 수 있다.At step 560, LUT index builder 430 may check whether all bits of J k have been calculated. If no such index is ready, LUT Index builder 430 can return to step 520, and when that index is complete, LUT Index builder 430 outputs each input angle as output.
Figure pat00092
An index J k for , may be provided (step 570), and the calculated index J k may be written to a column of the associative memory array 410.

이제부터 참조할 도 6은 본 발명의 일 실시형태에 따라 구현되고 LUT 인덱스 빌더(440)에 의해 수행되는 흐름(600)의 개략도이다.6, to which reference is now made, is a schematic diagram of a flow 600 implemented in accordance with one embodiment of the present invention and performed by a LUT index builder 440.

단계 601에서, LUT 값 할당기(440)는 각각의 각도

Figure pat00093
에 연관된 인덱스 Jk를 가지는 복수 개의 각도
Figure pat00094
를 수신할 수 있다.At step 601, the LUT value assigner 440 determines each angle
Figure pat00093
A plurality of angles with index J k associated with
Figure pat00094
can receive

단계 610에서, LUT 값 할당기(440)는 반복자

Figure pat00095
(LUT(420)의 엔트리들에 걸쳐서 반복하기 위하여 사용되며, 각각의 엔트리는 하나의 인덱스에 의하여 식별됨)를 0으로 초기화할 수 있다. 단계 620에서, LUT 값 할당기(440)는 최초의 반복을 연상 메모리 어레이(410)의 모든 열에 대해서 동시에 시작할 수 있다. 단계 630에서, 각각의 인덱스 Jk의 값이
Figure pat00096
에 비교될 수 있다. Jk의 값이
Figure pat00097
와 같으면, LUT 값 할당기(440)는 단계(640)로 계속 진행하고 LUT(420) 내의 엔트리
Figure pat00098
로부터의 X의 값을 각도
Figure pat00099
와 연관된 열에 복사하며, 단계(650)로 계속 진행할 수 있다. Jk의 값이
Figure pat00100
와 같지 않으면, LUT 값 할당기(440)는 단계(650)로 바로 진행할 수 있다. 단계 650에서 반복자
Figure pat00101
는 증분될 수 있고, 단계 660에서 LUT 값 할당기(440)는 흐름(600)이 LUT(420)의 마지막 엔트리에 도달했는지를 점검할 수 있다. 엔트리
Figure pat00102
가 마지막 엔트리가 아니면, LUT 값 할당기(440)는 단계(620)로 복귀하여 LUT(420)의 다음 엔트리를 핸들링할 수 있다. 그렇지 않으면, LUT 값 할당기(440)는 메모리 어레이(410)의 열에 기록된 각각의 각도
Figure pat00103
와 연관된
Figure pat00104
Figure pat00105
의 값들을 가지고서 종료할 수 있다(단계(670)).At step 610, the LUT value assigner 440 uses an iterator
Figure pat00095
(used to iterate through the entries of the LUT 420, each entry identified by an index) to zero. At step 620, the LUT value allocator 440 may start an initial iteration simultaneously for all columns of the associative memory array 410. In step 630, the value of each index J k
Figure pat00096
can be compared to The value of J k
Figure pat00097
, LUT value assigner 440 continues to step 640 and the entry in LUT 420
Figure pat00098
Angle the value of X from
Figure pat00099
copy to the column associated with , and may proceed to step 650 . The value of J k
Figure pat00100
is not equal, LUT value assigner 440 may proceed directly to step 650 . Iterator at step 650
Figure pat00101
may be incremented, and at step 660 LUT value allocator 440 may check whether flow 600 has reached the last entry of LUT 420. entry
Figure pat00102
If is not the last entry, LUT value assigner 440 may return to step 620 to handle the next entry in LUT 420. Otherwise, the LUT value allocator 440 calculates each angle recorded in a column of the memory array 410.
Figure pat00103
associated with
Figure pat00104
and
Figure pat00105
may end with the values of (step 670).

이제부터 참조할 도 7은 본 발명의 일 실시형태에 따라 구현되고 CORDIC 컴퓨터(450)에 의해 수행되는 흐름(700)의 개략도이다.7, to which reference is now made, is a schematic diagram of a flow 700 implemented in accordance with one embodiment of the present invention and performed by a CORDIC computer 450.

단계 701에서의 CORDIC 컴퓨터(450)로의 입력은 모두 메모리 어레이(410)의 열 내에 저장되는, 모든 입력 각도

Figure pat00106
,
Figure pat00107
Figure pat00108
의 값 및 LUT 인덱스 빌더(430)에 의하여 계산된 임시 각도
Figure pat00109
의 값일 수 있다. CORDIC 알고리즘의 다음 M 회의 반복도 연상 메모리 어레이(410)의 모든 열에 대해서 동시에 실행될 수 있어서, 모든 입력 각도
Figure pat00110
에 대한 사인 및 코사인 값인 사인/코사인 추정기(400)의 계산의 최종 단계를 제공한다.The inputs to the CORDIC computer 450 at step 701 are all input angles, which are all stored in columns of the memory array 410.
Figure pat00106
,
Figure pat00107
and
Figure pat00108
The value of and the temporary angle calculated by the LUT index builder 430
Figure pat00109
can be the value of The next M iterations of the CORDIC algorithm can also be executed simultaneously for all columns of the associative memory array 410, so that all input angles
Figure pat00110
Provides the final step in the computation of the sine/cos estimator 400, which is the sine and cosine values for .

단계 710에서, CORDIC 컴퓨터(450)는 각각의 각도

Figure pat00111
에 대하여 임시 파라미터
Figure pat00112
Figure pat00113
를 생성할 수 있고, 이들을 각각
Figure pat00114
Figure pat00115
로 초기화할 수 있다. 임시 파라미터는 CORDIC 알고리즘의 계산 전체에 걸쳐서 다음 반복에 대한 입력으로서 사용될 수 있다.At step 710, the CORDIC computer 450 determines each angle
Figure pat00111
About Temporary Parameters
Figure pat00112
and
Figure pat00113
can be generated, and each of them
Figure pat00114
and
Figure pat00115
can be initialized with Temporary parameters can be used as inputs to the next iteration throughout the computation of the CORDIC algorithm.

단계 720에서, 각각의 각도

Figure pat00116
값은 0에 비교될 수 있다. 각도
Figure pat00117
가 0보다 작으면, 흐름(700)은
Figure pat00118
의 값이 (-1)로 설정될 수 있는 단계(736)로 계속 진행할 수 있다. 각도
Figure pat00119
가 0보다 크면, 흐름(700)은
Figure pat00120
의 값이 (+1)로 설정될 수 있는 단계(733)로 계속 진행할 수 있다.At step 720, each angle
Figure pat00116
Values can be compared to zero. Angle
Figure pat00117
If is less than zero, flow 700
Figure pat00118
Continuing to step 736 where the value of k may be set to (-1). Angle
Figure pat00119
If is greater than zero, flow 700 is
Figure pat00120
Continuing to step 733 where the value of k may be set to (+1).

단계 740에서, CORDIC 컴퓨터(450)는 모든 각도

Figure pat00121
에 대하여 동시에, CORDIC 알고리즘의 다음 반복을 계산할 수 있고, 현재의 반복
Figure pat00122
모두에 대한
Figure pat00123
Figure pat00124
의 값들을 수학식 7 및 8에서 규정된 바와 같은 임시 파라미터를 사용하여 업데이트할 수 있다:At step 740, the CORDIC computer 450 determines all angles.
Figure pat00121
At the same time, the next iteration of the CORDIC algorithm can be computed, and the current iteration
Figure pat00122
for all
Figure pat00123
and
Figure pat00124
The values of can be updated using temporary parameters as specified in Equations 7 and 8:

Figure pat00125
Figure pat00125

Figure pat00126
Figure pat00126

현재 회전각

Figure pat00127
Figure pat00128
에 따라서 임시 각도
Figure pat00129
에 가산되거나 감산될 수 있고, 반복자
Figure pat00130
(미리 규정된 각도
Figure pat00131
에 걸쳐서 반복하기 위하여 사용됨)는 증분될 수 있다.current rotation angle
Figure pat00127
Is
Figure pat00128
Temporary angle according to
Figure pat00129
can be added to or subtracted from, and the iterator
Figure pat00130
(predefined angle
Figure pat00131
used to iterate over ) can be incremented.

단계 750에서, CORDIC 컴퓨터(450)는 마지막 반복이 완료되었는지 여부를 점검할 수 있다. 반복이 마지막 반복이 아니면(즉, 반복 i가 T보다 작으면) CORDIC 컴퓨터(450)는 단계(710)로 복귀할 수 있고, 단계(750)에서 점검된 바와 같이 마지막 반복이 수행되어야 하면 CORDIC 컴퓨터(450)는 각각의

Figure pat00132
-
Figure pat00133
Figure pat00134
-의 계산된 값이 각각 cos(
Figure pat00135
) 및 sin(
Figure pat00136
)의 값들을 제공할 수 있는 단계(760)로 계속 진행할 수 있다.At step 750, CORDIC computer 450 may check whether the last iteration has been completed. If the iteration is not the last iteration (i.e. iteration i is less than T) then the CORDIC computer 450 may return to step 710, and as checked at step 750 if the last iteration is to be performed the CORDIC computer (450) is each
Figure pat00132
-
Figure pat00133
and
Figure pat00134
The calculated value of - is respectively cos(
Figure pat00135
) and sin(
Figure pat00136
) may be provided to proceed to step 760 .

CORDIC 컴퓨터(450)에 의해서 수행되는 반복의 횟수(예를 들어, M = 5)가 사인/코사인 추정기(400)의 하드웨어의 현재 성능에 맞춰서 최적화될 수 있지만, 이것으로 한정되는 것은 아니며, 장래의 하드웨어 능력에 따라서 최선의 성능을 얻기 위해서 변할 수 있다는 것이 이해될 수 있다.The number of iterations performed by the CORDIC computer 450 (e.g., M = 5) may be optimized to match the current performance of the hardware of the sine/cos estimator 400, but is not limited thereto, and future It can be appreciated that depending on the hardware capabilities may vary to obtain the best performance.

지금부터 참조하는 도 8은 사인/코사인 추정기(400)에 의해 사용되는 연상 메모리 디바이스(410)를 예시한다. 연상 메모리 어레이(410)는 메모리 어레이(810), 다중 행 디코더(820), 다중 열 디코더(830) 및 제어기(840)를 포함한다.8, to which reference is now made, illustrates an associative memory device 410 used by sine/cos estimator 400. Associative memory array 410 includes a memory array 810 , a multi-row decoder 820 , a multi-column decoder 830 and a controller 840 .

메모리 어레이(810)는, 휘발성 또는 비-휘발성이고, 일시적이거나 비일시적인 임의의 적합한 메모리 어레이일 수 있고, 행과 열로 배열된 순수 메모리 셀을 포함할 수 있다. 한 열 내의 셀들은 해당 열에서 계산을 수행할 수 있는 비트 라인 프로세서에 의해 연결될 수 있다. 한 행 내의 셀들은 다수의 열 내의 셀들을 활성화할 수 있는 워드 라인에 의해서 연결될 수 있다. 입력, 중간 결과 및 출력을 포함하는 데이터는 메모리 어레이(810)의 열 내에 저장될 수 있다.Memory array 810 may be any suitable memory array, volatile or non-volatile, transient or non-transitory, and may include pure memory cells arranged in rows and columns. Cells in a column can be connected by bit line processors that can perform calculations in that column. Cells in a row can be connected by word lines that can activate cells in multiple columns. Data including inputs, intermediate results, and outputs may be stored in columns of memory array 810 .

다중 행 디코더(820)는 복수 개의 행들을 동시에 활성화할 수 있는 임의의 적합한 행 디코더일 수 있다. 다중 행 디코더(820)는 메모리 어레이(810)의 두 개 이상의 행을 한 번에 활성화할 수 있다. 다수의 행들이 활성화되면, 메모리 어레이(810)의 모든 열은 판독 동작이 수행될 경우에는 활성화된 행들에 대한 동시 계산을 제공할 수 있고, 쓰기 동작이 수행될 경우에는 동시 쓰기 동작을 제공할 수 있다.Multi-row decoder 820 may be any suitable row decoder capable of activating multiple rows simultaneously. Multi-row decoder 820 can activate more than one row of memory array 810 at one time. When multiple rows are active, all columns of the memory array 810 can provide concurrent computation for the active rows when a read operation is performed and concurrent write operations when a write operation is performed. there is.

다수의 열 디코더(830)는 복수 개의 열을 동시에 활성화할 수 있는 임의의 적절한 열 디코더, 및 한 열의 셀들을 연결하는 임의의 비트-라인 상의 값을 감지할 수 있을 수 있는 임의의 적절한 감지 회로부를 포함할 수 있다. 다수의 열 디코더(830)는, 다중 행 디코더(820)에 의하여 동시에 활성화된 각각의 열의 다수의 셀들 사이에서 수행된 부울 함수의 결과를 제공할 수 있다. 다중 열 디코더(830)는 어떤 감지된 열을 메모리 어레이(810)에 다시 기록할지를 선택할 수 있고, 복수 개의 감지 회로부 컴포넌트로부터의 값을 동시에 쓸 수 있을 수 있다.Multiple column decoder 830 includes any suitable column decoder capable of activating multiple columns simultaneously, and any suitable sensing circuitry capable of sensing a value on any bit-line connecting a column of cells. can include The multi-column decoder 830 may provide a result of a Boolean function performed between a plurality of cells of each column simultaneously activated by the multi-row decoder 820 . The multi-column decoder 830 can select which sensed columns to write back to the memory array 810 and can write values from multiple sense circuitry components simultaneously.

제어기(840) 다중 행 디코더(820) 및 다중 열 디코더(830)의 활성화를 제어할 수 있다. 제어기(840)는 어떤 행을 현재의 동작, 읽기 또는 쓰기를 위해서 활성화할지를 다중 행 디코더(820)에 표시할 수 있고, 또한 선택적인 쓰기 동작에서 어떤 열로부터 출력을 다시 메모리 어레이(810) 내에 기록할지, 그리고 데이터가 기록될 수 있는 행을 다중 열 디코더(830)에 표시할 수 있다.The controller 840 may control activation of the multi-row decoder 820 and the multi-column decoder 830 . The controller 840 can indicate to the multi-row decoder 820 which row to activate for the current operation, read or write, and also write the output from which column back into the memory array 810 in an optional write operation. whether or not, and rows in which data can be written can be displayed in the multi-column decoder 830.

제어기(840)는 사인/코사인 추정기(400)의 다양한 부분, 예컨대 LUT 인덱스 빌더(430), LUT 값 할당기(440) 및 CORDIC 컴퓨터(450)를 포함할 수 있다.The controller 840 may include various parts of the sine/cos estimator 400, such as a LUT index builder 430, a LUT value assigner 440, and a CORDIC computer 450.

사인/코사인 추정기(400)의 계산이, 다중 읽기 및 다중 쓰기 동작의 결과로서 연상 메모리 어레이 내에서 발생할 수 있다는 것이 이해될 수 있다. 따라서, 사인/코사인 추정기(400)는, 연상 메모리 어레이(410)의 모든 열에 임의의 부울 연산을 동시에 구현하여, 결과적으로 얻어지는 광범위한 병렬 계산이 제자리에 일어나게 할 수 있다. (각각의 열은 단일 각도에 대해 필요한 계산을 수행할 수 있고, 다수의 열을 활성화하는 것은 여러 각도에 대한 삼각 함수의 동시 계산을 초래할 수 있다).It can be appreciated that the computation of the sine/cos estimator 400 may occur within an associative memory array as a result of multiple read and multiple write operations. Thus, the sine/cos estimator 400 can simultaneously implement any Boolean operation on all columns of the associative memory array 410, allowing the resulting extensively parallel computations to occur in place. (Each column can perform the necessary calculations for a single angle; activating multiple columns can result in simultaneous computation of trigonometric functions for multiple angles).

사인/코사인 추정기(400)의 계산의 복잡도가 입력 각도

Figure pat00137
의 개수에 의존하지 않는다는 것이 이해될 수 있다.The computational complexity of the sine/cosine estimator 400 is the input angle
Figure pat00137
It can be understood that it does not depend on the number of .

사인/코사인 추정기(400)는 입력으로서 다수의 각도를 수신할 수 있고, 각각의 각도

Figure pat00138
의 계산을 연상 메모리 어레이(410)의 하나 이상의 전용 열 내에서 처리할 수 있다. 단일 각도의 사인 및 코사인을 계산하는 복잡도가 여러 각도의 사인 및 코사인을 계산하는 복잡도와 같다.The sine/cos estimator 400 may receive multiple angles as input, each angle
Figure pat00138
The computation of can be processed within one or more dedicated columns of the associative memory array 410. The complexity of computing the sines and cosines of a single angle is the same as the complexity of computing the sines and cosines of multiple angles.

LUT 인덱스 빌더(430)는 각각의 각도

Figure pat00139
에 대해서 동시에, 인덱스 Jk를 계산할 수 있다. 이러한 동작의 복잡도는 O(N)일 수 있고, N은 LUT 인덱스의 비트수이다.LUT index builder 430 for each angle
Figure pat00139
At the same time for , the index J k can be calculated. The complexity of this operation may be O(N), where N is the number of bits of the LUT index.

LUT(420) 내의 각각의 엔트리에 대하여, LUT 값 할당기(440)는 X 및 Y의 값을 LUT(420)의 엔트리 Jk로부터 동일한 인덱스 Jk를 공유하는 연상 메모리 어레이(410)의 열들로 동시에 복사할 수 있다. 이러한 동작의 복잡도는 O(2N)이고, N은 LUT 인덱스의 비트수이다.For each entry in LUT 420, LUT value assigner 440 assigns the values of X and Y from entry J k in LUT 420 to columns of associative memory array 410 that share the same index J k . can be copied at the same time. The complexity of this operation is O(2 N ), where N is the number of bits of the LUT index.

각각의 각도에 대하여 동시에, CORDIC 컴퓨터(450)는 M 회의 추가적 반복에 대한 반복 N으로부터 시작하여 X 및 Y의 값을 계산할 수 있다(처음 N 회의 반복에 대한 값은 LUT로부터 취해짐). 이러한 동작의 복잡도는 O(M)이고, M은 CORDIC 알고리즘을 계산하는 반복의 횟수이다.For each angle at the same time, the CORDIC computer 450 can calculate the values of X and Y starting from iteration N for M additional iterations (the values for the first N iterations are taken from the LUT). The complexity of this operation is O(M), where M is the number of iterations to compute the CORDIC algorithm.

또한, 사인/코사인 추정기(400)가 입력 각도

Figure pat00140
의 표현을 라디안 단위이고 점 뒤에 14 개의 비트가 있는 정규화된 부호 고정 소수점으로 수정할 수 있다는 것에도 주목할 수 있다. 정규화는 각각의 각도
Figure pat00141
(범위 [-π, π] 내에 속할 수 있음)를 π로 나누는 것을 포함할 수 있는데, 이것은 새로운 범위 [-1, 1]을 초래할 수 있다.In addition, the sine / cosine estimator 400 is an input angle
Figure pat00140
It may also be noted that we can modify the expression of to a normalized signed fixed-point in radians with 14 bits after the dot. Normalization is for each angle
Figure pat00141
(which may fall within the range [-π, π]) by π, which may result in a new range [-1, 1].

표준 CORDIC 동작은 [-π/2, π/2]의 범위에 속하는 각도들과 동작하는 반면에, 사인/코사인 추정기(400)는 정규화될 수 있는 각도의 전체 범위 [-π, π]에서 동작할 수 있다. 사인/코사인 추정기(400)는 결과를 변환하여 이들을 정규화 이전의 원래의 값으로 다시 정렬시킬 수 있고, 이들을 다시 정규화할 수 있다(2로 나눔).While standard CORDIC operation works with angles in the range of [-π/2, π/2], sine/cos estimator 400 operates over the full range of normalizable angles [-π, π]. can do. The sine/cos estimator 400 can transform the results, rearrange them to their original values before normalization, and normalize them again (divide by 2).

10 회의 반복에 대하여, 최소 회전각은 arctan(1/1024) 라디안이고 이것이 약 0.000976562 라디안이라는 것이 이해될 수 있다; 그러므로, 사인/코사인 추정기(400)의 최대 오차는 약 0.00097656203일 수 있다. (최대 오차는 라디안 단위의 최대 오차를 순수(pure number)(단위가 없는 숫자)로 변환함으로써 추정된다. T = 10 일 경우의 최소 회전각은 1/1024 이고 따라서 코사인에 대한 최대 오차는 4.768*10^-7이고 사인에 대해서는 0.00097656203이다.)For 10 iterations, it can be understood that the minimum rotation angle is arctan(1/1024) radians, which is about 0.000976562 radians; Therefore, the maximum error of the sine/cos estimator 400 may be about 0.00097656203. (The maximum error is estimated by converting the maximum error in radians to a pure number (number without units). For T = 10, the minimum angle of rotation is 1/1024, so the maximum error for cosine is 4.768* 10^-7 and 0.00097656203 for the sine.)

연상 메모리 어레이(410) 내에서의 각각의 방법의 별개의 계산 시간(CORDIC 알고리즘의 10-비트 인덱스 또는 10 회의 반복이 있는 LUT)이 본 명세서에서 다음에 설명된 바와 같은 통합된 접근법의 계산 시간보다 길다는 것이 이해될 수 있다.The separate computation time of each method within the associative memory array 410 (10-bit index of the CORDIC algorithm or LUT with 10 iterations) is less than the computation time of the unified approach as described herein below. It is understandable that it is long.

CORDIC 알고리즘의 10 회의 반복에 대하여: 각각의 반복은 i가 총 770 사이클이 있는 반복 횟수일 경우(68 + 2*i)를 취한다.For 10 iterations of the CORDIC algorithm: each iteration takes (68 + 2*i) where i is the number of iterations with a total of 770 cycles.

10 개의 반복을 커버하는 LUT에 대하여(LUT의 크기는 210임): 인덱스 Jk를 계산하기 위한 각각의 반복은 반복별로 24 개의 사이클을 취하고, 총 240 개의 사이클이 있다.For a LUT covering 10 iterations (the size of the LUT is 2 10 ): each iteration to compute the index J k takes 24 cycles per iteration, for a total of 240 cycles.

LUT(420)로부터의 값을 연상 메모리 어레이(410)로 보내기 위한 룩업의 복잡도는 1024 회의 반복 및 반복별로 5 개의 사이클이고, 이들은 최대 5k 개의 사이클로 합산된다.The complexity of the lookup to send the value from LUT 420 to associative memory array 410 is 1024 iterations and 5 cycles per iteration, which add up to a maximum of 5k cycles.

5 회의 반복이 각각의 부분에 의해서 커버되는 통합된 접근법의 10 회의 반복의 복잡도는(크기 25의 LUT 및 CORDIC 알고리즘의 5 회의 반복), 처음 5 회의 반복에 대하여 CORDIC LUT를 사용하는 흐름(300)의 단계(340)(도 3) 및 다음 5 회의 반복에 대하여 CORDIC 계산을 사용하는 흐름(300)의 단계(350)를 포함한다.The complexity of 10 iterations of the unified approach, where 5 iterations are covered by each part (LUT of size 2 5 and 5 iterations of the CORDIC algorithm), is the flow using the CORDIC LUT for the first 5 iterations (300 ) of step 340 (FIG. 3) and step 350 of flow 300 using CORDIC calculations for the next five iterations.

단계(340)(LUT)는 인덱스 Jk를 구축하기 위하여 24 개의 사이클을 각각 취하는 5 회의 반복(총 5 * 24 = 120 개의 사이클이 있음), 및 LUT로부터의 값을 각각의 각도에 할당하기 위하여 5 개의 사이클을 각각 취하는 32 회의 룩업(총 5 * 32= 180 개가 있음)을 포함하는데, 이들은 전체 LUT 동작에 대해서 120 + 160 = 280 개가 된다.Step 340 (LUT) consists of 5 iterations each taking 24 cycles to build the index J k (total of 5 * 24 = 120 cycles), and to assign a value from the LUT to each angle. It contains 32 lookups each taking 5 cycles (5 * 32 = 180 in total), which makes 120 + 160 = 280 for the entire LUT operation.

CORDIC 부분은 68 + 2*i 개의 사이클을 각각 취하는 5 회의 반복을 포함하고, 이들은 400 개의 사이클 미만으로 합산된다.The CORDIC part contains 5 iterations each taking 68 + 2*i cycles, which add up to less than 400 cycles.

그러므로, 통합된 접근법에 대한 사이클들의 총 수는 280 + 400 = 680 개의 사이클인데, 이것은 10 회의 반복에 대하여 LUT를 사용하는 것(3000) 또는 CORDIC 알고리즘의 10 회의 반복을 수행하는 것(770)보다 적다.Therefore, the total number of cycles for the unified approach is 280 + 400 = 680 cycles, which is less than using the LUT for 10 iterations (3000) or performing 10 iterations of the CORDIC algorithm (770). little.

본 명세서에서 흐름에 대해서 표시된 단계들은 한정하려는 의도가 아니며, 각각의 흐름이 변형되어 실시될 수 있다는 것이 인정될 수 있다. 이러한 변형은, 당업자에게 명백하게 이해될 수 있는 다른 변형들 중에서, 단계의 수가 늘어나는 것, 단계의 구사 줄어드는 것, 단계의 시퀀스를 변경하는 것, 및 단계를 생략하는 것을 포함할 수 있다.The steps indicated for the flows herein are not intended to be limiting, and it can be appreciated that variations of each flow may be practiced. Such variations may include increasing the number of steps, reducing the number of steps, changing the sequence of steps, and omitting steps, among other variations that will be apparent to those skilled in the art.

비록 본 발명의 특정한 특징들이 본 명세서에서 예시되고 설명되었지만, 이제 많은 변형예, 치환예, 변경예, 및 균등물들이 당업자들에게 착안될 수 있을 것이다. 그러므로, 첨부된 청구항은 본 발명의 진정한 사상에 속하는 이러한 모든 변형예 및 변경예를 포함하는 의도를 가진다는 것이 이해되어야 한다.Although specific features of the invention have been illustrated and described herein, many variations, permutations, alterations, and equivalents will now occur to those skilled in the art. Therefore, it should be understood that the appended claims are intended to cover all such modifications and variations as fall within the true spirit of this invention.

Claims (6)

연상 메모리 디바이스(associative memory device)를 위한 방법으로서,
CORDIC 알고리즘의 N 회의 최초 반복에 대한 가능한 모든 솔루션을 가지는 룩업 테이블(LUT)을 제공하는 단계;
복수 개의 입력 각도를 수신하는 단계;
상기 복수 개의 입력 각도의 각각의 입력 각도에 대한 위치 인덱스를 동시에 계산하고, 각각의 인덱스를 상기 연상 메모리 디바이스의 열 내에 동시에 저장하는 단계;
상기 위치 인덱스에 있는 상기 LUT로부터의 솔루션을 상기 인덱스와 연관된 복수 개의 열에 복사하는 단계; 및
상기 복수 개의 입력 각도의 각각의 상기 입력 각도에 대한 삼각 함수의 값을 계산하도록, 상기 복수 개의 열에서 상기 CORDIC 알고리즘의 M 회의 추가적 반복을 동시에 수행하는 단계를 포함하는, 연상 메모리 디바이스를 위한 방법.
As a method for an associative memory device,
providing a look-up table (LUT) with all possible solutions for the first N iterations of the CORDIC algorithm;
receiving a plurality of input angles;
simultaneously calculating a position index for each input angle of the plurality of input angles, and simultaneously storing each index in a row of the associative memory device;
copying a solution from the LUT at the location index into a plurality of columns associated with the index; and
concurrently performing M additional iterations of the CORDIC algorithm in the plurality of columns to compute a value of a trigonometric function for each of the plurality of input angles.
제 1 항에 있어서,
상기 위치 인덱스를 동시에 계산하는 것은,
각각의 상기 입력 각도에 대하여 동시에:
임시 각도를 상기 입력 각도의 값으로 초기화하는 단계;
비트의 값 및 부호를 상기 임시 각도와 0 사이의 비교에 기반하여 결정하는 단계;
상기 비트를 상기 위치 인덱스에 할당하는 단계;
상기 부호 및 미리 결정된 각도에 기반하여 회전각을 계산하는 단계;
상기 회전각을 상기 임시 각도에 가산하는 단계; 및
상기 초기화, 결정, 할당 및 계산하는 단계들을 N 회 반복함으로써 N 개의 비트의 상기 위치 인덱스를 생성하는 단계를 포함하는, 연상 메모리 디바이스를 위한 방법.
According to claim 1,
Simultaneously calculating the position index,
Simultaneously for each of these input angles:
initializing a temporary angle as the value of the input angle;
determining a value and sign of a bit based on a comparison between the temporary angle and zero;
assigning the bit to the location index;
calculating a rotation angle based on the sign and a predetermined angle;
adding the rotation angle to the temporary angle; and
generating the location index of N bits by repeating the initializing, determining, assigning and calculating steps N times.
제 1 항에 있어서,
N = 5 이고 M = 5인, 연상 메모리 디바이스를 위한 방법.
According to claim 1,
A method for an associative memory device, where N = 5 and M = 5.
제 1 항에 있어서,
상기 솔루션을 복사하는 단계는,
상기 LUT의 모든 엔트리에 걸쳐서 순차적으로 진행하고, 상기 LUT 내의 위치 인덱스로부터의 X 값 및 Y 값을 동일한 계산된 위치 인덱스를 가지는 모든 열에 동시에 복사하는 것을 포함하는, 연상 메모리 디바이스를 위한 방법.
According to claim 1,
The step of copying the solution is,
stepping sequentially through all entries of the LUT and simultaneously copying X values and Y values from location indices in the LUT to all columns having the same computed location index.
사인 및 코사인 추정기로서,
CORDIC 알고리즘의 N 회의 최초 반복에 대해서 사전에 계산된 사인 및 코사인 값을 저장하기 위한 룩업 테이블(LUT);
복수 개의 각도에 관련된 정보를 저장하기 위한 연상 메모리 어레이;
상기 복수 개의 각도 인덱스들 각각에 대하여 미리 규정된 회전각의 회전을 반영하는 인덱스를 동시에 구축하기 위한 LUT 인덱스 빌더;
상기 LUT 내의 엔트리로부터의 값을 동일한 인덱스를 공유하는 상기 연상 메모리 어레이의 열에 할당하기 위한 LUT 값 할당기; 및
상기 CORDIC 알고리즘의 M 회의 추가적 반복을 상기 연상 메모리 어레이의 복수 개의 열에서 동시에 계산함으로써, 상기 CORDIC 알고리즘의 N + M 회의 반복 이후의 사인 및 코사인 값을 상기 복수 개의 각도에 제공하기 위한 CORDIC 컴퓨터를 포함하는, 사인 및 코사인 추정기.
As a sine and cosine estimator,
a look-up table (LUT) for storing previously calculated sine and cosine values for the first N iterations of the CORDIC algorithm;
an associative memory array for storing information related to a plurality of angles;
a LUT index builder for simultaneously constructing an index reflecting a rotation of a predefined rotation angle for each of the plurality of angle indices;
a LUT value allocator for assigning values from entries in the LUT to columns of the associative memory array sharing the same index; and
A CORDIC computer for providing sine and cosine values after N + M iterations of the CORDIC algorithm to the plurality of angles by simultaneously calculating M additional iterations of the CORDIC algorithm in the plurality of columns of the associative memory array. , sine and cosine estimators.
제 5 항에 있어서
N = 5이고, 상기 LUT는 25 개의 엔트리를 포함하는, 사인 및 코사인 추정기.
According to claim 5
where N = 5, and the LUT contains 2 5 entries.
KR1020220070831A 2021-06-23 2022-06-10 Cordic computation of sin/cos using combined approach in associative memory KR20220170751A (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US202163213780P 2021-06-23 2021-06-23
US63/213,780 2021-06-23

Publications (1)

Publication Number Publication Date
KR20220170751A true KR20220170751A (en) 2022-12-30

Family

ID=84500959

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220070831A KR20220170751A (en) 2021-06-23 2022-06-10 Cordic computation of sin/cos using combined approach in associative memory

Country Status (3)

Country Link
US (1) US20220413799A1 (en)
KR (1) KR20220170751A (en)
CN (1) CN115509490A (en)

Also Published As

Publication number Publication date
US20220413799A1 (en) 2022-12-29
CN115509490A (en) 2022-12-23

Similar Documents

Publication Publication Date Title
US8200728B2 (en) Sine/cosine generator
KR100528269B1 (en) Method and apparatus for performing microprocessor integer division operations using floating-point hardware
CN108153512B (en) Four-step correlation full adder
US20190228301A1 (en) Vector computation unit in a neural network processor
US20180121789A1 (en) Data processing method and apparatus
Lewis Interleaved memory function interpolators with application to an accurate LNS arithmetic unit
Meher et al. CORDIC designs for fixed angle of rotation
US6385632B1 (en) Fast CORDIC algorithm with sine governed termination
JPH0635680A (en) Digital circuit computing logarithm and method of operating computer system
Linhardt et al. Digit-by-digit transcendental-function computation
EP3931758A1 (en) Neural network layer processing with scaled quantization
KR20220170751A (en) Cordic computation of sin/cos using combined approach in associative memory
US3569684A (en) Sine-cosine generator comprised of a diode array
US20040051713A1 (en) Efficient function interpolation using SIMD vector permute functionality
US20220137925A1 (en) Device and method for hardware-efficient adaptive calculation of floating-point trigonometric functions using coordinate rotate digital computer (cordic)
CN117573069B (en) CORDIC algorithm chip
CN112152811A (en) Digital signature verification engine for reconfigurable circuit devices
Vinh et al. FPGA Implementation of Trigonometric Function Using Loop-Optimized Radix-4 CORDIC
US20230188146A1 (en) Energy-efficient analog-to-digital conversion in mixed signal circuitry
WO2019199442A1 (en) Computing device performance of low precision arithmetic functions with arrays of pre-calculated values
CN114996646A (en) Operation method, device, medium and electronic equipment based on lookup table
CN117648957A (en) Neural network compensation method, device and circuit based on integrated memory calculation circuit
CN114491167A (en) Method for operating neural network model, readable medium and electronic device
CN115965048A (en) Data processing device, data processing method and electronic equipment
Singh et al. Concept and design of scaling-free, look-ahead CORDIC