KR20230082173A - 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치 - Google Patents

높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치 Download PDF

Info

Publication number
KR20230082173A
KR20230082173A KR1020210169849A KR20210169849A KR20230082173A KR 20230082173 A KR20230082173 A KR 20230082173A KR 1020210169849 A KR1020210169849 A KR 1020210169849A KR 20210169849 A KR20210169849 A KR 20210169849A KR 20230082173 A KR20230082173 A KR 20230082173A
Authority
KR
South Korea
Prior art keywords
data
latch
output
input
bits
Prior art date
Application number
KR1020210169849A
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 KR1020210169849A priority Critical patent/KR20230082173A/ko
Priority to US17/835,562 priority patent/US20230168862A1/en
Priority to CN202210836192.4A priority patent/CN116225368A/zh
Publication of KR20230082173A publication Critical patent/KR20230082173A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • 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/50Adding; Subtracting
    • 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/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • 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/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • 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/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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/62Performing operations exclusively by counting total number of pulses ; Multiplication, division or derived operations using combined denominational and incremental processing by counters, i.e. without column shift
    • 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/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/723Modular exponentiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Manipulation Of Pulses (AREA)
  • Complex Calculations (AREA)
  • Read Only Memory (AREA)

Abstract

누산기는, 입력데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로와, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로와, 그리고 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함한다.

Description

