KR20180007652A - 다기능 연산 장치 - Google Patents

다기능 연산 장치 Download PDF

Info

Publication number
KR20180007652A
KR20180007652A KR1020170025699A KR20170025699A KR20180007652A KR 20180007652 A KR20180007652 A KR 20180007652A KR 1020170025699 A KR1020170025699 A KR 1020170025699A KR 20170025699 A KR20170025699 A KR 20170025699A KR 20180007652 A KR20180007652 A KR 20180007652A
Authority
KR
South Korea
Prior art keywords
mac
read
butterfly
output
outputs
Prior art date
Application number
KR1020170025699A
Other languages
English (en)
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 김태형
Priority to KR1020170025699A priority Critical patent/KR20180007652A/ko
Publication of KR20180007652A publication Critical patent/KR20180007652A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)

Abstract

일실시예에 의한 다기능 연산 장치는 복수의 MAC(multiply-accumulate) 회로들을 구비한 MAC부; 읽기 주소 그룹을 생성하고, 생성된 상기 읽기 주소 그룹을 메모리로 전달하되, 상기 읽기 주소 그룹은 복수의 읽기 주소들을 구비하는 주소 생성부; 및 복수의 읽기 데이터 그룹들을 저장하는 복수의 뱅크들을 구비하며, 복수의 읽기 데이터 그룹들 중에서 상기 읽기 주소 그룹에 대응하는 읽기 데이터 그룹을 상기 MAC부로 전달하되, 상기 읽기 데이터 그룹은 복수의 읽기 데이터들을 구비하는 상기 메모리를 포함한다.

Description

