KR102612588B1 - 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법 - Google Patents

프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법 Download PDF

Info

Publication number
KR102612588B1
KR102612588B1 KR1020230062163A KR20230062163A KR102612588B1 KR 102612588 B1 KR102612588 B1 KR 102612588B1 KR 1020230062163 A KR1020230062163 A KR 1020230062163A KR 20230062163 A KR20230062163 A KR 20230062163A KR 102612588 B1 KR102612588 B1 KR 102612588B1
Authority
KR
South Korea
Prior art keywords
operator
predetermined operation
semiconductor device
programmable semiconductor
logic circuit
Prior art date
Application number
KR1020230062163A
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 KR1020230062163A priority Critical patent/KR102612588B1/ko
Application granted granted Critical
Publication of KR102612588B1 publication Critical patent/KR102612588B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only
    • 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/5443Sum of products
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

본 개시의 한 측면으로서, 소정 연산을 수행하기 위한 연산 회로를 포함하는 프로그램가능 반도체 소자가 개시된다. 상기 프로그램가능 반도체 소자의 연산 회로는, 상기 소정 연산을 수행하도록 구성된 제1 연산기; 상기 소정 연산을 상기 제1 연산기와 상이한 방식으로 수행하도록 구성된 제2 연산기 - 상기 제2 연산기는 상기 제1 연산기에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높음 -; 및 상기 소정 연산을 수행하기 위해 상기 제1 연산기 및 상기 제2 연산기 중 어느 하나를 선택하도록 구성된 선택기를 포함할 수 있다.

Description