높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치{Accumulator for high operating speed, operational logic circuit including the accumulator, and processing-in-memory device including the accumulator}
본 개시의 여러 실시예들은 누산기에 관한 것으로서, 특히 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리(processing-in-memory; 이하 PIM) 장치에 관한 것이다.
최근 정보기술(IT) 산업 뿐만 아니라, 금융, 의료 등 산업 전반에 걸쳐 인공지능에 대한 관심이 급증하고 있다. 이에 따라 다양한 분야에서 인공 지능, 보다 정확하게는 딥 러닝(deep learning)의 도입을 고려하고 시제품화하고 있다. 일반적으로 딥 러닝은, 기존 신경망(neural networks)의 계층 수를 증가시킨 심층 신경망(deep neural networks, DNNs) 또는 심층망(deep networks)을 효과적으로 학습하여 패턴인식(pattern recognition)이나 추론(inference)에 활용하는 기술을 통칭한다. 딥 러닝을 수행하는데 있어서, 곱셈-누산(Multiply-Accumulate; 이하 MAC) 연산이 이용된다. MAC 연산은 곱셈 연산, 가산 연산, 및 누적 연산의 과정을 통해 수행될 수 있다. 누적 연산을 수행하는 누산기에서는 누산기에 데이터가 입력되는 속도보다 누산기 내에서의 누적 연산을 수행하는 속도가 늦은 경우, 전체적인 MAC 연산을 수행하는 속도가 저하될 수 있다.
본 출원이 해결하고자 하는 과제는, 높은 동작 속도를 위한 누산기와, 이를 포함하는 연산 로직 회로 및 PIM 장치를 제공하는 것이다.
본 개시의 일 예에 따르면, 누산기는, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 입력래치회로는, 입력데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
본 개시의 일 예에 따르면, 누산기는, 입력래치회로, 누적회로, 출력래치회로, 및 추가가산기를 포함한다. 입력래치회로는, 입력데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 상기 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다. 추가가산기는, 제1 출력래치로부터 출력되는 오드 래치데이터들 중 마지막 오드 래치데이터와, 제2 출력래치로부터 출력되는 이븐 래치데이터들 중 마지막 이븐 래치데이터를 가산하여 누적데이터를 출력한다.
본 개시의 일 예에 따르면, 누산기는, 선택출력기, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 선택출력기는, 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력한다. 입력래치회로는, 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
본 개시의 일 예에 따르면, MAC 오퍼레이터는, 제1 입력데이터들 및 제2 입력데이터들에 대한 곱셈연산을 수행하여 곱셈데이터들을 출력하는 곱셈회로와, 곱셈데이터들에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 애더트리와, 그리고 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함한다. 누산기는, 선택출력기, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 선택출력기는, 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력한다. 입력래치회로는, 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
본 개시의 일 예에 따르면, PIM 장치는, 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로와, 레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로와, 레프트 웨이트데이터들 및 레프트 벡터데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로와, 레프트 곱셈데이터들에 대한 가산연산을 수행하여 레프트 곱셈가산데이터를 출력하는 레프트 애더트리와, 레프트 곱셈가산데이터와 레프트 래치데이터에 대한 누적연산을 수행하는 레프트 누산기와, 라이트 웨이트데이터들 및 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로와, 라이트 곱셈데이터들에 대한 가산연산을 수행하여 라이트 곱셈가산데이터를 출력하는 라이트 애더트리와, 라이트 곱셈가산데이터와 라이트 래치데이터에 대한 누적연산을 수행하는 라이트 누산기를 포함한다. 레프트 누산기 및 라이트 누산기 각각은, 선택출력기, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 선택출력기는, 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력한다. 입력래치회로는, 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
본 개시의 일 예에 따르면, PIM 장치는, 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로와, 레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로와, 레프트 웨이트데이터들 및 레프트 벡터데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로와, 레프트 곱셈데이터들에 대한 가산연산을 수행하여 레프트 곱셈가산데이터를 출력하는 레프트 애더트리와, 라이트 웨이트데이터들 및 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로와, 라이트 곱셈데이터들에 대한 가산연산을 수행하여 라이트 곱셈가산데이터를 출력하는 라이트 애더트리와, 레프트 곱셈가산데이터 및 라이트 곱셈가산데이터에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 가산기와, 그리고 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함한다. 누산기는, 선택출력기, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 선택출력기는, 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력한다. 입력래치회로는, 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
본 개시의 일 예에 따르면, PIM 장치는, 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로와, 레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로와, 레프트 웨이트데이터들 및 레프트 벡터데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로와, 라이트 웨이트데이터들 및 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로와, 레프트 곱셈데이터들 및 라이트 곱셈데이터들에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 통합 애더트리와, 그리고 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함한다. 누산기는, 선택출력기, 입력래치회로, 누적회로, 및 출력래치회로를 포함한다. 선택출력기는, 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력한다. 입력래치회로는, 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함한다. 누적회로는, 입력래치회로로부터 출력되는 입력데이터 및 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 입력데이터 및 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력한다. 출력래치회로는, 누적가산기로부터 출력되는 오드 누적데이터를 래치하여 오드 래치데이터를 출력하는 제1 출력래치와, 누적가산기로부터 출력되는 이븐 누적데이터를 래치하여 이븐 래치데이터를 출력하는 제2 출력래치를 포함한다.
여러 실시예들에 따르면, 누산기에 데이터가 입력되는 속도보다 누산기 내에서의 누적 연산을 수행하는 속도가 늦더라도, 데이터 입력 속도와 동일한 속도로 누적 연산을 수행할 수 있다는 이점이 제공된다.
도 1은 본 개시의 일 예에 따른 누산기를 나타내 보인 도면이다.
도 2은 도 1의 누산기의 누적회로 구성의 일 예를 나타내 보인 도면이다.
도 3은 도 2의 누적회로의 지수처리회로 구성의 일 예를 나타내 보인 도면이다.
도 4는 도 3의 누적회로의 가수처리회로 구성의 일 예를 나타내 보인 도면이다.
도 5는 도 3의 누적회로의 정규화기 구성의 일 예를 나타내 보인 도면이다.
도 6은 도 1의 누산기에 제공되는 제1 내지 제5 클럭신호들을 나타내 보인 도면이다.
도 7은 도 1의 누산기에서 입력래치회로의 제1 입력래치에 입력데이터들이 입력되고 출력되는 타이밍을 나타내 보인 도면이다.
도 8은 도 1의 누산기에서 입력래치회로의 제1 입력래치, 제2 입력래치, 제3 입력래치, 및 누적회로로부터의 데이터 출력 타이밍을 나타내 보인 도면이다.
도 9는 도 1의 누산기에서 출력래치회로의 제1 출력래치 및 제2 출력래치로부터의 데이터 출력 타이밍을 나타내 보인 도면이다.
도 10 내지 도 26은 도 8 및 도 9의 타이밍도들에 대응하는 누산기 동작 과정들을 나타내 보인 도면들이다.
도 27은 본 개시의 다른 예에 따른 누산기를 나타내 보인 도면이다.
도 28 및 도 29는 도 27의 누산기 동작을 설명하기 위해 나타내 보인 도면들이다.
도 30은 본 개시의 또 다른 예에 따른 누산기를 나타내 보인 도면이다.
도 31 및 도 32는 도 30의 누산기 동작을 나타내는 도면들이다.
도 33 내지 도 38은 도 30의 누산기 동작 설명을 위해 나타내 보인 도면들이다.
도 39는 본 개시의 일 예에 따른 연산로직회로로서 곱셈-누산(MAC) 오퍼레이터의 일 예를 나타내 보인 도면이다.
도 40은 도 39의 곱셈 및 가산 회로 구성 및 동작의 일 예를 나타내 보인 도면이다.
도 41은 도 39의 클럭발생기 구성 및 동작의 일 예를 설명하기 위해 나타내 보인 도면이다.
도 42는 본 개시의 일 예에 따른 PIM 장치를 나타내 보인 도면이다.
도 43은 본 개시의 다른 예에 따른 PIM 장치를 나타내 보인 도면이다.
도 44는 도 43의 PIM 장치의 MAC 연산에 의해 수행되는 매트릭스 곱셈의 일 예를 나타내 보인 도면이다.
도 45는 도 44의 웨이트데이터들이 도 43의 PIM 장치의 레프트 메모리뱅크 및 라이트 메모리뱅크에 저장되는 방식을 설명하기 위해 나타내 보인 도면이다.
도 46은 도 44의 벡터데이터들이 도 43의 PIM 장치의 제1 글로벌버퍼 및 제2 글로벌버퍼에 저장되는 방식을 설명하기 위해 나타내 보인 도면이다.
도 47 내지 도 49는 도 43의 PIM 장치가 도 44의 매트릭스곱셈에 따른 MAC 연산을 수행하는 과정을 설명하기 위해 나타내 보인 도면들이다.
도 50은 도 43의 PIM 장치에서 레프트 누산기 및 라이트 누산기 내의 데이터 입력 타이밍을 나타내 보인 도면이다.
도 51은 본 개시의 또 다른 예에 따른 PIM 장치를 나타내 보인 도면이다.
도 52는 본 개시의 또 다른 예에 따른 PIM 장치를 나타내 보인 도면이다.
도 53은 본 개시의 또 다른 예에 따른 PIM 장치를 나타내 보인 도면이다.
도 54는 도 53의 PIM 장치의 MAC 연산에 의해 수행되는 매트릭스 곱셈의 일 예를 나타내 보인 도면이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 요소를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다. "기 설정된"이라는 용어는 프로세스나 알고리즘에서 매개변수를 사용할 때 매개변수의 수치가 미리 결정되어 있음을 의미한다. 매개변수의 수치는 실시예에 따라서 프로세스나 알고리즘이 시작할 때 설정되거나 프로세스나 알고리즘이 수행되는 구간 동안 설정될 수 있다. "로직하이레벨" 및 "로직로우레벨"은 신호들의 로직레벨들을 설명하기 위해 사용된다. "로직하이레벨"을 갖는 신호는 "로직로우레벨"을 갖는 신호와 구별된다. 예를 들어, 제1 전압을 갖는 신호가 "로직하이레벨"에 대응할 때 제2 전압을 갖는 신호는 "로직로우레벨"에 대응할 수 있다. 일 실시예에 따라 "로직하이레벨"은 "로직로우레벨"보다 큰 전압으로 설정될 수 있다. 한편, 신호들의 로직레벨들은 실시예에 따라서 다른 로직레벨 또는 반대의 로직레벨로 설정될 수 있다. 예를 들어, 로직하이레벨을 갖는 신호는 실시예에 따라서 로직로우레벨을 갖도록 설정될 수 있고, 로직로우레벨을 갖는 신호는 실시예에 따라서 로직하이레벨을 갖도록 설정될 수 있다.
이하, 실시예를 통하여 본 발명을 더욱 상세히 설명하기로 한다. 아래에서 설명되는 여러 실시예들은 메모리 소자로서 디램(DRAM)을 예로 들었지만, 이에 제한되지 않는다는 것은 자명하다. 예컨대 SRAM, 동기식 DRAM(SDRAM), 더블 데이터 레이트 동기식 DRAM(DDR SDRAM, DDR2 SDRAM, DDR3 SDRAM 등), 그래픽 더블 데이터 레이트 동기식 DRAM(GDDR, GDDR2, GDDR3 등), 쿼드 데이터 레이트 DRAM (QDR DRAM), RAMBUS XDR DRAM(XDR DRAM), 패스트 페이지 모드 DRAM (FPM DRAM), 비디오 DRAM (VDRAM), 확장 데이터 출력형 DRAM (EDO DRAM), 버스트 EDO DRAM(BEDO DRAM), 멀티뱅크 DRAM(MDRAM), 동기식 그래픽 RAM(SGRAM), 및/또는 기타 다른 여러 형태의 DRAM에도 동일하게 적용될 수 있다.
도 1은 본 개시의 일 예에 따른 누산기(100)를 나타내 보인 블록도이다. 도 1을 참조하면, 누산기(100)는, 입력래치회로(110)와, 누적회로(120)와, 그리고 출력래치회로(130)를 포함한다. 입력래치회로(110)는, 제1 입력래치(IL1)(111), 제2 입력래치(IL2)(112), 및 제3 입력래치(IL3)(113)를 포함한다. 출력래치회로(130)는, 제1 출력래치(OL1)(131) 및 제2 출력래치(OL2)(132)를 포함한다. 일 예에서 제1 입력래치(111), 제2 입력래치(112), 제3 입력래치(113), 제1 출력래치(131), 및 제2 출력래치(132)는, 플립-플랍(flip-flop)으로 구성될 수 있다. 다른 예에서 제1 입력래치(111), 제2 입력래치(112), 제3 입력래치(113), 제1 출력래치(131), 및 제2 출력래치(132)는, 복수의 플립-플랍들을 포함하는 레지스터(register)로 구성될 수 있다.
제1 입력래치(111)는, 누산기(100) 외부로부터 전송되는 입력데이터(D_IN)를 입력받는 입력단자와, 제1 클럭신호(CK1)가 입력되는 클럭입력단자와, 그리고 누적회로(120)에 결합되는 출력단자를 갖는다. 제1 입력래치(111)는, 입력단자로 전송되는 입력데이터(D_IN)를 제1 클럭신호(CK1)에 동기되어 출력단자로 출력시킨다. 제2 입력래치(112)는, 제1 출력래치(131)로부터 전송되는 오드(odd) 래치데이터(D_OL)를 입력받는 입력단자와, 제2 클럭신호(CK2)가 입력되는 클럭입력단자와, 그리고 누적회로(120)에 결합되는 출력단자를 갖는다. 제2 입력래치(112)는, 입력단자로 전송되는 오드 래치데이터(D_OL)를 제2 클럭신호(CK2)에 동기되어 출력단자로 출력시킨다. 제2 입력래치(112)는, 제1 출력래치(131)로부터 전송되는 오드 래치데이터(D_OL)를 입력받는 입력단자와, 제2 클럭신호(CK2)가 입력되는 클럭입력단자와, 그리고 누적회로(120)에 결합되는 출력단자를 갖는다. 제2 입력래치(112)는, 입력단자로 전송되는 오드 래치데이터(D_OL)를 제2 클럭신호(CK2)에 동기되어 출력단자로 출력시킨다. 제3 입력래치(113)는, 제2 출력래치(132)로부터 전송되는 이븐(even) 래치데이터(D_EL)를 입력받는 입력단자와, 제3 클럭신호(CK3)가 입력되는 클럭입력단자와, 그리고 누적회로(120)에 결합되는 출력단자를 갖는다. 제3 입력래치(113)는, 입력단자로 전송되는 이븐 래치데이터(D_EL)를 제3 클럭신호(CK3)에 동기되어 출력단자로 출력시킨다. 제2 입력래치(112)의 출력단자는 제3 입력래치(113)의 출력단자와 결합된다. 이에 따라 제2 입력래치(112) 및 제3 입력래치(113)는, 출력라인을 공유한다.
본 예에 따른 입력래치회로(111)에 있어서, 제1 클럭신호(CK1)의 펄스 주기, 제2 클럭신호(CK2)의 펄스 주기, 및 제3 클럭신호(CK3)의 펄스 주기를 적절하게 설정함으로써, 입력데이터(D_IN), 오드 래치데이터(D_OL), 및 이븐 래치데이터(D_EL)가 누적회로(120)로 전송되는 타이밍을 적절하게 조정할 수 있다. 일 예에서 제2 클럭신호(CK2)의 펄스와 제3 클럭신호(CK2)의 펄스가 교대로 발생되는 경우, 제2 입력래치(112)로부터의 오드 래치데이터(D_OL)와 제3 입력래치(113)로부터의 이븐 래치데이터(D_EL)는 누적회로(120)로 교대로 전송된다. 그리고 이와 같은 조건하에서 제2 클럭신호(CK2)의 펄스와 제3 클럭신호(CK3)의 펄스가 각각 제1 클럭신호(CK1)의 홀수번째 펄스 및 짝수번째 펄스와 동기되는 경우, 입력데이터(D_IN) 및 오드 래치데이터(D_OL)가 누적회로(120)로 입력되는 제1 데이터입력동작과, 입력데이터(D_IN) 및 이븐 래치데이터(D_EL)가 누적회로(120)로 입력되는 제2 데이터입력동작이 교대로 수행된다.
누적회로(120)는, 적어도 2개의 입력단자들과 적어도 2개의 출력단자들을 갖는다. 누적회로(120)의 입력단자들은, 제1 및 제2 입력단자를 포함한다. 누적회로(120)의 제1 입력단자는, 제1 입력래치(111)의 출력단자와 결합되어 입력데이터(D_IN)를 전송받는다. 누적회로(120)의 제2 입력단자는, 제2 입력래치(112) 의 출력단자 및 제3 입력래치(113)의 출력단자와 결합되어 오드 래치데이터(D_OL) 또는 이븐 래치데이터(D_EL)를 전송받는다. 누적회로(120)의 출력단자들은, 제1 및 제2 출력단자를 포함한다. 누적회로(120)의 제1 출력단자는, 제1 출력래치(131)의 입력단자와 결합된다. 누적회로(120)의 제2 출력단자는, 제2 출력래치(132)의 입력단자와 결합된다. 일 예에서 누적회로(120)는, 입력데이터(D_IN) 및 오드 래치데이터(D_OL)에 대한 가산연산을 수행하고, 그 결과데이터를 오드(odd) 누적데이터(D_OACC)로서 제1 출력단자를 통해 출력시킨다. 누적회로(120)는, 입력데이터(D_IN) 및 이븐 래치데이터(D_EL)에 대한 가산연산을 수행하고, 그 결과데이터를 이븐(even) 누적데이터(D_EACC)로서 제2 출력단자를 통해 출력시킨다. 누적회로(120)의 구성에 대해서는 아래에서 보다 상세하게 설명하기로 한다.
제1 출력래치(131)는, 누적회로(120)의 제1 출력단자와 결합되는 입력단자와, 제4 클럭신호(CK4)가 입력되는 클럭입력단자와, 그리고 제2 입력래치(112)의 입력단자에 결합되는 출력단자를 갖는다. 이에 따라 제1 출력래치(131)는, 누적회로(120)의 제1 출력단자를 통해 전송되는 오드 누적데이터(D_OACC)를 래치한다. 그리고 제4 클럭신호(CK4)에 응답하여 오드 누적데이터(D_OACC)를 오드 래치데이터(D_OL)로서 제2 입력래치(112)로 전송한다. 제2 출력래치(132)는, 누적회로(120)의 제2 출력단자와 결합되는 입력단자와, 제5 클럭신호(CK5)가 입력되는 클럭입력단자와, 그리고 제3 입력래치(113)의 입력단자에 결합되는 출력단자를 갖는다. 이에 따라 제2 출력래치(132)는, 누적회로(120)의 제2 출력단자를 통해 전송되는 이븐 누적데이터(D_EACC)를 래치한다. 그리고 제5 클럭신호(CK5)에 응답하여 이븐 누적데이터(D_EACC)를 이븐 래치데이터(D_EL)로서 제3 입력래치(113)로 전송한다.
도 2은 도 1의 누산기(100)의 누적회로(120) 구성의 일 예를 나타내 보인 블록도이다. 이하에서의 누적회로(120)에 대한 설명은, 입력데이터(D_IN) 및 오드 래치데이터(D_OL)가 입력되는 경우를 예로 들기로 한다. 이하의 설명은, 입력데이터(D_IN) 및 이븐 래치데이터(D_EL)가 입력되는 경우에도 동일하게 적용될 수 있다. 따라서 이하에서 "오드 래치데이터(D_OL)" 및 "오드 누적데이터(D_OACC)"는, 각각 "이븐 래치데이터(D_EL)" 및 "이븐 누적데이터(D_EACC)"로 대체될 수 있다. 본 예에서는 입력데이터(D_IN) 및 오드 래치데이터(D_OL)가 각각 32비트 단일-정밀도(single-precision)의 부동 소수점 형식을 갖는 것을 전제하기로 한다. 이에 따라 입력데이터(D_IN)는, 1비트의 제1 부호비트(S1<0>)와, 8비트의 제1 지수비트들(E1<7:0>)과, 그리고 23비트의 제1 가수비트들(M1<22:0>)을 포함한다. 유사하게 오드 래치데이터(D_OL)는, 1비트의 제2 부호비트(S2<0>)와, 8비트의 제2 지수비트들(E2<7:0>)과, 그리고 23비트의 제2 가수비트들(M2<22:0>)을 포함한다. 또한 누적회로(120)로부터 출력되는 오드 누적데이터(D_OACC)는, 1비트의 제3 부호비트(S3<0>)와, 8비트의 제3 지수비트들(E3<7:0>)과, 그리고 23비트의 제3 가수비트들(M3<22:0>)을 포함한다. 입력데이터(D_IN)의 23비트 제1 가수비트들(M1<22:0>)과, 오드 래치데이터(D_OL)의 23비트 제2 가수비트들(M2<22:0>)은, 각각 누적회로(120)에 입력되기 전에 1비트의 암시 비트(implied bit)(1.)가 포함되며, 그 결과 각각 24비트의 제1 가수비트들(M1<23:0>) 및 24비트의 제2 가수비트들(M2<23:0> 형식으로 누적회로(120)에 입력된다.
도 2를 참조하면, 누적회로(120)는, 지수처리회로(210)와, 가수처리회로(220)와, 그리고 정규화기(230)를 포함한다. 지수처리회로(210)는, 제1 입력래치(도 1의 111) 및 제2 입력래치(도 1의 112)로부터 각각 입력데이터(D_IN)의 제1 지수비트들(E1<7:0>) 및 오드 래치데이터(D_OL)의 제2 지수비트들(E2<7:0>)을 입력받는다. 지수처리회로(210)는, 제1 지수비트들(E1<7:0>) 및 제2 지수비트들(E2<7:0>)에 대한 지수연산처리를 수행한다. 지수처리회로(210)는, 지수연산처리를 통해 최대 지수비트들(E_MAX<7:0>)과, 제1 시프트비트들(SF1<7:0>)과, 그리고 제2 시프트비트들(SF2<7:0>)을 생성하여 출력시킨다. 최대 지수비트들(E_MAX<7:0>)은, 제1 지수비트들(E1<7:0>) 및 제2 지수비트들(E2<7:0>) 중 상대적으로 더 큰 값을 갖는 지수비트들로 구성된다. 제1 시프트비트들(SF1<7:0>)은, 제1 시프트 값을 갖는다. 제1 시프트 값은, 입력데이터(D_IN)의 제1 가수비트들(M1<23:0>)이 시프트될 비트 수에 해당하는 값이다. 제2 시프트비트들(SF2<7:0>)은, 제2 시프트 값을 갖는다. 제2 시프트 값은, 오드 래치데이터(D_OL)의 제2 가수비트들(M2<23:0>)이 시프트될 비트 수에 해당하는 값이다. 지수처리회로(210)로부터 출력되는 제1 시프트비트들(SF1<7:0>) 및 제2 시프트비트들(SF2<7:0>)은 가수처리회로(220)로 전송된다. 지수처리회로(210)로부터 출력되는 최대 지수비트들(E_MAX<7:0>)은 정규화기(230)로 전송된다.
가수처리회로(220)는, 입력데이터(D_IN)의 제1 부호비트(S1<0>)와 제1 가수비트들(M1<23:0>)을 전송받는다. 가수처리회로(220)는, 오드 래치데이터(D_OL)의 제2 부호비트(S2<0>)와 제2 가수비트들(M2<23:0>)을 전송받는다. 또한 가수처리회로(220)는, 지수처리회로(210)로부터 제1 시프트비트들(SF1<7:0>) 및 제2 시프트비트들(SF2<7:0>)을 전송받는다. 가수처리회로(220)는, 제1 가수비트들(M1<23:0>) 및 제2 가수비트들(M2<23:0>)에 대한 가수연산처리를 수행한다. 가수연산처리 결과, 오드 누적데이터(D_OACC)의 제3 부호비트(S3<0>) 및 제1 중간 가수가산비트들(IMM1_ADD<23:0>)이 생성된다. 오드 누적데이터(D_OACC)의 제3 부호비트(S3<0>)는, 정규화기(230)로 전송되며, 또한 누적회로(120)의 출력단자를 통해 출력된다. 제1 중간 가수가산비트들(IMM1_ADD<23:0>)은, 정규화기(230)로 전송된다.
정규화기(230)는, 가수처리회로(220)로부터 제1 중간 가수가산데이터(IMM1_ADD<23:0>) 및 오드 누적데이터(D_OACC)의 제3 부호비트(S3<0>)를 전송받는다. 정규화기(230)는, 지수처리회로(210)로부터 최대 지수비트들(E_MAX<7:0>)을 전송받는다. 정규화기(230)는, 제1 중간 가수가산데이터(IMM1_ADD<23:0>), 제3 부호비트(S3<0>), 및 최대 지수비트들(E_MAX<7:0>)을 이용하여 정규화 처리를 수행한다. 정규화기(230)는, 정규화 처리에 따라 오드 누적데이터(D_OACC)의 8비트의 제3 지수비트들(E3<7:0>)과, 23비트의 제3 가수비트들(M3<22:0>)을 생성하여 출력한다. 누적회로(120)의 가수처리회로(220)로부터 출력되는 제3 부호비트(S3<0>)와, 정규화기(230)로부터 출력되는 제3 지수비트들(E3<7:0>) 및 제3 가수비트들(M3<22:0>)은, 오드 누적데이터(D_OACC)를 구성한다.
도 3은 도 2의 누적회로(120)의 지수처리회로(210) 구성의 일 예를 나타내 보인 회로도이다. 도 3을 참조하면, 지수처리회로(210)는, 지수감산회로(211)와, 지연회로(DELAY)(212)와, 2의 보수회로(2'S COMP.)(213)와, 제1 선택출력기(214)와, 제2 선택출력기(215)와, 그리고 제3 선택출력기(216)를 포함한다. 일 예에서 제1 선택출력기(214), 제2 선택출력기(215), 및 제3 선택출력기(216)는, 각각 2:1 멀티플렉서를 포함할 수 있다. 지수감산회로(211)는, 2의 보수회로(211A), 지수가산기(EX ADDER)(211B), 및 지수비교회로(exponent comparison circuit)(211C)를 포함한다. 본 예에서 지수가산기(211B)는, 정수 가산연산을 수행하는 가산기로 구성된다.
지수감산회로(211)는, 입력데이터(D_IN)의 제1 지수비트들(E1<7:0>)과 오드 래치데이터(D_OL)의 제2 지수비트들(E2<7:0>)을 전송받는다. 지수감산회로(211)는, 제1 지수비트들(E1<7:0>) 및 제2 지수비트들(E2<7:0>)에 대한 감산연산, 즉 "E1<7:0> - E2<7:0>" 연산을 수행하기 위해, 제2 지수비트들(E2<7:0>)의 2의 보수비트들을 생성한다. 그리고 제1 지수비트들(E1<7:0>)과, 제2 지수비트들(E2<7:0>)의 2의 보수비트들에 대한 가산연산을 수행한다. 보다 구체적으로 설명하면, 제1 지수비트들(E1<7:0>)은, 지수가산기(211B)의 제1 입력단자로 전송된다. 제2 지수비트들(E2<7:0>)은, 2의 보수회로(211A)로 전송된다. 2의 보수회로(211A)는, 제2 지수비트들(E2<7:0>)의 2의 보수를 생성하는 연산을 수행하여 제2 지수비트들의 2의 보수비트들(E2_2C<7:0>)을 출력시킨다. 제2 지수비트들의 2의 보수비트들(E2_2C<7:0>)은, 지수가산기(211B)의 제2 입력단자로 전송된다.
지수가산기(211B)는, 제1 지수비트들(E1<7:0>) 및 제2 지수비트들의 2의 보수비트들(E2_2C<7:0>)에 대한 가산연산을 수행하여 9비트의 지수감산비트들(E_SUB<8:0>)을 생성한다. 지수가산기(211B)는, 9비트의 지수감산비트들(E_SUB<8:0>)을 최상위비트(MSB)(E_SUB<8>) 및 나머지 8비트의 지수감산비트들(E_SUB<7:0>)로 분리시킨다. 지수가산기(211B)는, 최상위비트(MSB)(E_SUB<8>)를 지수비교회로(211C)로 전송한다. 지수가산기(211B)는, 8비트의 지수감산비트들(E_SUB<7:0>)을 지연회로(212) 및 2의 보수회로(213)로 각각 전송한다.
지수비교회로(211C)는, 지수가산기(211B)로부터 전송되는 최상위비트(MSB)(E_SUB<8>)를 통해 제1 지수비트들(E1<7:0>)과 제2 지수비트들(E2<7:0>)의 크기를 비교하고, 그 결과에 따라 부호비트(SIGN<0>)를 생성하여 출력시킨다. 구체적으로 제1 지수비트들(E1<7:0>)이 제2 지수비트들(E2<7:0>)보다 큰 값을 갖는 경우, 지수가산기(211B)에서의 가산연산 결과 자리올림이 발생된다. 이 경우 최상위비트(MSB)(E_SUB<8>)는 "1"의 값을 갖는다. 최상위비트(MSB)(E_SUB<8>)가 "1"인 경우, 지수비교회로(211C)는, 부호비트(SIGN<0>)로서 8비트의 지수감산비트들(E_SUB<7:0>)이 양수임을 나타내는 "0"을 출력시킨다. 이 경우 두 지수비트들의 절대값들 차이에 해당하는 비트 수만큼 제2 가수비트들(M2<23:0>)을 시프트시킴으로써, 제2 지수비트들(E2<7:0>)의 절대값이 제1 지수비트들(E1<7:0>)의 절대값과 같아지도록 할 수 있다. 반면에 제1 지수비트들(E1<7:0>)이 제2 지수비트들(E2<7:0>)보다 작은 값을 갖는 경우, 지수가산기(211B)에서의 가산연산 결과 자리올림이 발생되지 않는다. 이 경우 최상위비트(MSB)(E_SUB<8>)는 "0"의 값을 갖는다. 최상위비트(MSB)(E_SUB<8>)가 "0"인 경우, 지수비교회로(211C)는, 부호비트(SIGN<0>)로서 8비트의 지수감산비트들(E_SUB<7:0>)이 음수임을 나타내는 "1"을 출력시킨다. 이 경우 두 지수비트들의 절대값들 차이에 해당하는 비트 수만큼 제1 가수비트들(M1<23:0>)을 시프트시킴으로써, 제1 지수비트들(E1<7:0>)의 절대값이 제2 지수비트들(E2<7:0>)의 절대값과 같아지도록 할 수 있다. 지수비교회로(211C)로부터 출력되는 부호비트(SIGN<0>)는, 제1 선택출력기(214)의 선택단자(S), 제2 선택출력기(215)의 선택단자(S), 및 제3 선택출력기(216)의 선택단자(S)로 각각 전송된다.
지연회로(212)는, 지수감산회로(211)의 지수가산기(211B)로부터 전송되는 지수감산비트들(E_SUB<7:0>)을 지연시간만큼 경과한 시점에 출력시킨다. 일 예에서 지연시간은, 2의 보수회로(213)에서의 2의 보수연산에 소요되는 시간으로 설정될 수 있다. 지연회로(212)로부터 출력되는 지수감산비트들(E_SUB<7:0>)은 제1 선택출력기(214)의 제1 입력단자(IN2)로 전송된다. 2의 보수회로(213)는, 지수가산기(211B)로부터 전송되는 지수감산비트들(E_SUB<7:0>)에 대한 2의 보수연산을 수행하여 지수감산비트들의 2의 보수비트들(E_SUB_2C<7:0>)을 생성한다. 지수감산비트들의 2의 보수비트들(E_SUB_2C<7:0>)은, 제1 지수비트들(E1<7:0>)이 갖는 값과 제2 지수비트들(E2<7:0>)이 갖는 값의 차이에 해당하는 값의 절대값을 갖는다. 2의 보수회로(213)는, 2의 보수연산 결과 생성되는 지수감산비트들의 2의 보수비트들(E_SUB_2C<7:0>)을 제2 선택출력기(215)의 제1 입력단자(IN1)로 전송한다.
제1 선택출력기(214)는, 제1 입력단자(IN1)를 통해 "0"을 전송받는다. 그리고 제1 선택출력기(214)는, 제2 입력단자(IN2)를 통해 지연회로(212)로부터 전송되는 지수감산비트들(E_SUB<7:0>)을 전송받는다. 제2 선택출력기(215)는, 제1 입력단자(IN1)를 통해 2의 보수회로(213)로부터 출력되는 지수감산비트들의 2의 보수비트들(E_SUB_2C<7:0>)을 전송받는다. 그리고 제2 선택출력기(215)는, 제2 입력단자(IN2)를 통해 "0"을 전송받는다. 제1 선택출력기(214) 및 제2 선택출력기(215)는, 각각의 선택단자(S)로 전송되는 부호비트(SIGN<0>)에 따라 두 개의 입력 데이터들 중 하나를 출력시킨다. 본 예에서 제1 선택출력기(214)의 출력단자(O)를 통해 출력되는 데이터를 "제1 시프트비트들(SF1<7:0>)"로 지칭하기로 한다. 그리고 제2 선택출력기(214)의 출력단자(O)를 통해 출력되는 데이터를 "제2 시프트비트들(SF2<7:0>)"로 지칭하기로 한다.
부호비트(SIGN<0>)가 "0"인 경우, 즉 제2 가수비트들(M2<23:0>)이 시프트되어야 하는 경우, 제1 선택출력기(214) 및 제2 선택출력기(215)는, 각각 제1 입력단자(IN1)로 전송되는 데이터를 출력시킨다. 이에 따라 제1 선택출력기(214)는, 제1 시프트비트들(SF1<7:0>)로서 "0"을 출력단자(O)를 통해 출력시킨다. 제2 선택출력기(215)는, 제2 시프트비트들(SF2<7:0>)로서 지수감산비트들의 2의 보수비트들(E_SUB_2C<7:0>)을 출력시킨다. 부호비트(SIGN<0>)가 "1"인 경우, 즉 제1 가수비트들(M1<23:0>)이 시프트되어야 하는 경우, 제1 선택출력기(214) 및 제2 선택출력기(215)는, 각각 제2 입력단자(IN2)로 전송되는 데이터를 출력시킨다. 이에 따라 제1 선택출력기(214)는, 지수감산비트들(E_SUB<7:0>)을 출력단자(O)를 통해 제1 시프트비트들(SF1<7:0>)로서 출력시킨다. 제2 선택출력기(215)는, 제2 시프트비트들(SF2<7:0>)로서 "0"을 출력시킨다. 제1 선택출력기(214)로부터 출력되는 제1 시프트비트들(SF1<9:0>) 및 제2 선택출력기(215)로부터 출력되는 제2 시프트비트들(SF2<9:0>)은, 각각 가수처리회로(220)로 전송된다.
제3 선택출력기(216)는, 입력데이터(D_IN)의 제1 지수비트들(E1<7:0>)과 오드 래치데이터(D_OL)의 제2 지수비트들(E2<7:0>)을 각각 제1 입력단자(IN1) 및 제2 입력단자(IN2)로 전송받는다. 제3 선택출력기(216)는, 선택단자(S)로 전송되는 부호비트(SIGN<0>)에 따라서 제1 지수비트들(E1<7:0>) 및 제2 지수비트들(E2<9:0>) 중 더 큰 값을 갖는 지수비트들을 출력단자(O)를 통해 출력시킨다. 본 예에서 제3 선택출력기(216)로부터 출력되는 지수비트들을 "최대 지수비트들(E_MAX<7:0>)"로 지칭하기로 한다. 부호비트(SIGN<0>)가 "양수"를 나타내는 "0"인 경우는, 제1 지수비트들(E1<7:0>)이 제2 지수비트들(E2<7:0>)보다 더 큰 경우이다. 이 경우 제3 선택출력기(216)는, 최대 지수비트들(E_MAX<7:0>)로서 제1 지수비트들(E1<7:0>)을 출력시킨다. 반면에 부호비트(SIGN<0>)가 "음수"를 나타내는 "1"인 경우는, 제2 지수비트들(E2<7:0>)이 제1 지수비트들(E1<7:0>)보다 더 큰 경우이다. 이 경우 제3 선택출력기(216)는, 최대 지수비트들(E_MAX<7:0>)로서 제2 지수비트들(E2<7:0>)을 출력시킨다. 제3 선택출력기(216)는, 최대 지수비트들(E_MAX<7:0>)을 정규화기(230)로 전송한다.
도 4는 도 3의 누적회로(120)의 가수처리회로(220) 구성의 일 예를 나타내 보인 회로도이다. 도 4를 참조하면, 가수처리회로(220)는, 음수처리회로(221)와, 시프트회로(222)와, 그리고 가수가산회로(223)를 포함한다. 음수처리회로(221)는, 제1 2의 보수회로(221A), 제2 2의 보수회로(221B), 제1 선택출력기(221C), 및 제2 선택출력기(221D)를 포함한다. 시프트회로(222)는, 제1 가수시프터(222A) 및 제2 가수시프터(222B)를 포함한다. 가수가산회로(223)는, 가수가산기(223A), 제3 2의 보수회로(223B), 및 제3 선택출력기(223C)를 포함한다.
음수처리회로(221)의 제1 2의 보수회로(221A)는, 입력데이터(D_IN)의 제1 가수비트들(M1<23:0>)을 입력받는다. 제1 2의 보수회로(221A)는, 제1 가수비트들(M1<23:0>)에 대한 2의 보수처리를 수행하여 제1 가수비트들의 2의 보수비트들(M1_2C<23:0>)을 출력시킨다. 제1 선택출력기(221C)는, 제1 입력단자(IN1)로 입력데이터(D_IN)의 제1 가수비트들(M1[23:0])을 입력받는다. 제1 선택출력기(221C)는, 제2 입력단자(IN2)로 제1 2의 보수회로(221A)로부터 출력되는 2의 보수비트들(M1_2C<23:0>)을 입력받는다. 제1 선택출력기(221C)는, 선택단자(S)로 입력데이터(D_IN)의 제1 부호비트(S1<0>)를 입력받는다. 제1 부호비트(S1<0>)가 양수를 나타내는 "0"인 경우, 제1 선택출력기(221C)는 제1 입력단자(IN1)로 전송되는 제1 가수비트들(M1[23:0])을 출력시킨다. 반면에 제1 부호비트(S1<0>)가 음수를 나타내는 "1"인 경우, 제1 선택출력기(221C)는 제2 입력단자(IN2)로 전송되는 2의 보수비트들(M1_2C<23:0>)을 출력시킨다. 본 예에서 제1 선택출력기(221C)로부터의 출력 데이터를 "제1 중간 가수비트들(IMM1[23:0])"로 지칭하기로 한다.
음수처리회로(221)의 제2 2의 보수회로(221B)는, 오드 래치데이터(D_OL)의 제2 가수비트들(M2<23:0>)을 입력받는다. 제2 2의 보수회로(221B)는, 제2 가수비트들(M2<23:0>)에 대한 2의 보수처리를 수행하여 제2 가수비트들의 2의 보수비트들(M2_2C<23:0>)을 출력시킨다. 제2 선택출력기(221D)는, 제1 입력단자(IN1)로 오드 래치데이터(D_OL)의 제2 가수비트들(M2<23:0>)을 입력받는다. 제2 선택출력기(221D)는, 제2 입력단자(IN2)로 제2 2의 보수회로(221B)로부터 출력되는 2의 보수비트들(M2_2C<23:0>)을 입력받는다. 제2 선택출력기(221D)는, 선택단자(S)로 오드 래치데이터(D_OL)의 제2 부호비트(S2<0>)를 입력받는다. 제2 부호비트(S2<0>)가 양수를 나타내는 "0"인 경우, 제2 선택출력기(221D)는 제1 입력단자(IN1)로 전송되는 제2 가수비트들(M2<23:0>)을 출력시킨다. 반면에 제2 부호비트(S2<0>)가 음수를 나타내는 "1"인 경우, 제2 선택출력기(221D)는 제2 입력단자(IN2)로 전송되는 2의 보수비트들(M2_2C<23:0>)을 출력시킨다. 본 예에서 제2 선택출력기(221D)로부터의 출력 데이터를 "제2 중간 가수비트들(IMM2[23:0])"로 지칭하기로 한다.
시프트회로(222)의 제1 가수시프터(222A)는, 음수처리회로(221)의 제1 선택출력기(221C)로부터 출력되는 제1 중간 가수비트들(IMM1<23:0>)을 전송받는다. 또한 제1 가수시프터(222A)는, 지수처리회로(210)의 제1 선택출력기(214)로부터 출력되는 제1 시프트비트들(SF1<7:0>)을 전송받는다. 제1 가수시프터(222A)는, 제1 시프트비트들(SF1<7:0>)이 갖는 절대값에 대응하는 비트 수만큼 제1 중간 가수비트들(IMM1<23:0>)을 시프트시켜서 출력시킨다. 이하에서 제1 가수시프터(222A)로부터 출력되는 데이터를 "제3 중간 가수비트들(IMM3<23:0>)"로 지칭하기로 한다. 제1 시프트비트들(SF1<7:0>)이 "0"인 경우, 제3 중간 가수비트들(IMM3<23:0>)은 제1 중간 가수비트들(IMM1<23:0>)과 동일하다. 반면에 제1 시프트비트들(SF1<7:0>)이 지수감산비트들(E_SUB<7:0>)인 경우, 제3 중간 가수비트들(IMM3<23:0>)은, 지수감산비트들(E_SUB<7:0>)의 절대값에 대응하는 비트 수만큼 제1 중간 가수비트들(IMM1<23:0>)을 시프트시킴으로써 생성될 수 있다. 제1 가수시프터(222A)로부터 출력되는 제3 중간 가수비트들(IMM3<23:0>)은 가수가산회로(223)로 전송된다.
시프트회로(222)의 제2 가수시프터(222B)는, 음수처리회로(221)의 제2 선택출력기(221D)로부터 출력되는 제2 중간 가수비트들(IMM2<23:0>)을 전송받는다. 또한 제2 가수시프터(222B)는, 지수처리회로(210)의 제2 선택출력기(215)로부터 출력되는 제2 시프트비트들(SF2<7:0>)을 전송받는다. 제2 가수시프터(222B)는, 제2 시프트비트들(SF2<7:0>)이 갖는 절대값에 대응하는 비트 수만큼 제2 중간 가수비트들(IMM2<23:0>)을 시프트시켜서 출력시킨다. 이하에서 제2 가수시프터(222B)로부터 출력되는 데이터를 "제4 중간 가수비트들(IMM4<23:0>)"로 지칭하기로 한다. 제2 시프트비트들(SF2<7:0>)이 "0"인 경우, 제4 중간 가수비트들(IMM4<23:0>)은 제2 중간 가수비트들(IMM2<23:0>)과 동일하다. 반면에 제2 시프트비트들(SF2<7:0>)이 지수감산비트들(E_SUB<7:0>)에 대한 2의 보수비트들(E_SUB_2C<7:0>)인 경우, 제4 중간 가수비트들(IMM4<23:0>)은, 2의 보수비트들(E_SUB_2C<7:0>)이 갖는 값의 절대값에 대응하는 비트 수만큼 제2 중간 가수비트들(IMM2<23:0>)을 시프트시킴으로써 생성될 수 있다. 제2 가수시프터(222B)로부터 출력되는 제4 중간 가수비트들(IMM4<23:0>)은 가수가산회로(223)로 전송된다.
가수가산회로(223)의 가수가산기(223A)는, 가수시프터회로(222)의 제1 가수시프터(222A) 및 제2 가수시프터(222B)로부터 각각 출력되는 제3 중간 가수비트들(IMM3<23:0>) 및 제4 중간 가수비트들(IMM4<23:0>)을 전송받는다. 또한 가수가산기(223A)는, 제1 부호비트(S1<0>) 및 제2 부호비트(S2<0>)를 전송받는다. 가수가산기(223A)는, 제3 부호비트(S3<0>)를 생성하여 출력시킨다. 또한 가수가산기(223A)는, 제3 중간 가수비트들(IMM3<23:0>) 및 제4 중간 가수비트들(IMM4<23:0>)을 가산하고, 그 결과 생성되는 가수가산비트들(M_ADD<23:0>)을 출력시킨다. 제1 부호비트(S1<0>) 및 제2 부호비트(S2<0>)가 모두 양수를 나타내는 "0"인 경우, 가수가산기(223A)는, 제3 부호비트(S3<0>)로서 "0"을 출력한다. 제1 부호비트(S1<0>) 및 제2 부호비트(S2<0>)가 모두 음수를 나타내는 "1"인 경우, 가수가산기(223A)는, 제3 부호비트(S3<0>)로서 "1"을 출력한다. 제1 부호비트(S1<0>) 및 제2 부호비트(S2<0>) 중 하나는 "0"이고, 나머지가 "1"인 경우, 가수가산기(223A)는, 제3 중간 가수비트들(IMM3<23:0>) 및 제4 중간 가수비트들(IMM4<23:0>)에 대한 가산연산 결과에 자리올림이 발생되면 제3 부호비트(S3<0>)로서 "0"을 출력하고, 자리올림이 발생되지 않으면 제3 부호비트(S3<0>)로서 "1"을 출력한다. 가수가산기(223A)로부터 출력되는 제3 부호비트(S3<0>)는, 누적회로(120)로부터 출력되는 오드 누적데이터(D_OACC)의 부호비트를 구성한다. 가수가산기(223A)로부터 출력되는 제3 부호비트(S3<0>)는, 제3 선택출력기(223C)의 선택단자(S)로도 전송된다. 가수가산기(223A)로부터 출력되는 가수가산비트들(M_ADD<23:0>)은 제3 2의 보수회로(223B) 및 제3 선택출력기(223C)로 전송된다.
가수가산회로(223)의 제3 2의 보수회로(223B)는, 가수가산기(223A)으로부터 출력되는 가수가산비트들(M_ADD<23:0>)을 전송받는다. 제3 2의 보수회로(223A)는, 가수가산비트들(M_ADD<23:0>)에 대한 2의 보수 처리를 수행하여 가수가산비트들에 대한 2의 보수비트들(M_ADD_2C<23:0>)을 출력시킨다. 제3 선택출력기(223C)는, 제1 입력단자(IN1) 및 제2 입력단자(IN2)로 각각 가수가산기(223A)로부터 전송되는 가수가산비트들(M_ADD<23:0>) 및 제3 2의 보수회로(223B)로부터 전송되는 2의 보수비트들(M_ADD_2C<23:0>)을 입력받는다. 제3 선택출력기(223C)는, 선택단자(S)로 가수가산기(223A)로부터 전송되는 제3 부호비트(S3<0>)를 입력받는다. 제3 부호비트(S3<0>)가 양수를 나타내는 "0"인 경우, 제3 선택출력기(223C)는, 가수가산비트들(M_ADD<23:0>)을 출력단자(O)로 출력시킨다. 제3 부호비트(S3<0>)가 음수를 나타내는 "1"인 경우, 제3 선택출력기(223C)는, 2의 보수비트들(M_ADD_2C<23:0>)을 출력단자(O)로 출력시킨다. 이하에서 제3 선택출력기(223C)로부터 출력되는 데이터를 "중간 가수가산비트들(IMM_ADD<23:0>)"로 지칭하기로 한다.
도 5는 도 3의 누적회로(120)의 정규화기(230) 구성의 일 예를 나타내 보인 회로도이다. 도 5를 참조하면, 정규화기(230)는, "1" 검출회로(1 search)(231), 가수시프터(ma shifter)(232), 및 지수가산기(EX ADDER)(233)를 포함한다. 정규화기(230)의 "1" 검출회로(231)는, 가수가산회로(도 4의 223)의 제3 선택출력기(도 4의 223C)로부터 중간 가수가산비트들(IMM_ADD<23:0>)을 전송받는다. "1" 검출회로(231)는, 중간 가수가산비트들(IMM_ADD<23:0>)에서 "1"을 갖는 비트가 선두에서 몇 번째에 위치하는지를 검출하고, 그 결과에 따른 제3 시프트비트들(SF3<7:0>)을 생성한다. 제3 시프트비트들(SF3<7:0>)은, 중간 가수가산비트들(IMM_ADD<23:0>)이 "1.가수"의 표준형식을 갖도록 하기 위해 중간 가수가산비트들(IMM_ADD<23:0>)을 시프트시키는 비트 수에 대응하는 값을 갖는다. 일 예에서 제3 시프트비트들(SF3<7:0>)의 비트 수는 임의로 설정할 수 있는데, 본 예에서는 8비트로 설정된 것으로 간주하기로 한다. "1" 검출회로(231)로부터 출력되는 제3 시프트비트들(SF3<7:0>)은 가수시프터(232) 및 지수가산기(232)로 전송된다.
정규화기(230)의 가수시프터(232)는, 중간 가수가산비트들(IMM_ADD<23:0>)에 대한 시프트 동작을 수행하여, 중간 가수가산비트들(IMM_ADD<23:0>)이 "1.가수"의 표준 형식이 되도록 한다. 가수시프터(232)는, "1" 검출회로(231)로부터 출력되는 제3 시프트비트들(SF3<7:0>)과, 가수가산회로(도 4의 223)의 제3 선택출력기(도 4의 223C)로부터 출력되는 중간 가수가산비트들(IMM_ADD<23:0>)을 전송받는다. 가수시프터(232)는, 제3 시프트비트들(SF3<7:0>)이 갖는 값에 대응하는 비트 수만큼 중간 가수가산비트들(IMM_ADD<23:0>)을 시프트시켜 누적회로(120)로부터 출력되는 오드 누적데이터(D_OACC)의 제3 가수비트들(M3<22:0>)을 생성한다. 도면에 나타내지는 않았지만, 가수시프터(234)에서의 시프트 동작 과정에서 라운딩 처리가 이루어질 수 있다.
정규화기(230)의 지수가산기(233)는, 중간 가수가산비트들(IMM_ADD<23:0>)이 제3 시프트비트들(SF3<7:0>)의 값에 대응하는 비트 수만큼 시프트됨에 따른 최대 지수비트들(E_MAX<7:0>) 변화를 보상한다. 지수가산기(233)는, 지수처리회로(도 3의 210)의 제3 선택출력기(도 3의 216)로부터 출력되는 최대 지수비트들(E_MAX<7:0>)과, "1" 검출회로(231)로부터 출력되는 제3 시프트비트들(SF3<7:0>)을 입력받는다. 지수가산기(233)는, 최대 지수비트들(E_MAX<7:0>) 및 제3 시프트비트들(SF3<7:0>)에 대한 가산연산을 수행하여 누적회로(120)로부터 출력되는 오드 누적데이터(D_OACC)의 제3 지수비트들(E3<7:0>)을 생성한다.
도 6은 도 1의 누산기(100)에 제공되는 제1 내지 제5 클럭신호들(CK1-CK5)을 나타내 보인 타이밍도이다. 도 6을 참조하면, 제1 클럭신호(CK1)는, 제1 클럭주기(CK1_P)를 갖는다. 즉 제1 클럭신호(CK1)의 첫번째 펄스의 상승에지가 발생된 시점으로부터 제1 클럭주기(CK_P)가 경과되면 두번째 펄스의 상승에지가 발생된다. 제2 클럭신호(CK2)는, 제1 클럭신호(CK1)의 홀수번째 펄스와 동일한 펄스들로 구성된다. 이에 따라 제2 클럭신호(CK2)는, 제1 클럭주기의 2배(CK1_P×2)인 제2 클럭주기(CK2_P)를 갖는다. 제3 클럭신호(CK3)는, 제1 클럭신호(CK1)의 짝수번째 펄스와 동일한 펄스들로 구성된다. 이에 따라 제3 클럭신호(CK3)는, 제1 클럭주기의 2배(CK1_P×2)인 제3 클럭주기(CK3_P)를 갖는다.
제4 클럭신호(CK4) 및 제5 클럭신호(CK5)는, 각각 제2 클럭신호(CK2) 및 제3 클럭신호(CK3)보다 지연시간(DLY_T)만큼 지연되어 발생되는 펄스들로 구성된다. 지연시간(DLY_T)은, 누적회로(120)에서의 지수처리, 가수처리, 및 정규화처리에 소요되는 시간에 해당될 수 있다. 일 예에서 제4 클럭신호(CK4)를 구성하는 펄스들 각각의 상승에지는, 제3 클럭신호(CK3)를 구성하는 펄스들 각각의 하강에지에 동기될 수 있다. 그리고 제5 클럭신호(CK5)를 구성하는 펄스들 각각의 상승에지는, 제2 클럭신호(CK2)를 구성하는 펄스들 중 첫번째 펄스를 제외한 나머지 펄스들 각각의 하강에지에 동기될 수 있다. 제4 클럭신호(CK4) 및 제5 클럭신호(CK5)는, 각각 제1 클럭주기의 2배(CK1_P×2)인 제4 클럭주기(CK4_P) 및 제5 클럭주기(CK5_P)를 갖는다.
도 7은 도 1의 누산기(100)에서 입력래치회로(110)의 제1 입력래치(111)에 입력데이터들(D_IN1-D_IN8)이 입력되고 출력되는 타이밍을 나타내 보인 타이밍도이다. 본 예에서는 8개의 입력데이터들(D_IN1-D_IN8)이 제1 클럭주기(CK1_P) 간격으로 제1 입력래치(111)에 순차적으로 입력되는 경우를 전제하기로 한다. 도 7을 참조하면, 제1 클럭신호(CK1)의 첫번째 펄스의 상승에지가 발생하기 전에 제1 입력데이터(D_IN1)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 첫번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제1 입력데이터(D_IN1) 전송은 완료된다. 제1 입력데이터(D_IN1) 전송이 완료되면(즉 제1 클럭주기(CK1_P)가 경과되면), 제2 입력데이터(D_IN2)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 두번째 펄스의 상승에지가 발생하기 전에 제2 입력데이터(D_IN2)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 두번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제2 입력데이터(D_IN2) 전송은 완료된다. 제2 입력데이터(D_IN2) 전송이 완료되면, 제3 입력데이터(D_IN3)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 세번째 펄스의 상승에지가 발생하기 전에 제3 입력데이터(D_IN3)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 세번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제3 입력데이터(D_IN3) 전송은 완료된다. 제3 입력데이터(D_IN3) 전송이 완료되면, 제4 입력데이터(D_IN4)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 네번째 펄스의 상승에지가 발생하기 전에 제4 입력데이터(D_IN4)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 네번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제4 입력데이터(D_IN4) 전송은 완료된다.
제4 입력데이터(D_IN4) 전송이 완료되면, 제5 입력데이터(D_IN5)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 다섯번째 펄스의 상승에지가 발생하기 전에 제5 입력데이터(D_IN5)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 다섯번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제5 입력데이터(D_IN5) 전송은 완료된다. 제5 입력데이터(D_IN5) 전송이 완료되면, 제6 입력데이터(D_IN6)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 여섯번째 펄스의 상승에지가 발생하기 전에 제6 입력데이터(D_IN6)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 여섯번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제6 입력데이터(D_IN6) 전송은 완료된다. 제6 입력데이터(D_IN6) 전송이 완료되면, 제7 입력데이터(D_IN7)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 일곱번째 펄스의 상승에지가 발생하기 전에 제7 입력데이터(D_IN7)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 일곱번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제7 입력데이터(D_IN7) 전송은 완료된다. 끝으로 제7 입력데이터(D_IN7) 전송이 완료되면, 제8 입력데이터(D_IN8)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 즉 제1 클럭신호(CK1)의 여덟번째 펄스의 상승에지가 발생하기 전에 제8 입력데이터(D_IN8)가 제1 입력래치(111)의 입력단자로 전송되기 시작한다. 제1 클럭신호(CK1)의 여덟번째 펄스가 하이 레벨을 유지하는 동안, 제1 입력래치(111)로의 제8 입력데이터(D_IN8) 전송은 완료된다.
제1 입력래치(111)는, 누산기(100) 외부로부터 전송되는 제1 입력데이터 내지 제8 입력데이터들(D_IN1-D_IN8)을 순차적으로 래치한다. 제1 입력래치(111)는, 제1 클럭신호(CK1)의 첫번째 펄스의 상승에지에 동기되어 출력단자를 통해 제1 입력데이터(D_IN1)를 출력시키기 시작한다. 제1 입력데이터(D_IN1)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 두번째 펄스의 상승에지에 동기되어 출력단자를 통해 제2 입력데이터(D_IN2)를 출력시키기 시작한다. 제2 입력데이터(D_IN2)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 세번째 펄스의 상승에지에 동기되어 출력단자를 통해 제3 입력데이터(D_IN3)를 출력시키기 시작한다. 제3 입력데이터(D_IN3)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 네번째 펄스의 상승에지에 동기되어 출력단자를 통해 제4 입력데이터(D_IN4)를 출력시키기 시작한다. 제4 입력데이터(D_IN4)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 다섯번째 펄스의 상승에지에 동기되어 출력단자를 통해 제5 입력데이터(D_IN5)를 출력시키기 시작한다. 제5 입력데이터(D_IN5)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 여섯번째 펄스의 상승에지에 동기되어 출력단자를 통해 제6 입력데이터(D_IN6)를 출력시키기 시작한다. 제6 입력데이터(D_IN6)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 일곱번째 펄스의 상승에지에 동기되어 출력단자를 통해 제7 입력데이터(D_IN7)를 출력시키기 시작한다. 제7 입력데이터(D_IN7)가 출력되면, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 여덟번째 펄스의 상승에지에 동기되어 출력단자를 통해 제8 입력데이터(D_IN8)를 출력시키기 시작한다.
도 7을 참조하여 설명한 바와 같이, 입력데이터들(D_IN1-D_IN8) 중 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7)은, 각각 제1 클럭신호(CK1)의 홀수번째 펄스들 각각의 상승에지에 동기되어 제1 입력래치(111)로부터 출력되기 시작한다. 반면에 입력데이터들(D_IN1-D_IN8) 중 짝수번째 입력데이터들(D_IN2, D_IN4, D_IN6, D_IN8)은, 각각 제1 클럭신호(CK1)의 짝수번째 펄스들 각각의 상승에지에 동기되어 제1 입력래치(111)로부터 출력되기 시작한다. 도 6을 참조하여 설명한 바와 같이, 제2 클럭신호(CK2)가 제1 클럭신호(CK1)의 홀수번째 펄스와 동일한 타이밍의 펄스들로 구성됨에 따라, 입력데이터들(D_IN1-D_IN8) 중 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7)이 제1 입력래치(111)로부터 출력되는 시점은, 각각 제2 클럭신호(CK2)의 펄스들 각각의 상승에지가 발생되는 시점과 동기화된다. 이는 제1 입력래치(111)로부터 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7) 각각이 출력되는 시점과, 제2 입력래치(112)로부터 오드 래치데이터들 각각이 출력되는 시점이 실질적으로 동일하다는 것을 의미한다. 그리고 제3 클럭신호(CK3)가 제1 클럭신호(CK1)의 짝수번째 펄스와 동일한 타이밍의 펄스들로 구성됨에 따라, 입력데이터들(D_IN1-D_IN8) 중 짝수번째 입력데이터들(D_IN2, D_IN4, D_IN6, D_IN8)이 제1 입력래치(111)로부터 출력되는 시점은, 각각 제3 클럭신호(CK3)의 펄스들 각각의 상승에지가 발생되는 시점과 동기화된다. 이는 제1 입력래치(111)로부터 짝수번째 입력데이터들(D_IN2, D_IN4, D_IN6, D_IN8) 각각이 출력되는 시점과, 제3 입력래치(113)로부터 이븐 래치데이터들 각각이 출력되는 시점이 실질적으로 동일하다는 것을 의미한다.
도 8은 도 1의 누산기(100)에서 입력래치회로(110)의 제1 입력래치(111), 제2 입력래치(112), 제3 입력래치(113), 및 누적회로(120)로부터의 데이터 출력 타이밍을 나타내 보인 타이밍도이다. 그리고 도 9는 도 1의 누산기(100)에서 출력래치회로(130)의 제1 출력래치(131) 및 제2 출력래치(132)로부터의 데이터 출력 타이밍을 나타내 보인 타이밍도이다. 또한 도 10 내지 도 26은 도 8 및 도 9의 타이밍도들에 대응하는 누산기(100) 동작 과정들을 나타내 보인 도면들이다. 본 예에서 제1 내지 제3 클럭신호들(CK1-CK3)의 구성은, 도 6을 참조하여 설명한 바와 동일한 것으로 전제하기로 한다. 본 예에서 제1 내지 제8 입력데이터들(D_IN1-D_IN8)에 대한 누적연산이 수행되는 경우를 전제하기로 한다. 또한 본 예에서 제1 입력래치(111)에 대한 제1 내지 제8 입력데이터들(D_IN1-D_IN8)의 입력 타이밍 및 출력 타이밍은, 도 7을 참조하여 설명한 바와 동일한 것으로 전제하기로 한다.
도 10을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 첫번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제1 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제1 입력데이터(D_IN1)를 출력단자를 통해 출력하기 시작한다. 즉 제1 시점에서, 누적회로(120)의 제1 입력단자로 제1 입력데이터(D_IN1)가 입력되기 시작한다. 제1 시점에서, 제2 클럭신호(CK2)의 첫번째 펄스도 제2 입력래치(112)에 전송되지만, 제2 입력래치(112)에 래치되어 있는 래치데이터가 없으므로, 제2 입력래치(112)로부터 래치데이터가 누적회로(120)로 전송되지 않는다. 제1 시점은, 제3 클럭신호(CK3)의 첫번째 펄스가 제3 입력래치(113)로 전송되기 전이므로, 래치데이터의 존재 유무와 무관하게 제3 입력래치(113)로부터 래치데이터가 출력되지 않는다. 제1 시점에서, 누적회로(120)는, 제1 입력데이터(D_IN1)에 대한 첫번째 누적 연산을 수행하여 제1 오드 누적데이터(D_OACC1)를 생성하기 시작한다.
도 11을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 두번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제2 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제2 입력데이터(D_IN2)를 출력단자를 통해 출력하기 시작한다. 즉 제2 시점에서, 누적회로(120)의 제1 입력단자로 제2 입력데이터(D_IN2)가 입력되기 시작한다. 제2 시점은, 제2 클럭신호(CK2)의 두번째 펄스가 제2 입력래치(112)로 전송되기 전이므로, 래치데이터의 존재 유무와 무관하게 제2 입력래치(112)로부터 래치데이터가 출력되지 않는다. 제2 시점에서, 제3 클럭신호(CK3)의 첫번째 펄스도 제3 입력래치(113)에 전송되지만, 제3 입력래치(113)에 래치되어 있는 래치데이터가 없으므로, 제3 입력래치(113)로부터 래치데이터가 누적회로(120)로 전송되지 않는다. 제2 시점에서, 누적회로(120)는, 첫번째 연산 결과로서 제1 입력데이터(D_IN1)와 동일한 제1 오드 누적데이터(D_OACC1)를 제1 출력단자를 통해 출력시키기 시작한다. 제1 오드 누적데이터(D_OACC1)는 제1 출력래치(131)로 전송된다. 또한 제2 시점에서, 누적회로(120)는, 제2 입력데이터(D_IN2)에 대한 두번째 누적 연산을 수행하여 제1 이븐 누적데이터(D_EACC1)를 생성하기 시작한다.
도 12를 도 8 및 도 9와 함께 참조하면, 제1 출력래치(131)는 누적회로(120)의 제1 출력단자를 통해 전송되는 제1 오드 누적데이터(D_OACC1)를 래치한다. 제1 출력래치(131)는, 제4 클럭신호(CK4)의 첫번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 시점(이하 "제3 시점")에서, 제1 오드 누적데이터(D_OACC1)를 제1 오드 래치데이터(D_OL1)로서 출력시키기 시작한다. 제1 출력래치(131)로부터 출력되는 제1 오드 래치데이터(D_OL1)는 제2 입력래치(112)로 전송된다. 제1 오드 래치데이터(D_OL1)는, 제1 오드 누적데이터(D_OACC1)이므로, 결과적으로 제1 입력데이터(D_IN1)와 동일하다. 도 7을 참조하여 설명한 바와 같이, 제3 시점에서, 제1 입력래치(111)는 입력단자를 통해 제3 입력데이터(D_IN3)를 전송받는다.
도 13을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 세번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제4 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제3 입력데이터(D_IN3)를 출력단자를 통해 출력하기 시작한다. 제4 시점에서 제2 클럭신호(CK2)의 두번째 펄스도 제2 입력래치(112)에 전송되므로, 제2 입력래치(112)는 제1 오드 래치데이터(D_OL1)를 출력단자를 통해 출력하기 시작한다. 즉 제4 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제3 입력데이터(D_IN3) 및 제1 오드 래치데이터(D_OL1)를 입력받기 시작한다. 제4 시점에서, 누적회로(120)는, 제3 입력데이터(D_IN3) 및 제1 오드 래치데이터(D_OL1)에 대한 세번째 누적 연산을 수행하여 제2 오드 누적데이터(D_OACC2)를 생성하기 시작한다. 또한 제4 시점에서, 누적회로(120)는, 두번째 연산 결과로서 제2 입력데이터(D_IN2)와 동일한 제1 이븐 누적데이터(D_EACC1)를 제2 출력단자를 통해 출력시키기 시작한다. 제1 이븐 누적데이터(D_EACC1)는 제2 출력래치(132)로 전송된다.
도 14를 도 8 및 도 9와 함께 참조하면, 제2 출력래치(132)는 누적회로(120)의 제2 출력단자를 통해 전송되는 제1 이븐 누적데이터(D_EACC1)를 래치한다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 첫번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 시점(이하 "제5 시점")에서, 제1 이븐 누적데이터(D_EACC1)를 제1 이븐 래치데이터(D_EL1)로서 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 제1 이븐 래치데이터(D_EL1)는 제3 입력래치(113)로 전송된다. 제1 이븐 래치데이터(D_EL1)는, 제1 이븐 누적데이터(D_EACC1)이므로, 결과적으로 제2 입력데이터(D_IN2)와 동일하다. 제4 클럭신호(CK4)의 두번째 펄스가 발생되기 전이므로, 제5 시점에서 제1 출력래치(131)의 제1 오드 래치데이터(D_OL1) 출력 동작은 유지된다. 도 7을 참조하여 설명한 바와 같이, 제5 시점에서, 제1 입력래치(111)는 입력단자를 통해 제4 입력데이터(D_IN4)를 전송받는다.
도 15를 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 네번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제6 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제4 입력데이터(D_IN4)를 출력단자를 통해 출력하기 시작한다. 제6 시점에서 제3 클럭신호(CK3)의 두번째 펄스도 제3 입력래치(113)에 전송되므로, 제3 입력래치(113)는 제1 이븐 래치데이터(D_EL1)를 출력단자를 통해 출력하기 시작한다. 즉 제6 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제4 입력데이터(D_IN4) 및 제1 이븐 래치데이터(D_EL1)를 입력받기 시작한다. 제6 시점에서, 누적회로(120)는, 제4 입력데이터(D_IN4) 및 제1 이븐 래치데이터(D_EL1)에 대한 네번째 누적 연산을 수행하여 제2 이븐 누적데이터(D_EACC2)를 생성하기 시작한다. 또한 제6 시점에서, 누적회로(120)는, 세번째 연산 결과로서 제1 입력데이터(D_IN1) 및 제3 입력데이터(D_IN3)가 합해진 제2 오드 누적데이터(D_OACC2)를 제1 출력단자를 통해 출력시키기 시작한다. 제2 오드 누적데이터(D_OACC2)는 제1 출력래치(131)로 전송된다.
도 16을 도 8 및 도 9와 함께 참조하면, 제1 출력래치(131)는 누적회로(120)의 제1 출력단자를 통해 전송되는 제2 오드 누적데이터(D_OACC2)를 래치한다. 제1 출력래치(131)는, 제4 클럭신호(CK4)의 두번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 시점(이하 "제7 시점")에서, 제2 오드 누적데이터(D_OACC2)를 제2 오드 래치데이터(D_OL2)로서 출력시키기 시작한다. 제1 출력래치(131)로부터 출력되는 제2 오드 래치데이터(D_OL2)는 제2 입력래치(112)로 전송된다. 제2 오드 래치데이터(D_OL2)는, 제2 오드 누적데이터(D_OACC2)이므로, 결과적으로 제1 입력데이터(D_IN1)와 제3 입력데이터(D_IN3)가 합해진 데이터가 된다. 제5 클럭신호(CK5)의 두번째 펄스가 발생되기 전이므로, 제7 시점에서 제2 출력래치(132)의 제1 이븐 래치데이터(D_EL1) 출력 동작은 유지된다. 도 7을 참조하여 설명한 바와 같이, 제7 시점에서, 제1 입력래치(111)는 입력단자를 통해 제5 입력데이터(D_IN5)를 전송받는다.
도 17을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 다섯번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제8 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제5 입력데이터(D_IN5)를 출력단자를 통해 출력하기 시작한다. 제8 시점에서 제2 클럭신호(CK2)의 세번째 펄스도 제2 입력래치(112)에 전송되므로, 제2 입력래치(112)는 제2 오드 래치데이터(D_OL2)를 출력단자를 통해 출력하기 시작한다. 즉 제8 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제5 입력데이터(D_IN5) 및 제2 오드 래치데이터(D_OL2)를 입력받기 시작한다. 제8 시점에서, 누적회로(120)는, 제5 입력데이터(D_IN5) 및 제2 오드 래치데이터(D_OL2)에 대한 다섯번째 누적 연산을 수행하여 제3 오드 누적데이터(D_OACC3)를 생성하기 시작한다. 또한 제8 시점에서, 누적회로(120)는, 네번째 연산 결과로서 제2 입력데이터(D_IN2) 및 제4 입력데이터(D_IN4)가 합해진 제2 이븐 누적데이터(D_EACC2)를 제2 출력단자를 통해 출력시키기 시작한다. 제2 이븐 누적데이터(D_EACC2)는 제2 출력래치(132)로 전송된다.
도 18을 도 8 및 도 9와 함께 참조하면, 제2 출력래치(132)는 누적회로(120)의 제2 출력단자를 통해 전송되는 제2 이븐 누적데이터(D_EACC2)를 래치한다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 두번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 시점(이하 "제9 시점")에서, 제2 이븐 누적데이터(D_EACC2)를 제2 이븐 래치데이터(D_EL2)로서 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 제2 이븐 래치데이터(D_EL2)는 제3 입력래치(113)로 전송된다. 제2 이븐 래치데이터(D_EL2)는, 제2 이븐 누적데이터(D_EACC2)이므로, 제2 입력데이터(D_IN2) 및 제4 입력데이터(D_IN4)가 합해진 데이터가 된다. 제4 클럭신호(CK4)의 세번째 펄스가 발생되기 전이므로, 제7 시점에서 제1 출력래치(131)의 제2 오드 래치데이터(D_OL2) 출력 동작은 유지된다. 도 7을 참조하여 설명한 바와 같이, 제5 시점에서, 제1 입력래치(111)는 입력단자를 통해 제4 입력데이터(D_IN4)를 전송받는다.
도 19를 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 여섯번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제10 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제6 입력데이터(D_IN6)를 출력단자를 통해 출력하기 시작한다. 제10 시점에서 제3 클럭신호(CK3)의 세번째 펄스도 제3 입력래치(113)에 전송되므로, 제3 입력래치(113)는 제2 이븐 래치데이터(D_EL2)를 출력단자를 통해 출력하기 시작한다. 즉 제10 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제6 입력데이터(D_IN6) 및 제2 이븐 래치데이터(D_EL2)를 입력받기 시작한다. 제10 시점에서, 누적회로(120)는, 제6 입력데이터(D_IN6) 및 제2 이븐 래치데이터(D_EL2)에 대한 여섯번째 누적 연산을 수행하여 제3 이븐 누적데이터(D_EACC3)를 생성하기 시작한다. 또한 제10 시점에서, 누적회로(120)는, 다섯번째 연산 결과로서 제1 입력데이터(D_IN1), 제3 입력데이터(D_IN3), 및 제5 입력데이터(D_IN5)가 합해진 제3 오드 누적데이터(D_OACC3)를 제1 출력단자를 통해 출력시키기 시작한다. 제3 오드 누적데이터(D_OACC3)는 제1 출력래치(131)로 전송된다.
도 20을 도 8 및 도 9와 함께 참조하면, 제1 출력래치(131)는 누적회로(120)의 제1 출력단자를 통해 전송되는 제3 오드 누적데이터(D_OACC3)를 래치한다. 제1 출력래치(131)는, 제4 클럭신호(CK4)의 세번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 시점(이하 "제11 시점")에서, 제3 오드 누적데이터(D_OACC3)를 제3 오드 래치데이터(D_OL3)로서 출력시키기 시작한다. 제1 출력래치(131)로부터 출력되는 제3 오드 래치데이터(D_OL3)는 제2 입력래치(112)로 전송된다. 제3 오드 래치데이터(D_OL3)는, 제3 오드 누적데이터(D_OACC3)이므로, 결과적으로 제1 입력데이터(D_IN1), 제3 입력데이터(D_IN3) 및 제5 입력데이터(D_IN5)가 합해진 데이터가 된다. 제5 클럭신호(CK5)의 세번째 펄스가 발생되기 전이므로, 제11 시점에서 제2 출력래치(132)의 제2 이븐 래치데이터(D_EL2) 출력 동작은 유지된다. 도 7을 참조하여 설명한 바와 같이, 제11 시점에서, 제1 입력래치(111)는 입력단자를 통해 제7 입력데이터(D_IN7)를 전송받는다.
도 21을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 일곱번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제12 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제7 입력데이터(D_IN7)를 출력단자를 통해 출력하기 시작한다. 제12 시점에서 제2 클럭신호(CK2)의 네번째 펄스도 제2 입력래치(112)에 전송되므로, 제2 입력래치(112)는 제3 오드 래치데이터(D_OL3)를 출력단자를 통해 출력하기 시작한다. 즉 제12 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제7 입력데이터(D_IN7) 및 제3 오드 래치데이터(D_OL3)를 입력받기 시작한다. 제12 시점에서, 누적회로(120)는, 제7 입력데이터(D_IN7) 및 제3 오드 래치데이터(D_OL3)에 대한 일곱번째 누적 연산을 수행하여 제4 오드 누적데이터(D_OACC4)를 생성하기 시작한다. 또한 제12 시점에서, 누적회로(120)는, 일곱번째 연산 결과로서 제2 입력데이터(D_IN2), 제4 입력데이터(D_IN4), 및 제6 입력데이터(D_IN6)가 합해진 제3 이븐 누적데이터(D_EACC3)를 제2 출력단자를 통해 출력시키기 시작한다. 제3 이븐 누적데이터(D_EACC3)는 제2 출력래치(132)로 전송된다.
도 22를 도 8 및 도 9와 함께 참조하면, 제2 출력래치(132)는 누적회로(120)의 제2 출력단자를 통해 전송되는 제3 이븐 누적데이터(D_EACC3)를 래치한다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 세번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 시점(이하 "제13 시점")에서, 제3 이븐 누적데이터(D_EACC3)를 제3 이븐 래치데이터(D_EL3)로서 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 제3 이븐 래치데이터(D_EL3)는 제3 입력래치(113)로 전송된다. 제3 이븐 래치데이터(D_EL3)는, 제3 이븐 누적데이터(D_EACC3)이므로, 제2 입력데이터(D_IN2), 제4 입력데이터(D_IN4), 및 제6 입력데이터(D_IN6)가 합해진 데이터가 된다. 제4 클럭신호(CK4)의 네번째 펄스가 발생되기 전이므로, 제12 시점에서 제1 출력래치(131)의 제3 오드 래치데이터(D_OL3) 출력 동작은 유지된다. 도 7을 참조하여 설명한 바와 같이, 제12 시점에서, 제1 입력래치(111)는 입력단자를 통해 제8 입력데이터(D_IN8)를 전송받는다.
도 23을 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 여덟번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제14 시점")에서, 제1 입력래치(111)는, 래치하고 있는 제8 입력데이터(D_IN8)를 출력단자를 통해 출력하기 시작한다. 제14 시점에서 제3 클럭신호(CK3)의 네번째 펄스도 제3 입력래치(113)에 전송되므로, 제3 입력래치(113)는 제3 이븐 래치데이터(D_EL3)를 출력단자를 통해 출력하기 시작한다. 즉 제14 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제8 입력데이터(D_IN8) 및 제3 이븐 래치데이터(D_EL3)를 입력받기 시작한다. 제14 시점에서, 누적회로(120)는, 제8 입력데이터(D_IN8) 및 제3 이븐 래치데이터(D_EL3)에 대한 여덟번째 누적 연산을 수행하여 제4 이븐 누적데이터(D_EACC4)를 생성하기 시작한다. 또한 제14 시점에서, 누적회로(120)는, 일곱번째 연산 결과로서 제1 입력데이터(D_IN1), 제3 입력데이터(D_IN3), 제5 입력데이터(D_IN5), 및 제7 입력데이터(D_IN7)가 합해진 제4 오드 누적데이터(D_OACC4)를 제1 출력단자를 통해 출력시키기 시작한다. 제4 오드 누적데이터(D_OACC4)는 제1 출력래치(131)로 전송된다.
도 24를 도 8 및 도 9와 함께 참조하면, 제1 출력래치(131)는 누적회로(120)의 제1 출력단자를 통해 전송되는 제4 오드 누적데이터(D_OACC4)를 래치한다. 제1 출력래치(131)는, 제4 클럭신호(CK4)의 네번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 시점(이하 "제15 시점")에서, 제4 오드 누적데이터(D_OACC4)를 제4 오드 래치데이터(D_OL4)로서 출력시키기 시작한다. 제4 오드 래치데이터(D_OL4)는, 제4 오드 누적데이터(D_OACC4)이므로, 결과적으로 제1 입력데이터(D_IN1), 제3 입력데이터(D_IN3), 제5 입력데이터(D_IN5), 및 제7 입력데이터(D_IN7)가 합해진 데이터가 된다. 즉 제15 시점에서 제1 출력래치(131)로부터 출력되는 제4 오드 래치데이터(D_OL4)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8) 중 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7)이 누적된 결과 데이터가 된다. 제1 출력래치(131)로부터 출력되는 제4 오드 래치데이터(D_OL4)는 제2 입력래치(112)로 전송되지만, 누적회로(120)에서의 누적 연산에 더 이상 사용되지 않는다. 제5 클럭신호(CK5)의 네번째 펄스가 발생되기 전이므로, 제15 시점에서 제2 출력래치(132)의 제3 이븐 래치데이터(D_EL3) 출력 동작은 유지된다.
도 25를 도 8 및 도 9와 함께 참조하면, 제1 클럭신호(CK1)의 아홉번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제16 시점")에서, 제1 입력래치(111)는, 더 이상 입력데이터를 출력하지 않는다. 제16 시점에서 제2 클럭신호(CK2)의 네번째 펄스도 제2 입력래치(112)에 전송되므로, 제2 입력래치(112)는 제4 오드 래치데이터(D_OL4)를 출력단자를 통해 출력하기 시작한다. 그러나 도 24를 참조하여 설명한 바와 같이, 제4 오드 래치데이터(D_OL4)는 더 이상 누적회로(120)에서의 누적 연산에 사용되지 않는다. 제16 시점에서, 누적회로(120)는, 여덟번째 연산 결과로서 제2 입력데이터(D_IN2), 제4 입력데이터(D_IN4), 제6 입력데이터(D_IN6), 및 제8 입력데이터(D_IN8)가 합해진 제4 이븐 누적데이터(D_EACC4)를 제2 출력단자를 통해 출력시키기 시작한다. 제4 이븐 누적데이터(D_EACC4)는 제2 출력래치(132)로 전송된다.
도 26을 도 8 및 도 9와 함께 참조하면, 제2 출력래치(132)는 누적회로(120)의 제2 출력단자를 통해 전송되는 제4 이븐 누적데이터(D_EACC4)를 래치한다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 네번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 시점(이하 "제17 시점")에서, 제4 이븐 누적데이터(D_EACC4)를 제4 이븐 래치데이터(D_EL4)로서 출력시키기 시작한다. 제4 이븐 래치데이터(D_EL4)는, 제4 이븐 누적데이터(D_EACC4)이므로, 결과적으로 제2 입력데이터(D_IN2), 제4 입력데이터(D_IN4), 제6 입력데이터(D_IN6), 및 제8 입력데이터(D_IN87)가 합해진 데이터가 된다. 즉 제16 시점에서 제2 출력래치(132)로부터 출력되는 제4 이븐 래치데이터(D_EL4)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8) 중 짝수번째 입력데이터들(D_IN2, D_IN4, D_IN6, D_IN8)이 누적된 결과 데이터가 된다. 제2 출력래치(132)로부터 출력되는 제4 이븐 래치데이터(D_EL4)는 제3 입력래치(113)로 전송되지만, 누적회로(120)에서의 누적 연산에 더 이상 사용되지 않는다. 제4 클럭신호(CK4)의 다섯번째 펄스가 발생되기 전이므로, 제17 시점에서 제1 출력래치(131)의 제4 오드 래치데이터(D_OL4) 출력 동작은 유지된다.
도 27은 본 개시의 다른 예에 따른 누산기(300)를 나타내 보인 도면이다. 도 27에서 도 1과 동일한 참조부호는 동일한 구성요소를 나타내며, 이에 따라 중복되는 설명은 생략하기로 한다. 도 27을 참조하면, 본 예에 따른 누산기(300)는 추가가산기(340)를 더 포함한다. 추가가산기(340)는, 제1 입력단자, 제2 입력단자, 제3 입력단자, 및 출력단자를 갖는다. 추가가산기(340)의 제1 입력단자는 제1 출력래치(131)의 출력단자에 결합된다. 이에 따라 추가가산기(340)는, 제1 입력단자를 통해 제1 출력래치(131)로부터 오드 래치데이터(D_OL)를 전송받을 수 있다. 추가가산기(340)의 제2 입력단자는 제2 출력래치(132)의 출력단자에 결합된다. 이에 따라 추가가산기(340)는, 제2 입력단자를 통해 제2 출력래치(132)로부터 이븐 래치데이터(D_EL)를 전송받을 수 있다. 추가가산기(340)의 제3 입력단자는 제어신호(CS) 전송라인에 결합된다. 이에 따라 추가가산기(340)는, 제3 입력단자를 통해 제어신호(CS)를 전송받을 수 있다. 추가가산기(340)의 출력단자는, 누산기(300) 외부로 연장되는 누산기 출력라인에 결합된다. 추가가산기(340)는, 제어신호(CS)의 로직레벨, 예컨대 하이 레벨에 응답하여 제1 입력단자 및 제2 입력단자로부터 각각 전송되는 오드 래치데이터(D_OL) 및 이븐 래치데이터(D_EL)를 가산한 후, 그 결과데이터를 누적데이터(D_ACC)로서 출력단자를 통해 출력시킨다.
도 28 및 도 29는 도 27의 누산기(300) 동작을 설명하기 위해 나타내 보인 도면들이다. 본 예에 따른 누산기(300)는, 도 8 내지 도 26을 참조하여 설명한 누산기(100) 동작들을 모두 동일하게 수행하는 것으로 전제하기로 한다. 먼저 도 28을 참조하면, 제1 출력래치(131)는, 도 24를 참조하여 설명한 바와 같이, 제4 클럭신호(CK4)의 네번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 제15 시점에서, 제4 오드 누적데이터(D_OACC4)를 제4 오드 래치데이터(D_OL4)로서 출력시키기 시작한다. 제1 출력래치(131)로부터 출력되는 제4 오드 래치데이터(D_OL4)는, 제2 입력래치(112)의 입력단자 및 추가가산기(340)의 제1 입력단자로 전송된다. 추가가산기(340)의 제1 입력단자로 전송되는 제4 오드 래치데이터(D_OL4)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8) 중 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7)이 누적된 결과 데이터가 된다. 추가가산기(340)의 제3 입력단자로 전송되는 제어신호(CS)는 로우 레벨(LOW) 상태를 유지하며, 이에 따라 추가가산기(340)는 가산연산을 수행하지 않는다.
다음에 도 29를 참조하면, 제2 출력래치(132)는, 도 26을 참조하여 설명한 바와 같이, 제5 클럭신호(CK5)의 네번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 제17 시점에서, 제4 이븐 누적데이터(D_EACC4)를 제4 이븐 래치데이터(D_EL4)로서 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 제4 이븐 래치데이터(D_EL4)는, 제3 입력래치(113)의 입력단자 및 추가가산기(340)의 제2 입력단자로 전송된다. 추가가산기(340)의 제2 입력단자로 전송되는 제4 이븐 래치데이터(D_EL4)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8) 중 짝수번째 입력데이터들(D_IN2, D_IN4, D_IN6, D_IN8)이 누적된 결과 데이터가 된다. 추가가산기(340)의 제3 입력단자로 전송되는 제어신호(CS)는 로우 레벨(LOW) 상태에서 하이 레벨(HI) 상태로 전환되며, 이에 따라 추가가산기(340)는 제4 오드 래치데이터(D_OL4) 및 제4 이븐 래치데이터(D_EL4)에 대한 가산연산을 수행한다. 추가가산기(340)는, 가산연산 결과, 즉 "D_OL4+D_EL4"를 누적데이터(D_ACC)로서 출력단자를 통해 출력시킨다. 추가가산기(340)로부터 출력되는 누적데이터(D_ACC)는 제1 내지 제8 입력데이터들(D_IN1-D_IN8)이 모두 누적된 데이터가 된다.
도 30은 본 개시의 또 다른 예에 따른 누산기(400)를 나타내 보인 도면이다. 도 30에서 도 1과 동일한 참조부호는 동일한 구성요소를 나타내며, 이에 따라 중복되는 설명은 생략하기로 한다. 도 30을 참조하면, 본 예에 따른 누산기(400)는, 선택출력기(440)를 더 포함하는 점과, 제2 출력래치(131)의 출력단자가 선택출력기(440)에 결합되는 점과, 그리고 제2 출력래치(132)의 출력단자가 누산기(400) 외부 출력라인에 결합되는 점에서 도 1을 참조하여 설명한 누산기(100)와 차이점이 있다. 선택츨력기(440)는, 제1 입력단자(IN1)와, 제2 입력단자(IN2)와, 선택신호 입력단자(S)와, 그리고 출력단자(O)를 갖는다. 일 예에서 선택출력기(440)는 2:1 멀티플렉서를 포함할 수 있다. 선택출력기(440)의 제1 입력단자(IN1)는, 입력데이터(D_IN)가 전송되는 전송라인에 결합된다. 선택출력기(440)의 제2 입력단자(IN2)는, 제1 출력래치(131)의 출력단자와 결합된다. 선택출력기(440)의 선택신호 입력단자(S)는, 선택신호(SS)가 전송되는 전송라인에 결합된다. 선택출력기(440)의 출력단자(O)는, 제1 입력래치(111)의 입력단자와 결합된다.
선택출력기(440)는, 선택신호(SS)의 로직레벨에 따라 제1 입력단자(IN1) 및 제2 입력단자(IN2)로 각각 전송되는 입력데이터(D_IN) 및 오드 래치데이터(D_OL) 중 하나를 선택데이터로 선택하여 출력단자(O)를 통해 출력시킨다. 일 예에서 로우 레벨의 선택신호(SS)가 전송되는 경우, 선택출력기(440)는, 선택데이터로서 제1 입력단자(IN1)를 통해 전송되는 입력데이터(D_IN)를 출력단자(O)를 통해 출력시킨다. 이 경우 제1 입력래치(111)는, 입력단자를 통해 선택출력기(440)로부터 입력데이터(D_IN)를 전송받는다. 반면에 하이 레벨의 선택신호(SS)가 전송되는 경우, 선택출력기(440)는, 제2 입력단자(IN2)를 통해 전송되는 오드 래치데이터(D_OL)를 출력단자(O)를 통해 출력시킨다. 이 경우 제1 입력래치(111)는, 입력단자를 통해 선택출력기(440)로부터 오드 래치데이터(D_OL)를 전송받는다.
제1 출력래치(131)의 출력단자는, 제2 입력래치(112)의 입력단자 및 선택출력기(440)의 제2 입력단자(IN2)에 공통으로 결합된다. 이에 따라 제1 출력래치(131)로부터 출력되는 오드 래치데이터(D_OL)는, 제2 입력래치(112) 및 선택출력기(440)에 공통으로 전송된다. 제2 출력래치(131)의 출력단자는, 제3 입력래치(112)의 입력단자 및 누산기(400)의 출력라인에 공통으로 결합된다. 이에 따라 제2 출력래치(132)로부터 출력되는 이븐 래치데이터(D_EL)는, 제3 입력래치(113)에 전송되며, 또한 누산기(400)의 출력라인을 통해 누산기(400) 외부로 전송된다.
도 31 및 도 32는 도 30의 누산기(400) 동작을 나타내는 타이밍도들이다. 그리고 도 33 내지 도 38은 도 30의 누산기(400) 동작 설명을 위해 나타내 보인 도면들이다. 도 31 및 도 32에서 제1 클럭신호(CK1)의 첫번째 펄스가 제1 입력래치(111)로 전송되는 제1 시점부터 제4 클럭신호(CK4)의 네번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 제15 시점까지 선택출력기(440)의 선택단자(S)로 전송되는 선택신호(SS)는 로우 레벨(LOW) 상태가 유지된다. 이에 따라 제1 시점부터 제15 시점까지의 누산기(400)의 동작은, 도 10 및 도 24를 참조하여 설명한 누산기(100)의 동작과 동일하며, 이하에서 중복되는 설명은 생략하기로 한다.
도 33을 도 31 및 도 32와 함께 참조하면, 제4 클럭신호(CK4)의 네번째 펄스가 제1 출력래치(131)로 전송되기 시작하는 제15 시점 이후, 제2 클럭신호(CK2)는 더 이상 펄스를 발생하지 않는다. 즉 제15 시점 이후 제2 입력래치(112)는 리셋 상태를 유지한다. 따라서 제15 시점 이후 제2 입력래치(112)는 더 이상 오드 래치데이터를 출력하지 않는다. 제15 시점에서 제1 입력래치(111)는, 여전히 제8 입력데이터(D_IN8)를 누적회로(120)의 제1 입력단자로 전송한다. 또한 제3 입력래치(113)는, 여전히 제3 이븐 래치데이터(D_EL3)를 누적회로(120)의 제2 입력단자로 전송한다. 누적회로(120)는, 제8 입력데이터(D_IN8) 및 제3 이븐 래치데이터(D_EL3)에 대한 누적연산을 수행하여 제4 이븐 누적데이터(D_EACC4)를 생성하기 시작한다. 더 이상 입력데이터를 래치하고 있지 않으므로, 데이터를 출력하지 않는다. 제15 시점에서 제4 오드 누적데이터(D_OACC4)는, 누적회로(120)의 제1 출력단자로부터 제1 출력래치(130)로 여전히 전송중에 있다. 제15 시점에서 제4 클럭신호(CK4)의 네번째 펄스가 제1 출력래치(131)로 전송됨에 따라, 제1 출력래치(131)는, 제4 오드 누적데이터(D_OACC4)를 제4 오드 래치데이터(D_OL4)로서 출력시키기 시작한다. 제15 시점에서 제1 출력래치(131)로부터 출력되는 제4 오드 래치데이터(D_OL4)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8) 중 홀수번째 입력데이터들(D_IN1, D_IN3, D_IN5, D_IN7)이 누적된 결과 데이터가 된다. 제1 출력래치(131)로부터 출력되는 제4 오드 래치데이터(D_OL4)는 제2 입력래치(112) 및 선택출력기(440)의 제2 단자(IN2)로 전송된다. 제4 오드 래치데이터(D_OL4)가 제2 입력래치(112)에 전송되더라도, 제15 시점 이후 제2 입력래치(112)가 리셋 상태를 유지함에 따라 제2 입력래치(112)로부터 출력되지는 않는다. 선택출력기(440)의 제2 입력단자(IN2)로 전송되는 제4 오드 래치데이터(D_OL4)는, 선택출력기(440)에서 출력 대기 상태가 된다.
도 34를 도 31 및 도 32와 함께 참조하면, 제1 클럭신호(CK1)의 아홉번째 펄스가 제1 입력래치(111)로 전송되는 제16 시점에서, 제1 출력래치(131)로부터 선택출력기(440)의 제2 입력단자(IN2)로의 제4 오드 래치데이터(D_OL4) 전송은 계속된다. 제16 시점에서, 선택출력기(440)의 제1 입력단자(IN1)로 입력되는 데이터가 없고, 선택출력기(440)로 전송되는 선택신호(SS)는 로우 레벨(LOW) 상태가 유지되므로, 선택출력기(440)로부터 제1 입력래치(111)로 데이터가 전송되지 않는다. 이에 따라 제1 클럭신호(CK1)의 아홉번째 펄스가 제1 입력래치(111)로 전송되더라도, 제1 입력래치(111)로부터 데이터가 출력되지 않는다. 제16 시점에서, 누적회로(120)는, 누적연산에 의해 생성되는 제4 이븐 누적데이터(D_EACC4)를 제2 출력단자를 통해 출력하기 시작한다. 제4 이븐 누적데이터(D_EACC4)는 제2 출력래치(132)로 전송된다.
도 35를 도 31 및 도 32와 함께 참조하면, 제5 클럭신호(CK5)의 네번째 펄스가 제2 출력래치(132)로 입력되기 시작하는 제17 시점에서, 누적회로(120)로부터의 제4 이븐 누적데이터(D_EACC4)의 출력은 계속된다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 네번째 펄스에 동기되어 제4 이븐 누적데이터(D_EACC4)를 제4 이븐 래치데이터(D_EL4)로서 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 제4 이븐 래치데이터(D_EL4)는 제3 입력래치(113)로 전송된다. 제4 이븐 래치데이터(D_EL4)는, 제4 이븐 누적데이터(D_EACC4)이므로, 제2 입력데이터(D_IN2), 제4 입력데이터(D_IN4), 제6 입력데이터(D_IN6), 및 제8 입력데이터(D_IN8)가 합해진 데이터가 된다. 제17 시점에서, 선택출력기(440)의 선택단자(S)로 전송되는 선택신호(SS)는 로우 레벨(LOW)에서 하이 레벨(HI)로 변경된다. 이에 따라 선택출력기(440)는, 제2 입력단자(IN2)를 통해 전송된 제4 오드 래치데이터(D_OL4)를 출력단자(O)를 통해 출력시킨다. 선택출력기(440)로부터 출력되는 제4 오드 래치데이터(D_OL4)는 제1 입력래치(111)로 전송된다.
도 36을 도 31 및 도 32와 함께 참조하면, 제1 클럭신호(CK1)의 열번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제18 시점")에서, 선택신호(SS)는 하이 레벨(HI)을 유지하며, 이에 따라 선택출력기(440)로부터 제1 입력래치(111)로의 제4 오드 래치데이터(D_OL4) 전송은 계속된다. 도면에 나타내지는 않았지만, 선택출력기(440)로부터 제1 입력래치(111)로 제4 오드 래치데이터(D_OL4) 전송이 완료되면, 선택신호(SS)의 로직 레벨은 하이 레벨(HI)에서 로우 레벨(LOW)로 변경된다. 제18 시점에서, 제1 입력래치(111)는, 제1 클럭신호(CK1)의 열번째 펄스에 동기되어 선택출력기(440)로부터 전송되는 제4 오드 래치데이터(D_OL4)를 출력하기 시작한다. 제18 시점에서 제3 클럭신호(CK3)의 다섯번째 펄스도 제3 입력래치(113)에 전송되므로, 제3 입력래치(113)는 제4 이븐 래치데이터(D_EL4)를 출력단자를 통해 출력하기 시작한다. 즉 제18 시점에서, 누적회로(120)는, 제1 입력단자 및 제2 입력단자를 통해 각각 제4 오드 래치데이터(D_OL4) 및 제4 이븐 래치데이터(D_EL4)를 입력받기 시작한다. 제18 시점에서, 누적회로(120)는, 제4 오드 래치데이터(D_OL4) 및 제4 이븐 래치데이터(D_EL4)에 대한 누적연산을 수행하여 제4 오드 래치데이터(D_OL4) 및 제4 이븐 래치데이터(D_EL4)가 합해진 누적데이터(D_ACC)를 생성하기 시작한다. 누적데이터(D_ACC)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8)이 모두 합해진 데이터이다.
도 37을 도 31 및 도 32와 함께 참조하면, 제1 클럭신호(CK1)의 열한번째 펄스가 제1 입력래치(111)로 전송되기 시작하는 시점(이하 "제19 시점")에서, 선택신호(SS)는 로우 레벨(LOW)을 유지한다. 비록 제1 클럭신호(CK1)의 열한번째 펄스가 제1 입력래치(111)로 전송되더라도, 제19 시점에서 제1 입력래치(111)로부터의 제4 오드 래치데이터(D_OL4) 출력은 완료됨에 따라, 더 이상 제1 입력래치(111)로부터 데이터가 출력되지 않는다. 유사하게 제19 시점에서 제3 입력래치(113)로부터의 제4 이븐 래치데이터(D_EL4) 출력도 완료되며, 제3 입력래치(113)로부터도 더 이상 데이터가 출력되지 않는다. 제19 시점에서, 누적회로(120)는 누적연산에 의해 생성되는 누적데이터(D_ACC)를 제2 출력단자를 통해 출력하기 시작한다. 누적데이터(D_ACC)는 제2 출력래치(132)로 전송된다.
도 38을 도 31 및 도 32와 함께 참조하면, 제5 클럭신호(CK5)의 다섯번째 펄스가 제2 출력래치(132)로 전송되기 시작하는 시점(이하 "제20 시점")에서, 누적회로(120)로부터의 누적데이터(D_ACC)의 출력은 계속된다. 제2 출력래치(132)는, 제5 클럭신호(CK5)의 다섯번째 펄스에 동기되어 누적데이터(D_ACC)를 출력시키기 시작한다. 제2 출력래치(132)로부터 출력되는 누적데이터(D_ACC)는, 누산기(400)의 출력라인을 통해 누산기(400)로부터 출력되기 시작한다. 누산기(400)로부터 출력되는 누적데이터(D_ACC)는, 제1 내지 제8 입력데이터들(D_IN1-D_IN8)이 모두 누적된 결과 데이터를 구성한다.
도 39는 본 개시의 일 예에 따른 연산로직회로로서 곱셈-누산(MAC) 오퍼레이터(500)의 일 예를 나타내 보인 블록도이다. 도 39를 참조하면, MAC 오퍼레이터(500)는, 곱셈 및 가산 회로(530), 누산기(540), 및 클럭발생기(570)를 포함한다. 곱셈 및 가산 회로(530)는, 곱셈회로(531) 및 애더트리(532)를 포함한다. 곱셈회로(531)는, 제1 입력데이터들(Ws) 및 제2 입력데이터들Vs)을 입력받는다. 일 예에서 제1 입력데이터들(Ws) 및 제2 입력데이터들(Vs)은, 각각 인공지능 연산에 사용되는 웨이트데이터들 및 벡터데이터들일 수 있다. 곱셈회로(531)는, 제1 입력데이터들(Ws) 및 제2 입력데이터들(Vs)에 대한 곱셈연산을 수행하여 곱셈데이터들(WVs)을 생성 및 출력시킨다. 곱셈데이터들(WVs)은 애더트리(532)로 전송된다. 애더트리(532)는, 곱셈데이터들(WVs)에 대한 가산 연산을 수행하여 곱셈가산데이터(D_MA)를 생성 및 출력시킨다. 곱셈가산데이터(D_MA)는 누산기(540)로 전송된다.
누산기(540)는, 이전의 연산과정에서 래치된 래치데이터와 애더트리(532)로부터 전송되는 곱셈가산데이터(D_MA)에 대한 누적가산 연산을 수행하여 누적데이터(D_ACC)를 생성하여 출력시킨다. 일 예에서 누산기(540)는, 도 29를 참조하여 설명한 누산기(300)와 동일하게 구성될 수 있다. 이 경우 누산기(540)로 입력되는 곱셈가산데이터(D_MA)는, 도 29를 참조하여 설명한 입력데이터(D_IN)에 해당된다. 일 예에서 누산기(540)는, 도 33을 참조하여 설명한 누산기(400)와 동일하게 구성될 수 있다. 이 경우 누산기(540)로 입력되는 곱셈가산데이터(D_MA)는, 도 33를 참조하여 설명한 입력데이터(D_IN)에 해당된다.
클럭발생기(570)는, MAC 오퍼레이터(500)로 입력되는 기준클럭신호(CKR)를 기반으로 제1 클럭신호(CK1), 제2 클럭신호(CK2), 제3 클럭신호(CK3), 제4 클럭신호(CK4), 및 제5 클럭신호(CK5)를 생성하여 출력한다. 제1 클럭신호(CK1)는, 기준클럭신호(CKR)와 동일할 수 있다. 제2 클럭신호(CK2)는, 제1 클럭신호(CK1)의 홀수번째 펄스들과 동일한 펄스들을 갖는다. 제3 클럭신호(CK3)는, 제1 클럭신호(CK1)의 짝수번째 펄스들과 동일한 펄스들을 갖는다. 제4 클럭신호(CK4)는, 제2 클럭신호(CK2)의 펄스들로부터 일정 시간 지연되어 발생되는 펄스들을 갖는다. 여기서 지연시간은, 누산기(540) 내에서의 누적연산처리에 소요되는 시간에 해당될 수 있다. 제5 클럭신호(CK5)는, 제3 클럭신호(CK3)의 펄스들로부터 일정 시간 지연되어 발생되는 펄스들을 갖는다. 마찬가지로 여기서 지연시간은, 누산기(540) 내에서의 누적연산처리에 소요되는 시간에 해당될 수 있다. 제1 내지 제5 클럭신호들(CK1-CK5)은, 누산기(540)로 전송된다. 클럭발생기(570)로부터 생성되는 제1 내지 제5 클럭신호들(CK1-CK5)은, 도 6을 참조하여 설명한 바와 동일하므로, 중복되는 설명은 생략하기로 한다.
도 40은 도 39의 곱셈 및 가산 회로(530) 구성 및 동작의 일 예를 나타내 보인 블록도이다. 도 40을 참조하면, 곱셈 및 가산 회로(530)는, 곱셈회로(531) 및 애더트리(532)를 포함한다. 곱셈회로(531)는, 복수, 예컨대 제1 내지 제8 곱셈기들(MUL(0)-MUL(7))을 포함한다. 제1 내지 제8 곱셈기들(MUL(0)-MUL(7))은, 각각 제1 내지 제8 웨이트데이터들(W1-W8) 및 제1 내지 제8 벡터데이터들(V1-V8)을 전송받는다. 제1 내지 제8 웨이트데이터들(W1-W8)은, 도 39를 참조하여 설명한 제1 입력데이터들(Ws)을 구성한다. 그리고 제1 내지 제8 벡터데이터들(V1-V8)은, 도 39를 참조하여 설명한 제2 입력데이터들(Vs)을 구성한다. 제1 내지 제8 곱셈기들(MUL(0)-MUL(7)) 각각은, 제1 내지 제8 웨이트데이터들(W1-W8) 각각과 제1 내지 제8 벡터데이터들(V1-V8) 각각에 대한 곱셈 연산을 수행하여 제1 내지 제8 곱셈데이터들(WV1-WV8)을 생성한다. 예컨대 제1 곱셈기(MUL(0))는, 제1 웨이트데이터(W1) 및 제1 벡터데이터(V1)에 대한 곱셈 연산을 수행하여 제1 곱셈데이터(WV1)를 생성한다. 제2 곱셈기(MUL(1))는, 제2 웨이트데이터(W2) 및 제2 벡터데이터(V2)에 대한 곱셈 연산을 수행하여 제2 곱셈데이터(WV2)를 생성한다. 나머지 제3 내지 제8 곱셈기들(MUL(2)-MUL(7)) 각각도 동일한 방식으로 곱셈 연산을 수행하여 제3 내지 제8 곱셈데이터들(WV3-WV8) 각각을 생성한다. 제1 내지 제8 곱셈기들(MUL(0)-MUL(7))로부터 생성되는 제1 내지 제8 곱셈데이터들(WV1-WV8)은 애더트리(532)로 전송된다.
애더트리(532)는, 곱셈회로(531)로부터 전송되는 제1 내지 제8 곱셈데이터들(WV1-WV8)에 대한 가산 연산을 수행한다. 애더트리(532)는, 가산연산 결과 생성되는 곱셈가산데이터(D_MA)를 출력시킨다. 애더트리(532)는, 복수의 가산기들(ADDs)이 트리 구조와 같은 계층적 구조로 배열되어 구성될 수 있다. 본 예에서 애더트리(532)는, 복수의 전-가산기들(full-adders) 및 반-가산기(half-adder)로 구성된다. 그러나 이는 단지 하나의 예로서, 애더트리(532)는 반-가산기들(half-adders)로만으로 구성될 수도 있다. 본 예에서, 애더트리(532)의 최상위의 제1 스테이지에는 2개의 전-가산기들(ADD(11)-ADD(12))이 배치된다. 애더트리(532)의 그 다음 하위의 제2 스테이지에도 2개의 전-가산기들(ADD(21)-ADD(22))이 배치된다. 애더트리(532)의 그 다음 하위의 제3 스테이지에는 1개의 전-가산기(ADD(31))가 배치된다. 애더트리(532)의 그 다음 하위의 제4 스테이지에도 1개의 전-가산기(ADD(41))가 배치된다. 그리고 애더트리(532)의 최하위의 제5 스테이지에는 1개의 반-가산기(ADD(5))가 배치된다.
제1 스테이지의 제1 전-가산기(ADD(11))는, 곱셈회로(531)의 제1 내지 제3 곱셈기들(MUL(0)-MUL(2)) 각각으로부터 전송되는 제1 곱셈데이터(WV1), 제2 곱셈데이터(WV2), 및 제3 곱셈데이터(WV3)에 대한 가산연산을 수행하여 가산값(S11) 및 캐리값(C11)을 출력한다. 제1 스테이지의 제2 전-가산기(ADD(12))는, 곱셈회로(531)의 제6 내지 제8 곱셈기들(MUL(5)-MUL(7)) 각각으로부터 전송되는 제6 곱셈데이터(WV6), 제7 곱셈데이터(WV7), 및 제8 곱셈데이터(WV8)에 대한 가산연산을 수행하여 가산값(S12) 및 캐리값(C12)을 출력한다. 제2 스테이지의 제1 전-가산기(ADD(21))는, 제1 스테이지의 제1 전-가산기(ADD(11))로부터 전송되는 가산값(S11) 및 캐리값(C11)과, 곱셈회로(531)의 제4 곱셈기(MUL(3))로부터 전송되는 제4 곱셈데이터(WV4)에 대한 가산연산을 수행하여 가산값(S21) 및 캐리값(C21)을 출력한다. 제2 스테이지의 제2 전-가산기(ADD(22))는, 제1 스테이지의 제2 전-가산기(ADD(12))로부터 전송되는 가산값(S12) 및 캐리값(C12)과, 곱셈회로(531)의 제5 곱셈기(MUL(4))로부터 전송되는 제5 곱셈데이터(WV5)에 대한 가산연산을 수행하여 가산값(S22) 및 캐리값(C22)을 출력한다. 제3 스테이지의 제1 전-가산기(ADD(3))는, 제2 스테이지의 제1 전-가산기(ADD(21))로부터 전송되는 가산값(S21) 및 캐리값(C21)과, 제2 스테이지의 제2 전-가산기(ADD(22))로부터 전송되는 가산값(S22)에 대한 가산연산을 수행하여 가산값(S3) 및 캐리값(C3)을 출력한다. 제4 스테이지의 제1 전-가산기(ADD(41))는, 제3 스테이지의 제1 전-가산기(ADD(31))로부터 전송되는 가산값(S3) 및 캐리값(C3)과, 제2 스테이지의 제2 전-가산기(ADD(22))로부터 전송되는 캐리값(C22)에 대한 가산연산을 수행하여 가산값(S4) 및 캐리값(C4)을 출력한다. 제5 스테이지의 반-가산기(ADD(5))는, 제4 스테이지의 전-가산기(ADD(4))로부터 전송되는 가산값(S4) 및 캐리값(C4)에 대한 가산연산을 수행하고, 그 결과데이터를 곱셈가산데이터(D_MA)로서 출력시킨다.
도 41은 도 39의 클럭발생기(570) 구성 및 동작의 일 예를 설명하기 위해 나타내 보인 도면이다. 도 41을 참조하면, 클럭발생기(570)는, 클럭분배기(571), 제1 지연회로(572), 및 제2 지연회로(573)를 포함한다. 도 39를 참조하여 설명한 바와 같이, 클럭발생기(570)는, 기준클럭신호(CKR)를 입력받고, 제1 내지 제5 클럭신호들(CK1-CK5)을 출력시킨다. 클럭발생기(570)는, 기준클럭신호(CKR)를 그대로 제1 클럭신호(CK1)로서 출력시킨다. 클럭분배기(571)는, 누산기(도 39의 540)로 입력되는 기준클럭신호(CKR)를 분배하여 제2 클럭신호(CK2) 및 제3 클럭신호(CK3)를 출력시킨다. 제2 클럭신호(CK2)는, 제1 클럭신호(CK1)(즉, 기준클럭신호(CKR))를 구성하는 펄스들 중 홀수번째 펄스들로만 구성된다. 제3 클럭신호(CK3)는, 제1 클럭신호(CK1)를 구성하는 펄스들 중 짝수번째 펄스들로만 구성된다. 이에 따라 제2 클럭신호(CK2) 및 제3 클럭신호(CK3)는, 각각 제1 클럭신호(CK1)가 갖는 주기의 2배에 해당하는 주기를 갖는다. 일 예에서 클럭 분배기(571)는 제1 클럭신호(CK1)를 일정시간 지연시켜서 제1 클럭신호(CK1) 주기의 2배인 주기를 갖는 제2 클럭신호(CK2) 및 제3 클럭신호(CK3)를 생성 및 출력시킬 수 있다.
제1 지연회로(572)는, 클럭분배기(571)로부터 출력되는 제2 클럭신호(CK2)를 입력받고 제1 지연시간만큼 지연시켜 제4 클럭신호(CK4)를 생성 및 출력시킬 수 있다. 제2 지연회로(573)는, 클럭분배기(571)로부터 출력되는 제3 클럭신호(CK3)를 입력받고 제2 지연시간만큼 지연시켜 제5 클럭신호(CK5)를 생성 및 출력시킬 수 있다. 제1 지연회로(572) 및 제2 지연회로(573)에서 각각 제1 지연시간과 제2 지연시간은 동일하게 설정될 수 있다. 도 6을 참조하여 설명한 바와 같이, 지연시간은, 누산기(540) 내의 누적회로에서의 지수처리, 가수처리, 및 정규화처리에 소요되는 시간으로 설정될 수 있다. 일 예에서 제1 지연시간은, 제4 클럭신호(CK4)를 구성하는 펄스들 각각의 상승에지가 제3 클럭신호(CK3)를 구성하는 펄스들 각각의 하강에지에 동기되도록 설정될 수 있다. 일 예에서 제2 지연시간은, 제5 클럭신호(CK5)를 구성하는 펄스들 각각의 상승에지가 제2 클럭신호(CK2)를 구성하는 펄스들 중 첫번째 펄스를 제외한 나머지 펄스들 각각의 하강에지에 동기되도록 설정될 수 있다.
도 42는 본 개시의 일 예에 따른 PIM 장치(600)를 나타내 보인 블록도이다. 도 42를 참조하면, PIM 장치(600)는, MAC 오퍼레이터(500) 및 메모리회로(610)를 포함한다. 메모리회로(610)는, 제1 메모리회로(610) 및 제2 메모리회로(620)를 포함한다. 일 예에서 제1 메모리회로(610) 및 제2 메모리회로(620)는, 각각 메모리뱅크일 수 있다. 다른 예에서 제1 메모리회로(610) 및 제2 메모리회로(620)는, 각각 메모리뱅크 및 글로벌버퍼일 수 있다. 제1 메모리회로(610) 및 제2 메모리회로(620)는, 각각 MAC 연산을 위한 웨이트데이터들(Ws) 및 벡터데이터들(Vs)을 저장한다. 제1 메모리회로(610) 및 제2 메모리회로(620)는, MAC 연산 동작을 제어하는 제어신호 입력에 응답하여 각각 웨이트데이터들(Ws) 및 벡터데이터들(Vs)을 MAC 오퍼레이터(500)의 곱셈회로(531)로 전송한다. MAC 오퍼레이터(500)는, 도 39 내지 도 41을 참조하여 설명한 바와 동일하다. 이에 따라 MAC 오퍼레이터(500)의 곱셈 및 가산 회로(530)는, 곱셈가산데이터(D_MA)를 출력하여 누산기(540)로 전송한다. 누산기(540)는, 클럭발생기(570)로부터 전송되는 제1 내지 제5 클럭신호들(CK1-CK5)에 동기되어 곱셈가산데이터들(D_MAs) 중 홀수번째 곱셈가산데이터들이 모두 합산된 오드 래치데이터와 짝수번째 곱셈가산데이터들이 모두 합산된 이븐 래치데이터를 생성한다. 그리고 오드 래치데이터와 이븐 래치데이터가 가산된 누적데이터(D_ACC)를 출력시킨다.
도 43은 본 개시의 다른 예에 따른 PIM 장치(700)를 나타내 보인 도면이다. 도 43을 참조하면, PIM 장치(700)는, 제1 메모리회로(710)와, 제2 메모리회로(720)와, 레프트 MAC 오퍼레이터(730(L))와, 라이트 MAC 오퍼레이터(730(R))와, 추가가산기(740)와, 출력회로(750)와, 그리고 클럭발생기(770)를 포함한다. 제1 메모리회로(710)는, 물리적으로 상호 구분되는 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))를 포함한다. 즉 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))는, 논리적으로 구분되는 메모리영역들과 구별될 수 있다. 제1 메모리회로(710)가 갖는 전체 메모리 크기는, 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 각각 균등하게 배분될 수 있다. 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))는, 각각 MAC 연산을 위한 레프트 웨이트데이터들(W(L)s) 및 라이트 웨이트데이터들(W(R)s)을 저장한다. 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))는, MAC 연산 동작을 제어하는 제어신호 입력에 응답하여 레프트 웨이트데이터들(W(L)s) 및 라이트 웨이트데이터들(W(R)s)을 각각 레프트 MAC 오퍼레이터(730(L)) 및 라이트 MAC 오퍼레이터(730(R))로 전송한다. 제2 메모리회로(720)은, 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)를 포함한다. 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)는, 각각 MAC 연산을 위한 레프트 벡터데이터들(V(L)s) 및 라이트 벡터데이터들(V(R)s)을 저장한다. 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)는, MAC 연산 동작을 제어하는 제어신호 입력에 응답하여 레프트 벡터데이터들(V(L)s) 및 라이트 벡터데이터들(V(R)s)을 각각 레프트 MAC 오퍼레이터(730(L)) 및 라이트 MAC 오퍼레이터(730(R))로 전송한다.
레프트 MAC 오퍼레이터(730(L))는, 레프트 곱셈회로(731(L)), 레프트 애더트리(732(L)), 및 레프트 누산기(733(L))를 포함한다. 레프트 곱셈회로(731(L))는, 레프트 메모리뱅크(710(L)) 및 제1 글로벌버퍼(721)로부터 각각 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)을 전송받는다. 레프트 곱셈회로(731(L))는, 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들(WV(L)s)을 생성 및 출력한다. 레프트 곱셈데이터들(WV(L)s)은, 레프트 애더트리(732(L))로 전송된다. 레프트 애더트리(732(L))는, 레프트 곱셈회로(731(L))로부터 전송되는 레프트 곱셈데이터들(WV(L)s)에 대한 가산 연산을 수행하여 레프트 곱셈가산데이터(D_MA(L))를 생성 및 출력한다. 레프트 누산기(733(L))는, 이전 연산 과정에서 래치된 래치 데이터와 레프트 애더트리(732(L))로부터 전송되는 레프트 곱셈가산데이터(D_MA(L))에 대한 누적연산을 수행하여 레프트 누적데이터(D_ACC(L))를 생성 및 출력시킨다. 레프트 누적데이터(D_ACC(L))는 추가가산기(740)로 전송된다.
라이트 MAC 오퍼레이터(730(R))는, 라이트 곱셈회로(731(R)), 라이트 애더트리(732(R)), 및 라이트 누산기(733(R))를 포함한다. 라이트 곱셈회로(731(R))는, 라이트 메모리뱅크(710(R)) 및 제2 글로벌버퍼(722)로부터 각각 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(R)s)을 전송받는다. 라이트 곱셈회로(731(R))는, 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(R)s)에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들(WV(R)s)을 생성 및 출력한다. 라이트 곱셈데이터들(WV(R)s)은, 라이트 애더트리(732(R))로 전송된다. 라이트 애더트리(732(R))는, 라이트 곱셈회로(731(R))로부터 전송되는 라이트 곱셈데이터들(WV(R)s)에 대한 가산 연산을 수행하여 라이트 곱셈가산데이터(D_MA(R))를 생성 및 출력한다. 라이트 누산기(733(R))는, 이전 연산 과정에서 래치된 래치 데이터와 라이트 애더트리(732(R))로부터 전송되는 라이트 곱셈가산데이터(D_MA(R))에 대한 누적연산을 수행하여 라이트 누적데이터(D_ACC(R))를 생성 및 출력시킨다. 라이트 누적데이터(D_ACC(R))는 추가가산기(740)로 전송된다.
추가가산기(740)는, 레프트 MAC 오퍼레이터(730(L))의 레프트 누산기(733(L))와 라이트 MAC 오퍼레이터(730(R))의 라이트 누산기(733(R))로부터 각각 전송되는 레프트 누적데이터(D_ACC(L)) 및 라이트 누적데이터(D_ACC(R))에 대한 가산연산을 수행한다. 추가가산기(740)는, 가산연산 결과 생성된 데이터를 누적데이터(D_ACC)로 출력시킨다. 누적데이터(D_ACC)는 출력회로(750)로 전송된다. 출력회로(750)는, 제1 로직레벨, 예컨대 하이레벨의 MAC결과 데이터리드신호(RD_MAC) 입력에 응답하여 누적데이터(D_ACC)를 최종 MAC 연산 결과인 MAC 결과 데이터(MAC_RST)로서 출력시킨다.
클럭발생기(770)는, PIM 장치(700)로 입력되는 기준클럭신호(CKR)를 기반으로 제1 클럭신호(CK1), 제2 클럭신호(CK2), 제3 클럭신호(CK3), 제4 클럭신호(CK4), 및 제5 클럭신호(CK5)를 생성하여 출력한다. 제1 클럭신호(CK1)는, 기준클럭신호(CKR)와 동일할 수 있다. 제2 클럭신호(CK2)는, 제1 클럭신호(CK1)의 홀수번째 펄스들과 동일한 펄스들을 갖는다. 제3 클럭신호(CK3)는, 제1 클럭신호(CK1)의 짝수번째 펄스들과 동일한 펄스들을 갖는다. 제4 클럭신호(CK4)는, 제2 클럭신호(CK2)의 펄스들로부터 일정 시간 지연되어 발생되는 펄스들을 갖는다. 제5 클럭신호(CK5)는, 제3 클럭신호(CK3)의 펄스들로부터 일정 시간 지연되어 발생되는 펄스들을 갖는다. 제4 클럭신호(CK4) 및 제5 클럭신호(CK5)가 갖는 지연시간은, 레프트 누산기(733(L)) 및 라이트 누산기(733(R)) 내에서의 누적연산처리에 소요되는 시간으로 설정될 수 있다. 제1 내지 제5 클럭신호들(CK1-CK5)은, 레프트 누산기(733(L)) 및 라이트 누산기(733(R))로 전송된다.
본 예에 따른 PIM 장치(700)에서, 레프트 곱셈회로(731(L)) 및 라이트 곱셈회로(731(R))는, 각각 도 40을 참조하여 설명한 곱셈회로(531)와 동일하게 구성될 수 있다. PIM 장치(700)의 레프트 애더트리(732(L)) 및 라이트 애더트리(732(R))는, 각각 도 40을 참조하여 설명한 애더트리(532)와 동일하게 구성될 수 있다. PIM 장치(700)의 레프트 누산기(733(L)) 및 라이트 누산기(733(R))는, 각각 도 30을 참조하여 설명한 누산기(400)와 동일하게 구성될 수 있다. 이에 따라 레프트 누산기(733(L)) 및 라이트 누산기(733(R))는, 각각 도 31 내지 도 38을 참조하여 설명한 누산기(400) 동작과 동일한 동작을 수행할 수 있다. 이 경우 레프트 누산기(733(L))에서의 레프트 곱셈가산데이터들(D_MA(L)s)은, 도 31 내지 도 38에서의 입력데이터들(D_INs)에 해당된다. 마찬가지로 라이트 누산기(733(R))에서의 라이트 곱셈가산데이터들(D_MA(R)s) 또한, 도 31 내지 도 38에서의 입력데이터들(D_INs)에 해당된다.
도 44는 도 43의 PIM 장치(700)의 MAC 연산에 의해 수행되는 매트릭스 곱셈의 일 예를 나타내 보인 도면이다. 도 44를 참조하면, PIM 장치(700)는, 웨이트매트릭스(weight matrix)(21)와 벡터매트릭스(vector matrix)(22)에 대한 매트릭스-벡터 곱셈을 수행하여 결과매트릭스(result matrix)(23)를 생성할 수 있다. 본 예에서는 웨이트매트릭스(21)가 1개의 행 및 512개의 열들을 갖고, 벡터매트릭스(22)가 512개의 행들 및 1개의 열을 가지며, 그리고 결과매트릭스(23)는 1개의 행 및 1개의 열을 갖는 경우를 예로 들기로 한다. 웨이트매트릭스(21)는, 512개의 웨이트데이터들(W1-W512)로 이루어지는 엘리먼트들을 갖는다. 벡터매트릭스(22)는, 512개의 벡터데이터들(V1-V512)로 이루어지는 엘리먼트들을 갖는다. 결과매트릭스(23)는, 1개의 MAC 결과데이터(MAC_RST)로 이루어지는 엘리먼트를 갖는다. 결과매트릭스(23)의 MAC 결과데이터(MAC_RST)는, 웨이트데이터들(W1-W512)과 벡터데이터들(V1-V512)에 대한 매트릭스-벡터 곱셈연산으로 생성된다. 일 예에서 웨이트데이터들(W1-W512) 및 벡터데이터들(V1-V512)은, 각각 IEEE 754 형식, 즉 32비트 단일-정밀도(single-precision)의 부동소수점 형식을 가질 수 있다.
도 45는 도 44의 웨이트데이터들(W1-W512)이 도 43의 PIM 장치(700)의 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 저장되는 방식을 설명하기 위해 나타내 보인 도면이다. 도 43을 참조하여 설명한 바와 같이, MAC 연산에 사용되는 웨이트데이터들(W1-W512)은, 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 나누어서 저장된다. 이하에서는 레프트 메모리뱅크(710(L))에 저장되는 웨이트데이터들을 "레프트 웨이트데이터들"로 지칭하고, 라이트 메모리뱅크(710(R))에 저장되는 웨이트데이터들을 "라이트 웨이트데이터들"로 지칭하기로 한다.
도 45를 참조하면, 도 44의 웨이트 매트릭스(21)의 웨이트데이터들(W1-W512)은, 단위연산크기(unit operation size) 단위로 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 균등하게 할당되어 배치된다. 단위연산크기는, PIM 장치(700)가 한 번의 MAC 연산을 수행할 수 있는 웨이트데이터들(또는 벡터데이터들)의 크기로 정의될 수 있다. 단위연산크기는, PIM 장치(700)를 구성하는 성분들(components)의 하드웨어 구성에 따라 결정될 수 있다. 이하에서는 단위연산크기가 512비트인 경우를 예로 들기로 한다. 이 경우, 웨이트데이터들 각각이 32비트 부동소수점 형식이므로, PIM 장치(700)가 한 번의 MAC 연산을 수행할 수 있는 웨이트데이터들은 16개가 된다. 이 경우 웨이트데이터들(W1-W512)은, 16개 단위로 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 균등하게 할당되어 배치된다.
구체적으로 첫번째 그룹의 16개, 즉 제1 내지 제16 웨이트데이터들(W1-W16)은, 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 균등하게 할당되어 저장된다. 즉 제1 내지 제8 웨이트데이터들(W1-W8)은 레프트 메모리뱅크(710(L))에 저장된다. 그리고 제9 내지 제16 웨이트데이터들(W9-W16)은 라이트 메모리뱅크(710(R))에 저장된다. 두번째 그룹의 16개, 즉 제17 내지 제32 웨이트데이터들(W17-W32) 또한, 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 균등하게 할당되어 저장된다. 즉 제17 내지 제24 웨이트데이터들(W17-W24)은 레프트 메모리뱅크(710(L))에 저장된다. 그리고 제25 내지 제32 웨이트데이터들(W25-W32)은 라이트 메모리뱅크(710(R))에 저장된다. 유사하게 32번째 그룹의 16개, 즉 제497 내지 제512 웨이트데이터들(W497-W512) 또한, 레프트 메모리뱅크(710(L)) 및 라이트 메모리뱅크(710(R))에 균등하게 할당되어 저장된다. 즉 제497 내지 제504 웨이트데이터들(W497-W504)은 레프트 메모리뱅크(710(L))에 저장된다. 그리고 제505 내지 제512 웨이트데이터들(W505-W512)은 라이트 메모리뱅크(710(R))에 저장된다.
도 46은 도 44의 벡터데이터들(V1-V512)이 도 43의 PIM 장치(700)의 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 저장되는 방식을 설명하기 위해 나타내 보인 도면이다. 도 46을 참조하면, 도 44의 벡터매트릭스(22)의 벡터데이터들(V1-V512)은, 단위연산크기 단위로 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 균등하게 할당되어 배치된다. 본 예에서 단위연산크기가 512비트인 것으로 전제하였으므로, 벡터데이터들(V1-V512)은, 16개 단위로 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 균등하게 할당되어 배치된다. 구체적으로 첫번째 그룹의 16개, 즉 제1 내지 제16 벡터데이터들(V1-V16)은, 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 균등하게 할당되어 저장된다. 즉 제1 내지 제8 벡터데이터들(V1-V8)은 제1 글로벌버퍼(721)에 저장된다. 그리고 제9 내지 제16 벡터데이터들(V9-V16)은 제2 글로벌버퍼(722)에 저장된다. 두번째 그룹의 16개, 즉 제17 내지 제32 벡터데이터들(V17-V32) 또한, 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 균등하게 할당되어 저장된다. 즉 제17 내지 제24 벡터데이터들(V17-V24)은 제1 글로벌버퍼(721)에 저장된다. 그리고 제25 내지 제32 벡터데이터들(V25-V32)은 제2 글로벌버퍼(722)에 저장된다. 유사하게 32번째 16개, 즉 제497 내지 제512 벡터데이터들(V497-V512) 또한, 제1 글로벌버퍼(721) 및 제2 글로벌버퍼(722)에 균등하게 할당되어 저장된다. 즉 제497 내지 제504 벡터데이터들(V497-V504)은 제1 글로벌버퍼(721)에 저장된다. 그리고 제505 내지 제512 벡터데이터들(V505-V512)은 제2 글로벌버퍼(722)에 저장된다.
도 47 내지 도 49는 도 43의 PIM 장치(700)가 도 44의 매트릭스곱셈에 따른 MAC 연산을 수행하는 과정을 설명하기 위해 나타내 보인 도면들이다. 본 예의 경우, 한 번의 MAC 연산이 16개의 웨이트데이터들 및 16개의 벡터데이터들에 대해 수행되므로, MAC 연산을 32번 반복 수행함으로써, 도 44의 결과 매트릭스(23)의 MAC 결과 데이터(MAC_RST)를 생성할 수 있다.
먼저 도 47을 참조하면, 32번의 MAC 연산들 중 첫번째 MAC 연산은, 첫번째 그룹의 16개의 웨이트데이터들(W1-W16) 및 첫번째 그룹의 16개의 벡터데이터들(V1-V16)에 대해 수행된다. 레프트 메모리뱅크(710(L))는 제1 내지 제8 웨이트데이터들(W1-W8)을 레프트 곱셈회로(731(L))로 제공한다. 라이트 메모리뱅크(710(R))는 제9 내지 제16 웨이트데이터들(W9-W16)을 라이트 곱셈회로(731(R))로 제공한다. 제1 글로벌버퍼(721)는 제1 내지 제8 벡터데이터들(V1-V8)을 레프트 곱셈회로(731(L))로 제공한다. 제2 글로벌버퍼(722)는 제9 내지 제16 벡터데이터들(V9-V16)을 라이트 곱셈회로(731(R))로 제공한다. 도 40을 참조하여 설명한 방식과 동일하게, 레프트 곱셈회로(731(L))는, 제1 내지 제8 웨이트데이터들(W1-W8) 및 제1 내지 제8 벡터데이터들(V1-V8)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제1 내지 제8 곱셈데이터들(WV1-WV8)을 레프트 애더트리(732(L))로 전송한다. 라이트 곱셈회로(731(R))는, 제9 내지 제16 웨이트데이터들(W9-W16) 및 제9 내지 제16 벡터데이터들(V9-V16)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제9 내지 제16 곱셈데이터들(WV9-WV16)을 라이트 애더트리(732(R))로 전송한다. 레프트 애더트리(732(L))는, 제1 내지 제8 곱셈데이터들(WV1-WV8)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제1 레프트 곱셈가산데이터(D_MA(L1))를 레프트 누산기(733(L))로 전송한다. 라이트 애더트리(732(R))는, 제9 내지 제16 곱셈데이터들(WV9-WV16)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제1 라이트 곱셈가산데이터(D_MA(R1))를 라이트 누산기(733(R))로 전송한다. 레프트 누산기(733(L)) 및 라이트 누산기(733(R))에서의 누적연산 과정은 아래에서 보다 상세하게 설명하기로 한다.
다음에 도 48을 참조하면, 32번의 MAC 연산들 중 두번째 MAC 연산은, 두번째 그룹의 16개의 웨이트데이터들(W17-W32) 및 첫번째 그룹의 16개의 벡터데이터들(V17-V32)에 대해 수행된다. 레프트 메모리뱅크(710(L))는 제17 내지 제24 웨이트데이터들(W17-W24)을 레프트 곱셈회로(731(L))로 제공한다. 라이트 메모리뱅크(710(R))는 제25 내지 제32 웨이트데이터들(W25-W32)을 라이트 곱셈회로(731(R))로 제공한다. 제1 글로벌버퍼(721)는 제17 내지 제24 벡터데이터들(V17-V24)을 레프트 곱셈회로(731(L))로 제공한다. 제2 글로벌버퍼(722)는 제25 내지 제32 벡터데이터들(V25-V32)을 라이트 곱셈회로(731(R))로 제공한다. 도 40을 참조하여 설명한 방식과 동일하게, 레프트 곱셈회로(731(L))는, 제17 내지 제24 웨이트데이터들(W17-W24) 및 제17 내지 제24 벡터데이터들(V17-V24)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제17 내지 제24 곱셈데이터들(WV17-WV24)을 레프트 애더트리(732(L))로 전송한다. 라이트 곱셈회로(731(R))는, 제25 내지 제32 웨이트데이터들(W25-W32) 및 제25 내지 제32 벡터데이터들(V25-V32)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제25 내지 제32 곱셈데이터들(WV25-WV32)을 라이트 애더트리(732(R))로 전송한다. 레프트 애더트리(732(L))는, 제17 내지 제24 곱셈데이터들(WV17-WV24)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제2 레프트 곱셈가산데이터(D_MA(L2))를 레프트 누산기(733(L))로 전송한다. 라이트 애더트리(732(R))는, 제25 내지 제32 곱셈데이터들(WV25-WV32)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제2 라이트 곱셈가산데이터(D_MA(R2))를 라이트 누산기(733(R))로 전송한다.
다음에 도 49를 참조하면, 도 48 및 도 49를 참조하여 설명한 MAC 연산이 모두 31번 수행되면, 32번째 그룹의 16개의 웨이트데이터들(W497-W512) 및 32번째 그룹의 16개의 벡터데이터들(V497-V512)에 대한 32번째 MAC 연산이 수행된다. 레프트 메모리뱅크(710(L))는 제497 내지 제504 웨이트데이터들(W497-W504)을 레프트 곱셈회로(731(L))로 제공한다. 라이트 메모리뱅크(710(R))는 제505 내지 제512 웨이트데이터들(W505-W512)을 라이트 곱셈회로(731(R))로 제공한다. 제1 글로벌버퍼(721)는 제497 내지 제504 벡터데이터들(V497-V504)을 레프트 곱셈회로(731(L))로 제공한다. 제2 글로벌버퍼(722)는 제505 내지 제512 벡터데이터들(V505-V512)을 라이트 곱셈회로(731(R))로 제공한다. 도 40을 참조하여 설명한 방식과 동일하게, 레프트 곱셈회로(731(L))는, 제497 내지 제504 웨이트데이터들(W497-W504) 및 제497 내지 제504 벡터데이터들(V497-V504)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제497 내지 제504 곱셈데이터들(WV497-WV504)을 레프트 애더트리(732(L))로 전송한다. 라이트 곱셈회로(731(R))는, 제505 내지 제512 웨이트데이터들(W505-W512) 및 제505 내지 제512 벡터데이터들(V505-V512)에 대한 곱셈연산을 수행하고, 그 결과로 생성되는 제505 내지 제512 곱셈데이터들(WV505-WV512)을 라이트 애더트리(732(R))로 전송한다. 레프트 애더트리(732(L))는, 제497 내지 제504 곱셈데이터들(WV497-WV504)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제2 레프트 곱셈가산데이터(D_MA(L2))를 레프트 누산기(733(L))로 전송한다. 라이트 애더트리(732(R))는, 제505 내지 제512 곱셈데이터들(WV505-WV512)에 대한 가산연산을 수행하고, 그 결과로 생성되는 제2 라이트 곱셈가산데이터(D_MA(R2))를 라이트 누산기(733(R))로 전송한다.
도 50은 도 43의 PIM 장치(700)에서 레프트 누산기(733(L)) 및 라이트 누산기(733(R)) 내의 데이터 입력 타이밍을 나타내 보인 타이밍도이다. 본 예에서 제2 클럭신호(CK1)(즉 기준클럭신호(CKR))는, 메모리회로(도 43의 710)로 컬럼어드레스들이 인가되는 시간간격인 카스-투-카스 딜레이(CAS-to-CAS Delay; 이하 tCCD)와 동일한 주기를 갖는 것으로 전제하기로 한다. 그리고 레프트 곱셈회로(731(L))/레프트 애더트리(732(L))와 라이트 곱셈회로(731(R))/라이트 애더트리(731(R)) 각각에서의 곱셈연산 및 가산연산을 수행하는데 소요되는 시간은 tCCD보다 같거나 작은 것으로 전제하기로 한다.
도 50을 참조하면, PIM 장치(700)에서 32번의 MAC 연산들이 수행되는 과정에서, 레프트 누산기(733(L))는, 레프트 애더트리(732(L))로부터 제1 내지 제32 레프트 곱셈가산데이터들(D_MA(L1)-D_MA(L32))을 tCCD 간격으로 순차적으로 전송받는다. 마찬가지로 라이트 누산기(733(R))는, 라이트 애더트리(732(R))로부터 제1 내지 제32 라이트 곱셈가산데이터들(D_MA(R1)-D_MA(R32))을 tCCD 간격으로 순차적으로 전송받는다. 레프트 누산기(733(L))의 제1 입력래치는, 제1 클럭신호(CK1)의 펄스들 각각에 동기되어 tCCD 간격으로 제1 내지 제32 레프트 곱셈가산데이터들(D_MA(L1)-D_MA(L32))을 순차적으로 출력시킨다. 마찬가지로 라이트 누산기(733(R))의 제1 입력래치는, 제1 클럭신호(CK1)의 펄스들 각각에 동기되어 tCCD 간격으로 제1 내지 제32 라이트 곱셈가산데이터들(D_MA(R1)-D_MA(R32))을 순차적으로 출력시킨다.
제1 내지 제5 클럭신호(CK1-CK5)들이 도 6을 참조하여 설명한 바와 같이 제공되면, 레프트 누산기(733(L))는, 도 31 및 도 32를 참조하여 설명한 바와 동일하게 입력데이터들, 즉 제1 내지 제32 레프트 곱셈가산데이터들(D_MA(L1)-D_MA(L32))의 홀수번째 레프트 곱셈가산데이터들이 합산된 오드 누적데이터와 짝수번째 레프트 곱셈가산데이터들이 합산된 이븐 누적데이터를 생성한다. 그리고 도 33 내지 도 38을 참조하여 설명한 방식으로 오드 누적데이터와 이븐 누적데이터가 합산된 레프트 누적데이터(D_ACC(L))를 생성 및 출력시킨다. 마찬가지로 라이트 누산기(733(R))는, 입력데이터들, 즉 제1 내지 제32 라이트 곱셈가산데이터들(D_MA(R1)-D_MA(R32))의 홀수번째 라이트 곱셈가산데이터들이 합산된 오드 누적데이터와 짝수번째 라이트 곱셈가산데이터들이 합산된 이븐 누적데이터를 생성한다. 레프트 누산기(733(L)) 및 라이트 누산기(733(R))는, 각각 도 33 내지 도 38을 참조하여 설명한 방식으로 오드 누적데이터와 이븐 누적데이터가 합산된 레프트 누적데이터(D_ACC(L)) 및 라이트 누적데이터(D_ACC(R))를 생성 및 출력시킬 수 있다. 이 경우, 선택출력기(도 33 내지 도 38의 440)로 전송되는 선택신호(SS)로 MAC결과 데이터리드신호(RD_MAC)의 로직레벨이 하이레벨로 변경되기 전에 활성화되는 MAC결과 데이터리드 인에이블신호(RD_MAC_EN)가 사용될 수 있다.
도 51은 본 개시의 또 다른 예에 따른 PIM 장치(800)를 나타내 보인 도면이다. 도 51을 참조하면 PIM 장치(800)는, 제1 메모리회로(710)와, 제2 메모리회로(720)와, 레프트 곱셈 및 가산 회로(830(L))와, 라이트 곱셈 및 가산 회로(830(R))와, 가산기(835)와, 누산기(840)와, 출력회로(750)와, 그리고 클럭발생기(770)를 포함한다. 본 예에 따른 PIM 장치(800)의 제1 메모리회로(710), 제2 메모리회로(720), 출력회로(750), 및 클럭발생기(770)는, 각각 도 43을 참조하여 설명한 PIM 장치(700)의 제1 메모리회로(710), 제2 메모리회로(720), 출력회로(750), 및 클럭발생기(770)와 동일하게 구성될 수 있으며, 이하에서 중복되는 설명은 생략하기로 한다.
도 51을 참조하면, 레프트 곱셈 및 가산 회로(830(L))는, 레프트 곱셈회로(831(L)) 및 레프트 애더트리(832(L))를 포함한다. 레프트 곱셈회로(831(L))는, 레프트 메모리뱅크(710(L)) 및 제1 글로벌버퍼(721)로부터 각각 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)을 전송받는다. 레프트 곱셈회로(831(L))는, 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들(WV(L)s)을 생성 및 출력한다. 레프트 곱셈데이터들(WV(L)s)은, 레프트 애더트리(832(L))로 전송된다. 레프트 애더트리(832(L))는, 레프트 곱셈회로(831(L))로부터 전송되는 레프트 곱셈데이터들(WV(L)s)에 대한 가산 연산을 수행하여 레프트 곱셈가산데이터(D_MA(L))를 생성하고, 생성된 레프트 곱셈가산데이터(D_MA(L))를 가산기(835)로 전송시킨다.
라이트 곱셈 및 가산 회로(830(R))는, 라이트 곱셈회로(831(R)) 및 라이트 애더트리(832(R))를 포함한다. 라이트 곱셈회로(831(R))는, 라이트 메모리뱅크(710(R)) 및 제2 글로벌버퍼(722)로부터 각각 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(R)s)을 전송받는다. 라이트 곱셈회로(831(R))는, 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(L)s)에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들(WV(R)s)을 생성 및 출력한다. 라이트 곱셈데이터들(WV(R)s)은, 라이트 애더트리(832(R))로 전송된다. 라이트 애더트리(832(R))는, 라이트 곱셈회로(831(R))로부터 전송되는 라이트 곱셈데이터들(WV(R)s)에 대한 가산 연산을 수행하여 라이트 곱셈가산데이터(D_MA(R))를 생성하고, 생성된 라이트 곱셈가산데이터(D_MA(R))를 가산기(835)로 전송시킨다.
가산기(835)는, 레프트 곱셈 및 가산 회로(830(L))의 레프트 애더트리(832(L))로부터 레프트 곱셈가산데이터(D_MA(L))를 전송받는다. 또한 가산기(835)는, 라이트 곱셈 및 가산 회로(830(R))의 라이트 애더트리(832(R))로부터 라이트 곱셈가산데이터(D_MA(R))를 전송받는다. 가산기(835)는, 레프트 곱셈가산데이터(D_MA(L)) 및 라이트 곱셈가산데이터(D_MA(R))에 대한 가산연산을 수행하여 곱셈가산데이터(D_MA)를 생성한다. 가산기(835)는, 생성된 곱셈가산데이터(D_MA)를 누산기(840)로 전송시킨다.
누산기(840)는, 가산기(835)로부터 전송되는 곱셈가산데이터(D_MA)와 이전 연산 과정에서 래치된 래치 데이터에 대한 누적연산을 수행하여 누적데이터(D_ACC)를 생성 및 출력시킨다. 누적데이터(D_ACC)는 출력회로(750)로 전송된다. 누산기(840)는, 도 30을 참조하여 설명한 누산기(도 4의 400)와 동일하게 구성될 수 있다. 도 45 및 도 46을 참조하여 설명한 예에서와 같이, PIM 장치(800)에서 32번의 MAC 연산들이 수행되는 과정에서, 누산기(840)는, 가산기(835)로부터 제1 내지 제32 곱셈가산데이터들(D_MAs)을 순차적으로 전송받는다. 누산기(840)의 제1 입력래치는, 제1 클럭신호(CK1)의 펄스들 각각에 동기되어 제1 내지 제32 곱셈가산데이터들(D_MAs) 각각을 순차적으로 출력시킨다.
제1 내지 제5 클럭신호(CK1-CK5)들이 도 6을 참조하여 설명한 바와 같이 제공되면, 누산기(840)는, 도 31 및 도 32를 참조하여 설명한 바와 동일하게 입력데이터들, 즉 제1 내지 제32 곱셈가산데이터들(D_MAs)의 홀수번째 레프트 곱셈가산데이터들이 합산된 오드 누적데이터와 짝수번째 레프트 곱셈가산데이터들이 합산된 이븐 누적데이터를 생성한다. 그리고 도 33 내지 도 38을 참조하여 설명한 방식으로 오드 누적데이터와 이븐 누적데이터가 합산된 누적데이터(D_ACC)를 생성 및 출력시킨다. 이 경우, 선택출력기(도 33 내지 도 38의 440)로 전송되는 선택신호(SS)로 MAC결과 데이터리드신호(RD_MAC)의 로직레벨이 하이레벨로 변경되기 전에 활성화되는 MAC결과 데이터리드 인에이블신호(RD_MAC_EN)가 사용될 수 있다.
도 52는 본 개시의 또 다른 예에 따른 PIM 장치(900)를 나타내 보인 도면이다. 도 52를 참조하면 PIM 장치(900)는, 제1 메모리회로(710)와, 제2 메모리회로(720)와, 곱셈 및 가산 회로(930)와, 누산기(940)와, 출력회로(750)와, 그리고 클럭발생기(770)를 포함한다. 본 예에 따른 PIM 장치(800)의 제1 메모리회로(710), 제2 메모리회로(720), 출력회로(750), 및 클럭발생기(770)는, 각각 도 43을 참조하여 설명한 PIM 장치(700)의 제1 메모리회로(710), 제2 메모리회로(720), 출력회로(750), 및 클럭발생기(770)와 동일하게 구성될 수 있으며, 이하에서 중복되는 설명은 생략하기로 한다.
곱셈 및 가산 회로(930)는, 제1 메모리회로(710) 및 제2 메모리회로(720)으로부터 각각 제공되는 웨이트데이터들(W(L)s, W(R)s)과 벡터데이터들(V(L)s, V(R)s)에 대한 곱셈연산 및 가산연산을 수행하여 곱셈가산데이터(D_MA)를 생성하여 출력한다. 곱셈 및 가산 회로(930)는, 레프트 곱셈회로(931(L)), 라이트 곱셈회로(931(R)), 및 통합 애더트리(932)를 포함한다. 레프트 곱셈회로(931(L))는, 레프트 메모리뱅크(710(L)) 및 제1 글로벌버퍼(721)로부터 각각 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)을 전송받는다. 레프트 곱셈회로(931(L))는, 레프트 웨이트데이터들(W(L)s) 및 레프트 벡터데이터들(V(L)s)에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들(WV(L)s)을 생성 및 출력한다. 라이트 곱셈회로(931(R))는, 라이트 메모리뱅크(710(R)) 및 제2 글로벌버퍼(722)로부터 각각 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(R)s)을 전송받는다. 라이트 곱셈회로(931(R))는, 라이트 웨이트데이터들(W(R)s) 및 라이트 벡터데이터들(V(R)s)에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들(WV(R)s)을 생성하여 출력한다. 레프트 곱셈데이터들(WV(L)s) 및 라이트 곱셈데이터들(WV(R)s)은, 통합 애더트리(932)로 전송된다. 통합 애더트리(932)는, 레프트 곱셈회로(931(L)) 및 라이트 곱셈회로(931(R))로부터 각각 전송되는 레프트 곱셈데이터들(WV(L)s) 및 라이트 곱셈데이터들(WV(R)s)에 대한 가산 연산을 수행하여 곱셈가산데이터(D_MA)를 생성 및 출력한다. 누산기(940)는, 곱셈 및 가산 회로(730)로부터 전송되는 곱셈가산데이터(D_MA)와 이전 연산 과정에서 래치된 래치 데이터에 대한 누적연산을 수행하여 누적데이터(D_ACC)를 생성 및 출력시킨다. 누산기(940)는, 도 51을 참조하여 설명한 PIM 장치(800)의 누산기(840)와 동일하게 구성될 수 있다.
도 53은 본 개시의 또 다른 예에 따른 PIM 장치(1000)를 나타내 보인 블록도이다. 도 53을 참조하면, 본 예에 따른 PIM 장치(1000)는, 메모리/연산회로(1010) 및 주변회로(1020)을 포함한다. 메모리/연산회로(1010)는 복수의 메모리뱅크들(BKs) 및 복수의 MAC 오퍼레이터들(MACs)을 포함한다. 주변회로(1020)는 제1 글로벌버퍼(1021), 제2 글로벌 버퍼(1022), 및 클럭 분배기(1070)를 포함한다. 도면에 나타내지는 않았지만, 주변회로(1020) 내에는 데이터입출력회로가 배치될 수 있다. 본 예에서, 복수의 메모리뱅크들(BKs)은, 제1 내지 제16 메모리뱅크들(BK0-BK15)을 포함하는 것을 전제하기로 한다. 또한 복수의 MAC 오퍼레이트들(MACs)은, 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)을 포함하는 것을 전제하기로 한다.
제1 내지 제16 메모리뱅크들(BK0-BK16) 각각은, 레프트영역에 배치되는 제1 내지 제16 레프트 메모리뱅크들(BK0(L)-BK15(L))과, 라이트영역에 배치되는 제1 내지 제16 라이트 메모리뱅크들(BK0(R)-BK15(R))로 나누어진다. 예컨대 1 메모리뱅크(BK0)는, 레프트영역에 배치되는 제1 레프트 메모리뱅크(BK0(L)) 및 라이트영역에 배치되는 제1 라이트 메모리뱅크(BK0(R))를 포함한다. 제2 메모리뱅크(BK1)는, 레프트영역에 배치되는 제2 레프트 메모리뱅크(BK1(L)) 및 라이트영역에 배치되는 제2 라이트 메모리뱅크(BK1(R))를 포함한다. 유사하게 제16 메모리뱅크(BK15)는, 레프트영역에 배치되는 제16 레프트 메모리뱅크(BK15(L)) 및 라이트영역에 배치되는 제16 라이트 메모리뱅크(BK15(R))를 포함한다. 본 예에서 제1 내지 제16 레프트 메모리뱅크들(BK0(L)-BK15(L)) 각각과 제1 내지 제16 라이트 메모리뱅크들(BK0(R)-BK15(R)) 각각은, 상호 인접하여 배치된다. 예컨대 제1 레프트 메모리뱅크(BK0(L)) 및 제1 라이트 메모리뱅크(BK0(R))는, 예컨대 로우 디코더(row decoder)를 공유하면서 상호 인접하게 배치된다. 제2 레프트 메모리뱅크(BK1(L)) 및 제2 라이트 메모 뱅크(BK1(R)) 또한 상호 인접하게 배치된다. 유사하게 제16 레프트 메모리뱅크(BK15(L)) 및 제16 라이트 메모리뱅크(BK15(R))도 상호 인접하게 배치된다.
일 예에서 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 도 43을 참조하여 설명한 레프트 MAC 오퍼레이터(도 43의 730(L)) 및 라이트 MAC 오퍼레이터(도 43의 730(R))를 포함할 수 있다. 다른 예에서 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 도 51을 참조하여 설명한 레프트 곱셈 및 가산 회로(830(L)), 라이트 곱셈 및 가산 회로(830(R)), 가산기(835), 및 누산기(840)를 포함할 수 있다. 또 다른 예에서, 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 도 52를 참조하여 설명한 곱셈 가산 회로(930) 및 누산기(940)를 포함할 수 있다.
제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 제1 내지 제16 메모리뱅크들(BK0-BK15) 각각에 할당되어 배치된다. 예컨대 제1 MAC 오퍼레이터(MAC0)는, 제1 레프트 메모리뱅크(BK0(L)) 및 제1 라이트 메모리뱅크(BK0(R))에 할당된다. 제2 MAC 오퍼레이터(MAC1)는, 제2 레프트 메모리뱅크(BK1(L)) 및 제2 라이트 메모리뱅크(BK1(R))에 할당된다. 마찬가지로 제16 MAC 오퍼레이터(MAC15)는, 제16 레프트 메모리뱅크(BK15(L)) 및 제16 라이트 메모 뱅크(BK15(R))에 할당된다. 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15) 각각은, 할당되는 메모리뱅크(BK)와 함께 하나의 MAC 유닛(MU)을 구성한다. 예컨대 도면에 나타낸 바와 같이, 제1 레프트 메모리뱅크(BK0(L)), 제1 라이트 메모리뱅크(BK0(R)), 및 제1 MAC 오퍼레이터(MAC0)는, 제1 MAC 유닛(MU0)을 구성한다. 도면에 생략하였지만, 나머지 제2 내지 제16 MAC 유닛들 각각도 동일한 방식으로 구성된다. 하나의 MAC 유닛을 구성하는 MAC 오퍼레이터는, 그 MAC 유닛을 구성하는 레프트 메모리뱅크 및 라이트 메모리뱅크로부터, 각각 레프트 웨이트데이터들 및 라이트 웨이트데이터들을 전송받는다. 이에 따라 제1 MAC 오퍼레이터(MAC0)는, 제1 레프트 메모리뱅크(BK0(L)) 및 제1 라이트 메모리뱅크(BK0(R))로부터 각각 레프트 웨이트데이터들 및 라이트 웨이트데이터들을 전송받는다.
제1 글로벌버퍼(1021)는, 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)의 각각으로 레프트 벡터데이터들을 전송한다. 제2 글로벌버퍼(1022)는, 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)의 각각으로 라이트 벡터데이터들을 전송한다. 클럭 분배기(1070)는, 외부에서 전송되는 기준클럭신호(CKR)를 분배하여 제1 내지 제5 클럭신호들(CK1-CK5)을 출력시킨다. 제1 내지 제5 클럭신호들(CK1-CK5)은, 도 6을 참조하여 설명한 바와 동일하게 구성될 수 있다. 제1 내지 제5 클럭신호들(CK1-CK5)은, 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15) 각각의 누산기로 제공된다.
도 54는 도 53의 PIM 장치(1000)의 MAC 연산에 의해 수행되는 매트릭스 곱셈의 일 예를 나타내 보인 도면이다. 도 54를 참조하면, PIM 장치(1000)는, (M×N)("M" 및 "N"은 2 이상의 자연수) 웨이트매트릭스(31) 및 (N×1) 벡터매트릭스(32)에 대한 매트릭스곱셈에 따른 MAC 연산을 수행한다. 용어 "매트릭스 곱셈연산" 및 "MAC 연산"은 동일한 의미로 사용된다. PIM 장치(1000)는, MAC 연산 결과 (M×1) 결과 매트릭스(33)를 생성하여 출력한다. 이하에서는 하나의 예로서, 웨이트매트릭스(31)가 512개의 행들(R(1)-R(512)) 및 512개의 열들(C(1)-C(512))을 갖고, 벡터매트릭스(32)는 512개의 행들(R(1)-R(512)) 및 1개의 열(C(1))을 갖는 것을 전제하기로 한다. 웨이트매트릭스(31) 및 벡터매트릭스(32)에 대한 매트릭스 곱셈 결과 생성되는 결과매트릭스(33)는, 512개의 행들(R(1)-R(512)) 및 1개의 열(C(1))을 갖는다. 웨이트매트릭스(31)는, 엘리먼트들로서 262,144개의 웨이트데이터들(W1.1-W1.512, …, W512.1-W512.512)을 갖는다. 벡터메트릭스(32)는, 엘리먼트들로서 512개의 벡터데이터들(V(1)-V(512))을 갖는다. MAC 연산 결과 생성되는 결과 매트릭스(33)는, 엘리먼트들로서 512개의 MAC 결과데이터들(MAC_RST(1)-MAC_RST(512))을 갖는다.
본 예에 따른 PIM 장치(1000)는, 복수의 메모리뱅크들(BKs) 및 복수의 MAC 오퍼레이터들(MACs)을 포함하므로, 복수의 MAC 오퍼레이터들(MACs) 각각에서의 MAC 연산이 동시에 수행되도록 할 수 있다. 구체적으로 PIM 장치(1000)의 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 웨이트매트릭스(31)의 512개 행들 중 제1 행 내지 제16 행의 웨이트데이터들(W(1.1)-W(1.512), …, W(16.1)-W(16.512))과 벡터데이터들(V(1)-V(512))에 대한 제1 MAC 연산을 수행하여 제1 내지 제16 MAC 결과데이터들(MAC_RST(1)-MAC_RST(16))을 생성하여 출력한다. 이어서 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15)은, 각각 웨이트매트릭스(31)의 제17 행 내지 제32 행의 웨이트데이터들(W(17.1)-W(17.512), …, W(32.1)-W(32.512))과 벡터데이터들(V(1)-V(512))에 대한 제2 MAC 연산을 수행하여 제17 내지 제32 MAC 결과데이터들(MAC_RST(17)-MAC_RST(32))을 생성하여 출력한다. 동일한 방식으로 제3 내지 제32 MAC 연산을 수행하게 되면, 제33 내지 제512 MAC 결과데이터들(MAC_RST(33)-MAC_RST(512))이 생성되어 출력된다. 이 과정에서 제1 내지 제16 MAC 오퍼레이터들(MAC0-MAC15) 각각의 누산기에서 수행되는 누적연산은, 도 31 내지 도 38을 참조하여 설명한 과정과 동일하게 수행될 수 있다.
이제까지 본 출원 기술에 대하여 실시예들을 중심으로 살펴보았다. 본 출원 기술이 속하는 기술분야에서 통상의 지식을 가진 자는 본 출원 기술이 본 출원 기술의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 출원 기술의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 출원 기술에 포함된 것으로 해석되어야 할 것이다.
100...누산기 110...입력래치회로
111...제1 입력래치 112...제2 입력래치
113...제3 입력래치 120...누적회로
130...출력래치회로 131...제1 출력래치
132...제2 출력래치