다기능 연산 장치{MULTIFUNTIONAL PROESSING APPRATUS}
이하 설명하는 기술은 다기능 연산 장치에 관한 것이다.
MAC(multiply-accumulate) 회로는 곱셈기와 곱셈기의 출력에 연결된 누적기를 구비한다. MAC 회로는 유한 임펄스 응답 필터(FIR filter), 무한 임펄스 응답 필터(IIR filter), 고속 푸리에 변환(FFT) 및 역 푸리에 변환(IFFT) 등 다양한 용도에 사용되고 있다. MAC 회로는 초기에는 DSP(digital signal processor)에 많이 적용되었으나, 현재에는 GPP(general purpose processor)에도 흔히 적용되고 있다.
복수의 MAC을 병렬로 사용하는 다중 MAC의 종래기술로서 한국등록특허 제10-0835173호(발명의 명칭: 곱셈 누적 연산을 위한 디지털 신호처리 장치 및 방법)에 개시된 기술이 있다. 종래기술에 의하면, 제어부가 매 클록 사이클마다 인스트럭션(instruction)을 프로그램 메모리로부터 호출하여 데이터 어드레스 생성부에 전달하여야 한다. 이는 제어부에 많은 부하를 주고 전체 시스템의 효율을 저하시킨다.
한국등록특허 제10-0835173호
따라서, 본 개시는 종래기술의 문제점을 해결하기 위한 것으로서, 제어부가 매 클록 사이클마다 인스트럭션을 프로그램 메모리로부터 호출할 필요가 없는 다기능 연산 장치를 제공하는 것이다.
또한, 본 개시는 복수의 MAC 회로들을 동시에 사용하면서도, 사용되는 메모리의 용량을 최소화할 수 있는 다기능 연산 장치를 제공하는 것이다.
일실시예에 의한 다기능 연산 장치는 복수의 MAC(multiply-accumulate) 회로들을 구비한 MAC부; 읽기 주소 그룹을 생성하고, 생성된 상기 읽기 주소 그룹을 메모리로 전달하되, 상기 읽기 주소 그룹은 복수의 읽기 주소들을 구비하는 주소 생성부; 및 복수의 읽기 데이터 그룹들을 저장하는 복수의 뱅크들을 구비하며, 복수의 읽기 데이터 그룹들 중에서 상기 읽기 주소 그룹에 대응하는 읽기 데이터 그룹을 상기 MAC부로 전달하되, 상기 읽기 데이터 그룹은 복수의 읽기 데이터들을 구비하는 상기 메모리를 포함한다.
본 개시에 의한 다기능 연산 장치는 주소 발생부가 룩업 테이블(lookup table) 또는 스테이트 머신(state machine)을 구비하여 제어부의 개입 없이 주소를 생성함으로써 제어부의 부하를 줄일 수 있다는 장점이 있다.
또한, 다기능 연산 장치는 복수의 뱅크들 간에 충돌이 발생하지 아니하도록 미리 정해진 순서로 데이터를 저장함으로써, 요구되는 메모리의 용량을 줄일 수 있다는 장점이 있다.
도 1은 실시예에 의한 다기능 연산 장치를 나타내는 도면이다.
도 2 내지 10은 도 1에 도시된 다기능 연산 장치가 8개의 MAC을 구비하며, 16-포인트 FFT(16-point fast Fourier transform) 연산을 수행하는 경우의 동작을 설명하기 위한 도면이다.
도 11 내지 14는 다기능 연산 장치가 8개의 MAC 회로들을 구비하며, FIR 연산을 수행하는 경우의 동작을 설명하기 위한 도면이다.
이하 설명하는 기술은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 이하 설명하는 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 이하 설명하는 기술의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 해당 구성요소들은 상기 용어들에 의해 한정되지는 않으며, 단지 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 이하 설명하는 기술의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
본 명세서에서 사용되는 용어에서 단수의 표현은 문맥상 명백하게 다르게 해석되지 않는 한 복수의 표현을 포함하는 것으로 이해되어야 하고, "포함한다" 등의 용어는 설시된 특징, 개수, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 의미하는 것이지, 하나 또는 그 이상의 다른 특징들이나 개수, 단계 동작 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 배제하지 않는 것으로 이해되어야 한다.
도면에 대한 상세한 설명을 하기에 앞서, 본 명세서에서의 구성부들에 대한 구분은 각 구성부가 담당하는 주기능 별로 구분한 것에 불과함을 명확히 하고자 한다. 즉, 이하에서 설명할 2개 이상의 구성부가 하나의 구성부로 합쳐지거나 또는 하나의 구성부가 보다 세분화된 기능별로 2개 이상으로 분화되어 구비될 수도 있다. 그리고 이하에서 설명할 구성부 각각은 자신이 담당하는 주기능 이외에도 다른 구성부가 담당하는 기능 중 일부 또는 전부의 기능을 추가적으로 수행할 수도 있으며, 구성부 각각이 담당하는 주기능 중 일부 기능이 다른 구성부에 의해 전담되어 수행될 수도 있음은 물론이다.
또, 방법 또는 동작 방법을 수행함에 있어서, 상기 방법을 이루는 각 과정들은 문맥상 명백하게 특정 순서를 기재하지 않은 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 과정들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
도 1은 실시예에 의한 다기능 연산 장치를 나타내는 도면이다. 도 1을 참조하면, 다기능 연산 장치는 MAC부(110), 주소 생성부(120, address generator), 메모리(130), 읽기 매퍼(140, write mapper), 쓰기 매퍼(150, read mapper) 및 제어부(160)를 구비한다.
MAC부(110)는 복수의 MAC 회로들(111) 및 산술부(116, arithmetic unit)를 구비한다. 복수의 MAC 회로들(111) 각각은 곱셈기(112) 및 누적기(115)를 구비한다. 누적기(115)는 곱셈기(112)의 출력을 누적한다. 이를 위하여 누적기(115)는 합산기(113) 및 레지스터(114)를 구비한다. MAC 회로(111)에서 누적기(115)가 생략되거나 레지스터(114)가 생략될 수 있다. MAC 회로(111)에서 레지스터(114)가 생략된 회로는 엄밀하게는 곱셈-덧셈 회로에 해당하나, 본 발명에서는 MAC 회로(111)의 범주 안에 이러한 곱셈-덧셈 회로가 포함되는 것으로 본다. 또한, MAC 회로(111)에서 누적기(115)가 생략된 회로는 엄밀하게는 곱셈 회로에 해당하나, 본 발명에서는 MAC 회로(111)의 범주 안에 이러한 곱셈 회로가 포함되는 것으로 본다. 즉, 본 발명의 MAC 회로(111)는 본연의 곱셈-누적 회로뿐만 아니라 곱셈-덧셈 회로 및 곱셈 회로를 포함하는 넓은 의미의 MAC 회로이다. 산술부(116)는 복수의 MAC 회로들(111)로부터 출력되는 복수의 출력들에 대하여 합, 차, 누적 및 쉬프트 중 적어도 하나의 연산을 수행한다. 산술부(116)는 적어도 하나의 연산의 결과로 얻어지는 하나 이상의 MAC 출력들(Mout1~MoutC, 여기에서 C는 정수)을 출력한다. 산술부(116)은 최종 연산 결과를 알리는 플래그(FL)를 추가적으로 출력할 수 있다. 산술부(116)에서 수행되는 연산은 다기능 연산 장치가 수행하고자 하는 연산(예: FFT, FIR 등)에 따라 변경된다. 따라서, 산술부(116)는 제어부(160)으로부터 전달되는 산술 제어 신호(ACS)에 따라 수행되는 연산이 변경된다.
주소 생성부(120)는 읽기 주소 그룹(RAG)을 생성하여, 메모리(130)로 전달한다. 읽기 주소 그룹(RAG)은 복수의 읽기 주소들을 구비한다. 주소 생성부(120)는 쓰기 주소 그룹(WAG)을 생성하여, 메모리(130)로 전달한다. 쓰기 주소 그룹(WAG)은 복수의 쓰기 주소들을 구비한다. 주소 생성부는 읽기 매핑 값(RMV) 및 쓰기 매핑 값(WMV)을 생성하여, 읽기 매퍼(140) 및 쓰기 매퍼(150)에 각각 전달한다.
주소 생성부(120)는 일례로 카운터(122) 및 룩업 테이블(124)를 구비한다. 카운터(122)는 클록 신호(CK)에 따라 변경되는 값을 출력한다. 일례로 카운터(122)는 클록 신호(CK)에 따라 증가하는 정수 값을 출력한다. 룩업 테이블(124)는 복수의 읽기 주소 그룹들 중에서 카운터(122)에서 출력되는 값에 따라 선택된 읽기 주소 그룹(RAG)을 출력한다. 이를 위하여 룩업 테이블(124)은 복수의 읽기 주소 그룹들을 저장한다. 또한, 룩업 테이블(124)는 복수의 쓰기 주소 그룹들 중에서 카운터(122)에서 출력되는 값에 따라 선택된 쓰기 주소 그룹(WAG)을 출력한다. 이를 위하여 룩업 테이블(124)은 복수의 쓰기 주소 그룹들을 저장한다. 쓰기 주소 그룹(WAG)을 룩업 테이블(124)로부터 출력하는 대신에, 읽기 주소 그룹(RAG)을 지연함으로써 쓰기 주소 그룹(WAG)를 얻을 수도 있다. 룩업 테이블(124)은 복수의 읽기 매핑 값들 중에서 카운터(122)에서 출력되는 값에 따라 선택된 읽기 매핑 값(RMV)을 출력한다. 이를 위하여 룩업 테이블(124)는 복수의 읽기 매핑 값들을 저장한다. 룩업 테이블(124)은 복수의 쓰기 매핑 값들 중에서 카운터(122)에서 출력되는 값에 따라 선택된 쓰기 매핑 값(WMV)을 출력한다. 이를 위하여 룩업 테이블(124)는 복수의 쓰기 매핑 값들을 저장한다.
도면과 달리, 주소 생성부(120)는 스테이트 머신(state machine, 미도시)을 구비할 수 있다. 스테이트 머신은 클록 신호에 따라 읽기 주소 그룹(RAG), 쓰기 주소 그룹(WAG), 읽기 매핑 값(RMV) 및 쓰기 매핑 값(WMV)를 생성한다. 주소 생성부(120)가 스테이트 머신을 구비하는 경우에, 룩업 테이블(124) 또는 카운터(122)는 생략될 수 있다.
메모리(130)는 복수의 뱅크들(132)을 구비한다. 따라서, 메모리(130)는 동시에 여러 데이터들을 읽거나 쓸 수 있다. 일례로 메모리(130)가 4개의 뱅크들(132)을 구비하는 경우에, 메모리(130)는 동시에 4개의 데이터들을 읽거나 쓸 수 있다. 물론 이 경우, 4개의 데이터들을 서로 다른 뱅크들(132)에 위치하여야 한다. 메모리(130)는 일례로 듀얼-포트 메모리일 수 있다. 이 경우, 메모리(130)는 쓰기 동작과 읽기 동작을 동시에 수행할 수 있다. 일례로 메모리(130)가 4개의 뱅크들(132)을 구비하는 경우에, 메모리(130)는 동시에 4개의 데이터들을 읽고, 4개의 데이터들을 쓸 수 있다. 물론 이 경우, 읽는 4개의 데이터들은 서로 다른 뱅크들(112)에 위치하고, 쓰는 4개의 데이터들도 서로 다른 뱅크들(132)에 위치하여야 한다.
복수의 뱅크들(132)은 복수의 읽기 데이터 그룹들을 저장한다. 메모리(130)는 복수의 읽기 데이터 그룹들 중에서 읽기 주소 그룹(RAG)에 대응하는 읽기 데이터 그룹(RDG)을 MAC부(110)로 전달한다. 읽기 데이터 그룹(RDG)은 복수의 읽기 데이터들을 구비한다. 복수의 읽기 데이터들 각각은 복소수, 실수 또는 정수일 수 있다. 복수의 읽기 데이터들은 서로 다른 뱅크들(132)로부터 출력된다. 메모리(130)가 제1 내지 제4 뱅크들을 구비하는 경우에, 복수의 읽기 데이터들 중에서 제1 내지 제4 읽기 데이터들이 제1 내지 제4 뱅크들로부터 각각 출력될 수 있다. 복수의 읽기 데이터들은 동일한 로우에 위치할 수 있다. 일례로, 제1 내지 제4 읽기 데이터들은 각각 제1 내지 제4 뱅크들의 첫째 데이터들일 수 있다. 복수의 읽기 데이터들은 서로 다른 로우에 위치할 수 있다. 일례로, 제1 및 제3 읽기 데이터들은 각각 제1 및 제3 뱅크들의 다섯째 데이터들이고, 제2 및 제4 읽기 데이터들은 각각 제2 및 제4 뱅크들의 여섯째 데이터들일 수 있다.
복수의 뱅크들(132)은 하나 이상의 쓰기 데이터 그룹들을 저장한다. 메모리(130)는 쓰기 데이터 그룹(WDG)을 쓰기 주소 그룹(WAG)에 대응하는 위치에 저장한다. 쓰기 데이터 그룹(WDG)은 하나 이상의 쓰기 데이터들을 구비한다. 하나 이상의 쓰기 데이터들 각각은 복소수, 실수 또는 정수일 수 있다. 하나 이상의 쓰기 데이터들은 서로 다른 뱅크들(132)에 저장된다. 메모리(130)가 제1 내지 제4 뱅크들을 구비하는 경우에, 하나 이상의 쓰기 데이터들 중에서 제1 내지 제4 쓰기 데이터들이 제1 내지 제4 뱅크들에 각각 저장될 수 있다. 하나 이상의 쓰기 데이터들은 동일한 로우에 저장될 수 있다. 일례로, 제1 내지 제4 쓰기 데이터들은 각각 제1 내지 제4 뱅크들의 첫째 위치에 저장될 수 있다. 복수의 쓰기 데이터들은 서로 다른 로우에 저장될 수 있다. 일례로, 제1 및 제3 쓰기 데이터들은 각각 제1 및 제3 뱅크들의 다섯째 위치에 저장되고, 제2 및 제4 쓰기 데이터들은 각각 제2 및 제4 뱅크들의 여섯째 위치에 저장될 수 있다.
읽기 매퍼(140)는 읽기 매핑 값(RMV)에 따라 복수의 읽기 데이터들을 복수의 MAC 입력들(Min1~MinB, 여기에서 B는 정수)로 매핑한다. 쓰기 매퍼(150)는 쓰기 매핑 값(WMV)에 따라 하나 이상의 MAC 출력들(Mout1~MoutC)을 하나 이상의 쓰기 데이터들로 매핑한다.
제어부(160)는 메모리(130)에 초기 읽기 데이터 그룹들을 저장하고, 룩업 테이블(124)에 복수의 읽기 주소 그룹들을 저장한 후에, 주소 생성부(120)를 구동한다. 제어부(160)는 복수의 MAC 회로들(111)이 동시에 동작함에도 불구하고, 복수의 읽기 데이터들이 복수의 뱅크들(132) 중에서 서로 다른 뱅크들로부터 출력되도록 초기 읽기 데이터 그룹들을 상기 메모리에 저장한다. 또한 제어부(160)는 다기능 연산 장치가 수행하고자 하는 연산에 대응하는 산술 제어 신호(ACS)를 산술부(116)으로 전달한다. 이와 같이 제어부(160)는 주로 다기능 연산 장치의 동작 초기에 관여하고, 다기능 연산 장치가 연산(예: FFT, FIR 등)을 수행하는 동안에는 전혀 관여하지 않거나, 매우 가끔 관여한다. 즉, 연산을 수행하는 동안에는 주로 주소 생성부(120)의 동작에 의하여 연산이 수행된다. 따라서, 제어부(160)의 부담이 줄어든다. 제어부(160)는 일례로 CPU일 수 있다.
도 1에 도시된 다기능 연산 장치는 FFT 연산을 수행할 수 있다. 도 2 내지 10은 도 1에 도시된 다기능 연산 장치가 8개의 MAC을 구비하며, 16-포인트 FFT(16-point fast Fourier transform) 연산을 수행하는 경우의 동작을 설명하기 위한 도면이다. 도 2는 16-포인트 FFT의 연산 일례로 "radix2, decimation in time" 연산을 나타내는 도면이다. 16-포인트 FFT 연산은 4개의 스테이지(stage)를 가지고, 각 스테이지에서 8개의 버터플라이 연산들이 수행된다. 16-포인트 FFT는 16개의 입력(X(1)~X(16)) 및 16개의 출력(Y(1)~Y(16))을 가진다. 도 3은 버터플라이 연산을 간략히 설명하기 위한 도면이다. 도 3에서 버터플라이는 제1 및 제2 버터플라이 입력(x1, x2) 및 회전 인자(twiddle factor, w)를 입력받고, 제1 및 제2 버터플라이 출력(y1, y2)를 출력한다.
도 4는 MAC부의 동작을 설명하기 위한 도면이다. 도 4를 참조하면, MAC부(110)는 제1 버터플라이 회로(410) 및 제2 버터플라이 회로(470)를 구비한다. 제1 버터플라이 회로(410)는 제1 내지 제4 MAC 회로들(420, 430, 440, 450) 및 제1 산술부(460)를 구비한다. 제1 내지 제4 MAC 회로들(420, 430, 440, 450) 중 각 MAC 회로는 곱셈기(112) 및 누적기(115)를 포함한다. FFT 모드인 경우에, 각 MAC 회로는 곱셈만을 수행하면 되므로, 누적기(115)는 동작하지 아니한다. 따라서, 누적기(115)에 포함된 레지스터(114)는 리셋(reset) 상태로 동작하며 0을 출력한다. 제1 MAC 회로(420)는 제1 및 제2 MAC 입력들(Min1, Min2)를 곱한 값을 출력한다. 제2 MAC 회로(430)는 제3 및 제4 MAC 입력들(Min3, Min4)를 곱한 값을 출력한다. 제3 MAC 회로(440)는 제5 및 제6 MAC 입력들(Min5, Min6)를 곱한 값을 출력한다. 제4 MAC 회로(450)는 제7 및 제8 MAC 입력들(Min7, Min8)를 곱한 값을 출력한다.
제1 산술부(460)는 제1 내지 제4 출력들(Mout1~Mout4)을 출력한다. 제1 출력(Mout1)은 제9 입력(Min9)에 제1 MAC 회로(420)의 출력을 더하고 제2 MAC 회로(430)의 출력을 뺀 값에 해당한다. 제2 출력(Mout2)은 제9 입력(Min9)에 제1 MAC 회로(420)의 출력을 빼고 제2 MAC 회로(430)의 출력을 더한 값에 해당한다. 제3 출력(Mout3)은 제10 입력(Min10)에 제3 MAC 회로(440)의 출력을 더하고 제4 MAC 회로(450)의 출력을 더한 값에 해당한다. 제4 출력(Mout4)은 제10 입력(Min10)에 제3 MAC 회로(440)의 출력을 빼고 제4 MAC 회로(450)의 출력을 뺀 값에 해당한다. 이와 같은 연산을 수행하기 위하여 제1 산술부(460)는 제1 내지 제6 합산부(461~466)를 포함한다. 제1 합산부(461)는 제1 MAC 회로(420)의 출력에서 제2 MAC 회로(430)의 출력을 뺀다. 제2 합산부(462)는 제3 MAC 회로(440)의 출력에 제4 MAC 회로(450)의 출력을 더한다. 제3 합산부(463)는 제9 MAC 입력(Min9)에 제1 합산부(461)의 출력을 더한다. 제4 합산부(464)는 제9 MAC 입력(Min9)에 제1 합산부(461)의 출력을 뺀다. 제5 합산부(465)는 제10 MAC 입력(Min10)에 제2 합산부(462)의 출력을 더한다. 제6 합산부(466)는 제10 MAC 입력(Min10)에 제2 합산부(462)의 출력을 뺀다.
제2 버터플라이 회로(470)는 제11 내지 제20 MAC 입력들(Min11~Min20)을 입력받으며, 제5 내지 제8 MAC 출력들(Mout5~Mout8)을 출력한다. 제2 버터플라이 회로(470)의 구성은 제1 버터플라이 회로(420)와 동일하므로, 이에 대한 상세한 설명은 생략한다.
도 4의 버터플라이 회로(410)가 버터플라이 연산을 수행하기 위해서는 제1 버터플라이 입력(x1)의 실수(x1[R]) 및 허수(x1[I])를 제9 및 제10 MAC 입력들(Min9, Min10)에 각각 입력한다. 제2 버터플라이 입력(x2)의 실수(x2[R])를 제1 및 제5 MAC 입력들(Min1, Min5)에 입력한다. 제2 버터플라이 입력(x2)의 허수(x2[I])를 제3 및 제7 MAC 입력들(Min3, Min7)에 입력한다. 회전 인자(w)의 실수(w[R])를 제2 및 제8 MAC 입력들(Min2, Min8)에 입력한다. 회전 인자(w)의 허수(w[I])를 제4 및 제6 MAC 입력들(Min4, Min6)에 입력한다. 이와 같이 입력하면, 제1 MAC 출력(Mout1)이 제1 버터플라이 출력(y1)의 실수에 해당한다. 제2 MAC 출력(Mout2)이 제2 버터플라이 출력(y2)의 실수에 해당한다. 제3 MAC 출력(Mout3)이 제1 버터플라이 출력(y1)의 허수에 해당한다. 제4 MAC 출력(Mout4)이 제2 버터플라이 출력(y2)의 허수에 해당한다.
도 5를 참조하면, 메모리(130)는 제1 내지 제6 뱅크들(510~560)을 구비한다. 제1 내지 제4 뱅크들(510~540)은 일례로 듀얼-포트 메모리로서, 4개의 출력과 4개의 입력을 동시에 수행할 수 있다. 제5 및 제6 뱅크들(550~560)은 일례로 싱글-포트 메모리로서, 2개의 출력을 동시에 수행할 수 있다.
제1 내지 제4 뱅크들(510~540)은 제1 내지 제4 버터플라이 입력 주소들(XA1~XA4)에 각각 대응하는 제1 내지 제4 버터플라이 입력들(X1~X4)을 출력한다. 제1 내지 제4 뱅크들(510~540)은 제1 내지 제4 버터플라이 출력 주소들(YA1~YA4)에 각각 대응하는 제1 내지 제4 버터플라이 출력들(Y1~Y4)을 입력받는다. 제5 및 6 뱅크들(550, 560)은 제1 및 제2 회전 인자 주소들(WA1, WA2)에 각각 대응하는 제1 및 제2 회전 인자들(W1, W2)을 출력한다.
제1 내지 제4 버터플라이 입력 주소들(XA1~XA4) 및 제1 및 제2 회전 인자 주소들(WA1, WA2)은 도 1의 읽기 주소 그룹(RAG)에 대응한다. 즉, 읽기 주소 그룹(RAG)은 복수의 읽기 주소들로서 제1 내지 제4 버터플라이 입력 주소들(XA1~XA4) 및 제1 및 제2 회전 인자 주소들(WA1, WA2)을 포함한다. 제1 내지 제4 버터플라이 출력 주소들(YA1~YA4)이 도 1의 쓰기 주소 그룹(WAG)에 대응한다. 즉, 쓰기 주소 그룹(WAG)은 복수의 쓰기 주소들로서 제1 내지 제4 버터플라이 출력 주소들(YA1~YA4)을 포함한다. 제1 내지 제4 버터플라이 입력들(X1~X4) 및 제1 및 제2 회전 인자들(W1, W2)이 도 1의 읽기 데이터 그룹(RDG)에 대응한다. 즉, 읽기 데이터 그룹(RDG)은 복수의 읽기 데이터들로서 제1 내지 제4 버터플라이 입력들(X1~X4) 및 제1 및 제2 회전 인자들(W1, W2)을 포함한다. 제1 내지 제4 버터플라이 출력들(Y1~Y4)이 도 1의 쓰기 데이터 그룹(WDG)에 대응한다. 즉, 쓰기 데이터 그룹(WDG)은 복수의 쓰기 데이터들로서 제1 내지 제4 버터플라이 출력들(Y1~Y4)을 포함한다.
메모리(130)는 FFT 연산 중에 복수의 뱅크들(510~560) 간 충돌이 발생하지 않도록 소정의 순서에 따라 초기 읽기 데이터 그룹들(X(1)~X(16), W(1)~W(8))을 저장한다. 초기 읽기 데이터 그룹들(X(1)~X(16), W(1)~W(8))은 FFT 연산 전에 메모리(130)에 저장된 값으로서, 일례로 제어부(160)에 의하여 저장된다. 도면에서 1/X(1)은 1번지에 X(1)이 저장됨을 의미하고, 5/W(1)은 5번지에 W(1)이 저장되었음을 의미한다.
16 포인트 FFT 입력들(X(1)~X(16))은 일반적으로 순차적으로(X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), X(12), X(13), X(14), X(15), X(16)) 저장되어 있으나, 본 실시예에서는 소정의 순서(X(1), X(2), X(3), X(4), X(7), X(8), X(5), X(6), X(11), X(12), X(9), X(10), X(13), X(14), X(15), X(16))에 따라 저장된다. 일례로 소정의 순서는 순차적이지 않으나, 로우(row) 단위로는 순차적이다. 즉, X(1) 내지 X(4)는 첫 로우에 위치하고, X(5) 내지 X(8)는 둘째 로우에 위치하고, X(9) 내지 X(12)는 셋째 로우에 위치하고, X(13) 내지 X(16)는 넷째 로우에 위치한다. 소정의 순서는 FFT 연산 중에 뱅크들(510~540) 간에 충돌이 발생하지 않도록 사전에 시뮬레이션을 통하여 얻어진다. 여기에서 뱅크들(510~540) 간에 충돌이 일어난다는 것은 제1 내지 제4 버터플라이 입력들(X1~X4) 중 2개 이상의 버터플라이 입력들이 동시에 하나의 뱅크에서 읽어짐을 의미한다. 1개의 뱅크는 동시에 1개의 버터플라이 입력만을 출력할 수 있으므로, 2개 이상의 버터플라이 입력들이 1개의 뱅크에서 읽어져야 하는 상황이 발생하면 정상 동작이 불가능해진다. 시뮬레이션은 프로그램 컴파일 과정에 수행될 수 있다. 예로서, 컴파일러가 뱅크들 간 충돌 여부를 체크해서 충돌이 발생하면 초기 FFT 입력들(X(1)~X(16)) 중에서 일부 입력들의 위치를 바꾸는 과정을 반복함으로써 소정의 순서를 정할 수 있다.
8개의 회전 인자들(W(1)~W(8))은 일반적으로 순차적으로(W(1), W(2), W(3), W(4), W(5), W(6), W(7), W(8)) 저장되어 있으나, 본 실시예에서는 소정의 순서(W(1), W(2), W(4), W(3), W(6), W(5), W(7), W(8))에 따라 저장된다. 일례로 소정의 순서는 순차적이지 않으나, 로우(row) 단위로는 순차적이다. 즉, W(1) 및 W(2)는 첫 로우에 위치하고, W(3) 및 W(4)는 둘째 로우에 위치하고, W(5) 및 W(6)는 셋째 로우에 위치하고, W(7) 및 W(8)는 넷째 로우에 위치한다. 소정의 순서는 FFT 연산 중에 뱅크들(550~560) 간에 충돌이 발생하지 않도록 사전에 시뮬레이션을 통하여 얻어진다.
도 6을 참조하면, 주소 생성기(120)의 룩업 테이블(124)는 버터플라이 룩업 테이블(610), 회전 인자 룩업 테이블(620), 읽기 매핑 값 룩업 테이블(630), 쓰기 매핑 값 룩업 테이블(640) 및 레지스터(650)를 포함한다. 일례로, 제어부(160)가 버터플라이 룩업 테이블(610), 회전 인자 룩업 테이블(620), 읽기 매핑 값 룩업 테이블(630), 쓰기 매핑 값 룩업 테이블(640)에 요구되는 값들을 입력한 후에, 카운터(122)를 구동한다.
버터플라이 룩업 테이블(610)은 카운터(122)의 출력 값에 대응하는 복수의 버터플라이 입력 주소들(XA1~XA4)를 출력한다. 레지스터(650)는 복수의 버터플라이 입력 주소들(XA1~XA4)을 하나 이상의 클럭 사이클만큼 지연시킨 복수의 버터플라이 출력 주소들(YA1~YA4)를 출력한다. 레지스터(650)에 의한 지연은 복수의 버터플라이 입력들(X1~X4)이 메모리(130)로부터 출력된 후에, 복수의 버터플라이 출력들(Y1~Y4)로서 메모리(130)에 입력될 때까지 소요되는 지연에 대응한다. 도 1에 명시적으로 표시되어 있지는 아니하나, 복수의 버터플라이 입력들(X1~X4)이 메모리(130)로부터 출력된 후에, 복수의 버터플라이 출력들(Y1~Y4)로서 메모리(130)에 입력될 때까지 하나 이상의 클럭 사이클이 소요될 수 있다. 복수의 버터플라이 출력 주소들(YA1~YA4)로서 복수의 버터플라이 입력 주소들(XA1~XA4)을 지연시킨 값을 사용함으로써, 복수의 버터플라이 출력들(Y1~Y4)이 메모리(130) 내에서 복수의 버터플라이 입력들(X1~X4)이 있던 위치에 각각 저장된다.
회전 인자 룩업 테이블(620)은 카운터(122)의 출력 값에 대응하는 하나 이상의 회전 인자 주소들(WA1, WA2)을 출력한다. 읽기 매핑 값 룩업 테이블(630)은 카운터의 출력 값에 대응하는 읽기 매핑 값(RMV)을 출력한다. 쓰기 매핑 값 룩업 테이블(640)은 카운터의 출력 값에 대응하는 쓰기 매핑 값(WMV)을 출력한다.
도 7은 버터플라이 룩업 테이블(610)에 저장된 값들을 나타내는 도면이다. 도 7을 참조하면, 제1 사이클에 버터플라이 룩업 테이블(610)은 복수의 버터플라이 입력 주소들(XA1~XA4)로서 1, 2, 3, 4를 출력한다. 따라서 메모리(130)는 1, 2, 3, 4번지에 위치한 X(1), X(2), X(3), X(4)를 복수의 버터플라이 입력들(X1~X4)로서 출력한다. 복수의 버터플라이 입력 주소들(XA1~XA4)는 복수의 버터플라이 출력 주소들(YA1~YA4)로도 사용되므로, 복수의 버터플라이 출력들(Y1~Y4)이 메모리의 동일 위치 즉 1, 2, 3, 4번지에 저장된다. 제2 사이클에 버터플라이 룩업 테이블(610)은 복수의 버터플라이 입력 주소들(XA1~XA4)로서 7, 8, 9, 10을 출력한다. 따라서 메모리(130)는 7, 8, 9, 10번지에 위치한 X(7), X(8), X(5), X(6)을 복수의 버터플라이 입력들(X1~X4)로서 출력한다. 복수의 버터플라이 입력 주소들(XA1~XA4)는 복수의 버터플라이 출력 주소들(YA1~YA4)로도 사용되므로, 복수의 버터플라이 출력들(Y1~Y4)이 메모리의 동일 위치 즉 7, 8, 9, 10번지에 저장된다. 같은 방식으로 제3 사이클에 버터플라이 룩업 테이블(610)은 13, 14, 15, 16을 출력하고, 메모리(130)는 X(11), X(12), X(9), X(10)을 출력한다. 제4 사이클에 버터플라이 룩업 테이블(610)은 19, 20, 21, 22를 출력하고, 메모리(130)는 X(13), X(14), X(15), X(16)을 출력한다. 이후의 동작은 이전과 동일한 방식이므로 설명의 편의상 생략한다.
도 8은 회전 인자 룩업 테이블(620)에 저장된 값들을 나타내는 도면이다. 도 8을 참조하면, 제1 내지 제4 사이클에 회전 인자 룩업 테이블(620)은 하나 이상의 버터플라이 입력 주소들(WA1, WA2)로서 5, NA를 출력한다. 여기서 NA는 출력 값이 없음을 의미한다. 메모리(130)는 5번지에 위치한 W(1)를 하나 이상의 회전 인자들(W1)로서 출력한다. 제5 사이클에 회전 인자 룩업 테이블(620)은 하나 이상의 버터플라이 입력 주소들(WA1, WA2)로서 5, 18을 출력한다. 메모리(130)는 5, 18번지에 위치한 W(1), W(5)를 하나 이상의 회전 인자들(W1, W2)로서 출력한다. 이후의 동작은 이전과 동일한 방식이므로 설명의 편의상 생략한다.
도 9는 읽기 매퍼(140)의 동작을 설명하기 위한 도면이다. 도 9를 참조하면, 제1 사이클에, 읽기 매퍼(140)는 제2 버터플라이 입력(X2)의 실수(X2[R])를 제1 MAC 입력(Min1)에 매핑시키고, 제1 회전 인자(W1)의 실수(W1[R])를 제2 MAC 입력(Min2)에 매핑시키고, 제2 버터플라이 입력(X2)의 허수(X2[I])를 제3 MAC 입력(Min3)에 매핑시키고, 제1 회전 인자(W1)의 허수(W1[I])를 제4 MAC 입력(Min4)에 매핑시킨다. 같은 방식으로, X2[R], W1[I], X2[I], W1[R], X1[R], X1[I], X4[R], W1[R], X4[I], W1[I], X4[R], W1[I], X4[I], W1[R], X3[R], X3[I]를 제5 내지 제20 MAC 입력(Min5~Min20)에 각각 매핑시킨다. 제2 사이클에, 읽기 매퍼(140)는 X4[R], W1[R], X4[I], W1[I], X4[R], W1[I], X4[I], W1[R], X3[R], X3[I], X2[R], W1[R], X2[I], W1[I], X2[R], W1[I], X2[I], W1[R], X1[R], X1[I]를 제1 내지 제20 MAC 입력(Min1~Min20)에 각각 매핑시킨다. 이후의 동작은 이전과 동일한 방식이므로 설명의 편의상 생략한다.
또한 동일 로우 내에서 데이터들 간의 저장 위치를 변경하고, 그 변경된 로우들에서 변경 규칙을 일정하게 함으로서 매퍼의 복잡도를 낮출 수 있다. 또한 매핑 정보 중 동일 로우 내에서 데이터들 간의 위치 변경에 대한 주소 변경 내용은 읽기 또는 쓰기 주소 메모리(버터플라이 룩업 테이블(610), 회전 인자 룩업 테이블(620))에 통합될 수 있다. 이 과정 수행과 내용은 사전 시뮬레이션에 의해서 결정되고 획득된다.
도 10은 쓰기 매퍼(150)의 동작을 설명하기 위한 도면이다. 도 10을 참조하면, 제1 사이클에 쓰기 매퍼(150)는 제1 MAC 출력(Mout1)을 제1 버터플라이 출력(Y1)의 실수 값(Y1[R])에 매핑시키고, 제2 MAC 출력(Mout2)을 제2 버터플라이 출력(Y2)의 실수 값(Y2[R])에 매핑시키고, 제3 MAC 출력(Mout3)을 제1 버터플라이 출력(Y1)의 허수 값(Y1[I])에 매핑시키고, 제4 MAC 출력(Mout4)을 제2 버터플라이 출력(Y2)의 허수 값(Y2[I])에 매핑시킨다. 또한, 제5 내지 8 MAC 출력들(Mout5~Mout8)을 Y3[R], Y4[R], Y3[I], Y4[I]에 각각 매핑시킨다. 제2 사이클에, 제1 내지 8 MAC 출력들(Mout1~Mout8)을 Y3[R], Y4[R], Y3[I], Y4[I], Y1[R], Y2[R], Y1[I], Y2[I]에 각각 매핑시킨다. 이후의 동작은 이전과 동일한 방식이므로 설명의 편의상 생략한다.
도 1에 도시된 다기능 연산 장치는 FIR 연산을 수행할 수 있다. 도 11 내지 13은 다기능 연산 장치가 8개의 MAC 회로들을 구비하며, FIR 연산을 수행하는 경우의 동작을 설명하기 위한 도면이다.
도 11을 참조하면, MAC부(110)는 8개의 MAC 회로들(111) 및 산술부(116)을 구비한다. 8개의 MAC 회로들(111) 각각은 곱셈기(112) 및 누적기(115)를 구비하여, 2개의 MAC 입력들을 곱하고, 곱해진 값을 누적한다. 산술부(116)는 복수의 덧셈기들을 구비하여, 8개의 MAC 회로들(111)로부터 출력된 값들을 모두 합한다. 홀수째 MAC 입력들(Min1, Min3, ... Min15)가 FIR 필터의 입력이고, 짝수째 MAC 입력들(Min2, Min4, ... Min16)이 FIR 필터의 계수라고 가정하면, MAC부(110)은 동시에 8개의 입력들을 처리할 수 있다. 따라서, 32 탭(tap) FIR 필터일 경우, MAC부(110)가 4 사이클 동작하면 그 결과를 얻을 수 있다. 상술한 바와 같이, 산술부(116)는 제어부(160)으로부터 전달되는 산술 제어 신호(ACS)에 따라 수행되는 연산이 도면과 같이 변경된다. 산술부(116)의 구성이 산술 제어 신호(ACS)에 따라 FFT 연산에 적합하도록 변경되거나, FIR 연산에 적합하도록 변경되는 것은 덧셈기와 스위치 등의 조합을 통하여 간단히 구현할 수 있으므로 이에 대한 구체적인 구성은 설명의 편의상 생략한다.
도 12를 참조하면, 메모리(130)는 제1 내지 16 뱅크들을 구비한다. 제1 내지 8 뱅크들은 FIR 입력들(In(1)~In(32))을 저장하고, 제9 내지 16 뱅크들은 FIR 계수들(C(1)~C(8))을 저장한다. 메모리(130)는 제1 사이클에 In(1) 내지 In(8)과 C(1) 내지 C(8)을 출력한다. 읽기 매퍼(140)에 의하여 In(1) 내지 In(8)은 Min1, Min3, ... Min15에 매핑되고, C(1) 내지 C(8)은 Min2, Min4, ... Min16에 매핑된다. 제2 사이클에 메모리(130)는 In(9) 내지 In(16)과 C(1) 내지 C(8)을 출력한다. 읽기 매퍼(140)에 의하여 In(9) 내지 In(16)은 Min1, Min3, ... Min15에 매핑되고, C(1) 내지 C(8)은 Min2, Min4, ... Min16에 매핑된다. 이후의 동작은 이전과 동일한 방식이므로 설명의 편의상 생략한다. 계수들(C(1)~C(8))은 지속적으로 출력되므로, 뱅크들을 대신하여 레지스터를 사용하여 구현될 수 있다. 이 경우, 메모리(130)에 사용되는 뱅크들의 개수가 절감될 수 있다.
도 13은 주소 생성부(120)를 스테이트 머신으로 구현한 예를 나타낸다. 읽기 매핑 값(RMV)과, 제9 내지 제16 뱅크로 전달되는 주소는 상수에 해당하므로, 설명의 편의상 도면에 표시하지 않았으며, 제1 내지 제8 뱅크로 전달되는 주소의 생성만을 도면에 표시하였다. 주소 생성부(120)는 카운터(1301), 곱셈기(1302), 제1 내지 제8 덧셈기(1311, 1312, ... 1318)을 구비한다. 카운터(1301)은 0부터 1씩 증가하는 정수를 출력한다. 곱셈기(1302)는 카운터의 출력에 16을 곱한다. 덧셈기들(1311~1318)는 곱셈기(1302)의 출력에 0 내지 7을 더한다. 덧셈기들(1311~1318)의 출력이 제1 내지 제8 뱅크들로 전달된다.
도 14는 도 11에 표현된 MAC부(110)의 변형 예를 나타내는 도면이다. 도 14를 참조하면, MAC부(110)는 8개의 MAC 회로들(111) 및 산술부(116)를 구비한다. 도 11과 달리 8개의 MAC 회로들(111) 각각은 곱셈기(112)만을 구비한다. 또한, 산술부(116)는 복수의 덧셈기들(117)뿐만 아니라 누적기(115)를 구비한다. 누적기(115)는 덧셈기(113)과 레지스터(114)를 구비한다. 이와 같이, MAC 회로들(111)에 위치한 누적기(115)를 산술부(116)로 옮기는 경우, 누적기(115)의 개수가 줄어들 수 있다는 장점이 있다.
본 실시예 및 본 명세서에 첨부된 도면은 전술한 기술에 포함되는 기술적 사상의 일부를 명확하게 나타내고 있는 것에 불과하며, 전술한 기술의 명세서 및 도면에 포함된 기술적 사상의 범위 내에서 당업자가 용이하게 유추할 수 있는 변형 예와 구체적인 실시예는 모두 전술한 기술의 권리범위에 포함되는 것이 자명하다고 할 것이다. 일례로, 본 실시예에서는 8 MAC을 이용한 FFT 연산이 예시적으로 표현되어 있으나, 당업자라면 이를 충분히 16 MAC 또는 그 이상의 MAC에도 적용할 수 있을 것이다.