프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법{PROGRAMMABLE SEMICONDUCTOR DEVICE, ELECTRONIC DEVICE INCLUDING SAME, AND METHOD FOR PERFORMING OPERATION BY PROGRAMMABLE SEMICONDUCTOR DEVICE}
본 개시는 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법에 관한 것이다.
반도체 소자 중 ASIC(Application Specific Integrated Circuit)은 특정 용도에 맞게 맞춤 제작된 집적 회로로서, 범용 용도로 제작된 것이 아니라서 주문형 반도체라고도 한다. 반도체 설계 기술이 개선됨에 따라 ASIC에서 가능한 최대 복잡성은 1억 개 이상의 논리 게이트로 증가했다. 현대 ASIC에는 종종 마이크로프로세서 전체, ROM, RAM, EEPROM, 플래시 메모리 및 기타 대형 빌딩 블록이 포함된다.
FPGA(Field Programmable Gate Array)는 설계 가능 논리 소자와 프로그래밍이 가능한 내부 회로가 포함된 반도체 소자이다. 설계 가능 논리 소자는 AND, OR, XOR, NOT, 더 복잡한 디코더나 계산기능의 조합 기능과 같은 기본적인 논리 게이트의 기능을 복제하여 프로그래밍할 수 있다. 대부분의 FPGA는 프로그래밍이 가능한 논리 요소(예: CLB; Configurable Logic Block), 입출력 요소(예: IOB; Input/Output Block), 블록들끼리 연결되도록 라우팅(routing)하는 요소(예: SM; Switch Matrix) 등을 포함한다.
프로그래밍이 가능한 내부선 계층구조는 FPGA의 논리블록을 시스템 설계자가 요구하는 대로 단일 칩 프로그램가능 브레드보드처럼 내부연결을 할 수 있다. 이 논리블록과 내부선은 제조공정 이후에 개발자 및/또는 설계자가 프로그램할 수 있으므로, 제조공정 이후에도 개발자 및/또는 설계자가 요구하는 논리기능을 변형하거나 수정할 수 있다. FPGA는 일반적으로 ASIC에 비하여 속도가 느리고, 복잡한 설계에 적용할 수 없으며, 소비전력이 크다. 그러나 개발시간이 짧고, 오류를 현장에서 수정할 수 있고, 초기 개발비가 저렴하다는 장점이 있다.
최근에 생산되는 FPGA에는 간단한 연산기를 간편하게 만들 수 있도록 수천 개의 DSP(Digital Signal Processing) 유닛이 포함되기도 한다. 이러한 DSP 유닛은 덧셈, 뺄셈 등의 기본 연산을 고속으로 수행할 수 있다. DSP는 사용자가 연산기를 직접 설계하지 않고 바로 사용할 수 있다는 장점이 있지만 원하는 구조를 직접 설계하여 사용할 수 있는 로직 블록(예: CLB)과 달리 FPGA 안의 특정 부분에 고정된 형태로 구성된다. 따라서 소비자, 개발자 및/또는 설계자의 요구에 따라 논리기능을 변형하거나 수정하는 데에 한계가 있다. 만약 수천 개의 DSP를 전부 사용하는 솔루션이 아니라면, DSP는 사용하지 않는 만큼 손해인 자원으로 생각할 수도 있다.
따라서 종래기술에 따른 반도체 소자는 제한된 자원을 효율적으로 활용하지 못하는 문제점이 있었다.
본 개시는 프로그램가능 반도체 소자 내부의 제한된 자원을 효율적으로 활용하여 컴퓨팅 성능의 개선을 가져오는 프로그램가능 반도체 소자 및 이를 포함하는 전자 장치를 제공하는 것을 기술적 과제로 한다.
본 개시는 연산기의 레이턴시와 스루풋을 기준으로 소정의 조건을 판단하여 상황에 따라 프로그램가능 반도체 소자(예: FPGA) 내의 로직 연산기와 DSP 연산기를 선택하여 사용할 수 있는 메커니즘을 제공하는 것을 기술적 과제로 한다.
본 개시는 로우 레이턴시(low latency)와 로우 스루풋(low throughput)의 특성을 갖는 제1 연산기와 하이 레이턴시(high latency)와 하이 스루풋(high throughput)의 특성을 갖는 제2 연산기를 조합함으로써, 상대적으로 적은 비용으로 로우 레이턴시 및 하이 스루풋의 특성을 갖는 연산기를 프로그램가능 반도체 소자 내에 구현하는 것을 기술적 과제로 한다.
본 개시는 프로그램가능 반도체 소자를 이용하여 로우 레이턴시 및 하이 스루풋의 특성을 갖는 디바이더(divider) 및/또는 멀티플라이어(multiplier)를 제공하는 것을 기술적 과제로 한다.
본 개시는 장치, 시스템, 방법 또는 판독 가능 저장 매체에 저장된 컴퓨터 프로그램을 포함한 다양한 방식으로 구현될 수 있다.
본 개시의 한 측면으로서, 소정 연산을 수행하기 위한 연산 회로를 포함하는 프로그램가능 반도체 소자가 개시된다. 상기 프로그램가능 반도체 소자의 연산 회로는, 상기 소정 연산을 수행하도록 구성된 제1 연산기; 상기 소정 연산을 상기 제1 연산기와 상이한 방식으로 수행하도록 구성된 제2 연산기 - 상기 제2 연산기는 상기 제1 연산기에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높음 -; 및 상기 소정 연산을 수행하기 위해 상기 제1 연산기 및 상기 제2 연산기 중 어느 하나를 선택하도록 구성된 선택기를 포함할 수 있다.
일 실시예에서, 상기 제1 연산기는 반복(iteration) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고, 상기 제2 연산기는 파이프라인(pipeline) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 프로그램가능 반도체 소자는 FPGA(Field Programmable Gate Array)이고, 상기 제1 연산기는 로직 블록에서 구현되고, 상기 제2 연산기는 DSP(Digital Signal Processing) 블록에서 구현될 수 있다.
일 실시예에서, 상기 선택기는 상기 제1 연산기가 유휴(idle) 상태이고 추정 레이턴시(estimated latency)가 임계치(threshold) 미만일 경우 상기 제1 연산기를 선택하도록 구성될 수 있다.
일 실시예에서, 상기 소정 연산은 나눗셈(division)이고, 상기 제1 연산기는 뺄셈(subtraction)을 반복하도록 구성된 논리 회로이고, 상기 제2 연산기는 나눗셈의 스테이지(stage)를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 CLZ(Count Leading Zero)에 적어도 부분적으로 기초하여 산출될 수 있다.
일 실시예에서, 상기 소정 연산은 곱셈(multiplication)이고, 상기 제1 연산기는 덧셈(addition)을 반복하도록 구성된 논리 회로이고, 상기 제2 연산기는 곱셈의 스테이지를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 1인 비트의 개수(population count)에 적어도 부분적으로 기초하여 산출될 수 있다.
본 개시의 다른 일 측면에 따르면, 전술한 프로그램가능 반도체 소자를 포함하는 전자 장치가 개신된다.
본 개시의 또 다른 일 측면에 따르면, 연산 회로를 포함하는 프로그램가능 반도체 소자에 의해 소정 연산을 수행하는 방법이 개시된다. 상기 방법은, 상기 연산 회로에 포함된 선택기에 의해, 추정 레이턴시(estimated latency) 및 임계치(threshold)를 비교하는 단계; 상기 선택기에 의해, 상기 추정 레이턴시 및 상기 임계치의 비교에 적어도 부분적으로 기초하여 제1 연산기와 제2 연산기 중 어느 하나를 선택하는 단계 - 상기 제2 연산기는 상기 제1 연산기에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높은 방식으로 상기 소정 연산을 수행하도록 구성됨 -; 및 상기 제1 연산기와 상기 제2 연산기 중 선택된 어느 하나에 의해, 상기 소정 연산을 수행하는 단계를 포함할 수 있다.
일 실시예에서, 상기 제1 연산기는 반복(iteration) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고, 상기 제2 연산기는 파이프라인(pipeline) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 프로그램가능 반도체 소자는 FPGA(Field Programmable Gate Array)이고, 상기 제1 연산기는 로직 블록에서 구현되고, 상기 제2 연산기는 DSP(Digital Signal Processing) 블록에서 구현될 수 있다.
일 실시예에서, 상기 선택기는 상기 제1 연산기가 유휴(idle) 상태이고 상기 추정 레이턴시가 상기 임계치 미만일 경우 상기 제1 연산기를 선택하도록 구성될 수 있다.
일 실시예에서, 상기 소정 연산은 나눗셈(division)이고, 상기 제1 연산기는 뺄셈(subtraction)을 반복하도록 구성된 논리 회로이고, 상기 제2 연산기는 나눗셈의 스테이지(stage)를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 CLZ(Count Leading Zero)에 적어도 부분적으로 기초하여 산출될 수 있다.
일 실시예에서, 상기 소정 연산은 곱셈(multiplication)이고, 상기 제1 연산기는 덧셈(addition)을 반복하도록 구성된 논리 회로이고, 상기 제2 연산기는 곱셈의 스테이지를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
일 실시예에서, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 1인 비트의 개수(population count)에 적어도 부분적으로 기초하여 산출될 수 있다.
본 개시의 다양한 실시예들에 의하면, 프로그램가능 반도체 소자 내부의 제한된 자원을 효율적으로 활용하여 컴퓨팅 성능을 개선할 수 있는 프로그램가능 반도체 소자 및 이를 포함하는 전자 장치를 제공할 수 있다.
본 개시의 다양한 실시예들에 의하면, 연산기의 레이턴시 및/또는 스루풋을 기준으로 소정의 조건을 판단할 수 있고, 프로그램가능 반도체 소자(예: FPGA) 내의 로직 연산기와 DSP 연산기를 선택적으로 사용할 수 있는 메커니즘을 제공할 수 있다.
본 개시의 다양한 실시예들에 의하면, 로우 레이턴시(low latency)와 로우 스루풋(low throughput)의 특성을 갖는 제1 연산기와 하이 레이턴시(high latency)와 하이 스루풋(high throughput)의 특성을 갖는 제2 연산기를 조합함으로써 적은 비용으로 로우 레이턴시 및 하이 스루풋의 특성을 갖는 연산기를 구현할 수 있다.
본 개시의 다양한 실시예들에 의하면, 로우 레이턴시 및 하이 스루풋의 특성을 갖는 디바이더(divider) 및/또는 멀티플라이어(multiplier) 등을 포함하는 프로그램가능 반도체 소자를 구현할 수 있다.
본 개시의 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급되지 않은 다른 효과들은 청구범위의 기재로부터 본 개시가 속하는 기술분야에서 통상의 지식을 가진 자(이하, '통상의 기술자'라 함)에게 명확하게 이해될 수 있을 것이다.
도 1은 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자의 구조를 개념적으로 도시한 도면이다.
도 2는 본 개시의 일 실시예에 따른 DSP를 포함한 프로그램가능 반도체 소자의 구조를 개념적으로 도시한 도면이다.
도 3 및 도 4는 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자에 포함되는 DSP의 예시적인 실시 태양을 나타낸 도면이다.
도 5는 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자에 포함되는 연산 회로를 개념적으로 도시한 블록도이다.
도 6은 본 개시의 일 실시예에 따라 프로그램가능 반도체 소자에 의해 나눗셈 연산을 수행하는 방식을 설명하기 위한 수식이다.
도 7은 본 개시의 일 실시예에 따라 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법에 관한 순서도이다.
본 명세서에 기재된 다양한 실시예들은, 본 개시의 기술적 사상을 명확히 설명하기 위한 목적으로 예시된 것이며, 이를 특정한 실시 형태로 한정하려는 것이 아니다. 본 개시의 기술적 사상은, 본 명세서에 기재된 각 실시예의 다양한 변경(modifications), 균등물(equivalents), 대체물(alternatives) 및 각 실시예의 전부 또는 일부로부터 선택적으로 조합된 실시예를 포함한다. 또한 본 개시의 기술적 사상의 권리 범위는 이하에 제시되는 다양한 실시예들이나 이에 대한 구체적 설명으로 한정되지 않는다.
기술적이거나 과학적인 용어를 포함해서, 본 명세서에서 사용되는 용어들은, 달리 정의되지 않는 한, 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자에게 일반적으로 이해되는 의미를 가질 수 있다.
본 명세서에서 사용되는 "포함한다", "포함할 수 있다", "구비한다", "구비할 수 있다", "가진다", "가질 수 있다" 등과 같은 표현들은, 대상이 되는 특징(예: 기능, 동작 또는 구성요소 등)이 존재함을 의미하며, 다른 추가적인 특징의 존재를 배제하지 않는다. 즉, 이와 같은 표현들은 다른 실시예를 포함할 가능성을 내포하는 개방형 용어(open-ended terms)로 이해되어야 한다.
본 명세서에서의 단수의 표현은 문맥상 명백하게 단수인 것으로 특정하지 않는 한, 복수의 표현을 포함한다. 또한, 복수의 표현은 문맥상 명백하게 복수인 것으로 특정하지 않는 한, 단수의 표현을 포함한다. 명세서 전체에서 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다.
또한, 명세서에서 사용되는 '모듈' 또는 '부'라는 용어는 소프트웨어 또는 하드웨어 구성요소를 의미하며, '모듈' 또는 '부'는 어떤 역할들을 수행한다. 그렇지만, '모듈' 또는 '부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '모듈' 또는 '부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서, '모듈' 또는 '부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 또는 변수들 중 적어도 하나를 포함할 수 있다. 구성요소들과 '모듈' 또는 '부'들은 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '모듈' 또는 '부'들로 결합되거나 추가적인 구성요소들과 '모듈' 또는 '부'들로 더 분리될 수 있다.
본 개시의 일 실시예에 따르면, '모듈' 또는 '부'는 프로세서 및 메모리로 구현될 수 있다. '프로세서'는 범용 프로세서, 중앙 처리 장치(CPU), 마이크로프로세서, 디지털 신호 프로세서(DSP), 제어기, 마이크로제어기, 상태 머신 등을 포함하도록 넓게 해석되어야 한다. 몇몇 환경에서, '프로세서'는 주문형 반도체(ASIC), 프로그램가능 로직 디바이스(PLD), 필드 프로그램가능 게이트 어레이(FPGA) 등을 지칭할 수도 있다. '프로세서'는, 예를 들어, DSP와 마이크로프로세서의 조합, 복수의 마이크로프로세서들의 조합, DSP 코어와 결합한 하나 이상의 마이크로프로세서들의 조합, 또는 임의의 다른 그러한 구성들의 조합과 같은 처리 디바이스들의 조합을 지칭할 수도 있다. 또한, '메모리'는 전자 정보를 저장 가능한 임의의 전자 컴포넌트를 포함하도록 넓게 해석되어야 한다. '메모리'는 임의 액세스 메모리(RAM), 판독-전용 메모리(ROM), 비-휘발성 임의 액세스 메모리(NVRAM), 프로그램가능 판독-전용 메모리(PROM), 소거-프로그램가능 판독 전용 메모리(EPROM), 전기적으로 소거가능 PROM(EEPROM), 플래쉬 메모리, 자기 또는 광학 데이터 저장장치, 레지스터들 등과 같은 프로세서-판독가능 매체의 다양한 유형들을 지칭할 수도 있다. 프로세서가 메모리로부터 정보를 판독하고/하거나 메모리에 정보를 기록할 수 있다면 메모리는 프로세서와 전자 통신 상태에 있다고 불린다. 프로세서에 집적된 메모리는 프로세서와 전자 통신 상태에 있다.
본 명세서에서 사용되는 "제1", "제2", 또는 "첫째", "둘째" 등의 표현은, 문맥상 다르게 뜻하지 않는 한, 복수의 동종 대상들을 지칭함에 있어 한 대상을 다른 대상과 구분하기 위해 사용되며, 해당 대상들간의 순서 또는 중요도를 한정하는 것은 아니다.
본 명세서에서 사용되는 "A, B, 및 C," "A, B, 또는 C," "A, B, 및/또는 C" 또는 "A, B, 및 C 중 적어도 하나," "A, B, 또는 C 중 적어도 하나," "A, B, 및/또는 C 중 적어도 하나," "A, B, 및 C 중에서 선택된 적어도 하나," "A, B, 또는 C 중에서 선택된 적어도 하나," "A, B, 및/또는 C 중에서 선택된 적어도 하나" 등의 표현은, 각각의 나열된 항목 또는 나열된 항목들의 가능한 모든 조합들을 의미할 수 있다. 예를 들어, "A 및 B 중에서 선택된 적어도 하나"는, (1) A, (2) A 중 적어도 하나, (3) B, (4) B 중 적어도 하나, (5) A 중 적어도 하나 및 B 중 적어도 하나, (6) A 중 적어도 하나 및 B, (7) B 중 적어도 하나 및 A, (8) A 및 B를 모두 지칭할 수 있다.
본 명세서에서 사용되는 "~에 기초하여"라는 표현은, 해당 표현이 포함되는 어구 또는 문장에서 기술되는, 결정, 판단의 행위 또는 동작에 영향을 주는 하나 이상의 인자를 기술하는데 사용되고, 이 표현은 해당 결정, 판단의 행위 또는 동작에 영향을 주는 추가적인 인자를 배제하지 않는다.
본 명세서에서 사용되는, 어떤 구성요소(예: 제1 구성요소)가 다른 구성요소(예: 제2 구성요소)에 "연결되어" 있다거나 "접속되어" 있다는 표현은, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결 또는 접속되는 것뿐 아니라, 새로운 다른 구성요소(예: 제3 구성요소)를 매개로 하여 연결 또는 접속되는 것을 의미할 수 있다.
본 명세서에서 사용된 표현 "~하도록 구성된(configured to)"은 문맥에 따라, "~하도록 설정된", "~하는 능력을 가지는", "~하도록 변경된", "~하도록 만들어진", "~를 할 수 있는" 등의 의미를 가질 수 있다. 해당 표현은, "하드웨어적으로 특별히 설계된"의 의미로 제한되지 않으며, 예를 들어 특정 동작을 수행하도록 구성된 프로세서란, 소프트웨어를 실행함으로써 그 특정 동작을 수행할 수 있는 범용 프로세서(generic-purpose processor)를 의미할 수 있다.
이하, 첨부된 도면들을 참조하여, 본 개시의 다양한 실시예들을 설명한다. 첨부된 도면 및 도면에 대한 설명에서, 동일하거나 실질적으로 동등한(substantially equivalent) 구성요소에는 동일한 참조부호가 부여될 수 있다. 또한, 이하 다양한 실시예들의 설명에 있어서, 동일하거나 대응하는 구성요소를 중복하여 기술하는 것이 생략될 수 있으나, 이는 해당 구성요소가 그 실시예에 포함되지 않는 것을 의미하지는 않는다.
도 1은 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자의 구조를 개념적으로 도시한 도면이다. 예컨대, 도 1은 FPGA일 수 있다. FPGA는 PAL(Programmable Array Logic)을 저밀도(low density) PLD(Programmable Logic Device)로 분류함에 비하여 고밀도 PLD로 분류될 수 있다. 따라서 FPGA도 PAL과 마찬가지로 전기적인 퓨즈에 의한 사용자 프로그래밍으로 원하는 커스텀 회로를 빠른 시간에 구현할 수 있게 한다. PAL이 일반적으로 AND - OR 게이트로 된 구조적인 어레이를 취함에 따른 회로 구현의 효율성이 낮은 것에 비하여, FPGA는 다양한 형태의 디지털 회로를 구현할 수 있는 논리 및 연결 구조로 인하여 고성능의 회로를 구현할 수 있게 한다. 다만, 본 개시의 실시예들은 전반적으로 FPGA를 기준으로 프로그램가능 반도체 소자가 설명되지만, 이는 예시적인 것일 뿐이며 본 개시의 범위를 제한하지 않는다.
도 1의 예시적인 실시예에 따른 프로그램가능 반도체 소자(100)는 논리 블록(110), 입출력 셀(120), 배선 영역(130)을 포함할 수 있다.
논리 블록(110)은 디지털 회로를 구현할 수 있는 게이트, 플립플롭, 멀티플렉서, 메모리 등이 배치될 수 있다. 논리 블록(110)은 개발자 등이 직접 설계할 수 있는 논리 소자와 프로그램가능한 내부 회로를 포함할 수 있다. 예컨대, AND, OR, XOR, NAND, NOR, XNOR 등의 논리 소자를 포함할 수 있고, 소정의 입력 값에 대응하는 출력 값을 각각의 진리표로 나타낼 수 있다. FPGA는 사용자가 직접 코딩하여 칩 내부에 이러한 논리 소자들과 동일하게 동작할 수 있도록, 사용자가 원하는 소자의 진리표 값들을 프로그래밍할 수 있다.
논리 블록(110)은 CLB(Configurable Logic Block)일 수 있다. FPGA는 수 많은 CLB로 구성될 수 있으며, 도 1 및 도 2에 도시된 논리 블록(110)의 개수는 예시적인 것일 뿐, 본 개시의 범위를 제한하지 않는다. 설계자는 FPGA 상의 수 많은 CLB들을 사용하여 복잡한 로직을 구성할 수 있다. CLB에는 하나의 슬라이스가 있으며, 슬라이스는 FF(Flip-Flop), LUT(Look-Up Table), 멀티플렉서(multiplexer), 캐리 로직(carry logic) 등을 포함할 수 있다.
논리 블록(110)에 대해 진리표를 이용한 프로그래밍은 LUT를 이용한 프로그래밍일 수 있다. 예컨대, 사용자가 원하는 소자의 진리표 값들을 LUT에 프로그래밍해주면, 입력 값을 수신하여 LUT를 참조함으로써 마치 그 소자와 동일하게 동작하도록 출력 값을 생성할 수 있다.
LUT는 메모리의 일종이므로 별도의 메모리를 사용하지 않아도 FPGA 내부적으로 메모리처럼 활용가능하다. 그러나 이러한 활용이 효율성을 저해할 수 있기 때문에 FPGA는 칩 내부에 별도의 메모리를 더 포함할 수 있다. 예를 들어, 도 2에 도시된 바와 같이 프로그램가능 반도체 소자는 BRAM(Block RAM)이라는 메모리(240)를 더 포함할 수 있다.
입출력 셀(120)은 입력 및 출력 회로를 설계 용도에 맞게 구성하기 위한 외부 핀 및 입출력 보호회로 등이 배치될 수 있다. 입출력 셀(120)은 IOB(Input/Output Block)을 포함할 수 있다. IOB는 외부로부터의 입력을 수신하거나 외부로 출력을 내보낼 때 사용되는 블록이다. FPGA를 어떤 목적으로 사용하느냐에 따라 외부 연결도 달라질 수 있기 때문에 IOB는 FPGA의 용도 및 목적에 따라 다양한 활용이 가능하다.
배선 영역(130)의 구조는 논리 블록(110)들 사이의 신호를 연결하거나, 논리 블록(110)과 입출력 셀(120)을 연결하기 위한 배선 와이어와 와이어 사이의 전기적 연결 스위치로 구성될 수 있다. 배선 영역(130)은 SM(Switch Matrix)를 포함할 수 있다. SM은 설계자가 코딩한대로 블록들끼리 연결할 때 사용되는 구성요소이다. 블록들끼리 연결하는 것을 라우팅(routing)이라고 할 수 있는데, 라우팅 경로를 설계할 때 모든 경로를 한번에 묶어서 설계하지 않고, 중요한 요소들은 별도의 전용 라우팅 경로(dedicated routing)를 만들어 줄 수 있다.
도 2는 본 개시의 일 실시예에 따른 DSP를 포함한 프로그램가능 반도체 소자의 구조를 개념적으로 도시한 도면이다. 도 2를 참조하면 프로그램가능 반도체 소자(200)는 도 1에 도시된 예시적인 프로그램가능 반도체 소자(100)가 포함하는 논리 블록(110), 입출력 셀(120), 배선 영역(130)을 포함할 수 있다. 앞서 설명된 바와 같이, 도 2의 예시적인 프로그램가능 반도체 소자(200)는 별도의 메모리 블록으로 기능하는 BRAM(240)을 더 포함할 수 있다. 또한, 도 2의 예시적인 프로그램가능 반도체 소자(200)는 DSP 블록(250)을 더 포함할 수 있다.
BRAM(240)은 온칩 메모리이다. BRAM(240)은 온칩 메모리이기 때문에 버스(bus)를 사용하지 않고 바로 메모리에 접근할 수 있다. 또한, BRAM(240)은 FPGA의 듀얼 포트 램일 수 있다. 다시 말해, 한사이클에 2개의 주소로부터 값을 읽거나 쓰기가 가능할 수 있다. FPGA 소자마다 다르지만 BRAM(240) 하나는 18,000 비트나 36,000 비트를 저장할 수 있다. 이미지에서 한 픽셀이 8비트이므로 36,000비트이면 약 4,500 픽셀을 저장할 수 있는 양이다. 다만, 이는 본 개시의 예시적인 실시 형태일 뿐, 본 개시의 범위를 제한하는 수치가 아니다.
DSP 블록(250)은 연산에 최적화되어 있는 블록이다. DSP를 추가하면 여러개의 논리 블록(예: CLB)에 의해 실행되는 논리 회로를 더 적은 수의 DSP만으로도 실행될 수 있어 효율적이다.
도 3 및 도 4는 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자에 포함되는 DSP의 예시적인 실시 태양을 나타낸 도면이다.
도 3 및 도 4에 도시된 DSP 블록은 마치 CPU에 있는 ALU(Arithmetic Logic Unit)과 같은 역할을 할 수 있다. 예컨대, 도 3 및 도 4를 참조하면 DSP 블록은 크게 3가지 로직으로 구성될 수 있다. 예를 들어, (i) 덧셈/뺄셈기, (ii) 곱셈기(multiplier), (iii) 덧셈/뺄셈기/누산기(accumulator)의 3가지 로직으로 구성될 수 있다. 도 3의 예시에서는 최대 25-비트 × 18-비트 곱셈기를 사용할 수 있다. 도 4의 예시에서는 최대 27-비트 × 18-비트 곱셈기를 사용할 수 있다. DSP 블록을 사용하면 P = B × (A+D) + C 와 같은 형태의 연산을 효과적으로 처리할 수 있다. 또는 P += B × (A+D)와 같은 형태로 결과를 누적하는 방식으로도 사용할 수 있다.
도 5는 본 개시의 일 실시예에 따른 프로그램가능 반도체 소자에 포함되는 연산 회로를 개념적으로 도시한 블록도이다. 본 개시의 실시예들에 의하면, 논리 블록(110)에서 구현된 제1 연산기와 DSP 블록(250)에서 구현된 제2 연산기를 상황에 따라 선택적으로 사용할 수 있는 연산 회로(500)가 제공될 수 있다.
도 5에 도시된 연산 회로(500)는 제1 연산기(510), 제2 연산기(520), 및 선택기(530)를 포함할 수 있다. 이러한 연산 회로(500)는 소정 연산을 수행하기 위한 회로로서, 프로그램가능 반도체 소자 내에서 사용자의 설계에 따라 구현될 수 있다.
본 개시의 실시예들에 따르면, 프로그램가능 반도체 소자는 FPGA이고, 제1 연산기(510)는 로직 블록(110)에서 구현되고, 제2 연산기(520)는 DSP 블록(250)에서 구현될 수 있다.
제1 연산기(510)는 소정 연산(예: 나눗셈, 곱셈 등)을 수행하도록 구성된다. 제2 연산기(520)는 제1 연산기(510)와 상이한 방식으로 소정 연산을 수행하도록 구성된다. 제2 연산기(520)는 제1 연산기(510)에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높은 특성을 갖도록 구현될 수 있다. 다시 말해, 제1 연산기(510)는 로우 레이턴시 및 로우 스루풋의 특성을 갖는 반면, 제2 연산기(520)는 하이 레이턴시 및 하이 스루풋의 특성을 가질 수 있다.
이하에서는 소정 연산이 나눗셈(division) 연산인 경우를 가정하여 본 개시의 예시적인 일 실시예를 설명한다. 이 경우, 본 개시의 예시적인 일 실시예에 따른 FPGA에 구현된 연산 회로(500)는 논리 블록(110)을 활용하여 설계된 로직 디바이더(logic divider)와 DSP 블록(250)을 활용하여 설계된 DSP 디바이더(DSP divider)를 포함할 수 있다. 제1 연산기(510)는 로직 디바이더일 수 있고, 제2 연산기(520)는 DSP 디바이더일 수 있다.
로직 디바이더로 구현된 제1 연산기(510)는 반복(iteration) 방식으로 나눗셈 연산을 수행하도록 구성된 논리 회로일 수 있다. DSP 디바이더로 구현된 제2 연산기는 파이프라인(pipeline) 방식으로 나눗셈 연산을 수행하도록 구성된 논리 회로일 수 있다. 나눗셈 연산은 정확도를 희생하는 알고리즘(fast algorithm)이 아닌 경우 일반적으로 뺄셈(subtraction)을 반복하는 방식으로 구현될 수 있다. 반복 방식의 디바이더는 차지하는 영역이 작고 제로 스키핑(zero skipping) 방식을 적용하여 레이턴시를 낮게 만들 수 있는 장점이 있지만, 한꺼번에 여러 개의 연산을 처리할 수 없어서 스루풋이 낮은 단점이 있다. 이에 비하여 스루풋이 높은 디바이더를 설계하려면 모든 스테이지를 파이프라인 방식으로 만들면 되지만, 반복 방식에 비해 비용이 훨씬 많이 들고, 레이턴시가 상대적으로 커지기 때문에 그만큼 많은 하드웨어 자원이 필요한 문제가 있다.
본 개시의 실시예들에 따르면, 연산 회로(500)에 포함된 선택기(530)가 소정의 조건을 판단하여, 판단된 조건에 따라 제1 연산기(510) 및 제2 연산기(520) 중 어느 하나를 선택하여 연산을 수행하도록 함으로써 전술된 문제를 해결할 수 있다. 예를 들어, 본 개시의 실시예들에 의하면, DSP 블록(250)을 활용해 하이 레이턴시 및 하이 스루풋의 특성을 갖는 파이프라인 방식의 디바이더를 설계하고, 이와 반대의 특성을 가지도록 논리 블록(110)을 활용해 로우 레이턴시 및 로우 스루풋의 특성을 갖는 반복 방식의 디바이더를 설계하여, 필요에 따라 이들 디바이더를 선택적으로 사용함으로써 레이턴시와 스루풋이 모두 개선된 디바이더를 구현할 수 있다.
선택기(530)는 제1 연산기(510)가 유휴(idle) 상태이고 추정 레이턴시(estimated latency)가 임계치(threshold) 미만일 경우 제1 연산기(510)를 선택하도록 구성될 수 있다. 이러한 조건이 충족되지 않으면, 제2 연산기(520)를 선택하도록 구성될 수 있다.
선택기(530)는 제1 연산기(510)가 유휴 상태가 아니라고 판단하면, 제2 연산기(520)를 선택하여 사용하게 연산을 수행할 수 있다. 즉, 제1 연산기(510)가 동작 중인 상태이므로 제1 연산기(510)가 아닌 제2 연산기(520)를 선택할 수 있다.
제1 연산기(510)가 유휴 상태라고 하더라도 추정 레이턴시가 임계치 이상인 경우라면 제2 연산기(520)를 선택할 수 있다. 즉, 제1 연산기(510)를 사용할 수 있는 상태임에도, 추정 레이턴시가 너무 길어질 것 같으면 제2 연산기(520)를 선택할 수 있다.
제1 연산기(510)가 유휴 상태에 있으면서 추정 레이턴시가 임계치 미만인 경우에는 제1 연산기(510)를 선택할 수 있다. 즉, 제1 연산기(510)를 사용하더라도 추정 레이턴시가 임계치를 넘어서지 않는다고 판단한 경우이므로, 제1 연산기(510)를 선택하여 연산을 수행할 수 있다.
본 개시의 실시예들에 따르면, 선택기(530)는 하나 이상의 입력을 수신하도록 구성될 수 있으며, 이러한 입력에 기초하여 추정 레이턴시를 계산할 수 있다. 또한 임계치는 파라미터로 주어질 수도 있으며 조건에 따라 조절될 수 있는 값일 수 있다.
연산의 유형이 나눗셈(division)인 경우, 제1 연산기는 뺄셈(subtraction)을 반복하도록 구성된 논리 회로이고, 제2 연산기는 나눗셈의 스테이지(stage)를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
도 6은 본 개시의 일 실시예에 따라 프로그램가능 반도체 소자에 의해 나눗셈 연산을 수행하는 방식을 설명하기 위한 수식이다. 예컨대, 이진수 111(피제수)을 이진수 010(제수)으로 나누는 경우의 나눗셈을 가정해보자. 나눗셈은 피제수와 제수의 부분 비교(partial comparison)을 통하여 연산할 수 있다. 제수가 3비트이므로 4비트 단위로 끊어서 부분 비교하는 것을 고려할 수 있다. 먼저 피제수 111의 최상위비트 1을 4비트인 0001로 볼 수 있고, 제수 010을 4비트 단위로 변환한 0010과 비교할 수 있다. 부분 피제수가 제수보다 작으면 몫은 0이 된다. 이 경우 0001이 0010보다 작기 때문에 몫이 0이 된다. 여기서 몫 0은 첫번째로 계산된 몫, 즉 최상위 비트에 대해 계산된 몫이다.
그 이후 피제수 111의 최상위비트와 차상위비트 11을 4비트인 0011로 보고 부본 피제수를 0011로 취급한다. 그리고 제수와 비교한다. 이번에는 부분 피제수 0011이 제수 0010보다 크기 때문에 몫은 1이 된다. 여기서 몫 1은 두번째로 계산된 몫, 즉 차상위 비트에 대해 계산된 몫이다. 몫이 1인 경우 부분 피제수에서 제수를 감산하고 그 결과를 새로운 부분 피제수로 본다. 0011에서 0010을 감산한 결과인 0001이 새로운 부분 피제수가 된다.
그 이후 부분 피제수를 시프트하고 피제수 111의 최하위비트 1을 붙여서 0011을 새로운 부분 피제수로 본다. 역시 부분 피제수 0011이 제수 0010보다 크기 때문에 몫은 1이 된다. 여기서 몫 1은 세번째로 계산된 몫, 즉 소수점 바로 앞의 1의 자리 비트에 대해 계산된 몫이다. 몫이 1인 경우이므로 부분 피제수에서 제수를 감산하고 그 결과를 새로운 부분 피제수로 본다. 0011에서 0010을 감산한 결과인 0001이 새로운 부분 피제수가 된다.
그 이후로는 소수점 아래 숫자인데 피제수가 소숫점 아래의 수를 가지고 있지 않기 때문에 0001을 시프트시킨 경과 0010에 그대로 0을 붙여서 새로운 부분 피제수로 본다. 이 때 부분 피제수와 제수가 같아도 몫은 1이 되고 역시 부분 피제수에서 제수를 감산한다. 여기서 몫 1은 네번째로 계산된 몫, 즉 소수점 첫째 자리에 대해 계산된 몫이다. 0010에서 0010을 감산한 결과인 0000이 새로운 부분 피제수가 된다.
이후로는 계속 피제수가 0000인 상태이므로 연산을 종결할 수 있다. 혹은 실시예에 따라 유효 자릿수까지 연산을 반복하도록 구현할 수도 있다. 만약 유효 자릿수를 소수점 아래 3자리까지로 본다면, 후속하는 2회의 연산 결과에 따른 몫은 모두 0이 된다.
최종 연산 결과는 구해진 몫을 순서대로 나열한 결과와 같다. 즉, 첫번째로 계산된 몫부터 여섯번째로 계산된 몫까지 순서대로 나열하여 011.100이 된다. 이진수 111을 이진수 010으로 나눈 결과인 011.100으로 올바르게 계산이 완료됨을 확인할 수 있다.
이처럼 나눗셈은 뺄셈을 반복해서 구현하는 방식으로 처리할 수 있는 연산이다. 따라서 소정 연산의 유형이 나눗셈인 경우, 제1 연산기는 뺄셈을 반복하도록 구성된 논리 회로일 수 있다. 제2 연산기는 나눗셈의 스테이지를 DSP 블록(250)을 활용하여 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다. 즉, 파이프라인 방식으로 처리함으로써 병렬적으로 연산이 처리될 수 있으며, 이에 따라 스루풋이 증가할 수 있다.
소정 연산이 나눗셈인 경우 입력 피연산자의 비트 폭(bit width)과 CLZ(Count Leading Zero)를 미리 파악하면 추정 레이턴시를 보다 정확하게 산출할 수 있다. 피연산자(예: 피제수)에서 0이 반복해서 계속해서 나올 경우 굳이 불필요하게 반복 연산의 루프를 수행하지 않고, 반복 횟수만큼 시프트 연산을 수행함으로써 연산의 효율을 높일 수 있다. 따라서, 피연산자의 비트 폭에서 CLZ를 차감한 값을 매개변수로 하여 소정의 함수를 수행할 경우 추정 레이턴시가 구해질 수 있다. 즉, 반복 방식의 디바이더는 제로 스키핑(zero skipping) 방식을 적용하여 레이턴시를 낮게 만들 수 있으므로, f(피연산자의 비트 폭 - CLZ)를 계산함으로써 추정 레이턴시를 더욱 정확하게 구할 수도 있다.
이상 설명된 실시예들은 나눗셈 연산을 기준으로 설명되었으나, 연산의 종류가 곱셈(multiplication)인 경우에도 유사한 방식의 응용이 가능하다. 예컨대, 소정 연산은 곱셈이고, 제1 연산기(510)는 덧셈(addition)을 반복하도록 구성된 논리 회로이고, 제2 연산기(520)는 곱셈의 스테이지를 파이프라인 방식으로 처리하도록 구성된 논리 회로일 수 있다.
이 경우 나눗셈 연산에 있어서의 제로 스키핑을 하는 기법과 유사하게 곱셈 연산에 대해서는 팝카운트(population count)를 활용하는 기법을 사용할 수 있다. 예를 들어, 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 1인 비트의 개수에 적어도 부분적으로 기초하여 산출될 수 있다. 이를테면, f(피연산자의 비트 폭 - 팝카운트)를 계산함으로써 추정 레이턴시를 더욱 정확하게 구할 수 있다.
본 개시의 실시예들에 따른 프로그램가능 반도체 소자는 전자 장치에 포함될 수 있다. 본 개시에서 사용되는 전자 장치라는 용어는 컴퓨팅 장치(예: 퍼스널 컴퓨터, 스마트폰, 태블릿, 랩탑 등)일 수 있다. 대안적으로, 본 개시에서 사용되는 전자 장치라는 용어는 이들 컴퓨팅 장치에 포함되는 컴포넌트(예: 시스템온칩(SoC), 임베디드 시스템 등)일 수 있다.
도 7은 본 개시의 일 실시예에 따라 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법에 관한 순서도이다. 도 7에 도시된 방법은 도 1 내지 도 6을 참조하여 설명한 연산 회로(500)를 포함하는 프로그램가능 반도체 소자에 의해 수행될 수 있다.
도 7의 예시적인 방법(700)은 추정 레이턴시 및 임계치를 비교하는 단계(S710), 제1 연산기와 제2 연산기 중 어느 하나를 선택하는 단계(S720), 및 선택된 연산기에 의해 연산을 수행하는 단계(S730)를 포함할 수 있다.
단계 S710은 연산 회로(500)에 포함된 선택기(530)에 의해 수행될 수 있다. 추정 레이턴시를 계산하는 예시적인 실시예들은 도 5를 참조하여 설명된 실시예들에 기초하여 유사하게 이해될 수 있다. 또한, 임계치는 파라미터로 조절할 수 있도록 구성될 수 있다.
단계 S720은 연산 회로(500)에 포함된 선택기(530)에 의해 수행될 수 있다. 선택기(530)에 의해 소정의 조건을 판단하여 제1 연산기(510)와 제2 연산기(520) 중 어떤 연산기를 선택하여 연산을 수행할지 정할 수 있다. 예컨대, 제1 연산기(510)가 유휴 상태에 있으면서 추정 레이턴시가 임계치 미만인 경우에는 제1 연산기(510)를 선택할 수 있다. 즉, 제1 연산기(510)를 사용하더라도 추정 레이턴시가 임계치를 넘어서지 않는다고 판단한 경우이므로, 제1 연산기(510)를 선택하여 연산을 수행할 수 있다. 반면, 이러한 조건이 충족되지 않으면 제2 연산기(520)를 선택할 수 있다. 앞서 설명된 바와 같이, 제2 연산기(520)는 제1 연산기(510)에 비해 레이턴시가 길고 스루풋이 높은 방식으로 소정 연산을 수행할 수 있다.
단계 S730은 제1 연산기(510)와 제2 연산기(520) 중 선택된 어느 하나에 의해, 소정 연산(예: 나눗셈, 곱셈 등)을 수행하는 단계일 수 있다. 연산 회로(500)의 외부에서는 제1 연산기(510)와 제2 연산기(520) 중 어떤 연산기가 선택되는지 알지 못하더라도 무방하다. 본 개시의 실시예들에 따르면, 서로 반대되는 특성의 제1 연산기(510)(예: 로직 연산기)와 제2 연산기(520)(예: DSP 연산기)를 선택적으로 사용함으로써 낮은 레이턴시와 높은 스루풋을 모두 갖는 연산 회로(500)를 구현할 수 있는 이점이 있다.
한편, 도 7의 예시적인 실시예에 따른 방법(700)에는 구체적으로 도시되지 않은 동작 또는 단계라고 할지라도 앞서 도 1 내지 도 6을 참조하여 설명된 실시예들에 따른 동작(들)이 도 7의 실시예에 추가하여 실행될 수 있음은 당연하다. 이들 동작에 대해서는 도 1 내지 도 6을 참조하여 설명되었으므로, 여기에서는 자세한 설명을 생략한다.
본 개시에 따른 방법들은 컴퓨터로 구현된 방법들일 수 있다. 본 개시에서, 해당 방법들의 각 단계가 소정의 순서대로 도시되고 설명되었지만, 각 단계들은 순차적으로 수행되는 것 이외에, 본 개시에 따라 임의로 조합될 수 있는 순서로 수행될 수도 있다. 일 실시예에서, 적어도 일부의 단계가 병렬적, 반복적 또는 휴리스틱하게 수행될 수 있다. 본 개시는 해당 방법들에 변화 또는 수정을 가하는 것을 제외하지 않는다. 일 실시예에서, 적어도 일부의 단계가 생략되거나, 다른 단계가 추가될 수 있다.
본 개시의 다양한 실시예들은 기기(machine)가 읽을 수 있는 기록 매체(machine-readable recording medium)에 기록된 소프트웨어로 구현될 수 있다. 소프트웨어는 상술한 본 개시의 다양한 실시예들을 구현하기 위한 소프트웨어일 수 있다. 소프트웨어는 본 개시가 속하는 기술분야의 프로그래머들에 의해 본 개시의 다양한 실시예들로부터 추론될 수 있다. 예를 들어 소프트웨어는 기기가 읽을 수 있는 명령(예: 코드 또는 코드 세그먼트) 또는 프로그램일 수 있다. 기기는 기록 매체로부터 호출된 명령어에 따라 동작이 가능한 장치로서, 예를 들어 컴퓨터일 수 있다. 일 실시예에서, 기기는 본 개시의 실시예들에 따른 프로그램가능 반도체 소자를 포함하는 전자 장치일 수 있다. 일 실시예에서, 기기의 프로세서는 호출된 명령을 실행하여, 기기의 구성요소들이 해당 명령에 해당하는 기능을 수행하게 할 수 있다. 기록 매체는 기기에 의해 읽혀질 수 있는, 데이터가 저장되는 모든 종류의 기록 매체(recording medium)를 의미할 수 있다. 기록 매체는, 예를 들어 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장 장치 등을 포함할 수 있다. 일 실시예에서, 기록 매체는 네트워크로 연결된 컴퓨터 시스템 등에 분산된 형태로서 구현될 수도 있다. 소프트웨어는 컴퓨터 시스템 등에 분산되어 저장되고, 실행될 수 있다. 기록 매체는 비일시적(non-transitory) 기록 매체일 수 있다. 비일시적 기록 매체는, 데이터가 반영구적 또는 임시적으로 저장되는 것과 무관하게 실재하는 매체(tangible medium)를 의미하며, 일시적(transitory)으로 전파되는 신호(signal)를 포함하지 않는다.
이상 다양한 실시예들에 의해 본 개시의 기술적 사상이 설명되었지만, 본 개시의 기술적 사상은 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 이해할 수 있는 범위에서 이루어질 수 있는 다양한 치환, 변형 및 변경을 포함한다. 또한, 그러한 치환, 변형 및 변경은 첨부된 청구범위 내에 포함될 수 있는 것으로 이해되어야 한다. 본 개시에 따른 실시예들은 서로 조합될 수 있다. 각 실시예들은 경우의 수에 따라 다양하게 조합될 수 있으며, 조합되어 만들어진 실시예 역시 본 개시의 범위에 속한다.