Claims (67)

  1. 입력데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 누산기.
  2. 제1항에 있어서,
    상기 제1 입력래치는, 상기 입력데이터를 입력받는 입력단자와, 제1 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제1 입력단자에 결합되는 출력단자를 포함하고, 상기 제1 클럭신호에 동기되어 상기 입력데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  3. 제2항에 있어서,
    상기 제2 입력래치는, 상기 오드 래치데이터를 입력받는 입력단자와, 제2 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제2 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  4. 제3항에 있어서,
    상기 제3 입력래치는, 상기 이븐 래치데이터를 입력받는 입력단자와, 제3 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 상기 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제3 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  5. 제4항에 있어서,
    상기 제2 클럭신호는, 상기 제1 클럭신호의 홀수번째 펄스와 동일한 펄스를 갖도록 구성되고, 그리고
    상기 제3 클럭신호는, 상기 제1 클럭신호의 짝수번째 펄스와 동일한 펄스를 갖도록 구성되는 누산기.
  6. 제5항에 있어서,
    상기 누적회로는, 상기 오드 누적데이터를 출력하는 제1 출력단자와, 상기 이븐 누적데이터를 출력하는 제2 출력단자를 포함하고, 그리고
    상기 누적회로의 제1 출력단자는 상기 제1 출력래치의 입력단자에 결합되고, 상기 누적회로의 제2 출력단자는 상기 제2 출력래치의 입력단자에 결합되는 누산기.
  7. 제6항에 있어서,
    상기 입력데이터는 제1 부호비트, 제1 지수비트들, 및 제1 가수비트들로 구성되는 부동소수점 형식이고,
    상기 오드 래치데이터 및 이븐 래치데이터는, 각각 제2 부호비트, 제2 지수비트들, 및 제2 가수비트들로 구성되는 부동소수점 형식이고,
    상기 오드 누적데이터 및 이븐 누적데이터는, 각각 제3 부호비트, 제3 지수비트들, 및 제3 가수비트들로 구성되는 부동소수점 형식이며, 그리고
    상기 누적회로는,
    상기 입력래치회로로부터 전송되는 상기 제1 지수비트들 및 상기 제2 지수비트들에 대한 지수연산처리를 수행하여 최대 지수비트들, 제1 시프트비트들, 및 제2 시프트비트들을 생성하여 출력하는 지수처리회로;
    상기 제1 가수비트들 및 상기 제2 가수비트들에 대한 가수연산처리를 수행하여, 상기 제3 부호비트 및 중간 가수가산비트들을 생성하여 출력하는 가수처리회로; 및
    상기 최대 지수비트들, 상기 중간 가수가산비트들, 및 상기 제3 부호비트를 이용한 정규화처리를 수행하여 상기 제3 지수비트들 및 상기 제3 가수비트들을 생성하여 출력하는 정규화기를 포함하는 누산기.
  8. 제7항에 있어서, 상기 지수처리회로는,
    상기 제1 지수비트들로부터 상기 제2 지수비트들을 빼는 감산연산을 수행하여 지수감산비트들을 생성하여 상기 지수감산비트들의 최상위비트 및 하위비트들을 출력하는 지수감산회로;
    상기 지수감산회로로부터 출력되는 상기 하위비트들에 대한 2의 보수비트들을 생성하여 출력하는 2의 보수회로;
    상기 지수감산회로로부터 출력되는 최상위비트의 값에 따라 "0" 또는 상기 지수감산비트들의 상기 하위비트들을 상기 제1 시프트비트들로서 출력하는 제1 선택출력기;
    상기 지수감산회로로부터 출력되는 최상위비트의 값에 따라 상기 하위비트들에 대한 2의 보수비트들 또는 "0"을 상기 제2 시프트비트들로서 출력하는 제2 선택출력기; 및
    상기 지수감산회로로부터 출력되는 최상위비트의 값에 따라 상기 제1 지수비트들 또는 제2 지수비트들을 상기 최대 지수비트들로서 출력하는 제3 선택출력기를 포함하는 누산기.
  9. 제8항에 있어서, 상기 지수감산기는,
    상기 제2 지수비트들에 대한 2의 보수비트들을 생성하여 출력하는 2의 보수회로;
    상기 제2 지수비트들에 대한 2의 보수비트들과 상기 제1 지수비트들을 가산하여, 상기 지수감산비트들의 최상위비트 및 하위비트들을 출력하는 지수가산기; 및
    상기 최상위비트에 따라 값이 결정되는 상기 부호비트를 생성하여 출력하는 지수비교회로를 포함하는 누산기.
  10. 제9항에 있어서,
    상기 지수비교회로는, 상기 최상위비트가 "0인 경우 상기 부호비트로서 "1"을 출력하고, 상기 최상위비트가 "1"인 경우 상기 부호비트로서 "0"을 출력하는 누산기.
  11. 제8항에 있어서,
    상기 부호비트가 "0"인 경우, 상기 제1 선택출력기, 상기 제2 선택출력기, 및 상기 제3 선택출력기는, 상기 제1 시프트비트들, 상기 제2 시프트비트들, 및 상기 최대 지수비트들로서 각각 "0", 상기 지수감산비트들의 하위데이터들에 대한 2의 보수비트들, 및 상기 제1 지수비트들을 출력하며, 그리고
    상기 부호비트가 "1"인 경우, 상기 제1 선택출력기, 상기 제2 선택출력기, 및 상기 제3 선택출력기는, 상기 제1 시프트비트들, 상기 제2 시프트비트들, 및 상기 최대 지수비트들로서 각각 상기 지수감산비트들의 하위데이터들, "0", 및 상기 제2 지수비트들을 출력하는 누산기.
  12. 제7항에 있어서, 상기 가수처리회로는,
    상기 제1 가수비트들 및 제2 가수비트들에 대한 음수처리를 수행하여 제1 중간 가수비트들 및 제2 중간 가수비트들을 출력하는 음수처리회로;
    상기 제1 시프트비트들이 갖는 절대값에 대응하는 비트 수만큼 상기 제1 중간 가수비트들을 시프트시켜 제3 중간 가수비트들을 생성하여 출력하고, 상기 제2 시프트비트들이 갖는 절대값에 대응하는 비트 수만큼 상기 제2 중간 가수비트들을 시프트시켜 제4 중간 가수비트들을 생성하여 출력하는 시프트회로; 및
    상기 제1 부호비트, 상기 제2 부호비트, 상기 제3 중간 가수비트들, 및 상기 제4 중간 가수비트들을 전송받아 상기 제3 부호비트 및 상기 중간 가수가산 비트들을 생성하여 출력하는 가수가산회로를 포함하는 누산기.
  13. 제12항에 있어서, 상기 음수처리회로는,
    상기 제1 가수비트들의 2의 보수비트들을 출력하는 제1 2의 보수회로;
    상기 제2 가수비트들의 2의 보수비트들을 출력하는 제2 2의 보수회로;
    상기 제1 부호비트의 값에 따라 상기 제1 가수비트들 또는 상기 제1 가수비트들의 2의 보수비트들을 상기 제1 중간 가수비트들로서 출력하는 제1 선택출력기; 및
    상기 제2 부호비트의 값에 따라 상기 제1 가수비트들의 2의 보수비트들 또는 상기 제2 가수비트들을 상기 제2 중간 가수비트들로서 출력하는 제2 선택출력기를 포함하는 누산기.
  14. 제13항에 있어서,
    상기 제1 선택출력기는, 상기 제1 부호비트가 "0"인 경우 상기 제1 가수비트들을 출력하고, 상기 제1 부호비트가 "1"인 경우 상기 제1 가수비트들의 2의 보수비트들을 출력하며, 그리고
    상기 제2 선택출력기는, 상기 제2 부호비트가 "0"인 경우 상기 제2 가수비트들을 출력하고, 상기 제2 부호비트가 "1"인 경우 상기 제2 가수비트들의 2의 보수비트들을 출력하는 누산기.
  15. 제12항에 있어서, 상기 시프트회로는,
    상기 제1 시프트비트들 및 상기 제1 중간 가수비트들을 전송받아, 상기 제3 중간 가수비트들을 생성하여 출력하는 제1 가수시프터; 및
    상기 제2 시프트비트들 및 상기 제2 중간 가수비트들을 전송받아, 상기 제4 중간 가수비트들을 생성하여 출력하는 제2 가수시프터를 포함하는 누산기.
  16. 제12항에 있어서, 상기 가수가산회로는,
    상기 제3 중간 가수비트들 및 상기 제4 중간 가수비트들을 더하여 가수가산비트들을 생성하여 출력하고, 상기 제1 부호비트, 상기 제2 부호비트, 및 상기 가수가산비트들에 의해 결정되는 상기 제3 부호비트를 생성하여 출력하는 가수가산기;
    상기 가수가산비트들이 2의 보수비트들을 생성하여 출력하는 2의 보수회로; 및
    상기 제3 부호비트의 값에 따라 상기 가수가산비트들 또는 상기 가수가산비트들이 2의 보수비트들을 상기 중간 가수가산비트들로서 출력하는 선택출력기를 포함하는 누산기.
  17. 제16항에 있어서, 상기 가수가산기는,
    상기 제1 부호비트 및 상기 제2 부호비트가 모두 "0"인 경우, 상기 제3 부호비트로서 "0"을 출력하고,
    상기 제1 부호비트 및 상기 제2 부호비트가 모두 "1"인 경우, 상기 제3 부호비트로서 "1"을 출력하며, 그리고
    상기 제1 부호비트 및 상기 제2 부호비트 중 하나는 "0"이고, 나머지가 "1"인 경우, 상기 제3 중간 가수비트들 및 상기 제4 중간 가수비트들의 가산연산 결과에 자리올림이 발생되면 상기 제3 부호비트로서 "0"을 출력하고, 자리올림이 발생되지 않으면 상기 제3 부호비트로서 "1"을 출력하는 누산기.
  18. 제16항에 있어서,
    상기 선택출력기는, 상기 제3 부호비트가 "0"인 경우 상기 가수가산비트들을 상기 중간 가수가산비트들로서 출력하고, 상기 제3 부호비트가 "1"인 경우 상기 가수가산비트들의 2의 보수비트들을 상기 중간 가수가산비트들로서 출력하는 누산기.
  19. 제7항에 있어서, 상기 정규화기는,
    상기 중간 가수가산비트들의 최좌측비트로부터 우측방향으로 "1"을 갖는 비트가 최초로 위치하는 장소를 검출하고, 검출결과로서 제3 시프트비트들을 생성하여 출력하는 "1" 검출회로;
    상기 제3 시프트비트들이 갖는 값에 대응하는 비트 수만큼 상기 중간 가수가산비트들을 시프트시키어 상기 제3 가수비트들을 생성 및 출력하는 가수시프터; 및
    상기 최대 지수비트들 및 상기 제3 시프트비트들을 가산하여 상기 제3 지수비트들을 생성 및 출력하는 지수가산기를 포함하는 누산기.
  20. 제6항에 있어서,
    상기 제1 출력래치는, 상기 오드 누적데이터를 입력받는 입력단자와, 제4 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 제2 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제4 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 제2 입력래치로 전송하도록 구성되는 누산기.
  21. 제20항에 있어서,
    상기 제2 출력래치는, 상기 이븐 누적데이터를 입력받는 입력단자와, 제5 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 제3 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제5 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 제3 입력래치로 전송하도록 구성되는 누산기.
  22. 제21항에 있어서,
    상기 제4 클럭신호는, 상기 제2 클럭신호보다 지연시간만큼 지연되어 발생되는 펄스들로 구성되고, 그리고
    상기 제5 클럭신호는, 상기 제3 클럭신호보다 상기 지연시간만큼 지연되어 발생되는 펄스들로 구성되는 누산기.
  23. 제22항에 있어서,
    상기 지연시간은, 상기 누적회로에서의 연산처리에 소요되는 시간으로 설정되는 누산기.
  24. 제21항에 있어서,
    상기 제4 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제3 클럭신호를 구성하는 펄스들 각각의 하강에지에 동기되고, 그리고
    상기 제5 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제2 클럭신호를 구성하는 펄스들 중 첫번째 펄스를 제외한 나머지 펄스들 각각의 하강에지에 동기되는 누산기.
  25. 제21항에 있어서,
    상기 제2 클럭신호, 제3 클럭신호, 제4 클럭신호, 및 제5 클럭신호는, 각각 상기 제1 클럭신호의 주기의 2배인 주기를 갖는 누산기.
  26. 제1항에 있어서,
    상기 제1 입력래치는, 클럭신호의 펄스들 각각에 동기되어 입력데이터들 각각을 상기 누적회로의 제1 입력단자로 전송하고,
    상기 제2 입력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 홀수번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 오드 래치데이터들 각각을 상기 누적회로의 제2 입력단자로 전송하며, 그리고
    상기 제3 입력래치는, 상기 클럭신호의 짝수번째 펄스들 중 첫번째 짝수번째 펄스를 제외한 나머지 짝수번째 펄스들 각각에 동기되어 이븐 래치데이터들 각각을 상기 누적회로의 상기 제2 입력단자로 전송하는 누산기.
  27. 제26항에 있어서,
    상기 누적회로는, 상기 클럭신호의 짝수번째 펄스들 각각에 동기되어 오드 누적데이터들 각각을 상기 제1 출력래치로 전송하고, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 이븐 누적데이터들 각각을 상기 제2 출력래치로 전송하는 누산기.
  28. 제27항에 있어서,
    상기 제1 출력래치는, 상기 클럭신호의 짝수번째 펄스들 각각으로부터 지연시간만큼 늦은 시점에 오드 래치데이터들 각각을 상기 제2 입력래치로 전송하고, 그리고
    상기 제2 출력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스로부터 상기 지연시간만큼 늦은 시점에 이븐 래치데이터들 각각을 상기 제3 입력래치로 전송하는 누산기.
  29. 입력데이터를 래치하여 출력하는 제1 입력래치와, 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로;
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로; 및
    상기 제1 출력래치로부터 출력되는 오드 래치데이터들 중 마지막 오드 래치데이터와, 상기 제2 출력래치로부터 출력되는 이븐 래치데이터들 중 마지막 이븐 래치데이터를 가산하여 누적데이터를 출력하는 추가가산기를 포함하는 누산기.
  30. 제29항에 있어서,
    상기 제1 입력래치는, 상기 입력데이터를 입력받는 입력단자와, 제1 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제1 입력단자에 결합되는 출력단자를 포함하고, 상기 제1 클럭신호에 동기되어 상기 입력데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  31. 제30항에 있어서,
    상기 제2 입력래치는, 상기 오드 래치데이터를 입력받는 입력단자와, 제2 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제2 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  32. 제31항에 있어서,
    상기 제3 입력래치는, 상기 이븐 래치데이터를 입력받는 입력단자와, 제3 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 상기 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제3 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  33. 제32항에 있어서,
    상기 제2 클럭신호는, 상기 제1 클럭신호의 홀수번째 펄스와 동일한 펄스를 갖도록 구성되고, 그리고
    상기 제3 클럭신호는, 상기 제1 클럭신호의 짝수번째 펄스와 동일한 펄스를 갖도록 구성되는 누산기.
  34. 제33항에 있어서,
    상기 누적회로는, 상기 오드 누적데이터를 출력하는 제1 출력단자와, 상기 이븐 누적데이터를 출력하는 제2 출력단자를 포함하고, 그리고
    상기 누적회로의 제1 출력단자는 상기 제1 출력래치의 입력단자에 결합되고, 상기 누적회로의 제2 출력단자는 상기 제2 출력래치의 입력단자에 결합되는 누산기.
  35. 제34항에 있어서,
    상기 제1 출력래치는, 상기 오드 누적데이터를 입력받는 입력단자와, 제4 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 제2 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제4 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 제2 입력래치로 전송하도록 구성되는 누산기.
  36. 제35항에 있어서,
    상기 제2 출력래치는, 상기 이븐 누적데이터를 입력받는 입력단자와, 제5 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 제3 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제5 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 제3 입력래치로 전송하도록 구성되는 누산기.
  37. 제36항에 있어서,
    상기 제4 클럭신호는, 상기 제2 클럭신호보다 지연시간만큼 지연되어 발생되는 펄스들로 구성되고, 그리고
    상기 제5 클럭신호는, 상기 제3 클럭신호보다 상기 지연시간만큼 지연되어 발생되는 펄스들로 구성되는 누산기.
  38. 제37항에 있어서,
    상기 지연시간은, 상기 누적회로에서의 연산처리에 소요되는 시간으로 설정되는 누산기.
  39. 제36항에 있어서,
    상기 제4 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제3 클럭신호를 구성하는 펄스들 각각의 하강에지에 동기되고, 그리고
    상기 제5 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제2 클럭신호를 구성하는 펄스들 중 첫번째 펄스를 제외한 나머지 펄스들 각각의 하강에지에 동기되는 누산기.
  40. 제36항에 있어서,
    상기 제2 클럭신호, 제3 클럭신호, 제4 클럭신호, 및 제5 클럭신호는, 각각 상기 제1 클럭신호의 주기의 2배인 주기를 갖는 누산기.
  41. 제29항에 있어서,
    상기 제1 입력래치는, 클럭신호의 펄스들 각각에 동기되어 입력데이터들 각각을 상기 누적회로의 제1 입력단자로 전송하고,
    상기 제2 입력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 홀수번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 오드 래치데이터들 각각을 상기 누적회로의 제2 입력단자로 전송하며, 그리고
    상기 제3 입력래치는, 상기 클럭신호의 짝수번째 펄스들 중 첫번째 짝수번째 펄스를 제외한 나머지 짝수번째 펄스들 각각에 동기되어 이븐 래치데이터들 각각을 상기 누적회로의 상기 제2 입력단자로 전송하는 누산기.
  42. 제41항에 있어서,
    상기 누적회로는, 상기 클럭신호의 짝수번째 펄스들 각각에 동기되어 오드 누적데이터들 각각을 상기 제1 출력래치로 전송하고, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 이븐 누적데이터들 각각을 상기 제2 출력래치로 전송하는 누산기.
  43. 제42항에 있어서,
    상기 제1 출력래치는, 상기 클럭신호의 짝수번째 펄스들 각각으로부터 지연시간만큼 늦은 시점에 오드 래치데이터들 각각을 상기 제2 입력래치로 전송하고, 그리고
    상기 제2 출력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스로부터 상기 지연시간만큼 늦은 시점에 이븐 래치데이터들 각각을 상기 제3 입력래치로 전송하는 누산기.
  44. 제29항에 있어서,
    상기 마지막 오드 래치데이터는, 상기 입력데이터들 중 홀수번째 입력데이터들이 모두 가산된 데이터이고, 그리고
    상기 마지막 이븐 래치데이터는, 상기 입력데이터들 중 짝수번째 입력데이터들이 모두 가산된 데이터인 누산기.
  45. 입력데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 누산기.
  46. 제45항에 있어서, 상기 선택출력기는,
    상기 입력데이터를 전송받는 제1 입력단자;
    상기 제2 입력래치의 입력단자에 결합되어 상기 오드 래치데이터를 전송받는 제2 입력단자;
    상기 제1 입력래치의 입력단자에 결합되어 상기 선택데이터를 출력하는 출력단자; 및
    상기 입력데이터 및 상기 오드 래치데이터 중 하나가 상기 선택데이터로 선택되도록 하는 선택신호를 전송받는 선택단자를 포함하는 누산기.
  47. 제46항에 있어서,
    상기 제1 입력래치는, 상기 선택출력기의 출력단자와 결합되어 상기 선택데이터를 입력받는 입력단자와, 제1 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제1 입력단자에 결합되는 출력단자를 포함하고, 상기 제1 클럭신호에 동기되어 상기 선택데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  48. 제47항에 있어서,
    상기 제2 입력래치는, 상기 오드 래치데이터를 입력받는 입력단자와, 제2 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제2 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  49. 제48항에 있어서,
    상기 제3 입력래치는, 상기 이븐 래치데이터를 입력받는 입력단자와, 제3 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 누적회로의 상기 제2 입력단자에 결합되는 출력단자를 포함하고, 상기 제3 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 누적회로로 전송하도록 구성되는 누산기.
  50. 제49항에 있어서,
    상기 제2 클럭신호는, 상기 제1 클럭신호의 홀수번째 펄스와 동일한 펄스를 갖도록 구성되고, 그리고
    상기 제3 클럭신호는, 상기 제1 클럭신호의 짝수번째 펄스와 동일한 펄스를 갖도록 구성되는 누산기.
  51. 제50항에 있어서,
    상기 제2 입력래치는, 상기 제2 입력래치로부터 N개(N은 자연수)의 오드 래치데이터들 중 (N-1)번째 오드 래치데이터가 출력된 이후에 리셋상태가 되도록 구성되는 누산기.
  52. 제51항에 있어서,
    상기 선택출력기는, 상기 선택신호의 제1 로직레벨에서 상기 입력데이터를 출력시키고 상기 선택신호의 제2 로직레벨에서 상기 오드 래치데이터를 출력시키되, 상기 제1 출력래치로부터 N번째 오드 래치데이터의 출력이 완료되는 시점에 상기 선택신호의 로직레벨은 상기 제1 로직레벨에서 상기 제2 로직레벨로 변경되는 누산기.
  53. 제52항에 있어서,
    상기 누적회로는, 상기 오드 누적데이터를 출력하는 제1 출력단자와, 상기 이븐 누적데이터를 출력하는 제2 출력단자를 포함하고, 그리고
    상기 누적회로의 제1 출력단자는 상기 제1 출력래치의 입력단자에 결합되고, 상기 누적회로의 제2 출력단자는 상기 제2 출력래치의 입력단자에 결합되는 누산기.
  54. 제53항에 있어서,
    상기 제1 출력래치는, 상기 오드 누적데이터를 입력받는 입력단자와, 제4 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 선택출력기의 제2 입력단자 및 상기 제2 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제4 클럭신호에 동기되어 상기 오드 래치데이터를 상기 출력단자를 통해 상기 선택출력기의 제2 입력단자 및 상기 제2 입력래치의 입력단자로 전송하도록 구성되는 누산기.
  55. 제54항에 있어서,
    상기 제2 출력래치는, 상기 이븐 누적데이터를 입력받는 입력단자와, 제5 클럭신호를 입력받는 클럭입력단자와, 그리고 상기 제3 입력래치의 입력단자에 결합되는 출력단자를 포함하고, 상기 제5 클럭신호에 동기되어 상기 이븐 래치데이터를 상기 출력단자를 통해 상기 제3 입력래치로 전송하도록 구성되는 누산기.
  56. 제55항에 있어서,
    상기 제4 클럭신호는, 상기 제2 클럭신호보다 지연시간만큼 지연되어 발생되는 펄스들로 구성되고, 그리고
    상기 제5 클럭신호는, 상기 제3 클럭신호보다 상기 지연시간만큼 지연되어 발생되는 펄스들로 구성되는 누산기.
  57. 제55항에 있어서,
    상기 지연시간은, 상기 누적회로에서의 연산처리에 소요되는 시간으로 설정되는 누산기.
  58. 제55항에 있어서,
    상기 제4 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제3 클럭신호를 구성하는 펄스들 각각의 하강에지에 동기되고, 그리고
    상기 제5 클럭신호를 구성하는 펄스들 각각의 상승에지는, 상기 제2 클럭신호를 구성하는 펄스들 중 첫번째 펄스를 제외한 나머지 펄스들 각각의 하강에지에 동기되는 누산기.
  59. 제56항에 있어서,
    상기 제2 클럭신호, 제3 클럭신호, 제4 클럭신호, 및 제5 클럭신호는, 각각 상기 제1 클럭신호의 주기의 2배인 주기를 갖는 누산기.
  60. 제45항에 있어서,
    상기 제1 입력래치는, 클럭신호의 펄스들 각각에 동기되어 선택데이터들 각각을 상기 누적회로의 제1 입력단자로 전송하고,
    상기 제2 입력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 홀수번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 오드 래치데이터들 각각을 상기 누적회로의 제2 입력단자로 전송하며, 그리고
    상기 제3 입력래치는, 상기 클럭신호의 짝수번째 펄스들 중 첫번째 짝수번째 펄스를 제외한 나머지 짝수번째 펄스들 각각에 동기되어 이븐 래치데이터들 각각을 상기 누적회로의 상기 제2 입력단자로 전송하는 누산기.
  61. 제62항에 있어서,
    상기 누적회로는, 상기 클럭신호의 짝수번째 펄스들 각각에 동기되어 오드 누적데이터들 각각을 상기 제1 출력래치로 전송하고, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스들 각각에 동기되어 이븐 누적데이터들 각각을 상기 제2 출력래치로 전송하는 누산기.
  62. 제61항에 있어서,
    상기 제1 출력래치는, 상기 클럭신호의 짝수번째 펄스들 각각으로부터 지연시간만큼 늦은 시점에 오드 래치데이터들 각각을 상기 선택출력기의 제2 입력단자 및 상기 제2 입력래치의 입력단자로 전송하고, 그리고
    상기 제2 출력래치는, 상기 클럭신호의 홀수번째 펄스들 중 첫번째 펄스를 제외한 나머지 홀수번째 펄스로부터 상기 지연시간만큼 늦은 시점에 이븐 래치데이터들 각각을 상기 제3 입력래치로 전송하는 누산기.
  63. 제1 입력데이터들 및 제2 입력데이터들에 대한 곱셈연산을 수행하여 곱셈데이터들을 출력하는 곱셈회로;
    상기 곱셈데이터들에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 애더트리; 및
    상기 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함하되,
    상기 누산기는,
    상기 곱셈가산데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 MAC 오퍼레이터.
  64. 웨이트 데이터들 및 벡터 데이터들을 제공하는 메모리 회로;
    상기 웨이트 데이터들 및 벡터 데이터들에 대한 곱셈연산을 수행하여 곱셈데이터들을 출력하는 곱셈회로;
    상기 곱셈데이터들에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 애더트리; 및
    상기 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함하되,
    상기 누산기는,
    상기 곱셈가산데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 PIM 장치.
  65. 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로;
    레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로;
    상기 레프트 웨이트데이터들 및 상기 레프트 벡터데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로;
    상기 레프트 곱셈데이터들에 대한 가산연산을 수행하여 레프트 곱셈가산데이터를 출력하는 레프트 애더트리;
    상기 레프트 곱셈가산데이터와 레프트 래치데이터에 대한 누적연산을 수행하는 레프트 누산기;
    상기 라이트 웨이트데이터들 및 상기 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로;
    상기 라이트 곱셈데이터들에 대한 가산연산을 수행하여 라이트 곱셈가산데이터를 출력하는 라이트 애더트리;
    상기 라이트 곱셈가산데이터와 라이트 래치데이터에 대한 누적연산을 수행하는 라이트 누산기를 포함하되,
    상기 레프트 누산기 및 라이트 누산기 각각은,
    곱셈가산데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 PIM 장치.
  66. 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로;
    레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로;
    상기 레프트 웨이트데이터들 및 상기 레프트벡터 데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로;
    상기 레프트 곱셈데이터들에 대한 가산연산을 수행하여 레프트 곱셈가산데이터를 출력하는 레프트 애더트리;
    상기 라이트 웨이트데이터들 및 상기 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로;
    상기 라이트 곱셈데이터들에 대한 가산연산을 수행하여 라이트 곱셈가산데이터를 출력하는 라이트 애더트리;
    상기 레프트 곱셈가산데이터 및 상기 라이트 곱셈가산데이터에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 가산기; 및
    상기 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함하되,
    상기 누산기는,
    곱셈가산데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 PIM 장치.
  67. 레프트 웨이트데이터들을 제공하는 레프트 메모리뱅크와 라이트 웨이트데이터들을 제공하는 라이트 메모리뱅크를 포함하는 제1 메모리회로;
    레프트 벡터데이터들을 제공하는 제1 글로벌버퍼와 라이트 벡터데이터들을 제공하는 제2 글로벌버퍼를 포함하는 제2 메모리회로;
    상기 레프트 웨이트데이터들 및 상기 레프트 벡터데이터들에 대한 곱셈연산을 수행하여 레프트 곱셈데이터들을 출력하는 레프트 곱셈회로;
    상기 라이트 웨이트데이터들 및 상기 라이트 벡터데이터들에 대한 곱셈연산을 수행하여 라이트 곱셈데이터들을 출력하는 라이트 곱셈회로;
    상기 레프트 곱셈데이터들 및 상기 라이트 곱셈데이터들에 대한 가산연산을 수행하여 곱셈가산데이터를 출력하는 통합 애더트리; 및
    상기 곱셈가산데이터와 래치데이터에 대한 누적연산을 수행하는 누산기를 포함하되,
    상기 누산기는,
    곱셈가산데이터 및 오드 래치데이터 중 선택된 하나의 선택데이터를 출력하는 선택출력기;
    상기 선택출력기로부터 전송되는 선택데이터를 래치하여 출력하는 제1 입력래치와, 상기 오드 래치데이터를 래치하여 출력하는 제2 입력래치와, 그리고 이븐 래치데이터를 래치하여 출력하는 제3 입력래치를 포함하는 입력래치회로;
    상기 입력래치회로로부터 출력되는 상기 입력데이터 및 상기 오드 래치데이터를 가산하여 오드 누적데이터를 출력하고, 상기 입력데이터 및 상기 이븐 래치데이터를 가산하여 이븐 누적데이터를 출력하는 누적회로; 및
    상기 누적가산기로부터 출력되는 상기 오드 누적데이터를 래치하여 상기 오드 래치데이터를 출력하는 제1 출력래치와, 상기 누적가산기로부터 출력되는 상기 이븐 누적데이터를 래치하여 상기 이븐 래치데이터를 출력하는 제2 출력래치를 포함하는 출력래치회로를 포함하는 PIM 장치.