Claims (1)

  1. 복수의 MAC(multiply-accumulate) 회로들을 구비한 MAC부;
    읽기 주소 그룹을 생성하고, 생성된 상기 읽기 주소 그룹을 메모리로 전달하되, 상기 읽기 주소 그룹은 복수의 읽기 주소들을 구비하는 주소 생성부; 및
    복수의 읽기 데이터 그룹들을 저장하는 복수의 뱅크들을 구비하며, 복수의 읽기 데이터 그룹들 중에서 상기 읽기 주소 그룹에 대응하는 읽기 데이터 그룹을 상기 MAC부로 전달하되, 상기 읽기 데이터 그룹은 복수의 읽기 데이터들을 구비하는 상기 메모리를 포함하는 다기능 연산 장치
KR1020170025699A 2017-02-27 2017-02-27 다기능 연산 장치 KR20180007652A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170025699A KR20180007652A (ko) 2017-02-27 2017-02-27 다기능 연산 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170025699A KR20180007652A (ko) 2017-02-27 2017-02-27 다기능 연산 장치

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020160088659A Division KR101842937B1 (ko) 2016-07-13 2016-07-13 다기능 연산 장치

Publications (1)

Publication Number Publication Date
KR20180007652A true KR20180007652A (ko) 2018-01-23