Claims (17)

  1. 소정 연산을 수행하기 위한 연산 회로를 포함하는 프로그램가능 반도체 소자로서,
    상기 연산 회로는,
    상기 소정 연산을 수행하도록 구성된 제1 연산기;
    상기 소정 연산을 상기 제1 연산기와 상이한 방식으로 수행하도록 구성된 제2 연산기 - 상기 제2 연산기는 상기 제1 연산기에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높음 -; 및
    상기 소정 연산을 수행하기 위해 상기 제1 연산기 및 상기 제2 연산기 중 어느 하나를 선택하도록 구성된 선택기
    를 포함하고,
    상기 제1 연산기는 반복(iteration) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고,
    상기 제2 연산기는 파이프라인(pipeline) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고,
    상기 선택기는, 상기 제1 연산기가 유휴(idle) 상태이고 추정 레이턴시(estimated latency)가 임계치(threshold) 미만일 경우 상기 제1 연산기를 선택하고, 상기 제1 연산기가 상기 유휴 상태가 아니거나 상기 추정 레이턴시가 상기 임계치 이상일 경우 상기 제2 연산기를 선택하도록 구성되고,
    상기 프로그램가능 반도체 소자는 FPGA(Field Programmable Gate Array)이고,
    상기 제1 연산기는 로직 블록에서 구현되고,
    상기 제2 연산기는 DSP(Digital Signal Processing) 블록에서 구현되고,
    상기 소정 연산이 나눗셈(division)인 경우, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)에서 CLZ(Count Leading Zero)를 차감한 값을 매개변수로 하여 소정의 함수를 수행하여 산출되고,
    상기 소정 연산이 곱셈(multiplication)인 경우, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 1인 비트의 개수(population count)를 차감한 값을 매개변수로 하여 소정의 함수를 수행하여 산출되는, 프로그램가능 반도체 소자.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 제1항에 있어서,
    상기 소정 연산은 나눗셈(division)이고,
    상기 제1 연산기는 뺄셈(subtraction)을 반복하도록 구성된 논리 회로이고,
    상기 제2 연산기는 나눗셈의 스테이지(stage)를 파이프라인 방식으로 처리하도록 구성된 논리 회로인, 프로그램가능 반도체 소자.
  6. 삭제
  7. 제1항에 있어서,
    상기 소정 연산은 곱셈(multiplication)이고,
    상기 제1 연산기는 덧셈(addition)을 반복하도록 구성된 논리 회로이고,
    상기 제2 연산기는 곱셈의 스테이지를 파이프라인 방식으로 처리하도록 구성된 논리 회로인, 프로그램가능 반도체 소자.
  8. 삭제
  9. 제1항, 제5항, 및 제7항 중 어느 한 항에 따른 프로그램가능 반도체 소자를 포함하는 전자 장치.
  10. 연산 회로를 포함하는 프로그램가능 반도체 소자에 의해 소정 연산을 수행하는 방법으로서,
    상기 연산 회로에 포함된 선택기에 의해, 추정 레이턴시(estimated latency) 및 임계치(threshold)를 비교하는 단계;
    상기 선택기에 의해, 상기 추정 레이턴시 및 상기 임계치의 비교에 적어도 부분적으로 기초하여 제1 연산기와 제2 연산기 중 어느 하나를 선택하는 단계 - 상기 제2 연산기는 상기 제1 연산기에 비해 레이턴시(latency)가 길고 스루풋(throughput)이 높은 방식으로 상기 소정 연산을 수행하도록 구성됨 -; 및
    상기 제1 연산기와 상기 제2 연산기 중 선택된 어느 하나에 의해, 상기 소정 연산을 수행하는 단계
    를 포함하고,
    상기 제1 연산기는 반복(iteration) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고,
    상기 제2 연산기는 파이프라인(pipeline) 방식으로 상기 소정 연산을 수행하도록 구성된 논리 회로이고,
    상기 선택기는, 상기 제1 연산기가 유휴(idle) 상태이고 추정 레이턴시(estimated latency)가 임계치(threshold) 미만일 경우 상기 제1 연산기를 선택하고, 상기 제1 연산기가 상기 유휴 상태가 아니거나 상기 추정 레이턴시가 상기 임계치 이상일 경우 상기 제2 연산기를 선택하도록 구성되고,
    상기 프로그램가능 반도체 소자는 FPGA(Field Programmable Gate Array)이고,
    상기 제1 연산기는 로직 블록에서 구현되고,
    상기 제2 연산기는 DSP(Digital Signal Processing) 블록에서 구현되고,
    상기 소정 연산이 나눗셈(division)인 경우, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)에서 CLZ(Count Leading Zero)를 차감한 값을 매개변수로 하여 소정의 함수를 수행하여 산출되고,
    상기 소정 연산이 곱셈(multiplication)인 경우, 상기 추정 레이턴시는 입력 피연산자의 비트 폭(bit width)과 1인 비트의 개수(population count)를 차감한 값을 매개변수로 하여 소정의 함수를 수행하여 산출되는, 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 제10항에 있어서,
    상기 소정 연산은 나눗셈(division)이고,
    상기 제1 연산기는 뺄셈(subtraction)을 반복하도록 구성된 논리 회로이고,
    상기 제2 연산기는 나눗셈의 스테이지(stage)를 파이프라인 방식으로 처리하도록 구성된 논리 회로인, 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법.
  15. 삭제
  16. 제10항에 있어서,
    상기 소정 연산은 곱셈(multiplication)이고,
    상기 제1 연산기는 덧셈(addition)을 반복하도록 구성된 논리 회로이고,
    상기 제2 연산기는 곱셈의 스테이지를 파이프라인 방식으로 처리하도록 구성된 논리 회로인, 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법.
  17. 삭제
