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 PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 8
- 230000003213 activating effect Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/5446—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/4806—Computations with complex numbers
- G06F7/4818—Computations with complex numbers using coordinate rotation digital computer [CORDIC]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
- G06F17/175—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method of multidimensional data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2101/00—Indexing scheme relating to the type of digital function generated
- G06F2101/04—Trigonometric 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
Description
관련 출원들에 대한 상호 참조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 알고리즘은 각도 를 감소시킴으로써 시계방향 및/또는 반시계방향 회전의 연속적인 반복을 수행한다. 반복은 각도 0에서 시작할 수 있고, 여기에서 알고리즘의 각각의 단계는 각도 α를 향한 회전을 수행한다. 또는, 반복은 각도 α에서 시작할 수 있고, 여기에서 알고리즘의 각각의 단계는 각도 0을 향한 회전을 수행한다.The CORDIC algorithm is angular Perform successive iterations of clockwise and/or counterclockwise rotation by decreasing . The iteration can start at
이제부터 참조하는 도 1b는 각도 α의 사인 또는 코사인의 값을 결정하기 위하여 반복적으로 사용되는 CORDIC 알고리즘의 일 예이고, 각도 0에서부터 시작한다. 첫 번 째 반복에서, 제 1 회전각()은 반시계방향으로 회전하여 단위 원의 포인트 v1에 도달할 수 있다. 이러한 예에서 각도 α는 보다 크다; 그러므로, 다음 반복 시에, 회전각()도 역시 반시계방향이고 각도 α에 더 가깝게 도착하여 포인트 v2에 도달한다. 결과적으로 얻어지는 각도( + )는 각도 α보다 크고, 따라서 다음 반복 시에, 회전각( )은 시계방향으로 회전하여 각도 α에 더 가까운 각도()가 될 수 있다. 각도 가 α에 더 가까워지게 하는 회전 프로시저는 미리 결정된(T) 회수의 반복을 계속한다. 결과적으로 얻어지는 각도 및 α 사이의 차이는 이러한 프로시저에서의 최대의 오차(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 ( ) can rotate counterclockwise to reach the point v 1 on the unit circle. In this example the angle α is greater than; Therefore, in the next iteration, the rotation angle ( ) is also counterclockwise and arrives closer to angle α to point v 2 . The resulting angle ( + ) is greater than the angle α, so in the next iteration, the rotation angle ( ) rotates clockwise to an angle closer to angle α ( ) can be Angle The rotation procedure, which brings x closer to α, continues for a predetermined (T) number of iterations. the resulting angle The difference between α and α represents the maximum misstake in this procedure, which is 1/2 T.
포인트(x, y)가 벡터 로서 표현되는 경우, 모든 반복은 회전을 연산하고, 이것은 벡터 를 수학식 1에 표현된 각도 를 나타내는 회전 매트릭스 로 승산함으로써 수행된다:point(x, y) is a vector , every iteration computes a rotation, which is a vector the angle expressed in
회전 매트릭스 는 수학식 2에 의해서 규정된다:rotation matrix is defined by Equation 2:
이 되도록 회전각 를 선택하면, 탄젠트로 승산하는 것을 수학식 3에 표현된 것처럼 2의 거듭제곱으로 나누는 것으로 대체할 수 있다(그리고 위에서 언급된 바와 같이, 2의 거듭제곱으로 나누는 것은 HW에서 천이 동작에 의하여 구현될 수 있다). Rotation angle so that , 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).
수학식 4에 의해 표현되는 의 값은, 각각의 에 대해서 사전에 계산될 수 있다expressed by Equation 4 The value of each can be calculated in advance for
에서의 의 값은 회전 방향을 결정하고, 여기에서 +1은 반시계방향 회전이고 -1은 시계방향 회전이다. in 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.
본 명세서에서 전술된 바와 같이, 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 내의 각각의 엔트리 는 CORDIC 알고리즘의 회의 반복을 수행한 이후에 각도 α에 대한 사인 및 코사인 값을 제공한다. 회의 반복 이후에 CORDIC 알고리즘의 결과를 저장하는 테이블의 크기는 T= 이다.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 is the CORDIC algorithm After performing round iterations, we give the sine and cosine values for angle α. After meeting iterations, the size of the table storing the results of the CORDIC algorithm is T= 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 회의 반복 이후의 결과의 정확도는 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 It can be 0.00097656203.
이제부터 참조할 도 2는 각각의 0< <N에 대하여 이 성립하도록 선택될 수 있는, N 개의 미리 규정되고 감소되는 크기를 가지는 각도 를 사용한 N 회의 반복 이후의 CORDIC 알고리즘의 모든 가능한 결과를 저장하는 LUT(20)의 일 예이다.2, to which reference will now be made, each 0< About <N angles having N predefined and decreasing magnitudes, which can be selected such that An example of a
LUT(20)의 열(21)은 LUT를 가리키는 인덱스를 제공할 수 있다. LUT를 가리키는 인덱스는 인덱스의 각각의 비트 가 반복 에서의 회전각 의 방향을 표시하도록 구축될 수 있다. 인덱스의 LSB의 값은 첫 번째 회전의 방향을 표시하고, 다음 비트는 다음 회전의 방향을 표시하는 식인데, 이것은 마지막 회전의 방향을 표시하는 MSB에 도달할 때까지 마찬가지이다. 인덱스 내의 비트 에 대한 값 0은 만큼의 반시계방향 회전을 표시하고, 인덱스 내의 비트 에 대한 값 1은 만큼의 시계방향 회전을 표시한다.
LUT(20)의 열(22)은 각각의 가능한 인덱스에 대한 CORDIC 알고리즘의 5 회의 반복 이후의 X(cos()의 값을 제공할 수 있고, 열(23)은 각각의 가능한 인덱스에 대한 CORDIC 알고리즘의 5 회의 반복 이후의 Y(sin()의 값을 제공할 수 있다.
LUT(20) 내의 각각의 행(24)은 미리 규정된 각도 의 연속 회전에 의하여 유도되는 각도 의 사인(Y) 및 코사인(X) 값을 제공할 수 있다.Each
이제부터 참조할 도 3은 통합된 접근법을 기술하는, 본 발명의 일 실시형태에 따라 동작하는 흐름(300)의 개략도이다. 통합된 접근법에서, 다수의 각도에 대한 사인 및 코사인 계산은 2N 개의 LUT 룩업 및 다음 M 회의 반복에 대한 CORDIC 알고리즘의 병렬 계산으로부터 통합될 수 있다. 다수의 각도 에 대한 CORDIC 알고리즘의 처음 N 회의 반복을 대체하는 2N 개의 LUT 룩업, 및 모든 각 에 대한 CORDIC 알고리즘의 다음 M 회의 반복의 병렬 계산은 T 회의 회전(T = N + M 개의 회전각)의 전체 범위를 커버한다.3, to which reference is now made, is a schematic diagram of a
단계 320에서, 흐름(300)은 코사인 및 또는 사인 값이 필요한 다수의 각도 를 수신할 수 있다.At
단계 340에서, 흐름(300)은 LUT를 사용하는 통합된 접근법의 제 1 부분을 수행할 수 있다. 단계 340에서, 흐름(300)은 각각의 각도 에 대하여, LUT를 가리키는 인덱스를 동시에 계산할 수 있고, LUT 값으로부터 CORDIC 알고리즘의 처음 N 회의 반복에 대해서 사전에 계산된 각각의 각도 에 대한 값들 및 를 독출할 수 있다.At
단계 360에서, 흐름(300)은 통합된 접근법의 제 2 부분을 수행할 수 있고, CORDIC 계산의 M 회의 추가적 반복을 수행할 수 있다. 단계 360에서, 흐름(300)은 각각의 각도 에 대하여, 단계(340)에 의해서 제공된 값들 및 로부터 시작하여 CORDIC 알고리즘의 다음 M 회의 반복을 동시에 계산하고 총 T 회의 반복 이후에 및 의 최종 값들을 생성할 수 있다.At
단계 380에서, 흐름(300)은 T = N + M 회의 반복 이후의 코사인 및 사인 삼각 함수의 추정된 값인 최종 값 및 를 제공할 수 있다.At
이제부터 참조할 도 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/
연상 메모리 어레이(410)는 비트 라인(413)(열) 및 워드 라인(415)(행)을 가지는 매트릭스로 배치되는 복수 개의 셀(411)을 포함할 수 있다. 동일한 열 내의 모든 셀(411)은 동일한 비트 라인(413)에 연결될 수 있고, 동일한 행 내의 모든 셀(411)은 동일한 워드 라인(415)에 연결될 수 있다. 연상 메모리 어레이(410)는 본 명세서에서 후술되는 도 7에서 상세히 설명된다. 각도 에 관련된 모든 중간 계산 결과가 연상 메모리 어레이(410)의 열 k에 저장될 수 있다.The
LUT(420)는 N 회(예를 들어, 5 회)의 회전 이후의 CORDIC 알고리즘의 결과를 저장하는 LUT(20)(도 2)의 일 실시형태일 수 있다. 이러한 실시형태에서, LUT(420)를 가리키는 인덱스 내의 비트수는 5 일 수 있고, LUT(420)의 크기는 25 = 32 일 수 있다. 본 발명의 실시형태들에서, LUT(420)의 크기(32 개의 엔트리)가 사인/코사인 추정기(400)를 구축하기 위해서 사용되는 하드웨어의 현재 성능에 맞춰서 최적화될 수 있다는 것이 이해될 수 있다. LUT(420)의 크기는 앞서 표시된 크기로 한정되지 않고, 하드웨어 성능이 개선됨에 따라 최선의 성능을 얻기 위해서 변할 수 있다.
본 발명의 일 실시형태에 따라서 구성되고 동작하는 LUT 인덱스 빌더(430)는, 각각의 각도 에 대해서, LUT(420)를 가리키는 인덱스로서 사용될 인덱스 Jk를 동시에 생성할 수 있다. LUT 인덱스 빌더(430)는 생성된 인덱스 Jk를 연상 메모리 어레이(410)의 각도 에 관련된 그러한 비트 라인(413)에 기록할 수 있다. 각각의 각도 에 대한 인덱스 Jk를 생성하기 위한 흐름은 본 명세서에서 후술되는 도 5에서 설명된다.The
본 발명의 일 실시형태에 따라서 구성되고 동작하는 LUT 값 할당기(440)는 LUT(420) 내의 모든 엔트리를 통해서 진행할 수 있고, 각각의 인덱스 Jk에 대한 값 및 를 인덱스 Jk와 연관된 연상 메모리 어레이(410)의 그러한 열에 동시에 기록할 수 있다. LUT 값 할당기(440)에 의해 수행되는 흐름은 본 명세서에서 후술되는 도 6에서 설명된다.A
본 발명의 일 실시형태에 따라서 구성되고 동작하는 CORDIC 컴퓨터(450)는 각각의 각도 에 대해서, 연상 메모리 어레이(410)의 열 내에 저장된 값 및 로부터 시작하여 CORDIC 알고리즘의 M 회의 반복을 동시에 계산할 수 있다. CORDIC 컴퓨터(450)에 의해 수행되는 흐름은 본 명세서에서 후술되는 도 7에서 설명된다.A
이제부터 참조할 도 5는 본 발명의 일 실시형태에 따라 구현되고 LUT 인덱스 빌더(430)에 의해 수행되는, 각각의 각도 에 대한 인덱스를 계산하기 위한 흐름(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
단계 501에서, LUT 인덱스 빌더(430)는 사인 또는 코사인 값이 요구되는 복수 개의 각도 를 수신할 수 있다.In
단계 510에서, LUT 인덱스 빌더(430)는 각각의 를 입력 각도 αk의 값으로 초기화하고, 반복자(iterator) (해당 인덱스의 비트들에 걸쳐서 반복하기 위하여 사용됨)를 0으로 초기화할 수 있다.At
단계 520에서, LUT 인덱스 빌더(430)는 최초의 반복을 모든 각도 에 대해서 동시에 시작할 수 있다. 단계들(530, 543, 546, 550 및 560)에서, LUT 인덱스 빌더(430)는 회전을 수행할 수 있고, LUT(420)를 가리키는 복수 개의 인덱스 Jk (인덱스는 각각의 각도 αk에 관련됨) 내의 비트들의 값을 결정할 수 있다. LUT 인덱스 빌더(430)는 각각의 인덱스 Jk에 대하여 N 개의 비트를 계산하기 위하여 N 회의 회전을 수행할 수 있다. 각각의 반복 에서, 인덱스 Jk의 비트 는 임시 각도 의 값을 0과 비교하고 관련된 값(0 또는 1)을 Jk의 비트 에 할당함으로써 결정될 수 있다.At
단계 530에서, LUT 인덱스 빌더(430)는 각각의 각도 의 값을 0과 비교할 수 있다. 만일 각도 가 0보다 작으면, LUT 인덱스 빌더(430)는 단계(546)로 계속 진행할 수 있고, 거기에서 에는 값 (-1)이 할당될 수 있으며, 각각의 인덱스 Jk의 비트 의 값에는 값 1이 할당될 수 있다. 만일 각도 가 0보다 크면, LUT 인덱스 빌더(430)는 단계(543)로 계속 진행할 수 있고, 거기에서 에는 값 1이 할당될 수 있으며, 각각의 인덱스 Jk의 비트 의 값에는 값 0이 할당될 수 있다. 단계 550에서, LUT 인덱스 빌더(430)는 각각의 인덱스 Jk의 비트 의 값을 업데이트하고, 임시 각도 에 가산될 수 있는 현재의 회전 을 계산할 수 있다(를 로 승산함으로써). 그러면, LUT 인덱스 빌더(430)는 반복자 를 증분시켜서 각각의 인덱스 Jk의 다음 비트를 핸들링하게 할 수 있다.At
단계 560에서, LUT 인덱스 빌더(430)는 Jk의 모든 비트가 계산되었는지를 점검할 수 있다. 이러한 인덱스가 준비되지 않으면 LUT 인덱스 빌더(430)는 단계(520)로 복귀할 수 있고, 해당 인덱스가 완료되면 LUT 인덱스 빌더(430)는 출력으로서 각각의 입력 각도 에 대한 인덱스 Jk를 제공하고(단계(570)), 계산된 인덱스 Jk를 연상 메모리 어레이(410)의 열에 기록할 수 있다.At
이제부터 참조할 도 6은 본 발명의 일 실시형태에 따라 구현되고 LUT 인덱스 빌더(440)에 의해 수행되는 흐름(600)의 개략도이다.6, to which reference is now made, is a schematic diagram of a
단계 601에서, LUT 값 할당기(440)는 각각의 각도 에 연관된 인덱스 Jk를 가지는 복수 개의 각도 를 수신할 수 있다.At
단계 610에서, LUT 값 할당기(440)는 반복자 (LUT(420)의 엔트리들에 걸쳐서 반복하기 위하여 사용되며, 각각의 엔트리는 하나의 인덱스에 의하여 식별됨)를 0으로 초기화할 수 있다. 단계 620에서, LUT 값 할당기(440)는 최초의 반복을 연상 메모리 어레이(410)의 모든 열에 대해서 동시에 시작할 수 있다. 단계 630에서, 각각의 인덱스 Jk의 값이 에 비교될 수 있다. Jk의 값이 와 같으면, LUT 값 할당기(440)는 단계(640)로 계속 진행하고 LUT(420) 내의 엔트리 로부터의 X의 값을 각도 와 연관된 열에 복사하며, 단계(650)로 계속 진행할 수 있다. Jk의 값이 와 같지 않으면, LUT 값 할당기(440)는 단계(650)로 바로 진행할 수 있다. 단계 650에서 반복자 는 증분될 수 있고, 단계 660에서 LUT 값 할당기(440)는 흐름(600)이 LUT(420)의 마지막 엔트리에 도달했는지를 점검할 수 있다. 엔트리 가 마지막 엔트리가 아니면, LUT 값 할당기(440)는 단계(620)로 복귀하여 LUT(420)의 다음 엔트리를 핸들링할 수 있다. 그렇지 않으면, LUT 값 할당기(440)는 메모리 어레이(410)의 열에 기록된 각각의 각도 와 연관된 및 의 값들을 가지고서 종료할 수 있다(단계(670)).At
이제부터 참조할 도 7은 본 발명의 일 실시형태에 따라 구현되고 CORDIC 컴퓨터(450)에 의해 수행되는 흐름(700)의 개략도이다.7, to which reference is now made, is a schematic diagram of a
단계 701에서의 CORDIC 컴퓨터(450)로의 입력은 모두 메모리 어레이(410)의 열 내에 저장되는, 모든 입력 각도 , 및 의 값 및 LUT 인덱스 빌더(430)에 의하여 계산된 임시 각도 의 값일 수 있다. CORDIC 알고리즘의 다음 M 회의 반복도 연상 메모리 어레이(410)의 모든 열에 대해서 동시에 실행될 수 있어서, 모든 입력 각도 에 대한 사인 및 코사인 값인 사인/코사인 추정기(400)의 계산의 최종 단계를 제공한다.The inputs to the
단계 710에서, CORDIC 컴퓨터(450)는 각각의 각도 에 대하여 임시 파라미터 및 를 생성할 수 있고, 이들을 각각 및 로 초기화할 수 있다. 임시 파라미터는 CORDIC 알고리즘의 계산 전체에 걸쳐서 다음 반복에 대한 입력으로서 사용될 수 있다.At
단계 720에서, 각각의 각도 값은 0에 비교될 수 있다. 각도 가 0보다 작으면, 흐름(700)은 의 값이 (-1)로 설정될 수 있는 단계(736)로 계속 진행할 수 있다. 각도 가 0보다 크면, 흐름(700)은 의 값이 (+1)로 설정될 수 있는 단계(733)로 계속 진행할 수 있다.At
단계 740에서, CORDIC 컴퓨터(450)는 모든 각도 에 대하여 동시에, CORDIC 알고리즘의 다음 반복을 계산할 수 있고, 현재의 반복 모두에 대한 및 의 값들을 수학식 7 및 8에서 규정된 바와 같은 임시 파라미터를 사용하여 업데이트할 수 있다:At
현재 회전각 는 에 따라서 임시 각도 에 가산되거나 감산될 수 있고, 반복자 (미리 규정된 각도 에 걸쳐서 반복하기 위하여 사용됨)는 증분될 수 있다.current rotation angle Is Temporary angle according to can be added to or subtracted from, and the iterator (predefined angle used to iterate over ) can be incremented.
단계 750에서, CORDIC 컴퓨터(450)는 마지막 반복이 완료되었는지 여부를 점검할 수 있다. 반복이 마지막 반복이 아니면(즉, 반복 i가 T보다 작으면) CORDIC 컴퓨터(450)는 단계(710)로 복귀할 수 있고, 단계(750)에서 점검된 바와 같이 마지막 반복이 수행되어야 하면 CORDIC 컴퓨터(450)는 각각의 - 및 -의 계산된 값이 각각 cos() 및 sin()의 값들을 제공할 수 있는 단계(760)로 계속 진행할 수 있다.At
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/
지금부터 참조하는 도 8은 사인/코사인 추정기(400)에 의해 사용되는 연상 메모리 디바이스(410)를 예시한다. 연상 메모리 어레이(410)는 메모리 어레이(810), 다중 행 디코더(820), 다중 열 디코더(830) 및 제어기(840)를 포함한다.8, to which reference is now made, illustrates an
메모리 어레이(810)는, 휘발성 또는 비-휘발성이고, 일시적이거나 비일시적인 임의의 적합한 메모리 어레이일 수 있고, 행과 열로 배열된 순수 메모리 셀을 포함할 수 있다. 한 열 내의 셀들은 해당 열에서 계산을 수행할 수 있는 비트 라인 프로세서에 의해 연결될 수 있다. 한 행 내의 셀들은 다수의 열 내의 셀들을 활성화할 수 있는 워드 라인에 의해서 연결될 수 있다. 입력, 중간 결과 및 출력을 포함하는 데이터는 메모리 어레이(810)의 열 내에 저장될 수 있다.
다중 행 디코더(820)는 복수 개의 행들을 동시에 활성화할 수 있는 임의의 적합한 행 디코더일 수 있다. 다중 행 디코더(820)는 메모리 어레이(810)의 두 개 이상의 행을 한 번에 활성화할 수 있다. 다수의 행들이 활성화되면, 메모리 어레이(810)의 모든 열은 판독 동작이 수행될 경우에는 활성화된 행들에 대한 동시 계산을 제공할 수 있고, 쓰기 동작이 수행될 경우에는 동시 쓰기 동작을 제공할 수 있다.
다수의 열 디코더(830)는 복수 개의 열을 동시에 활성화할 수 있는 임의의 적절한 열 디코더, 및 한 열의 셀들을 연결하는 임의의 비트-라인 상의 값을 감지할 수 있을 수 있는 임의의 적절한 감지 회로부를 포함할 수 있다. 다수의 열 디코더(830)는, 다중 행 디코더(820)에 의하여 동시에 활성화된 각각의 열의 다수의 셀들 사이에서 수행된 부울 함수의 결과를 제공할 수 있다. 다중 열 디코더(830)는 어떤 감지된 열을 메모리 어레이(810)에 다시 기록할지를 선택할 수 있고, 복수 개의 감지 회로부 컴포넌트로부터의 값을 동시에 쓸 수 있을 수 있다.
제어기(840) 다중 행 디코더(820) 및 다중 열 디코더(830)의 활성화를 제어할 수 있다. 제어기(840)는 어떤 행을 현재의 동작, 읽기 또는 쓰기를 위해서 활성화할지를 다중 행 디코더(820)에 표시할 수 있고, 또한 선택적인 쓰기 동작에서 어떤 열로부터 출력을 다시 메모리 어레이(810) 내에 기록할지, 그리고 데이터가 기록될 수 있는 행을 다중 열 디코더(830)에 표시할 수 있다.The
제어기(840)는 사인/코사인 추정기(400)의 다양한 부분, 예컨대 LUT 인덱스 빌더(430), LUT 값 할당기(440) 및 CORDIC 컴퓨터(450)를 포함할 수 있다.The
사인/코사인 추정기(400)의 계산이, 다중 읽기 및 다중 쓰기 동작의 결과로서 연상 메모리 어레이 내에서 발생할 수 있다는 것이 이해될 수 있다. 따라서, 사인/코사인 추정기(400)는, 연상 메모리 어레이(410)의 모든 열에 임의의 부울 연산을 동시에 구현하여, 결과적으로 얻어지는 광범위한 병렬 계산이 제자리에 일어나게 할 수 있다. (각각의 열은 단일 각도에 대해 필요한 계산을 수행할 수 있고, 다수의 열을 활성화하는 것은 여러 각도에 대한 삼각 함수의 동시 계산을 초래할 수 있다).It can be appreciated that the computation of the sine/
사인/코사인 추정기(400)의 계산의 복잡도가 입력 각도 의 개수에 의존하지 않는다는 것이 이해될 수 있다.The computational complexity of the sine/
사인/코사인 추정기(400)는 입력으로서 다수의 각도를 수신할 수 있고, 각각의 각도 의 계산을 연상 메모리 어레이(410)의 하나 이상의 전용 열 내에서 처리할 수 있다. 단일 각도의 사인 및 코사인을 계산하는 복잡도가 여러 각도의 사인 및 코사인을 계산하는 복잡도와 같다.The sine/
LUT 인덱스 빌더(430)는 각각의 각도 에 대해서 동시에, 인덱스 Jk를 계산할 수 있다. 이러한 동작의 복잡도는 O(N)일 수 있고, N은 LUT 인덱스의 비트수이다.
LUT(420) 내의 각각의 엔트리에 대하여, LUT 값 할당기(440)는 X 및 Y의 값을 LUT(420)의 엔트리 Jk로부터 동일한 인덱스 Jk를 공유하는 연상 메모리 어레이(410)의 열들로 동시에 복사할 수 있다. 이러한 동작의 복잡도는 O(2N)이고, N은 LUT 인덱스의 비트수이다.For each entry in
각각의 각도에 대하여 동시에, CORDIC 컴퓨터(450)는 M 회의 추가적 반복에 대한 반복 N으로부터 시작하여 X 및 Y의 값을 계산할 수 있다(처음 N 회의 반복에 대한 값은 LUT로부터 취해짐). 이러한 동작의 복잡도는 O(M)이고, M은 CORDIC 알고리즘을 계산하는 반복의 횟수이다.For each angle at the same time, the
또한, 사인/코사인 추정기(400)가 입력 각도 의 표현을 라디안 단위이고 점 뒤에 14 개의 비트가 있는 정규화된 부호 고정 소수점으로 수정할 수 있다는 것에도 주목할 수 있다. 정규화는 각각의 각도 (범위 [-π, π] 내에 속할 수 있음)를 π로 나누는 것을 포함할 수 있는데, 이것은 새로운 범위 [-1, 1]을 초래할 수 있다.In addition, the sine /
표준 CORDIC 동작은 [-π/2, π/2]의 범위에 속하는 각도들과 동작하는 반면에, 사인/코사인 추정기(400)는 정규화될 수 있는 각도의 전체 범위 [-π, π]에서 동작할 수 있다. 사인/코사인 추정기(400)는 결과를 변환하여 이들을 정규화 이전의 원래의 값으로 다시 정렬시킬 수 있고, 이들을 다시 정규화할 수 있다(2로 나눔).While standard CORDIC operation works with angles in the range of [-π/2, π/2], sine/
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/
연상 메모리 어레이(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
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
단계(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)
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.
상기 위치 인덱스를 동시에 계산하는 것은,
각각의 상기 입력 각도에 대하여 동시에:
임시 각도를 상기 입력 각도의 값으로 초기화하는 단계;
비트의 값 및 부호를 상기 임시 각도와 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.
N = 5 이고 M = 5인, 연상 메모리 디바이스를 위한 방법.According to claim 1,
A method for an associative memory device, where N = 5 and M = 5.
상기 솔루션을 복사하는 단계는,
상기 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.
N = 5이고, 상기 LUT는 25 개의 엔트리를 포함하는, 사인 및 코사인 추정기.According to claim 5
where N = 5, and the LUT contains 2 5 entries.
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) |
-
2022
- 2022-05-11 US US17/741,481 patent/US20220413799A1/en active Pending
- 2022-06-10 KR KR1020220070831A patent/KR20220170751A/en unknown
- 2022-06-15 CN CN202210677158.7A patent/CN115509490A/en active Pending
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 |