Family

ID=61071152

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170025699A KR20180007652A (ko) 2017-02-27 2017-02-27 다기능 연산 장치

Country Status (1)

Country Link
KR (1) KR20180007652A (ko)

Similar Documents

Publication Publication Date Title
CN107329734B (zh) 一种用于执行卷积神经网络正向运算的装置和方法
US10949493B2 (en) Multi-functional computing apparatus and fast fourier transform computing apparatus
CN103955447B (zh) 基于dsp芯片的fft加速器
WO2021067318A1 (en) Computation units for functions based on lookup tables
RU2010107218A (ru) Схема для упаковки и связывания переменной в графических системах
JP3938238B2 (ja) 高速フーリエ変換処理装置
US6317770B1 (en) High speed digital signal processor
KR101859294B1 (ko) 고속 푸리에 변환 연산 장치
KR101842937B1 (ko) 다기능 연산 장치
CN104050148B (zh) 快速傅里叶变换加速器
US4939684A (en) Simplified processor for digital filter applications
KR20180058166A (ko) 고속 푸리에 변환 연산 장치
KR20180007652A (ko) 다기능 연산 장치
CN107506332B (zh) Kalman滤波器快速实现方法
JP2008090455A (ja) マルチプロセッサ信号処理装置
CN106776474B (zh) 矢量处理器实现fft的系统及其数据交换、地址生成方法
KR100284181B1 (ko) 패스트 퓨리에 변환(fft) 장치와 제어방법
US10884976B2 (en) Parallel processing unit and device for parallel processing
CN115728566A (zh) 一种信号发生装置、测控系统以及量子计算机
JP6311601B2 (ja) 多段フィルタ処理装置及び方法
US6065127A (en) Multi-mode buffer for digital signal processor
CN103677735A (zh) 一种数据处理装置及数字信号处理器
CN104767544A (zh) 一种实现解扰解扩的方法和矢量运算器
CN112445752B (zh) 一种基于乔列斯基分解的矩阵求逆装置
CN114741352B (zh) 一种基于fpga的双线性插值重采样实现方法及装置

Legal Events

Date Code Title Description
A107 Divisional application of patent