KR1020230062163A 2023-05-15 2023-05-15 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법 KR102612588B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020230062163A KR102612588B1 (ko) 2023-05-15 2023-05-15 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020230062163A KR102612588B1 (ko) 2023-05-15 2023-05-15 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법

Publications (1)

Publication Number Publication Date
KR102612588B1 true KR102612588B1 (ko) 2023-12-12

Family

ID=89159460

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230062163A KR102612588B1 (ko) 2023-05-15 2023-05-15 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법

Country Status (1)

Country Link
KR (1) KR102612588B1 (ko)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR960702643A (ko) * 1993-05-28 1996-04-27 윌리암 에이. 호스킨스 동적 논리코어에 동적으로 상호접속된 필드 프로그램 가능 논리장치(field programmable logic device with dynamic interconnections to a dynamic logic core)
KR20110022933A (ko) * 2009-08-28 2011-03-08 성균관대학교산학협력단 공통 데이터 패스 구조를 포함하는 디블록킹 필터링 연산 장치 및 그 방법
KR20140076046A (ko) * 2012-12-12 2014-06-20 한국전자통신연구원 전동기 위치 검출부 및 브러쉬리스 전동기 시스템
KR20180103885A (ko) * 2016-01-20 2018-09-19 삼성전자주식회사 나눗셈 연산을 처리하는 방법, 장치 및 기록매체
KR20200069110A (ko) * 2018-12-06 2020-06-16 삼성전자주식회사 Fpga를 포함하는 메모리 시스템 및 이의 동작 방법
KR20210096553A (ko) * 2020-01-27 2021-08-05 삼성전자주식회사 레이턴시 및 스루풋 중심의 재구성 가능한 저장 장치
KR20220071047A (ko) * 2020-11-23 2022-05-31 부산대학교 산학협력단 Fpga를 이용한 타원곡선암호 스칼라 곱셈을 위한 연산 장치 및 방법

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR960702643A (ko) * 1993-05-28 1996-04-27 윌리암 에이. 호스킨스 동적 논리코어에 동적으로 상호접속된 필드 프로그램 가능 논리장치(field programmable logic device with dynamic interconnections to a dynamic logic core)
KR20110022933A (ko) * 2009-08-28 2011-03-08 성균관대학교산학협력단 공통 데이터 패스 구조를 포함하는 디블록킹 필터링 연산 장치 및 그 방법
KR20140076046A (ko) * 2012-12-12 2014-06-20 한국전자통신연구원 전동기 위치 검출부 및 브러쉬리스 전동기 시스템
KR20180103885A (ko) * 2016-01-20 2018-09-19 삼성전자주식회사 나눗셈 연산을 처리하는 방법, 장치 및 기록매체
KR20200069110A (ko) * 2018-12-06 2020-06-16 삼성전자주식회사 Fpga를 포함하는 메모리 시스템 및 이의 동작 방법
KR20210096553A (ko) * 2020-01-27 2021-08-05 삼성전자주식회사 레이턴시 및 스루풋 중심의 재구성 가능한 저장 장치
KR20220071047A (ko) * 2020-11-23 2022-05-31 부산대학교 산학협력단 Fpga를 이용한 타원곡선암호 스칼라 곱셈을 위한 연산 장치 및 방법