KR1020210169849A 2021-12-01 2021-12-01 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치 KR20230082173A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020210169849A KR20230082173A (ko) 2021-12-01 2021-12-01 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치
US17/835,562 US20230168862A1 (en) 2021-12-01 2022-06-08 Accumulator for high operating speed, operational logic circuit and processing-in-memory device including the same
CN202210836192.4A CN116225368A (zh) 2021-12-01 2022-07-15 用于高运算速度的累加器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210169849A KR20230082173A (ko) 2021-12-01 2021-12-01 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치

Publications (1)

Publication Number Publication Date
KR20230082173A true KR20230082173A (ko) 2023-06-08

Family

ID=86500005

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210169849A KR20230082173A (ko) 2021-12-01 2021-12-01 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치

Country Status (3)

Country Link
US (1) US20230168862A1 (ko)
KR (1) KR20230082173A (ko)
CN (1) CN116225368A (ko)

Also Published As

Publication number Publication date
CN116225368A (zh) 2023-06-06
US20230168862A1 (en) 2023-06-01

Similar Documents

Publication Publication Date Title
CN107301453B (zh) 支持离散数据表示的人工神经网络正向运算装置和方法
US4754421A (en) Multiple precision multiplication device
CN107301454B (zh) 支持离散数据表示的人工神经网络反向训练装置和方法
JP3589719B2 (ja) 算術演算の結果として生じる正および負のオーバーフローのハードウェアによる効率的な取り扱い方法
CN110751277B (zh) 运算电路、包括该运算电路的运算装置和系统
JPH01201764A (ja) 神経回路網およびその回路網に用いる回路
JPH04293151A (ja) 並列データ処理方式
JPH07248841A (ja) 非線形関数発生装置およびフォーマット変換装置
WO2017177442A1 (zh) 支持离散数据表示的人工神经网络正向运算装置和方法
US5367477A (en) Method and apparatus for performing parallel zero detection in a data processing system
US20220188604A1 (en) Method and Apparatus for Performing a Neural Network Operation
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
CN110580519A (zh) 一种卷积运算结构及其方法
JP7435602B2 (ja) 演算装置および演算システム
KR20230082173A (ko) 높은 동작 속도를 위한 누산기, 이를 포함하는 연산 로직 회로, 및 프로세싱-인-메모리 장치
WO2021168644A1 (zh) 数据处理装置、电子设备和数据处理方法
US5010509A (en) Accumulator for complex numbers
EP0474246A2 (en) Image signal processor
US20240143277A1 (en) Artificial intelligence accelerators
US20220374690A1 (en) Artificial intelligence accelerators
US8332447B2 (en) Systems and methods for performing fixed-point fractional multiplication operations in a SIMD processor
US20240152322A1 (en) Artificial intelligence accelerators
JP2022074442A (ja) 演算装置および演算方法
US7386583B2 (en) Carry generator based on XOR, and conditional select adder using the carry generator, and method therefor
KR20200011019A (ko) 연산 회로, 이를 포함하는 연산 장치 및 시스템