Similar Documents

Publication Publication Date Title
US11868775B2 (en) Encoding and decoding variable length instructions
US20220253319A1 (en) Hardware Unit for Performing Matrix Multiplication with Clock Gating
US11954456B2 (en) Float division by constant integer
US11768658B2 (en) Look ahead normaliser
US20240126507A1 (en) Apparatus and method for processing floating-point numbers
US20230221924A1 (en) Apparatus and Method for Processing Floating-Point Numbers
KR102612588B1 (ko) 프로그램가능 반도체 소자, 이를 포함하는 전자 장치, 및 프로그램가능 반도체 소자에 의해 연산을 수행하는 방법
US8713086B2 (en) Three-term predictive adder and/or subtracter
US20220365755A1 (en) Performing constant modulo arithmetic
US11531522B2 (en) Selecting an ith largest or a pth smallest number from a set of n m-bit numbers
GB2590865A (en) Float division by constant integer with output subtraction
GB2590866A (en) Float Division by constant integer using a predetermined number of modulo units
Cardarilli et al. Arithmetic/logic blocks for fine-grained reconfigurable units
GB2591713A (en) Hardware unit for performing matrix multiplication with clock gating
GB2584228A (en) Hardware unit for performing matrix multiplication with clock gating
GB2576282A (en) Hardware unit for performing matrix multiplication with clock gating
Carroll 3.5 Arithmetic Logic Units

Legal Events

Date Code Title Description
AMND Amendment
E601 Decision to refuse application
X091 Application refused [patent]
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant