KR20010020446A - 신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로 - Google Patents

신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로 Download PDF

Info

Publication number
KR20010020446A
KR20010020446A KR1019997010077A KR19997010077A KR20010020446A KR 20010020446 A KR20010020446 A KR 20010020446A KR 1019997010077 A KR1019997010077 A KR 1019997010077A KR 19997010077 A KR19997010077 A KR 19997010077A KR 20010020446 A KR20010020446 A KR 20010020446A
Authority
KR
South Korea
Prior art keywords
input
bit
inputs
vector
data
Prior art date
Application number
KR1019997010077A
Other languages
English (en)
Other versions
KR100336266B1 (ko
Inventor
체르니코프블라디미르미카일로비치
비크스네파벨예프게녜비치
포민드미트리빅토로비치
쉐브첸코파벨알렉산드로비치
야프라코프미카일페도로비치
Original Assignee
보리소프 유리 아이.
조인트-스톡 컴파니 리서치 센터 (모듈)
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 보리소프 유리 아이., 조인트-스톡 컴파니 리서치 센터 (모듈) filed Critical 보리소프 유리 아이.
Publication of KR20010020446A publication Critical patent/KR20010020446A/ko
Application granted granted Critical
Publication of KR100336266B1 publication Critical patent/KR100336266B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Neurology (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Nitrogen And Oxygen Or Sulfur-Condensed Heterocyclic Ring Systems (AREA)

Abstract

본 발명은 컴퓨터 사이언스에 관련된 것이며 신경 네트웍 에뮬레이션과 실시간 디지털 신호 처리에 사용될 수 있다. 신경 프로세서 성능을 증가시키는 것은 프로그램 모드에서 결과들의 워드 길이를 변화할 수 있는 능력에 의해 얻어진다. 신 경 프로세서는 프로그램 가능한 워드 길이 데이터의 벡터들에 대한 연산들을 수행하기 위한 여섯 개의 레지스터들, 하나의 시프트 레지스터, 하나의 AND 게이트, 두 개의 FIFO들, 하나의 스위치, 하나의 멀티플렉서, 두 개의 포화 유니트들, 하나의 계산 유니트 및 하나의 가산 회로를 포함한다. 포화 유니트의 성능을 증가시키는 것은 프로그램 가능한 워드 길이를 가지고 입력 오퍼랜드들을 동시에 처리하는 능력에 의해 얻어진다. 상기 유니트는 올림수 예견 회로 하나 및 올림수 전달 회로 하나를 포함하며 또한 각 비트에는 두 개의 멀티플렉서들, 하나의 EXCLUSIVE OR 게이트, 하나의 EQUIVALENCE 게이트, 하나의 NAND 게이트 및 각 비트에 반전된 입력을 가지는 하나의 AND 게이트를 포함한다. 계산 유니트의 기능성은 확대된다. 계산 유니트는 하나의 지연 소자, 반전된 입력을 가지는 N/2개의 AND 게이트들, 곱셈기 비트들의 N/2개의 디코더들, 각 비트는 반전된 입력을 가지는 하나의 AND 게이트, 하나의 멀티플렉서 및 하나의 트리거로 구성된 N비트 시프트 레지스터 한 개 및 그들 각각은 두 개의 트리거들, 반전된 입력을 가지는 하나의 AND 게이트, 일 비트(one-bit) 부분곱 생성 회로 하나, 일 비트 가산기 하나 및 하나의 멀티플렉서로 구성된 N열 곱하기 N/2 셀들을 포함한다. 가산기 회로의 성능을 증가시키는 것은 프로그램 가능한 워드 길이들의 입력 오퍼랜드들의 두 벡터들을 더하는 능력에 의해 얻어진다. 가산기 회로는 올림수 예견 회로를 포함하며, 각 비트에는 반전된 입력을 가지는 두 개의 AND 게이트들, 하나의 반가산기 및 하나의 EXCLUSIVE OR 게이트를 포함한다.

Description

신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로{Neural processor, saturation unit, calculation unit and adder circuit}
신경 프로세서(neural processor)는 [Principle Direction of Hardware Development of Neural Network Algorithms Implementation /Y.P. Ivanov and others (These of reports of the Second Russian Conference <<Neural Computers And Their Applications>>, Moscow, 14 February, 1996)// Neurocomputer. - 1996.- No1,2. - pp.47-49]에서 알려져 있는데, 입력 데이터 레지스터 하나와 네 개의 신경 단위들을 포함하며, 그들 각각은 한 개의 쉬프트 레지스터, 한 개의 가중(weight) 계수 레지스터, 여덟 개의 곱셈기, 한 개의 다중 오퍼랜드 덧셈(summation) 회로 및 임계 함수 계산을 위한 한 개의 블록으로 구성된다.
그러한 신경 프로세서는 매 클럭 사이클내에 입력 데이터값과 그들의 가중 계수들의 실제 범위에 상관없이 고정된 개수의 신경들을 위해 고정된 입력 데이터 양의 가중된 덧셈을 수행한다. 이런 경우에 모든 가중 계수만이 아니라 모든 입력 데이터는 고정된 워드 길이의 오퍼랜드의 모습으로 존재하는데, 이 워드 길이는 신경 프로세서 하드웨어 유니트들의 비트 길이로 정해진다.
가장 근접한 것은 [미국 특허 No.5278945, U.S.Cl. 395/27, 1994]의 신경 프로세서인데, 이것은 세 개의 레지스터들, 하나의 멀티플렉서, 하나의 FIFO, 모여진 결과를 더하는 것을 이용하여 프로그램가능한 워드 길이 데이터의 두 개 벡터들의 내적을 계산하기 위한 하나의 계산 유니트 및 비선형 유니트를 포함한다.
입력 데이터 벡터들과 그들의 가중 계수들은 그러한 신경 프로세서의 입력들로 인가된다. 매 클럭 사이클내에 신경 프로세서는 입력 데이터 벡터를 가중 계수 벡터와 내적하는 계산을 통하여 하나의 신경을 위하여 여러개의 입력 데이터에 가중된 덧셈을 수행한다. 덧붙여 신경 프로세서는 벡터들을 처리하는 것을 지원하는데, 그 벡터들의 각각의 성분들의 워드 길이는 프로그램 모드의 고정된 값들의 집합에서 선택될 수 있을 것이다. 입력 데이타의 워드 길이와 가중 계수들을 줄이면 각각의 벡터에서 그들의 개수는 늘어날 것이고 그러면 신경 프로세서의 성능은 향상된다. 그러나, 얻어진 결과들의 워드 길이는 고정된 것이며 신경 프로세서 하드웨어 유니트들의 비트 길이에 의해 결정된 것이다.
포화 영역의 포화를 위한, 숫자의 절대값에 의해 결정되는, 디지털 유니트는 [SU, No. 690477, Int. Cl. G06F 7/38, 1979]에서 알려졌는데, 세 개의 레지스터들, 하나의 가산기, 두 개의 코드 변환기, 부호 분석 블록 두 개, 하나의 교정(correction) 블록, 두 개의 AND 게이트들의 그룹들과 하나의 OR 게이트들 그룹을 포함한다. 그런 유니트는 2N 클럭 주기마다 N개 입력 오퍼랜드들과 함께 벡터를 위한 포화 함수를 계산하게 한다.
가장 근접한 것은 [미국 특허 No. 5644519, U.S. Cl. 364/736.02, 1997]의 포화 유니트인데, 이 포화 유니트는 하나의 멀티플렉서, 하나의 비교기 및 포화를 나타내는 두 개의 표시기를 포함한다. 그러한 유니트는 N 주기마다 N개 입력 오퍼랜드들과 함께 벡터를 위한 포화 함수를 계산하도록 한다.
[미국 특허 No. 4825401, U.S. Cl. 395/27, 1994]으로 알려진 계산 유니트는 곱셈기들, 가산기들, 레지스터들, 하나의 곱셈기와 하나의 FIFO를 포함한다. 상기 유니트는 하나의 클럭 주기마다 각각 M 오퍼랜드들을 포함하는 두 개의 벡터들의 내적을 계산하며 N 주기마다 N × M 오퍼랜드들을 포함한 행렬에 M 오퍼랜드들을 포함하는 벡터를 곱하도록 한다.
가장 가까운 것은 [미국 특허 No. 4825401, U.S.Cl. 364/760, 1989]의 계산 유니트인테, 이 유니트는 3N/2 AND 게이트들, 부스(Booth) 알고리즘에 기반한 곱셈기를 디코딩하는 N/2 디코더들, 곱셈을 위한 N/2 셀(cell)들이 곱해지는 N 행들의 셀(cell) 열(array) 한 개(이때 각 셀은 부스의 알고리즘에 기반한 부분곱의 한 비트를 생성하는 회로 및 일 비트 가산기를 포함한다), 하나의 2N 비트 가산기, N/2 멀티플렉서들, 부스 알고리즘에 기반한 부분곱의 일 비트를 생성하는 N/2 부가 회로들 및 N/2 임플리케이터(implicator)들을 포함한다. 상기 유니트는 한 클럭 주기마다 두 개의 N 비트 오퍼랜드들을 곱하게 하거나 두 개의 N/2 비트 오퍼랜드들의 성분들로 구성된 두 개의 벡터들을 곱하도록 한다.
프로그램 가능한 워드 길이 오퍼랜드들을 이용하여 벡터들을 더하는 유니트는 [미국 특허 No. 5047975, U.S. Cl. 364/786, 1991]로 알려져 있는데, 이 유니트는 반전된 입력을 가진 가산기들 및 AND 게이트들을 포함한다.
가장 근접한 것은 [미국 특허 No. 4675837, U.S. Cl. 364/788, 1987]의 가산기인데, 이 가산기는 하나의 자리 올림 로직 및 그의 모든 비트에 반 가산기 및 EXCLUSIVE OR 게이트를 포함한다. 상기 가산기는 각 N 주기마다 N 오퍼랜드들을 가진 두 개의 벡터들을 더하게 한다.
본 발명은 컴퓨터 사이언스의 분야에 관련된 것이며 신경 네트웍 에뮬레이션과 실시간 디지털 신호 처리에 사용될 수 있다.
도 1은 신경 프로세서의 블록 다이아그램이다.
도 2는 포화 유니트의 기능을 도시한 것이다.
도 3은 신경 프로세거에 의해 에뮬레이터되는 신경 네트웍 계층의 모델이다.
도 4는 계산 유니트의 블록 다이아그램이다.
도 5는 프로그램 가능한 워드 길이 데이터 벡터들의 포화 유니트의 블록 다이아그램이다.
도 6은 표화 유니트에 적용될 수 있는 올림수 예견 회로의 블록 다이아그램이다.
도 7은 계산 유니트의 블록 다이아그램이다.
도 8은 계산 유니트에 부스의 알고리즘에 기반하여 적용된 곱셈기 비트들의 디코더와 일 비트 부분곱 생성 회로의 전형적인 구현예를 도시한 것이다.
도 9는 프로그램 가능한 워드 길이 데이터 벡터들의 가산기 회로의 블록 다이아그램이다.
신경 프로세서는 첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째 및 여섯 번째 레지스터, 하나의 시프트 레지스터, 하나의 AND 게이트, 첫 번째와 두 번째 FIFO, 첫 번째와 두 번째 포화 영역들, 하나의 계산 회로를 포함하며,
첫 번째 오퍼랜드 벡터 비트들의 입력들, 두 번째 오퍼랜드 벡터 비트들의 입력들, 세 번째 오퍼랜드 벡터 비트들의 입력들, 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 두 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 세 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 세 번째 오퍼랜드 벡터들을 첫 번째 메모리 블록으로 로드하는 제어의 첫 번째와 두 번째 입력들, 첫 번째 메모리 블록으로부터 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력 및 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과의 첫 번째와 두 번째 피가수(summand) 벡터의 비트들의 출력들을 포함하며,
3-입력 2-출력 스위치의 비트들의 첫 번째 데이터 입력들, 첫 번째 FIFO의 데이터 입력들, 첫 번째, 세 번째와 네 번째 레지스터들의 데이터 입력들 및 시프트 레지스터의 병행한 데이터 입력들은 비트마다 짝지어서 신경 프로세서의 첫 번째 입력 버스의 각 비트들에 연결되며,
신경 프로세서에서 두 번째 입력 버스의 각 비트는 3-입력 2-출력 스위치의 각 비트의 두 번째 데이터 입력에 연결되며,
스위치에서 각 비트의 첫 번째 출력은 첫 번째 포화 유니트의 입력 오퍼랜드 벡터의 각 비트의 입력에 연결되며,
첫 번째 포화 유니트에서 모든 비트의 제어 입력은 두 번째 레지스터의 각 비트의 출력에 연결되고,
3-입력 2-출력 스위치의 각 비트의 두 번째 출력은 두 번째 포화 유니트의 입력 오퍼랜드 벡터의 각 비트의 입력에 연결되고,
두 번째 포화 유니트에서 각 비트의 제어 입력은 세 번째 레지스터의 각 비트의 출력에 연결되며,
첫 번째 포화 영역의 결과 벡터의 각 비트의 출력은 멀티플렉서의 각 비트의 두 번째 데이터 입력에 연결되고, 멀티플렉서에서 각 비트의 출력은 계산 유니트의 첫 번째 오퍼랜드 벡터의 각 비트의 입력에 연결되고, 계산 유니트에서 두 번째 오퍼랜드 벡터의 각 비트의 입력은 두 번째 포화 유니트의 결과 벡터의 각 비트의 출력에 연결되며,
첫 번째 FIFO의 데이터 출력들은 계산 유니트의 세 번째 오퍼랜드 벡터의 각 비트들의 입력에 연결되고, 계산 유니트에서 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과들의 첫 번째 피가수(summand) 벡터의 각 비트의 출력은 가산기 회로의 첫 번째 피가수 벡터의 각 비트의 입력에 연결되고, 가산기 회로에서 두 번째 피가수 벡터의 각 비트의 입력은 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과의 각 비트의 출력에 연결되며,
계산 유니트에서 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 각 입력은 다섯 번째 레지스터의 각 비트의 출력 및 가산기 회로의 피가수 벡터들과 합 벡터들의 각 입력에 연결되며, 가산기 회로에서 합 벡터의 각 비트의 출력은 두 번째 FIFO의 각 데이터 입력에 연결되며, 두 번째 FIFO에서 각 데이터 불럭은 신경 프로세서의 출력 버스의 각 비트와 3-입력 2-출력 스위치의 각 비트의 세 번째 입력에 연결되며,
네 번째 레지스터의 각 비트의 출력은 다섯 번째 레지스터의 각 비트의 데이터 입력과 계산 유니트의 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며, 계산 유니트에서 두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력은 여섯 번째 레지스터의 각 비트의 출력에 연결되며, 여섯 번째 레지스터에서 각 비트의 데이터 입력은 시프트 레지스터의 각 비트의 출력에 연결되며, 시프트 레지스터에서 연속적인 데이터 입력과 출력은 짝지어서 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력 및 AND 게이트의 첫 번째 입력에 연결되고, AND 게이트의 출력은 첫 번째 FIFO의 읽기 제어 입력에 연결되며,
AND 게이트의 두 번째 입력, 시프트 레지스터의 시프트 제어 입력 및 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력은 짝으로 연결되고 신경 프로세서의 각 제어 입력에 연결되며,
계산 유니트의 첫 번째 메모리 블록으로부터 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력과 다섯 번째 및 여섯 번째 레지스터들의 제어 입력들이 짝지어서 신경 프로세서의 각 제어 입력으로 연결되며,
3-입력 2-출력 스위치의 쓰기 제어 입력, 시프트 레지스터와 첫 번째 FIFO의 쓰기 제어 입력들 및 두 번째 FIFO의 읽기와 쓰기 제어 입력들은 신경 프로세서의 각 제어 입력들이며,
첫 번째 및 두 번째 FIFO들의 상태 출력들은 신경 프로세서의 상태 출력이다.
신경 프로세서는 계산 유니트 하나를 포함할 수 있을 것이며, 상기 계산 유니트는 J 최소값이 계산 유니트의 두 번째 오퍼랜드 벡터들의 데이터 워드 길이들의 약수일 때에 시프트 레지스터 내에 저장된 모든 N-비트 벡터 오퍼랜드들에 J 비트들을 왼쪽으로 산술적으로 시프트시키는 것이 실행되는 시프트 레지스터 하나, 한 개의 지연 소자, N-비트 데이터를 저장하기 위해 연속적인 입력 포트와 N/J 셀들을 포함하는 첫 번째 메모리 블록, N-비트 데이터를 저장하기 위한 N/J개의 셀들을 포함하는 두 번째 메모리 블록, 각각 프로그램 가능한 워드 길이의 N비트 벡터를 J-비트 곱셈기에 의해 곱하는 N/J개의 곱셈기 블록들 및 N/J+1개의 프로그램 가능한 워드 길이 데이터 벡터들의 피가수의 부분곱이 생성되는 벡터 가산 회로를 포함하며,
계산 유니트의 세 번째 오퍼랜드 벡터 비트들의 입력들은 시프트 레지스터의 데이터 입력들에 연결되며, 상기 시프트 레지스터의 출력들은 첫 번째 메모리 블록의 데이터 입력들에 연결되며, 첫 번째 메모리 블록에서 각 셀의 출력들은 두 번째 메모리 블록의 각 셀의 데이터 입력들에 연결되며, 두 번째 메모리 블록에서 각 셀의 출력들은 각 곱셈기 블록의 피승수 벡터 비트들의 입력들에 연결되며, 곱셈기 블록에서 곱셈기 비트들의 입력들은 계산 유니트의 두 번째 오퍼랜드 벡터 비트들의 각 J-비트 그룹의 입력들에 연결되며,
각 곱셈기 블록의 출력들은 벡터 가산 회로의 각 피가수 벡터의 비트들의 입력들에 연결되며, 벡터 가산 회로에서 (N/J+1)번째 피가수 벡터 비트들의 입력들은 계산 유니트의 첫 번째 오퍼랜드 벡터 비트들의 입력에 연결되며, 계산 유니트에서 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 입력들은 시프트 레지스터의 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력들에 연결되며, 시프트 레지스터에서 모드 선택 입력은 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력에 연결되며, 계산 유니트에서 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력은 시프트 레지스터의 클럭 입력과 지연 소자 입력에 연결되며, 지연 소자의 출력은 첫 번째 메모리 블록의 쓰기 제어 입력에 연결되며, 두 번째 메모리 블록의 쓰기 제어 입력은 세 번째 오퍼랜드 행렬을 계산 유니트의 첫 번째 메모리 블록에서 두 번째 메모리 블록에 다시 로드하는 제어의 입력에 연결되며, 계산 유니트에서 두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 모든 입력은 각 곱셈기 블록의 부호 정정의 입력에 연결되며, 계산 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들은 각 곱셈기 블록의 피승수 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들과 벡터 가산기 회로의 피가수 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들에 연결되며, 벡터 가산 회로에서 결과들의 첫 번째와 두 번째 피가수 벡터들은 계산 유니트의 각 출력들이다.
상기에 기술된 신경 프로세서에서 각 포화 유니트는 입력 레지스터 하나를 포함할 수 있을 것이며, 그 데이터 레지스터의 데이터 입력은 상기 유니트의 입력 오퍼랜드 벡터의 각 비트들의 입력이고, 계산 유니트는 입력 데이터 레지스터 하나를 포함할 수 있을 것이며, 그 데이터 레지스터의 데이터 입력들은 상기 유니트의 첫 번째와 두 번째 오퍼랜드 벡터들의 각 비트들의 입력이며, 가산기 회로는 입력 데이터 레지스터 하나를 포함할 수 있을 것이며, 그 데이터 레지스터의 데이터 입력들은 상기 가산기 회로의 각 입력들의 입력들이다.
포화 유니트는 올림수 전달 회로와 올림수 예견 회로를 포함하며, 상기 유니트의 N비트들의 각각은 첫 번째와 두 번째 멀티플렉서, 하나의 EXCLUSIVE OR 게이트, 하나의 EQUIVALENCE 게이트, 하나의 NAND 게이트 및 반전된 입력을 가지는 하나의 AND 게이트를 포함하며,
반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 상기 유니트의 각 비트의 NAND 게이트와 EQUIVALENCE 게이트의 첫 번째 입력들은 짝지어서 상기 유니트의 각 제어 입력에 연결되며, 결과 벡터의 각 비트의 출력은 상기 유니트의 각 비트의 첫 번째 멀티플렉서의 출력에 연결되며, 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 상기 유니트의 각 비트의 NAND 게이트와 EQUIVALENCE 게이트의 첫 번째 입력들은 짝지어서 상기 유니트의 각 제어 입력에 연결되며,
EXCLUSIVE OR 게이트의 첫 번째 입력과 상기 유니트의 q 번째 비트의 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력은 각각 EXCLUSIVE OR 게이트의 두 번째 입력과 상기 유니트의 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트의 반전된 입력에 연결되며, 상기 유니트의 두 번째 멀티플렉서의 첫 번째 데이터 입력은 올림수 전달 회로의 (N-q+2)번째 비트에로의 올림수 출력에 연결되며 (이때에 q=1, 2, ..., N),
상기 유니트의 n번째 비트의 NAND 게이트의 출력은 올림수 예견 회로의 (N-n+1)번째 비트를 통해 올림수 전달의 입력으로 연결되며, 올림수 예견 회로에서 (N-n+2)번째 비트로의 올림수 출력은 상기 유니트의 n번째 비트의 첫 번째 멀티플렉서의 제어 입력에 연결되며, 반전된 입력을 가지는 AND 게이트의 출력은 상기 유니트의 같은 비트의 두 번째 멀티플렉서의 제어 입력과 상기 올림수 전달 회로의 (N-n+1)번째 비트의 올림수 생성 입력 및 상기 올림수 전달 회로의 (N-n+1)번째 비트를 통해서 올림수 전달의 반전된 입력에 연결되며, 올림수 전달 회로에서 (N-n+1)번째 입력으로부터의 올림수 입력은 상기 유니트의 n번째 비트의 두 번째 멀티플렉서의 출력에 연결되며 (이때에 n=1, 2, ..., N),
올림수 전달 회로 및 올림수 예견 회로의 초기 올림수 입력들, EXCLUSIVE OR 게이트의 두 번째 입력, 반전된 입력을 가지는 AND 게이트의 반전된 입력 및 상기 유니트의 N번째 비트의 두 번째 멀티플렉서의 첫 번째 데이터 입력은 짝지어지고 "0"에 연결되며, 상기 유니트의 각 비트에서 두 번째 멀티플렉서의 출력은 EQUIVALENCE 게이트의 두 번째 입력에 연결되며, EQUIVALENCE 게이트 출력은 첫 번째 멀티플렉서의 첫 번째 데이터 입력에 연결되며, 첫 번째 멀티플렉서의 두 번째 데이터 입력은 두 번째 멀티플렉서의 두 번째 데이터 입력과 EXCLUSIVE OR 게이트의 첫 번째 입력에 연결되며, EXCLUSIVE OR 게이트 출력은 상기 유니트의 동일 비트의 NAND 게이트의 두 번째 입력에 연결된다.
포화 유니트 사용의 특별한 경우에, 하드웨어 비용들을 줄이려는 강한 요구가 있을 때에, q번째 비트의 올림수 출력은 올림수 전달 회로의 (q-1)번째 비트로부터의 올림수 입력에 연결되며(이때에 q=1, 2, ..., N), 올림수 예견 회로는 N개의 AND 게이트들과 N개의 OR 게이트들을 포함하며, 상기 회로의 각 비트를 통한 올림수 전달의 각 AND 게이트의 첫 번째 입력에 연결되며, AND 게이트의 출력은 각 OR 게이트의 첫 번째 입력에 연결되며, OR 게이트의 두 번째 입력과 출력은 각각 상기 회로의 각 비트의 올림수 생성 입력과 상기 회로의 동일 비트로의 올림수 회로의 출력에 연결되며, 첫 번째 AND 게이트의 두 번째 입력은 상기 회로의 초기의 올림수 입력이며, q번째 AND 게이트의 두 번째 입력은 (q-1)번째 OR 게이트의 출력에 연결된다(이때에 q=2, 3, ..., N).
계산 유니트는 곱셈기 비트들의 N/2개의 디코더들, 반전된 입력을 가지는 N/2개의 AND 게이트들, 하나의 지연 소자 및 하나의 N 비트 시프트 레지스터를 포함하며, 시프트 레지스터 각 비트는 반전된 입력들을 가진 하나의 AND 게이트, 하나의 멀티플렉서와 하나의 트리거 및 N개 열 곱하기 N/2개 셀의 곱셈기 어레이 하나를 포함하며,
그들 각각은 반전된 입력을 가진 하나의 AND 게이트, 일비트(one-bit) 부분곱 생성 회로와 일비트 가산기, 멀티플렉서, 상기 유니트의 첫 번째와 두 번째 메모리 블록의 메모리 셀 기능을 각각 하는 첫 번째와 두 번째 트리거로 구성되며, 상기 유니트의 첫 번째 오퍼랜드 벡터의 각 비트의 입력의 입력은 곱셈기 어레이의 각 열의 첫 번째 셀의 일비트 가산기의 두 번째 입력에 연결되며, 각 셀의 일비트 가산기의 첫 번째 입력은 곱셈기 어레이의 동일 셀의 일비트 부분곱 생성 회로의 출력에 연결되며,
멀티플렉서들의 제어 입력들과 상기 곱셈기 어레이의 각 열의 모든 셀들의 반전된 입력을 가지는 AND 게이트들의 반전된 입력들은 짝지어서 상기 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며,
두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력은 반전된 입력을 가지는 각 AND 게이트의 반전된 입력에 연결되며, AND 게이트의 출력은 곱셈기 비트들의 각 디코더의 첫 번째 입력에 연결되며,
곱셈기 비트들의 i번째 디코더의 두 번째와 세 번째 입력은 상기 유니트의 두 번째 오퍼랜드 벡터의 (2i-1)번째와 (2i)번째 비트의 입력들에 각각 연결되며(이때에 i=1, 2, ..., N/2), 반전된 입력을 가지는 j번째 AND 게이트의 반전되지 않은 입력은 곱셈기 비트들의 (j-1)번째 디코더의 세 번째 입력에 연결되며(이때에 j=2, 3, ..., N/2), 상기 유니트의 세 번째 오퍼랜드 벡터의 각 비트의 입력은 시프트 레지스터의 각 비트의 멀티플렉서의 두 번째 데이터 입력에 연결되며, 시프트 레지스터에서 첫 번째 데이터 입력은 시프트 레지스터의 동일 비트의 반전된 입력을 가지는 AND 게이트의 출력에 연결되며, 그 AND 게이트의 첫 번째 반전된 입력은 상기 유니트의 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며, 상기 시프트 레지스터의 q번째 비트의 반전된 입력을 가지는 AND 게이트의 두 번째 반전된 입력은 상기 시프트 레지스터의 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트의 첫 번째 반전된 입력에 연결되며(이때에 q=2, 3, ..., N), 시프트 레지스터의 r번째 비트의 반전된 입력들을 가지는 AND 게이트의 반전되지 않은 입력은 그 시프트 레지스터의 (r-2)번째 비트의 트리거 출력에 연결되며(이때에 r=3, 4, ..., N),
모든 시프트 레지스터 비트들의 멀티플렉서들의 제어 입력들은 짝지어서 상기 유니트의 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력에 연결되며, 모든 시프트 레지스터 비트들의 트리거들의 클럭 입력들과 지연 소자의 입력은 짝지어서 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력에 연결되며, 각 시프트 레지스터 비트의 멀티플렉서의 출력은 시프트 레지스터의 동일 비트의 트리거의 데이터 입력에 연결되고,
시프트 레지스터의 출력은 곱셈기 어레이의 각 열의 마지막 셀의 첫 번째 트리거의 데이터 입력에 연결되며, 각 곱셈기 어레이 열의 j번째 셀의 첫 번째 트리거의 출력은 동일 곱셈기 어레이 열의 (j-1)번째 셀의 첫 번째 트리거의 데이터 입력에 연결되며(이때에 j=2, 3, ..., N/2),
모든 곱셈기 어레이 셀들의 첫 번째 트리거들의 클럭 입력들은 짝지어서 지연 소자의 출력에 연결되며, 모든 곱셈기 어레이 셀들의 두 번째 트리거들의 클럭 입력들은 짝지어서 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 다시 로드하는 제어의 입력에 연결되며,
q번째 곱셈기 어레이 열의 i번째 셀의 일비트 부분곱 생성 회로의 두 번째 데이터 입력은 (q-1)번째 곱셈기 어레이 열의 i번째 셀의 반전된 입력을 가지는 AND 게이트의 출력에 연결되며(이때에 i=2, 3, ..., N/2 그리고 q=2, 3, ..., N),
각 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 두 번째 입력은 동일 곱셈기 어레이 열의 (j-1)번째 셀의 일비트 가산기의 합 출력에 연결되며(이때에 j=2, 3, ..., N/2), q번째 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 세 번째 입력은 (q-1)번째 곱셈기 어레이 열의 (j-1)번째 셀의 멀티플렉서의 출력에 연결되며(이때에 j=2, 3, ..., N/2 그리고 q=2, 3, ..., N),
첫 번째 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 세 번째 입력은 곱셈기 비트들의 (j-1)번째 디코더의 세 번째 출력에 연결되며(이때에 j=2, 3, ..., N/2),
각 곱셈기 어레이 열의 마지막 셀의 일비트 가산기의 합 출력은 상기 유니트의 첫 번째 피가수 벡터의 각 비트의 출력이며,
(q-1)번째 곱셈기 어레이 열의 마지막 셀의 멀티플렉서의 출력은 상기 유니트의 결과들의 두 번째 피가수 벡터의 q번째 비트의 출력이며(이때에 q=2, 3, ..., N),
상기 유니트에서 결과들의 두 번째 피가수 벡터의 첫 번째 비트는 곱셈기 비트들의 (N/2)번째 디코더의 세 번째 출력에 연결되며, 상기 시프트 레지스터의 첫 번째 비트의 반전된 입력들을 가지는 AND 게이트의 두 번째 반전된 입력과 반전되지 않은 입력 그리고 시프트 레지스터의 두 번째 비트의 반전된 입력들을 가지는 AND 게이트의 반전되지 않은 입력, 곱셈기 어레이의 첫 번째 열의 모든 셀들의 일비트 부분곱 생성 생성 회로들의 두 번째 데이터 입력들, 모든 곱셈기 어레이 열들의 첫 번째 셀들의 일비트 가산기들의 세 번째 입력들 및 반전된 입력을 가지는 첫 번째 AND 게이트의 반전되지 않은 입력은 짝지어서 "0"에 연결되며,
각 곱셈기 어레이 셀에서 첫 번째 트리거의 출력은 두 번째 트리거의 데이터 입력에 연결되며, 두 번째 트리거의 출력은 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 일비트 부분곱 생성 회로의 첫 번째 데이터 입력에 연결되며, 부분곱 생성 회로의 세 번째 제어 입력은 멀티플렉서의 두 번째 데이터 입력에 연결되며, 멀티플렉서의 첫 번째 데이터 입력은 곱셈기 어레이의 동일 셀의 일비트 가산기의 올림수 출력에 연결된다.
가산기 회로는 하나의 올림수 예견 회로 하나, 자신의 N개의 비트들 각각에 하나의 반가산기 및 하나의 EXCLUSIVE OR 게이트, 반전된 입력을 가지는 첫 번째와 두 번째의 AND 게이트들을 포함하고,
가산기 회로의 첫 번째 피가수 벡터의 각 비트의 입력과 가산기 회로의 두 번째 피가수 벡터의 각 비트의 입력은 가산기 회로의 각 비트의 반가산기의 첫 번째와 두 번째 입력에 각각 연결되며, 가산기 회로의 각 비트의 반전된 입력을 가지는 첫 번째와 두 번째 AND 게이트들의 반전된 입력들은 짝지어서 피가수 벡터들과 합 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며,
각 비트의 EXCLUSIVE OR 게이트의 출력은 가산기 회로의 합 벡터의 각 비트의 출력이며, 반전된 입력을 가진 첫 번째 AND 게이트의 출력은 올림수 예견 회로의 각 비트를 통해 올림수 전달 입력에 연결되며, 올림수 예견 회로에서 각 비트의 올림수 생성 입력은 가산기 회로의 각 비트의 반전된 입력을 가지는 두 번째 AND 게이트의 출력에 연결되며, 가산기 회로의 q번째 비트의 EXCLUSIVE OR 게이트의 두 번째 입력은 올림수 예견 회로의 q번째 비트로의 올림수 출력에 연결되며(이때에 q=2, 3, ..., N), 올림수 예견 회로에서 초기 올림수 입력과 가산기 회로의 첫 번째 비트의 EXCLUSIVE OR 게이트의 두 번째 입력은 "0"에 연결되며,
가산기 회로의 각 비트에서 반가산기의 합 출력은 EXCLUSIVE OR 게이트의 첫 번째 입력과 반전된 입력을 가지는 첫 번째 AND 게이트의 반전되지 않은 입력에 연결되며, 반가산기의 올림수 출력은 가산기 회로의 동일 비트의 반전된 입력을 가진 두 번째 AND 게이트의 반전되지 않은 입력에 연결된다.
도 1에 블록 다이아그램이 도시된 신경 프로세서는 첫 번째(1), 두 번째(2), 세 번째(3), 네 번째(4), 다섯 번째(5)와 여섯 번째(6) 레지스터들, 하나의 시프트 레지스터(7), 하나의 AND 게이트(8), 첫 번째(9)와 두 번째(10) FIFO들, 3-입력 2-출력 스위치(11) 하나, 하나의 멀티플렉서(12), 포화 유니트들 각각은 입력 오퍼랜드 벡터의 비트들의 입력들(15)을 가지는 첫 번째(13)와 두 번째(14) 포화 유니트들, 제어 입력들(16)과 결과 벡터의 비트들의 출력들(17), 첫 번째(19), 두 번째(20) 과 세 번째(21) 오퍼랜드 벡터의 비트들의 입력들을 포함하는 하나의 계산 유니트(18), 첫 번째 오퍼랜드 벡터와 결과 벡터들(22), 두 번째 오퍼랜드 벡터들(23)과 세 번째 오퍼랜드 벡터들(24)을 위해 설정된 데이터 경계들의 입력들, 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째(25)와 두 번째(26) 입력들, 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 다시 로드하는 제어 입력(27)과 첫 번째 오퍼랜트 벡터와 두 번째 오퍼랜드 벡터에 세 번째 오퍼랜드 형렬을 곱한 결과를 더한, 그리고 두 번째 메모리 블록에 저장된, 결과들의 첫 번째(28)와 두 번째(29) 피가수 벡터들의 비트들의 출력들 및 첫 번째(31)와두 번째(32) 피가수 벡터들의 비트들의 입력들, 피가수 벡터들과 합 벡터들(33)을 위해 설정된 데이터 경계들의 입력들과 합 벡터(34)의 비트들의 출력들을 포함하는 가산기 회로(30)를 포함한다. 신경 프로세서는 첫 번째(35)와 두 번째(36)의 입력 버스들과 출력 버스(37)를 가진다. 3-입력 2-출력 스위치(11)의 제어 입력들(38), 멀티플렉서(12)의 제어 입력, 첫 번째 레지스터(1)의 제어 입력(40), 두 번째 레지스터(2)의 제어 입력(41), 세 번째 레지스터(3)의 제어 입력(42), 네 번째 레지스터의 제어 입력(43), 시프트 레지스터(7)의 쓰기 제어 입력(44), 첫 번째 FIFO(9)의 쓰기 제어 입력(45), 두 번째 FIFO(10)의 쓰기(46)와 읽기(47) 제어 입력들 및 계산 유니트(18)의 상기에 설명된 제어 입력들(26, 27)은 각각 신경 프로세어의 제어 입력들이다. 첫 번째 FIFO(9)의 상태 출력들(48)과 두 번째 FIFO(10)의 상태 출력들(49)은 신경 프로세서의 상태 출력들이다.
신경 프로세서에 의해 구현된 포화 기능의 일반적인 모습이 도 2에 제시되어 있다.
신경 프로세서에 의해 구현된 신경 네트웍 계층의 모델이 도 3에 제시되어 있다.
도 4는 프로그램 가능한 워드 길이 데이터의 벡터들에 대해 연산을 수행하기 위한 계산 유니트(18)의 가능한 구현예의 하나에 대한 블록 다이아그램인데, 이 계산 유니트는 계산 유니트에 내장되며, 최소값 J는 계산 유니트(18)의 두 번째 오퍼랜드 벡터들에서 데이터 워드 길이들의 약수일때에, 모든 N비트 벡터 오퍼랜드에 J비트들을 왼쪽으로 산술적으로 이동시키는 것을 수행하는 시프트 레지스터(50) 하나, 하나의 지연 소자(51), 연속적인 입력 포트와 N비트 데이터를 저장하기 위한 N/J개 셀들을 포함하는 첫 번째 메모리 블록(52) 하나, N비트 데이터를 저장하기 위한 N/J개의 셀들을 포함하는 두 번째 메모리 블록(53) 하나, 블록들 각각이 프로그램 가능한 워드 길이 데이터의 N비트 벡터에 J비트 곱셈기를 곱하는 N/J개의 곱셈기 블록들(54) 및 N/J+1개의 프로그램 가능한 워드 길이 데이터 벡터들의 합의 부분곱을 생성하는 벡터 가산 회로 하나를 포함한다.
포화 유니트는 도 5에 그 블록 다이아그램이 제시되어 있는데, 입력 오퍼랜드 벡터(15) 비트들의 입력들, 제어 입력들(16) 및 결과 벡터(17) 비트들의 출력들을 포함한다. 상기 유니트의 N개 비트들(56) 각각은 첫 번째(57)와 두 번째(58) 멀티플렉서들, 하나의 EXCLUSIVE OR 게이트(59), 하나의 EQUIVALENCE 게이트(60), 하나의 NAND 게이트(61) 및 반전된 입력을 가지는 하나의 AND 게이트(62)를 포함한다. 상기 유니트는 또한 올림수 전달(carry propagation) 회로(63) 하나를 포함하며, 초기 올림수 입력(64), 분리된 비트들을 통한 올림수 전달의 반전된 입력들(65), 분리된 비트들의 올림수 입력(66)과 분리된 비트들로의 올림수의 출력들(67) 및 올림수 예견 회로(68)를 포함하는데, 올림수 예견 회로는 초기 올림수 입력(69), 분리된 비트들을 통한 올림수 전달의 입력들(70), 분리된 비트들의 올림수 생성 입력들(71) 및 분리된 비트들로의 올림수의 출력을 포함한다.
포화 유니트의 회로들(63, 68)과 같이 다양한 올림수 전달 회로들과 올림수 예견 회로들이, 병렬 가산기들에 응용되어, 사용될 수 있을 것이다.
올림수 전달 회로(63) 구현의 가장 단순한 변형에서 q번째 비트(67)로의 올림수의 출력이 (q-1)번째 비트로부터의 올림수 입력에 연결된다(이때에 q=1, 2, ..., N).
도 6은 각각 개수가 N인 AND 게이트들(73) 및 OR 게이트들(74)을 포함하는 간단한 예견 회로 하나를 개시한다. 상기 회로의 대응 비트를 통한 올림수 전달의 각 입력(70)은 대응 AND 게이트(73)의 첫 번째 입력에 연결되며, AND 게이트의 출력은 대응 OR 게이트(74)의 첫 번째 입력에 연결되며, OR 게이트의 두 번째 입력과 출력은 각각 상기 회로의 대응 비트의 올림수 생성 입력(71)과 상기 회로의 동일 비트로의 올림수 출력(72)에 연결된다. 첫 번째 AND 게이트(73)의 두 번째 입력은 상기 회로의 초기 올림수 입력(69)이며, q번째 AND 게이트(73)의 두 번째 입력은 (q-1)번째 OR 게이트(74)의 출력에 연결된다(이때에 q=2, 3, ..., N).
도 7에 블록 다이아그램이 도시된 계산 유니트는 첫 번째(19), 두 번째(20)와 세 번째(21) 오퍼랜드 벡터 비트들의 입력들, 첫 번째 오퍼랜드 벡터들과 결과 벡터들, 두 번째 오퍼랜드 벡터들(23)과 세 번째 오퍼랜드 벡터들(24)을 위한 경계 설정의 입력들, 세 번째 오퍼랜드 벡터들을 첫 번째 메모리 블록으로 로드하는 제어의 첫 번째(25)와 두 번째(26) 입력들, 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력 및 결과들의 첫 번째 피가수 벡터(28)와 결과들의 두 번째 피가수 벡터(29)의 비트들의 출력들을 포함한다. 상기 유니트는 하나의 시프트 레지스터(50), 하나의 지연 소자(51), 반전된 입력을 가지는 N/2개의 AND 게이트들, 곱셈기 비트들의 N/2 디코더들(76), 각 열이 N개 열들과 N/2 셀들의 곱인 곱셈기 어레이(77) 하나를 포함한다. 시프트 레지스터(50)의 어떤 비트도 반전된 입력을 가지는 하나의 AND 게이트(78), 하나의 멀티플렉서(79) 및 하나의 트리거(80)를 포함한다. 곱셈기 어레이(77)의 각 셀은 상기 유니트의 각각 첫 번째 메모리 블록들과 두 번째 메모리 블록들의 메모리 셀들의 기능을 하는 첫 번째(81)과 두 번째(82) 트리거들, 반전된 입력을 가지는 하나의 AND 게이트(83), 하나의 일비트 부분곱 생성 회로(84), 하나의 일비트 가산기(85) 및 하나의 멀티플렉서(86)를 포함한다. 도 7에서 곱셈기 어레이(77)의 셀들의 열들은 왼쪽에서 오른쪽으로 번호가 붙여지며, 곱셈기 어레이(77)의 열들의 셀들은 위에서 아래로 번호가 붙여진다.
도 8은 부스(Booth)의 알고리즘에 기초한 곱셈기 비트들의 디코더(76)와 일비트 부분곱 생성 회로(84)의 예시적인 구현예를 도시한 것이다. 곱셈기 비트의 디코더(76)는 하나의 EXCLUSIVE OR 게이트(87), 하나의 EQUIVALENCE 게이트(88) 및 하나의 NOR 게이트(89)를 포함한다. 일비트 부분곱 생성 회로(84)는 AND 게이트들(90, 91), 하나의 OR 게이트(92) 및 하나의 EXCLUSIVE OR 게이트(93)를 포함한다.
도 9에 블록 다이아그램이 도시된 가산기 회로는 첫 번째 피가산 벡터(31)와 두 번째 피가산 벡터(32)의 비트의 입력들, 피가산 벡터들과 합 벡터들(33)을 위해 설정된 데이터 경계들의 입력들 및 합 벡터(34)의 비트들의 출력들을 가진다. 가산기 회로의 N비트들의 각각(94)은 하나의 반가산기(95), 하나의 EXCLUSIVE OR 게이트(96), 반전된 입력을 가지는 첫 번째(97)와 두 번째(98) AND 게이트를 포함한다. 또한 가산기 회로는 올림수 예견 회로(99) 하나를 포함한다.
도 1에 블록 다이아그램이 도시된 신경 프로세서는 첫 번째(1), 두 번째(2), 세 번째(3), 네 번째(4), 다섯 번째(5)와 여섯 번째(6) 레지스터들, 하나의 시프트 레지스터(7), 하나의 AND 게이트(8), 첫 번째(9)와 두 번째(10) FIFO들, 3-입력 2-출력 스위치(11) 하나, 하나의 멀티플렉서(12), 포화 유니트들 각각은 입력 오퍼랜드 벡터의 비트들의 입력들(15)을 가지는 첫 번째(13)와 두 번째(14) 포화 유니트들, 제어 입력들(16)과 결과 벡터의 비트들의 출력들(17), 첫 번째(19), 두 번째(20) 과 세 번째(21) 오퍼랜드 벡터의 비트들의 입력들을 포함하는 하나의 계산 유니트(18), 첫 번째 오퍼랜드 벡터와 결과 벡터들(22), 두 번째 오퍼랜드 벡터들(23)과 세 번째 오퍼랜드 벡터들(24)을 위해 설정된 데이터 경계들의 입력들, 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째(25)와 두 번째(26) 입력들, 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 다시 로드하는 제어 입력(27)과 첫 번째 오퍼랜트 벡터와 두 번째 오퍼랜드 벡터에 세 번째 오퍼랜드 형렬을 곱한 결과를 더한, 그리고 두 번째 메모리 블록에 저장된, 결과들의 첫 번째(28)와 두 번째(29) 피가수 벡터들의 비트들의 출력들 및 첫 번째(31)와 두 번째(32) 피가수 벡터들의 비트들의 입력들, 피가수 벡터들과 합 벡터들(33)을 위해 설정된 데이터 경계들의 입력들과 합 벡터(34)의 비트들의 출력들을 포함하는 가산기 회로(30)를 포함한다. 신경 프로세서는 첫 번째(35)와 두 번째(36)의 입력 버스들과 출력 버스(37)를 가진다. 3-입력 2-출력 스위치(11)의 제어 입력들(38), 멀티플렉서(12)의 제어 입력, 첫 번째 레지스터(1)의 제어 입력(40), 두 번째 레지스터(2)의 제어 입력(41), 세 번째 레지스터(3)의 제어 입력(42), 네 번째 레지스터의 제어 입력(43), 시프트 레지스터(7)의 쓰기 제어 입력(44), 첫 번째 FIFO(9)의 쓰기 제어 입력(45), 두 번째 FIFO(10)의 쓰기(46)와 읽기(47) 제어 입력들 및 계산 유니트(18)의 상기에 설명된 제어 입력들(26, 27)은 각각 신경 프로세어의 제어 입력들이다. 첫 번째 FIFO(9)의 상태 출력들(48)과 두 번째 FIFO(10)의 상태 출력들(49)은 신경 프로세서의 상태 출력들이다.
3-입력 2-출력 스위치(11)의 비트들의 첫 번째 데이터 입력들, 첫 번째(1), 두 번째(2), 세 번째(3)와 네 번째(4) 레지스터들과 시프트 레지스터(7)의 병렬 데이터 입력들은 비트-비트 단위로 짝지어서 신경 프로세서의 첫 번째 입력 버스(35)로 연결되며, 신경 프로세서에서 두 번째 입력 버스(36)의 비트들은 3-입력 2-출력 스위치(11)의 대응 비트들의 두 번째 입력들로 연결된다. 3-입력 2-출력 스위치(11)의 비트들의 첫 번째 출력들은 첫 번째 포화 유니트(13)의 입력 오퍼랜드 벡터(15)의 대응 비트들의 입력들로 연결되며, 첫 번째 포화 유니트(13)의 제어 입력들(16)은 두 번째 레지스터(2)의 대응 비트들의 출력들에 연결된다. 3-입력 2-출력 스위치(11)의 비트들의 두 번째 출력들은 두 번째 포화 유니트(14)의 입력 오퍼랜드 벡터(15)의 대응 비트들의 입력들로 연결되며, 두 번째 포화 유니트(14)의 제어 입력들(16)은 세 번째 레지스터(3)의 대응 비트들의 출력들에 연결된다. 첫 번째 레지스터(1)의 비트들의 출력들은 멀티플렉서(12)의 대응 비트들의 첫 번째 데이터 입력들에 연결되며, 멀티플렉서(12)의 두 번째 비트들의 두 번째 데이터 입력들은 첫 번째 포화 유니트(13)의 결과 벡터(17)의 대응 비트들의 출력에 연결된다. 멀티플렉서(12)의 비트들의 출력들은 계산 유니트(18)의 첫 번째 오퍼랜드 벡터(19)의 대응 비트들의 입력들에 연결되며, 계산 유니트의 두 번째 오퍼랜드 벡터(20)의 비트들의 입력들은 두 번째 포화 유니트(14)의 결과 벡터(17)의 대응 비트들의 출력들에 연결된다. 첫 번째 FIFO(9)의 데이터 출력들은 계산 유니트(18)의 세 번째 오퍼랜드 벡터(21)의 대응 비트들의 입력들에 연결되고, 계산 유니트의 결과들의 첫 번째 피가수 벡터(28)의 비트들의 출력들은 가산기 회로(30)의 첫 번째 피가수 벡터(31)의 대응 비트들의 입력들에 연결되며, 가산기 회로의 두 번째 피가수 벡터(32)의 비트들의 입력들은 계산 유니트(18)의 결과들의 두 번째 피가수 벡터(29)의 대응 비트들의 출력들에 연결되며, 계산 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들(22)을 위해 설정된 데이터 경계들의 입력들은 다섯 번째 레지스터(5)의 대응 비트들의 출력들과 가산기 회로(30)의 피가수 벡터들과 합 벡터들(33)을 위해 설정된 데이터 경계들의 대응 입력들에 연결되며, 가산기 회로의 합 벡터(34)의 비트들의 출력들은 두 번째 FIFO(10)의 대응 데이터 입력들에 연결되며, 두 번째 FIFO의 데이터 출력들은 신경 프로세서의 출력 버스(37)의 대응 비트들과 3-입력 2-출력 스위치(11)의 대응 비트들의 세 번째 입력들에 연결된다. 네 번째 레지스터(4)의 비트들의 출력들은 다섯 번째 레지스터(5)의 대응 비트들의 데이터 출력들과 계산 유니트(18)의 세 번째 오퍼랜드 벡터들(24)을 위해 설정된 데이터 경계들의 대응 입력들에 연결되며, 계산 유니트의 두 번째 오퍼랜드 벡터들(23)을 위해 설정된 데이터 경계들의 입력들은 여섯 번째 레지스터(6)의 대응 비트들의 출력에 연결되며, 여섯 번째 데이터 입력들은 일곱 번째 레지스터(7)의 대응 비트들의 출력에 연결되며, 일곱 번째 레지스터의 연속적인 데이터 입력과 출력은 짝지어서 계산 유니트(18)의 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력(25)과 AND 게이트(8)의 첫 번째 입력에 연결되며, AND 게이트의 출력은 첫 번째 FIFO(9)의 읽기 제어 입력에 연결된다. 시프트 레지스터(7)의 시프트 제어 입력은 AND 게이트(8)의 두 번째 입력과 세 번째 오퍼랜드 벡터들을 계산 유니트(18)의 첫 번째 메모리 블록(26)으로의 로드 제어의 두 번째 입력에 연결되며, 계산 유니트의 세 번째 오퍼랜드를 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 재 로드하는 제어의 입력(27)은 다섯 번째(5)와 여섯 번째(6) 레지스터의 제어 입력들에 연결된다.
신경 프로세서 실행 유니트들은 첫 번째(13)와 두 번째(14) 포화 유니트, 계산 유니트(18) 및 가산기 회로(30)이다. 이 유니트들 각각은 프로그램 가능한 워드 길이 데이터의 벡터들에 대한 연산들을 2의 보수 표현으로 실행한다.
신경 프로세서 연산의 각 클럭 사이클에서 계산 유니트(18)는, 계산 유니트(18)의 두 번째 메모리 블록에 이전에 로드되고 저장된 행렬
를 곱하여, 비트들이 계산 유니트(18)의 입력들(20)에 공급되는 배율 벡터 Y =(Y1Y2... Yk)의 부분곱을, 비트들이 계산 유니트(18)의 입력들(19)에 공급되는 벡터 X =(X1X2... XM)의 얻어진 곱에 부가되어 생성한다. 그리고 계산 유니트(18)의 출력들(28, 29)에서 A = (A1A2... AM)와 B =(B1B2... BM) 벡터의 비트들이 생성되며, 그 합은 X + Y × Z 연산의 결과이다. 즉, 벡터 A와 B의 m번째 요소들의 합은 다음의 식과 같이 표현된다.
벡터 X는 M개의 묶음지어진 데이타의 하나의 N 비트 워드를 2의 보수로 표현한 것이며, 이 데이타가 이 벡터의 구성 요소이다. 그리고 벡터 X의 최하위 비트들은 첫 번째 자료 X1의 비트들이며, 그러면 두 번째 자료 X2가 뒤따르게 된다. 벡터 X의 최상위 비트들은 M번째 자료 XM의 비트들이다. 그러한 묶음으로 m번째 자료의 v번째 비트는 벡터 X 의 () 번째 비트이며, 이때에 Nm은 벡터 X의 m번째 자료 Xm의 워드 길이이며, v=1, 2, ..., Nm, m=1, 2, ..., M이다. 벡터 X의 데이타 M의 개수와 이 벡터의 m번째 자료 Xm의 비트들 Nm의 개수는 1부터 N까지의 어떤 정수라도 될 수 있을 것이며, 이때에 m=1, 2, ..., M이다. 하나의 벡터 X에 묶음된 모든 데이타의 총 워드 길이는 그 벡터의 워드 길이와 같아야 한다는 제약만이 있으며, 이 관계는 다음의 식과 같이 표현된다.
벡터 X는 M개의 꾸러미된 데이타의 하나의 N 비트 워드를 2의 보수로 표현한 것이며, 이 데이타가 이 벡터의 구성 요소이다. 벡터 Y의 형식은 벡터 X의 것과 동일하다. 그러나, 이러한 벡터들은 이러한 벡터들에 묶음지어진 구성 요소들의 개수와 개별적인 데이타의 워드 길이에 있어 달라질 수 있을 것이다. 벡터 Y에 묶음된 각 자료의 최소 워드 길이 J는 계산 유니트(18)에서 하드웨어적으로 곱셈이 구현된 것에 의해 정의된다. 부분곱들의 알고리즘이 구현되면, J는 1과 같고, 변형된 부스의 알고리즘이 구현되면, J는 2와 같다. 벡터 Y의 k번째 자료 Yk의 비트들 N'k의 개수는 J의 배수인 J부터 N까지의 어떤 정수도 될 수 있을 것이며, 이때에 k=1, 2, ..., K이다. 벡터 Y의 데이타 K의 개수는 1부터 N/J까지의 어떤 정수값도 될 수 있을 것이다. 그러나 한 벡터 Y에 묶음된 모든 데이타의 총 워드 길이는 벡터의 워드 길이와 같아야 하며, 이는 다음 식과 같이 표현된다.
행렬 Z의 k번째 행은 데이타 벡터 Zk= (Zk,1Zk,2... Zk,M)이며, 이때에 k=1, 2, ..., K이다. 벡터들 Z1, Z2, ..., ZK각각은 벡터 X와 같은 형식을 가져야 한다.
계산 유니트(18)의 출력들(28, 29)에서 생성된 벡터 A와 B는 벡터 X와 같은 형식을 가진다.
계산 유니트(18) 하드웨어를 필요한 형식들의 프로세스 벡터들로 조절하는 것은 그 출력들이 계산 유니트(18)의 입력들(22)에 연결되는 다섯 번째 레지스터(5)에 N비트 제어 워드 H를 로드하고 그 출력들이 계산 유니트(18)의 입력들(23)에 연결되는 여섯 번째 레지스터(6)에 (N/J) 비트 제어 워드 E를 로드해서 이루어진다.
워드 H의 n번째 비트 hn의 값이 1이라는 것은 계산 유니트(18)가 벡터들 X, Z1, Z2, ..., ZK각각의 n번째 비트를 이 벡터의 각 구성 요소의 최상위(sign) 비트로 간주할 것이라는 것을 의미한다. 워드 H에서 값이 1인 비트들의 개수는 벡터들 X, Z1, Z2, ..., ZK각각에 있는 구성 요소들의 개수와 같으며, 이 관계는 다음 식과 같이 표현된다.
워드 E의 i번째 비트 ei의 값이 1이라는 것은 계산 유니트(18)가 벡터 Y의 비트들의 i번째 J비트 그룹을 이 벡터의 각 구성 요소의 최하위 비트들의 그룹으로 간주할 것이라는 것을 의미한다. 워드 E에서 값이 1인 비트들의 개수는 벡터 Y의 구성 요소들의 개수와 같으며, 이 관계는 다음 식과 같이 표현된다.
계산 유니트(18)가 상기에 기술된 연산을 수행하기 전에, 계산 유니트(18)의 두 번째 메모리 블록에 행렬 Z를 로드하고 제어 워드 H와 E를 각각 다섯 번째(5)와 여섯 번째(6) 레지스터에 로드하는 과정이 실행되어야 한다. 이 과정은 여러가지 단계들로 실행된다.
처음에 벡터들 Z1, Z2, ..., ZK은 신경 프로세서의 첫 번째 버스(35)로부터 첫 번째 FIFO(9)로 연속적으로 써진다. 행렬 Z의 전부가 K 클럭 사이클마다 첫 번째 FIFO(9)에 로드되며, 각 사이클마다 첫 번째 FIFO(9) 쓰기 제어의 활성 신호가 신경 프로세서의 입력(45)에 인가된다.
그러면 제어 워드 J가 신경 프로세서의 첫 번째 입력 버스(35)로부터 네 번째 레지스터(4)로 로드되며, 그것을 가능하게 하기 위해 네 번째 레지스터(4)에 쓰는 것을 가능하게 하는 활성 신호가 한 클럭 사이클동안 신경 프로세서의 입력(43)에 인가된다. 다름 클럭 사이클에 제어 워드 E가 신경 프로세서의 첫 번째 입력 버스(35)로부터 시프트 레지스터(7)로 로드되며, 그것을 가능하게 하기 위해 시프트 레지스터(7)에 쓰는 것을 가능하게 하는 활성 신호가 한 클럭 사이클동안 신경 프로세서의 입력(44)에 인가된다.
다름의 N/J개 클럭 사이클동안 행렬 Z는 첫 번째 FIFO(9)로부터 계산 유니트(18)의 첫 번째 메모리 블록으로 이동된다. 이런 N/J개 클럭 사이클 각각에서 활성 제어 신호가 시프트 레지스터(7)의 시프트 제어 입력, AND 게이트(8)의 입력들 중 하나 및 계산 유니트(18)의 입력(26)에 연결된 신경 프로세서 제어 입력으로 인가된다. 각 클럭 사이클에서 이 신호는 시프트 레지스터(7)의 내용들을 한 비트 오른쪽으로 시프트 시키는 것을 시작시키며, 그래서 제어 워드 E의 다음 비트를 그 직렬 출력으로 전송하게 된다. 시프트 레지스터의 직렬 출력으로부터의 신호는 계산 유니트(18)의 제어 입력(25)와 AND 게이트(8)의 입력들 중 하나에 인가된다. 이 신호가 1의 값일 때에 활성 신호가 AND 게이트(8)의 출력에서 생성되며, AND 게이트는 첫 번째 FIFO(9)의 읽기 제어 입력을 공급한다. 그 결과로 벡터들 Z1, Z2, ..., ZK중 하나가 첫 번째 FIFO(9)로부터 계산 유니트(18)의 입력들(21)에 인가되며 이 벡터는 계산 유니트(18)의 첫 번째 메모리 블록에 써진다. 한 벡터 Zk에 필요한 클럭 사이클들의 개수는 벡터 Y에 포함된 오퍼랜드 Yk의 워드 길이 N'k에 의존하며, N'k/J와 같다(k=1, 2, ..., K). 행렬 Z가 계산 유니트(18)의 첫 번째 메모리 블록에 로드되는 동안 첫 번째 메모리에 항상 저장되는 제어 워드 H가 필요한 형식의 벡터들 Z1, Z2, ..., ZK벡터들을 수신하기 위해 그 하드웨어를 조절하기 위한 목적으로 계산 유니트(18)의 입력들(24)에 인가된다. 시프트 레지스터(7)의 직렬 출력으로부터의 신호 역시 그 직렬 데이타 입력에 인가되고 시프트 레지스터(7)의 워드 길이가 N/J와 같기 때문에, 행렬 Z를 계산 유니트(18)의 첫 번째 메모리 블록에 로드하는 과정이 완료될 때에, 시프트 레지스터(7)는 이 과정 이전과 같은 데이터 즉, 제어 워드 E를 포함하게 된다.
그 후에 활성 신호가 계산 유니트(18)의 제어 입력(27)에 연결된 신경 프로세서 제어 입력과 다섯 번째(5)와 여섯 번째(6) 레지스터의 제어 입력들에 인가된다. 그 결과로 행렬 Z가 계산 유니트의 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 로드되며, 제어 워드 H는 네 번째 레지스터(4)에서 다섯 번째 레지스터(5)로 다시 써지며, 그리고 제어 워드 E가 시프트 레지스터(7)로부터 여섯 번째 레지스터(6)에 한 클럭마다 다시 써진다.
계산 유니트(18)는 다음 클럭 사이클으로부터 시작하여 모든 클럭 사이클에 상기에 기술된 연산을 수행할 것이며, 이는 다음의 식과 같다.
가산기 회로(3)는 매 클럭 사이클마다 계산 유니트(18)의 출력들(28, 29)로부터 그 입력들(31, 32)에 인가되는 벡터들 A와 B의 덧셈을 실행한다. 그리고 가산기 회로(30)의 출력들(34)에서 벡터 S = (S1S2... SM)이 생성되며, 벡터의 m번째 구성 요소는 다음의 식처럼 벡터 A와 B의 m번째 구성 요소들의 합과 같다.
Sm= Am+ Bm(m=1, 2, ..., M)
그리고 벡터 S는 벡터 A와 B의 형식과 같은 형식을 갖는다. 가산기 회로(30) 하드웨어를 필요한 형식의 프로세스 벡터들로 조절하는 것은 다섯 번째 레지스터(5)에 저장된 제어 워드 H를 가산기 회로(30)의 입력들(33)에 공급함으로 해서 제공된다.
그러므로, 계산 유니트(18)와 가산기 회로(30)의 연속적인 연결은 프로그램 가능한 워드 길이 데이타의 벡터들에 연산 S = X + Y × Z 를 각 클럭 사이클에 실행하도록 한다. 입력 오퍼랜드 벡터들의 다른 집합들에 이 연산을 가한 결과들은 중간 결과 누산기의 기능을 하는 두 번째 FIFO(10)에 써지고, 그렇게 하기 위해 두 번째 FIFI(10)에 쓰는 것을 가능하게 하는 신호가 신경 프로세서의 입력(46)에 인가되게 한다.
계산 유니트(18)와 가산기 회로(30)는 계산 유니트(18)의 입력들(20)에 인가된 하나의 N비트 벡터 Y로 묶여진 K개 데이타를 가산기 회로(30)의 출력들(34)에서 생성된 하나의 N비트 벡터 S로 묶여진 M개의 데이타로 스위치하는 한 사이클 스위치로 사용될 수 있다. 그러한 스위칭은, 벡터 X는 계산 유니트(18)의 입력들(19)에 인가되며, 이 벡터의 모든 비트들은 값이 0이며, 계산 유니트(18)의 두 번째 메모리 블록에 행렬 Z가 저장될 때에, S = X + Y × Z 연산을 실행하는 것에 의해 수행되며, 그 연산은 스위칭 규칙을 정의한다. 그리고 행렬 Z는 다음의 요구 사항들을 만족해야 한다: 행렬 Z의 k번째 행과 m번째 열의 교차점에 의치한 원소 Zk,m은 벡터 S의 m번째 원소 Sm이 벡터 Y의 k번째 원소 Yk와 같으면 1-(00...01)b의 값을 가져야 하며, 그렇지 않으면 0-(00...01)b의 값을 가져야 한다; 행렬 Z의 k번째 행인 벡터 Zk는 벡터 S와 같은 형식이어야 한다; 그리고 행렬 Z의 각 열은 1의 값을 가지는 오직 하나의 구성 요소만을 포함해야 한다(이때에 k=1, 2, ..., K; m=1, 2, ..., M). 벡터 S의 필요한 형식을 정의하는 제어 워드 H를 다섯 번째 레지스터(5)에, 벡터 Y의 필요한 형식을 정의하는 제어 워드 E를 여섯 번째 레지스터(6)에 그리고 교환 규칙들을 정의하는 행렬 Z를 계산 유니트(18)의 두 번째 메모리 블록에 로드하는 상기에 설명된 과정은 스위칭 연산 이전에 먼저 실행되어야 한다.
행렬 Z를 계산 유니트(18)의 첫 번째 메모리 블록에 로드하는 과정이 적어도 N/J개 클럭 사이클을 점유하는 반면, S = X + Y × Z 연산은 한 클럭마다 실행된다. 그러므로 신경 프로세서 계산 자원을 효과적으로 사용하는 것은 데이타 벡터 꾸러미들이 처리될 때에만 얻어지며, 그것을 지원하기 위해 두 번째 메모리 블록이 계산 유니트(18)에 포함되며 그리고 레지스터가 아니라 2-포트 FIFO가 중간 결과 누산기(10)로 사용된다.
꾸러미 처리에서 계산 유니트(18)의 입력들(19, 20) 각각에 연속적으로 인가되는 입력 오퍼랜드 벡터들의 집합이 연속적으로 처리되는 부분 집합들(꾸러미들)로 나누어진다. 계산 유니트(18)의 입력들(19, 20)에 연속적으로 인가되고 τ번째 꾸러미에 포함된 입력 오퍼랜드 벡터들의 집합은 다음의 식과 같은 데이타 벡터들의 벡터 모습으로 제시될 수 있다.
이때에 Tτ는 모든 τ번째 꾸러미에 포함된 벡터들의 개수이다. 그리고 하나의 꾸러미의 모든 벡터들은 같은 형식을 가져야 한다. 즉, 다섯 번째(5)와 여섯 번째(6) 레지스터들의 내용들은 하나의 꾸러미가 처리되는 동안에는 바뀌지 않아야 한다.
τ번째 꾸러미들 Xτ와 Yτ를 처리하는 것은 Tτ개 클럭 사이클들마다 실행된다. 그리고 t번째 클럭 사이클에 계산 유니트(18)과 가산기 회로(30)는 다음의 식과 같은 연산을 실행한다.
이때에 Zτ는 계산 유니트의 두 번째 메모리 블록의 내용들이며, 계산 유니트는 τ번째 꾸러미들 Xτ와 Yτ를 처리하는 동안은 바뀌지 않아야 한다. τ번째 꾸러미들 Xτ와 Yτ를 처리하는 전 과정은 결과들을 누산한 것과 함께 데이타 행렬 Yτ에 데이타 행렬 Zτ를 곱하는 과정으로 여겨질 수 있다.
τ번째 벡터 꾸러미 처리와 동시에 (τ+1)번째 꾸러미 Xτ+1의 벡터들의 형식을 정의하는 제어 워드 Hτ+1을 네 번째 레지스터(4)에, (τ+1)번째 꾸러미 Yτ+1의 벡터들의 형식을 정의하는 제어 워드 Eτ+1을 시프트 레지스터(7)에 그리고 행렬 Zτ+1를 첫 번째 FIFO(9)로부터 계산 유니트(18)의 첫 번째 메모리 블록으로 연속적으로 로드하는 상기에 설명된 과정들이 실행된다. 그리고 (τ+1)번째 꾸러미 Xτ+1의 벡터들이 τ번째 꾸러미 Xτ의 벡터들과 형식에서 다를 때에만 새로운 값을 네 번째 레지스터(4)에 로드하는 것이 필요하며, (τ+1)번째 꾸러미 Yτ+1의 벡터들이 τ번째 꾸러미 Yτ의 벡터들과 형식에서 다를 때에만 새로운 값을 시프트 레지스터(7)에 로드하는 것이 필요하다. 이 과정은 많아야 N/J+2 클럭 사이클들을 점유한다.
언급된 과정들 양쪽 다 완료될 때에, 워드 Hτ+1을 네 번째 레지스터(4)에서 다섯 번째 레지스터(5)로, 워드 Eτ+1를 시프트 레지스터(7)에서 여섯 번째 레지스터(6)로 그리고 행렬 Zτ+1을 계산 유니트(18)의 첫 번째에서 두 번째 메모리 블록으로 동시에 이동시키는 것을 시작시키는 활성 신호가 신경 프로세서 제어 입력(27)에 인가된다. 이러한 모든 이동들은 한 클락 사이클마다 실행된다.
모든 τ번째 꾸러미의 벡터들 Tτ의 개수는 프로그램 모드에서 결정될 것이지만 그 값은 두 번째 FIFO(10)에 있는 셀들의 개수와 같은 값 Tmax를 넘으면 안된다. 반대로, N/J+2보다 작은 Tτ와 함께 벡터들의 꾸러미들을 사용하는 것은 좋지않다. 왜냐하면 이런 경우에는 신경 프로세서 계산 능력이 효율적으로 사용되지 않기 때문이다.
행렬 Zτ+1를 첫 번째 FIFO(9)로부터 계산 유니트(18)의 첫 번째 메모리 블록으로 이동시키는 것과 동시에 행렬 Zτ+2, Zτ+3등을 포함하는 세 번째 오퍼랜드 벡터들을 신경 프로세서 첫 번째 입력 버스(35)에서 첫 번째 FIFO(9)로 연속적으로 로딩하는 것이 실행될 수 있을 것이다.
모든 동시 진행들은 신경 프로세서의 출력들(48, 49)에 인가된 첫 번째(9)와 두 번째(10) FIFO의 상태를 나타내는 신호들을 분석해서 그리고 신경 프로세서의 대응 입력들에 인가된 제어 신호들에 의해 동기된다.
3-입력 2-출력 스위치(11)과 멀티플렉서(12)가 교환 시스템을 형성하며, 그때문에 두 번째 FIFO(10)에 있는 내용물들이나 신경 프로세서 입력 버스들(35, 36)의 하나에서 공급되는 데이타는 첫 번째 오퍼랜드 벡터(19)의 입력들에 그리고 계산 유니트(18)의 두 번째 오퍼랜드 벡터(20)의 입력들에 인가될 수 있다. 게다가, 활성 신호에 의해 신경 프로세서 첫 번째 입력 버스(35)로부터 신경 프로세서 제어 입력(40)으로 이전에 써진 레지스터(1)의 내용들은 계산 유니트(18)의 입력들(19)로 인가될 수 있다. 신호들의 특정 조합을 신경 프로세서 제어 입력들(38, 39)에 설정하여 계산 유니트(18)의 입력들(19, 20)에 인가된 데이타의 소스들을 선택하는 것이 이루어진다. 만일 데이터 소스가 두 번째 FIFO(10)에 있으면, 두 번째 FIFIO(10)에서 데이타를 읽어가는 것을 가능하게 하는 신호는 신경 프로세서 제어 입력(47)에 인가되어야 한다.
두 번째 FIFO(10)나 혹은 신경 프로세서 입력 버스들(35나 36)의 하나에서 계산 유니트(18)의 입력들(19, 20)에 인가되는 데이타 벡터들은 포화 유니트들(13, 14)을 통해 지나간다. 유니트들(13, 14) 각각은 이 장치의 입력들(15)에 인가된 벡터 D = (D1D2... DL)의 각 원소로부터 포화 함수를 한 클럭마다 계산한다.
벡터 D는 2의 보수로 표현된 L개 묶음된 데이타의 N비트 워드 하나이며, 이 데이타는 이 벡터의 구성 요소들이다. 벡터 D 형식은 위에서 설명된 벡터 X의 형식과 동일하다. 그러나, 이런 벡터들은 구성 요소들의 개수와 그 벡터안에 묶음된 분리된 데이타의 워드 길이에 있어 다를 수 있다. 벡터 D를 포함하는 데이타의 최소 워드 길이는 2와 같다. 벡터 D의 데이타 L의 개수는 1부터 N/2까지의 어떤 정수도 될 수 있을 것이다. 그러나, 한 벡터 D에 묶음된 모든 데이타의 총 워드 길이는 벡터의 워드 길이와 같아야 하며, 이는 다음의 식과 같이 표현된다.
표화 유니트들(13 혹은 14)의 출력들(17)에서 벡터 F = (F1F2... FL)이 생성되며, 이는 벡터 D와 같은 형식을 가진다. 벡터 F의 λ번째 구성 요소 Fλ는 벡터 D의 λ번째 오퍼랜드 Dλ에 대한 포화 유니트의 계산 결과이며, 이는 다음의 식과 같이 표현된다.
이때에, Qλ는 오퍼랜드 Dλ를 위해 계산된 포화 유니트의 한 변수이다(λ=1, 2, ..., L). 유니트들(13, 14)에 의해 계산된 포화 영역의 일반적인 관점이 도 2에 도시되어 있으며 다음의 식들과 같이 표현될 수 있을 것이다.
부호 비트를 고려하지 않을 때에 벡터 F의 구성 요소 Fλ의 유효 비트들의 개수는 변수 Qλ(λ=1, 2, ..., L)의 값과 같다. Qλ의 값이 오퍼랜드들 Dλ와 Fλ의 워드 길이 N"λ보다 작아야 한다는 것은 확실하다.
벡터들 D와 F의 필요한 형식을 위해 그리고 구현된 포화 함수들의 계수들의 필요한 값들을 위해 포화 유니트(13 혹은 14) 각각의 하드웨어를 조절하는 것은 N비트 제어 워드 U를 상기 유니트의 제어 입력들(16)으로 설정하는 것에 의해 이루어진다.
그리고 워드 U의 비트들은 다음의 값들을 갖는다 : 첫 번째에서 (Q1)번째 비트들의 값은 각각 0, (Q1+1)번째에서 (N"1)번째 비트들의 값은 각각 1, (N"1+1)번째 비트에서 (N"1+Q2)번째 비트들의 값은 각각 0, (N"1+Q2+1)번째 비트에서 (N"1+N"2)번째 비트들의 값은 각각 1, 등등. 일반적인 경우에번째에서번째 비트의 U 워드의 비트들은 각각 그 값이 0이어야 하며번째에서번째 비트들의 값은 각각 1이어야 한다(λ=1, 2, ..., L).
워드 U의 n번째 비트의 값이 1과 같고(un=1) (n+1)번째 비트가 0과 같으면(un+1=0), 포화 유니트(13 혹은 14)는 벡터 D의 n번째 비트를 이 벡터의 대응 구성 요소의 최상위(sign) 비트로 간주할 것이다. 워드 U의 0비트들의 개수는 결과들 F 벡터의 모든 구성 요소들의 유효 비트들의 총 개수와 같으며, 이는 다음의 식과 같이 표현된다.
만일 U=(100...0)이면, 포화 유니트(13 혹은 14)의 입력들(15)로부터의 데이타는 변화없이(F=D) 자신의 출력들(17)을 통해 통과될 것이다.
첫 번째 포화 유니트(13)의 제어 워드는 신경 프로세서 첫 번째 입력 버스(35)로부터 두 번째 레지스터(2)로 로드되며, 두 번째 레지스터의 출력들은 포화 유니트(13)의 제어 입력들(16)로 연결된다. 이 로드는 두 번째 레지스터(2)의 제어 입력(41)에 인가된 활성 신호에 의해 한 클럭마다 실행된다.
두 번째 포화 유니트(14)의 제어 워드는 신경 프로세서 첫 번째 입력 버스(35)에서 세 번째 레지스터(3)로 로드되고, 세 번째 레지스터의 출력들은 포화 유니트의 제어 입력들(16)에 연결된다. 이 로드는 세 번째 레지스터(3)의 제어 입력(42)에 인가된 활성 신호에 의해 한 클럭마다 실행된다.
포화 유니트들(13, 14)는 입력 오퍼랜드 벡터들이 진행될 때에 산술적인 오버플로를 막을 수 잇는 효과적인 매체이다.
포화 유니트(13 혹은 14) 각각은 진행된 데이타 벡터의 구성 요소들에 있는 유효 비트들의 개수만을 줄이게 한다. 데이타 벡터의 분리된 구성 요소들의 워드 길이와 그 형식은 변하지 않는다. 동시에 어떤 경우에는 이 구성 요소의 부호 비트의 확장인 최상위 비트를 버림으로 해서 결과 벡터의 모든 구성 요소의 워드 길이를 줄여 데이타 벡터의 구성 요소들을 위한 포화 함수들을 계산하는 것이 편리하다. 포화 유니트(14)의 출력들(17)에서 생성된 벡터 F = (F1F2... FL)의 구성 요소들에서 워드 길이를 줄이는 그러한 축소와 이 축소때문에 구성 요소들을 다시 묶음하는 것은 2L 방향들로부터 (L+1) 방향으로 데이타 스위치로 동작하는 계산 유니트(18)과 가산기 회로(30)에 의해 한 클럭 사이클마다 실행될 수 있다. 일 예로 아래에 벡터 F가 가산기 회로(30)의 출력들(34)에서 생성된 벡터 S = (S1S2... SL+1)로 전환되는 것에 대한 설명이 있으며, 이때에 λ번째 구성 요소 Sλ는 벡터 F의 λ번째 구성 요소 Fλ의 낮은 순서(유효) 비트들인 Qλ+1이며, 벡터 S의 최상위 비트들에 위치한 (L+1)번째 구성 요소 SL+1은 (00...0)b와 같다. 유니트(14)의 출력들(17)에서 생성된 벡터 F는 계산 유니트(18)의 입력들(20)에 인가된 벡터 Y = (Y1Y2... Y2L)의 모습으로 제시될 수 도 있을 것이며, 이때에 구성 요소들의 λ번째 쌍의 첫 번째 Y2λ-1과 두 번째 Y구성 요소는 각각 벡터 F의 λ번째 N"λ비트 구성 요소 Fλ의 마지막 유효 비트인 Qλ+1 과 N"λ-Qλ-1이다(λ=1, 2, ..., L). 데이타 스위칭 모드에서 0의 값들이 계산 유니트(18)의 입력들(19)에 인가되며, 이런 사실때문에 벡터 Y와 계산 유니트(18)의 두 번째 메모리 블록에 저장된 행렬 Z를 곱한 결과가 가산기 회로(30)의 출력들(34)에서 생성된다. 이 결과는, 만일 상기에 기술된 벡터 S 형식을 정의하는 제어 워드 H가 다섯 번째 레지스터(5)에 저장되고, 상기에 기술된 벡터 Y 형식을 정의하는 제어 워드 E가 여섯 번째 레지스터(6)에 저장되고, 그의 2L개의 행들 각각에 L+1 개의 구성 요소들을 포함하는 행렬 Z가 계산 유니트(18)의 두 번째 메모리 블록에 저장된다면, 필요한 형식의 벡터 S가 될 것이다. 그리고 행렬 Z는 다음의 필요 사항들을 만족시켜야 한다: 행렬 Z의 λ번째 열의 각 구성 요소의 워드 길이는 Qλ+1과 같아야 한다; 행렬 Z의 (2λ-1)번째 행과 λ번째 열의 교차점에 위치한 구성 요소 Z2λ-1,λ는 1-(00...01)b의 값을 가져야 한다; 그리고 행렬 Z의 나머지 구성 요소들은 0-(00...00)b의 값을 가져야 한다(λ=1, 2, ..., L).
만일 포화 유니트(14)의 출력들(17)에서 생성된 벡터 F 를 변환하는 상기에 기술된 연산을 실행하는 데에, 벡터 X = (X1X2... XM+1)가 첫 번째 구성 요소 X1이 0과 같고 워드 길이가와 같은 계산 유니트(18)의 입력들(19)에 인가되면, 벡터 S = (S1S2... SL+M)이 가산기 회로(30)의 출력들(34)에서 생성될 것이며, 이때에 λ번째 구성 요소 Sλ는 벡터 F의 λ번째 구성 요소 Fλ의 낮은 순서(유효) 비트들의 Qλ+1이며(λ=1, 2, ..., L), (L+m)번째 구성 요소는 벡터 X의 (m+1)번째 구성 요소 Xm+1과 같다. 그래서, 신경 프로세서는 입력 데이타 벡터의 구성 요소들에 대한 포화를 실행하도록 하며 얻어진 결과를 다른 입력 데이타 벡터에 한 클럭마다 묶음지게 한다.
신경 프로세서의 주요 기능은 다양한 신경 프로세서를 에뮬레이션하는 것이다. 일반적인 경우에 하나의 신경 네트웍 계층은 Ω개 뉴런들과 Θ개 신경 입력단들을 포함한다. 그리고 ω번째 뉴런은 뉴런 바이어스(bias) Vω를 고려하여 각 신경 입력단에 인가되는 Θ개 데이타 C1, C2, ..., CΘ에 대한 가중된 합을 실행하며, 이는 다음의 식으로 표현할 수 있다.
이때에,는 ω번째 뉴런의번째 입력의 가중된 계수이다(= 1, 2, ..., Θ; ω = 1, 2, ..., Ω). 그러면 ω번째 뉴런은 가중된 합 Gω의 결과에 대한 포화 함수를 계산한다. 이는 다음 식과 같이 표시된다.
신경 프로세서로 구현된 포화 유니트의 일반적인 모습은 도 2에 제시되어 있다. 모든 입력, 가중 계수들, 바이어스 값들 및 결과들은 2의 보수로 표시된다.
제공된 신경 프로세서의 특성은 사용자가 프로그램 모드에서 다음의 신경 프로세서 네트웍 인수들을 설정할 수 있다는 것이다: 계층들의 개수, 각 계층의 뉴런과 신경 입력들의 개수, 각 신경 입력에서의 데이타이 워드 길이, 각 가중 계수의 워드 길이, 각 뉴런의 출력값의 워드 길이 및 각 뉴런을 위한 포화 함수 인수.
한 신경 프로세서는 실제로 무한의 크기의 신경 네트웍 하나를 에뮬레이트할 수 있다. 신경 네트웍은 계층마다 에뮬레이트된다(연속적으로 계층 계층마다).
각 신경 네트웍 계층은 연속적으로 처리되는 단편들로 분할된다. 이 분할은 다음의 방법으로 실행된다. 한 계층의 신경 입력들의 집합은 그룹들로 나누어져서 입력들의 각 그룹의 모든 입력들에 인가되는 데이타의 총 워드 길이가 신경 프로세서 워드 길이 N과 같게 된다. 한 계층의 뉴런들의 집합은 신경들의 그룹으로 나누어지고 그래서 각 뉴런 그룹을 위한 모든 입력 데이타의 가중된 합의 결과들의 총 워드 길이가 신경 프로세서 워드 길이 N과 같게 된다. 그리고 모든 신경 네트웍 계층이 다른 기능을 가진 두가지 모습의 단편들로 분할된다. 첫 번째 모습의 각 단편은 입력들의 한 그룹에 포함된 모든 신경 입력들에 하나의 뉴런 그룹으로부터의 모든 뉴런들을 위해 인가된다. 두 번째 모습의 각 단편은 모든 입력 데이타의 가중된 합의 결과에 포화 함수를 계산함으로 해서 하나의 뉴런 그룹으로부터의 모든 뉴런들을 위한 출력값들을 생성한다.
도 3은 신경 네트웍 계층이 단편들로 분할되는 상기에 기술된 원칙의 예로 사용될 수 있다. 이것을 위해 도 3에 제시된 각 블록이 N비트 데이타 벡터들에 대해 연산들을 실행하고 다음의 방법으로 이 도면의 표시들을 취급하는 것이 필요하다.
- 신경 입력들의번째 그룹에 인가된 데이타의 벡터(= 1, 2, ..., Θ);
Vω - ω번째 뉴런 그룹의 바이어스 값들의 벡터(ω=1, 2, ..., Ω);
- ω번째 뉴런 그룹에서 신경 입력들의번째 그룹에 인가된 입력 데이타의 가중 계수들의 행렬();
Gω- ω번째 뉴런 그룹의 입력 데이타 가중된 합의 결과 벡터(ω=1, 2, ..., Ω);
Rω- ω번째 뉴런 그룹의 출력값들의 벡터(ω=1, 2, ..., Ω).
도 3에서, 곱셈과 덧셈을 실행하는, 장치들의 한 쌍은 첫 번째 모습의 각각의 단편에 대응하며, 그리고 하나의 포화 유니트는 두 번째 모습의 각각의 단편에 대응한다.
하나의 신경 프로세서에서의 전반적인 신경 네트웍 에뮬레이션 과정은 Ω개의 연속적으로 실행되는 과정들의 모습으로 제공될 수 있으며, 과정들 각각은 하나의 뉴런 그룹을 에뮬레이트하며 Θ+1 개의 연속적으로 실행되는 매크로 연산들을 포함하며, 각 매크로 연산은 하나의 신경 네트웍 계층의 한 단편을 에뮬레이트한다. 그리고 이 과정의번째 매크로 연산은 신경 입력들의번째 그룹에 인가된 데이타의 가중된 합을 실행하는 첫 번째 모습의 단편 하나를 그 결과를 누산하여 에뮬레이트한다(). 그 과정의 마지막 매크로 연산은 모든 신경 입력들에 인가된 데이타의 가중된 합에 대한 포화 함수를 실행하는 두 번째 모습의 단편 하나를 상응하는 뉴런 그룹을 위해 에뮬레이트한다.
신경 네트웍 계층 에뮬레이션 중에 실행되는 매크로 연산 각각은 예비의 그리고 실행의 단계를 가진다. 신경 입력들에 인가된 데이타는 각 묶음의 T개 입력 데이타 집합들에 의해 처리된다.
다음의 연산들은 뉴런 에뮬레이션 과정의 ω번째 그룹의 첫 번째 매크로 연산의 준비 단계 동안 연속적으로 실행된다. 벡터 Vω는 신경 프로세서 첫 번째 입력 버스(35)로부터 첫 번째 레지스터(1)로 로드된다. 신경 프로세서 첫 번째 입력 버스(35)로부터 네 번째 레지스터(4)로 벡터 Vω와 모든번째() 매크로 연산의 실행 결과로 생성되는 모든 부분합 벡터들의 형식을 정의하는 제어 워드가 로드된다. 제어 워드가 신경 프로세서 첫 번째 입력 버스(35)로부터 신경 입력들의 첫 번째 그룹에 인가된 데이타 벡터들의 형식을 정의하는 시프트 레지스터(7)로 인가된다. 행렬 W1,ω는 이 행렬이 신경 프로세서 첫 번째 입력 버스(35)로부터 이전에 로드되어야 하는 첫 번째 FIFO(9)로부터 계산 유니트(18)의 첫 번째 메모리 블록으로 이동된다.
ω번째 뉴런 그룹 에뮬레이션 과정의 첫 번째 매크로 연산의 실행 단계의 모든 t번째 클럭 사이클에서 Vω는 첫 번째 레지스터(1)로부터 계산 유니트(18)의 첫 번째 오퍼랜트 벡터(19)의 입력들에 인가되며, 계층의 신경 입력들의 첫 번째 그룹을 공급하는 입력 데이타의 t번째 집합인 벡터는 신경 프로세서 두 번째 입력 버스(36)으로부터 계산 유니트(18)의 두 번째 오퍼랜드 벡터(20)의 입력들에 인가된다(t=1, 2, ..., T). 계산 유니트(18)과 가산기 회로(30)는 다음 식과 같이 나타내지는 부분합 벡터를 생성하고, 이는 두 번째 FIFO(10)에 써진다.
그리고 에뮬레이션의 두 번째 뉴런 그룹의 과정으로부터 시작과 동시에 두 번째 FIFO(10)의 셀들의 하나의 내용들을 신경 프로세서 출력 버스(37)을 통해 외부 메모리에 이동시키는 것이 각 클럭 사이클에 실행될 것이다.
다음의 연산들은 ω번째 뉴런 에뮬레이션 과정의 θ번째(θ=2,3,...,Θ) 매크로 연산의 준비 단계동안에 연속적으로 수행된다. 제어 워드는 신경 프로세서 첫 번째 입력 버스(35)로부터 신경 입력들의 Θ번째 그룹에 인가된 데이타 벡터들의 형식을 정의하는 시프트 레지스터(7)로 로드된다. 행렬 Wθ,ω는 이 행렬이 신경 프로세서 첫 번째 입력 버스(35)로부터 이전에 로드되었어야 하는 첫 번째 FIFO(9)로부터 계산 유니트(18)의 첫 번째 메모리 블록으로 이동된다.
ω번째 뉴런 그룹 에뮬레이션 과정의 θ번째 매크로 연산의 실행 단계의 모든 t번째 클럭 사이클에서 이전 매크로 연산의 결과로 생성된 부분합 벡터는 두 번째 FIFO(10)로부터 계산 유니트(18)의 첫 번째 오퍼랜트 벡터(19)의 입력들에 인가되며, 계층의 신경 입력들의 θ번째 그룹을 공급하는 입력 데이타의 t번째 집합인 벡터는 신경 프로세서 두 번째 입력 버스(36)으로부터 계산 유니트(18)의 두 번째 오퍼랜드 벡터(20)의 입력들에 인가된다(t=1, 2, ..., T). 계산 유니트(18)과 가산기 회로(30)는 다음 식과 같이 나타내지는 부분합 벡터를 생성하고, 이는 두 번째 FIFO(10)에 써진다.
한 뉴런 그룹의 모든 에뮬레이션 과정의 Θ 첫 번째 매크로 연산들 실행에서 포화 유니트(13)는 입력 데이타 가중 합 동안에 계산의 오버플로의 가능성을 배제하기 위해 부분합들 값을 제한하는 데에 사용될 수 있을 것이다. 이런 경우에 매크로 연산들의 준비 단계는 신경 프로세서 첫 번째 입력 버스(35)로부터 두 번째 레지스터(2)에 허나의 제어 워드를 로드하는 것을 포함해야 한다.
다음의 연산들은 ω번째 뉴런 그룹 에뮬레이션 과정의 (Θ+1)번째 매크로 연산의 준비 단계 동안에 연속적으로 실행된다(θ=2, 3, ..., Θ). 제어 워드는 신경 프로세서 첫 번째 입력 버스(35)로부터 세 번째 래지스터(3)으로 로드되는데, ω번째 뉴런 그룹을 위해 계산된 포화 함수들의 계수들을 정의한다. 그러면, 포화 함수 계산들의 결과들을 압측하고 묶는 실행에 필요한 제어 데이타는 네 번째 레지스터(4), 시프트 레지스터(7) 및 계산 유니트(18)의 첫 번째 메모리 블록에 로드된다.
ω번째 뉴런 그룹 에뮬레이션 과정의 (Θ+1)번째 매크로 연산의 실행 단계의 모든 t번째 클럭 사이클에서 부분합 벡터는 두 번째 FIFO(10)로부터 포화 유니트(14)의 입력들에 인가되며, 이 결과 다음의 식으로 표시되는 벡터가 포화 유니트(14)의 출력들(17)에서 생성되고, 이 벡터는 계산 유니트(18)의 입력들(20)에 인가된다.
계산 유니트(18)와 가산기 회로(30)는 부호 비트의 확장인 모든 비트들을 모든 그 벡터의 구성 요소들로부터 제거함으로 해서 벡터를 압축한다. 만일 이런 경우에 0 벡터가 계산 유니트(18)의 입력들(19)에 인가되는 것이 아니라, 신경 프로세서 입력 버스들(35 혹은 36)의 하나로부터의 데이타 벡터가 인가되면, 벡터를 압축한 결과는 그 입력 데이타 벡터에 묶여질 것이다. (ω-1)번째 뉴런 그룹 에뮬레이션 과정의 (Θ+1)번째 매크로 연산의 실행 단계의 t번째 클럭 사이클에서 얻어지고 외부 메모리에 저장된 그 결과는 그러한 벡터로 사용될 수 있을 것이다. 그 결과는 두 번째 FIFO(10)에 기록된다.
한 신경 네트웍 단편 에뮬레이션의 어떤 매크로 연산이 실행될 때에, 준비 단계로부터 실행 단계로의 변환은 실행 단계의 첫 번째 클럭 사이클에 앞선 한 클럭 사이클마다 하나의 활성 신호를 신경 프로세서 제어 입력(27)에 공급함으로 해서 발생한다. 그리고 네 번째 레지스터(4)의 내용들은 다섯 번째 레지스터(5)에 다시 써지고, 시프트 레지스터(7)의 내용들은 여섯 번째 레지스터(6)에 다시 써지며 계산 유니트(18)의 첫 번째 메모리 블록의 내용들은 그 유니트의 두 번째 메모리 블록으로 이동된다.
매크로 연산들의 연속적인 실행은 신경 프로세서에 의해 파이프라인 모드로 수행되며, 이 모드에서는 현재 매크로 연산의 실행 단계가 다음 매크로 연산의 준비 단계와 동시에 이루어진다. 하나의 매크로 연산의 준비 단계의 모든 연산을 실행하는데 필요한 클록 사이클의 개수는 신경 프로세서 레지스터들에 로드되는 제어 워드들의 개수에 종속적인 N/J부터 N/J+4까지의 범위내에 있다. 어떤 매크로 연산의 실행 단계에 필요한 클럭들의 개수는 처리된 입력 데이타 집합들 T의 개수와 같은데, 이 개수는 사용자에 의해 지정된다. 그러므로, 매크로 연산 실행의 최소 주기는 준비 단계 계속 시간에 의해 결정되며 N/J개 프로세서 클럭 사이클들의 계속 시간과 같다. T 값을 N/J과 같게 선택하는 것이 편리하다. 왜냐하면 T보다 작은 값이면 신경 프로세서 유니트들은 효과적으로 사용되지 않을 것이며, T보다 큰 값들이면 신경 입력들에서 다음 데이타 집합에 대한 신경 프로세서의 반응이 증가하며, 그래서 실시간 신경 에뮬레이션이 바람직하지 않다.
일반적인 경우에 Ω×(Θ+1) 단편들로 분리되는 하나의 신경 네트웍 계층을 T 입력 데이타 집합들을 위해 에뮬레이션하는 과정은 Ω×(Θ+1)×T 클럭 사이클마다 하나의 신경 프로세서에서 실행되며, 적어도 Ω×(Θ+1)×N/J 클럭 사이클마다 실행된다.
모든 신경 입력들에 인가된 데이타의 총 워드 길이와 모든 뉴런들을 위한 가중된 합의 결과들의 총 워드 길이는 각각 신경 프로세서 비트 길이 N을 넘지 않는 작은 신경 네트웍 계층은 두 개의 매크로 연산들을 실행하여 에뮬레이트 된다. 첫 번째 매크로 연산은 그 계층의 모든 뉴런을 위한 모든 입력 데이타를 가중해서 더하는 것을 에뮬레이트 하고 두 번째 것은 그 계층의 모든 뉴련들의 위한 포화 함수들을 계산을 에뮬레이트 한다.
신경 프로세서에 두 개의 입력(35, 36)과 하나의 출력(37) 버스가 있다는 것은 그 프로세서 기반에 효율적인 멀티프로세서 시스템들을 생성할 수 있게 한다. Ξ개의 신경 프로세서들을 포함하는 시스템은 하나의 신경 프로세서보다 Ξ배 빨리 하나의 신경 네트웍 계층을 에뮬레이트 할 수 있을 것이다. 극단적인 경우에는 모든 계층의 모든 단편들이 별개의 신경 프로세서에 의해 에뮬레이트 될 수 있을 것이다.
신경 프로세서의 주요 유니트는 계산 유니트(18)이다.
도 4는 프로그램 가능한 워드 길이 데이터의 벡터들에 대해 연산을 수행하기 위한 계산 유니트(18)의 가능한 구현예의 하나에 대한 블록 다이아그램인데, 이 계산 유니트는 계산 유니트에 내장되며, 최소값 J는 계산 유니트(18)의 두 번째 오퍼랜드 벡터들에서 데이터 워드 길이들의 약수일때에, 모든 N비트 벡터 오퍼랜드에 J비트들을 왼쪽으로 산술적으로 이동시키는 것을 수행하는 시프트 레지스터(50) 하나, 하나의 지연 소자(51), 연속적인 입력 포트와 N비트 데이터를 저장하기 위한 N/J개 셀들을 포함하는 첫 번째 메모리 블록(52) 하나, N비트 데이터를 저장하기 위한 N/J개의 셀들을 포함하는 두 번째 메모리 블록(53) 하나, 블록들 각각이 프로그램 가능한 워드 길이 데이터의 N비트 벡터에 J비트 곱셈기를 곱하는 N/J개의 곱셈기 블록들(54) 및 N/J+1개의 프로그램 가능한 워드 길이 데이터 벡터들의 합의 부분곱을 생성하는 벡터 가산 회로 하나를 포함한다.
계산 유니트(18)의 세 번째 오퍼랜드 벡터 비트들의 입력들(21)은 시프트 레지스터(50)의 데이타 입력들에 연결되며, 시프트 레지스터의 출력들은 첫 번째 메모리 블록(52)의 데이타 입력들에 연결되며, 첫 번째 메모리 블록에서 각 셀의 출력들은 두 번째 메모리 블록(53)의 각 셀의 데이타 입력들에 연결되며, 두 번째 메모리 블록에서 각 셀의 출력들은 각 곱셈기 블록(54)의 피승수 벡터 비트들의 입력들에 연결되며, 곱셈기 블록에서 곱셈기 비트들의 입력들은 계산 유니트(18)의 두 번째 오퍼랜드 벡터 비트들(20)의 각 J비트 그룹의 입력들에 연결된다. 각 곱셈기 블록(54)의 출력들은 벡터 가산 회로(55)의 각 피가수 벡터의 비트들의 입력들에 연결되며, 벡터 가산 회로에서 (N/J+1)번째 피가수 벡터 비트들의 입력들은 계산 유니트(18)의 첫 번째 오퍼랜드 벡터 비트들의 입력들(19)에 연결되며, 계산 유니트에서 세 번째 오퍼랜드 벡터들을 위해 설정된 데이타 경계들의 입력들(24)은 시프트 레지스터(50)의 오퍼랜드 벡터들을 위해 설정된 데이타 경계들의 각 입력들에 연결되며, 시프트 레지스터에서 모드 선택 입력은 세 번째 오퍼랜드 벡터들을 계산 유니트(18)의 첫 번째 메모리 블록으로 로드하는 제어의 첫 번째 입력(25)에 연결되며, 계산 유니트에서 세 번째 오퍼랜드 벡터들을 첫 번째 메모리 블록으로 로드하는 제어의 두 번째 입력(26)은 시프트 레지스터(50)의 클럭 입력과 지연 소자(51)의 입력에 연결되며, 지연 소자의 출력은 첫 번째 메모리 블록(52)의 쓰기 제어 입력에 연결된다. 두 번째 메모리 블록(53)의 쓰기 제어 입력은 세 번째 오퍼랜드 행렬을 계산 유니트(18)의 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 다시 로드하는 제어의 입력(27)에 연결되며, 계산 유니트에서 두 번째 오퍼랜드 벡터들을 위해 설정된 데이타 경계들의 모든 입력(23)은 각 곱셈기 블록(54)의 부호 정정의 입력에 연결된다. 계산 유니트(18)의 첫 번째 오퍼랜드 벡터와 결과 벡터들을 위해 설정된 데이타 경계들의 입력들(22)은 피승수 벡터들과 각 곱셈기 블록(54)의 결과 벡터들을 위해 설정된 데이타 경계들의 입력들과 벡터 가산 회로(55)의 피가수 벡터들과 결과 벡터들을 위해 설정된 데이타 경계들의 입력들에 연결되며, 벡터 가산 회로에서 결과들의 첫 번째와 두 번째 피가수 벡터들의 비트들의 출력들은 각각 계산 유니트(18)의 출력들(28, 29)에 연결된다.
계산 유니트(18)는 다음과 같이 연산한다.
행렬 Z를 계산 유니트(18)의 두 번째 메모리 블록(53)에 로딩하는 과정은 두 단계들을 실행한다.
처음에 N/J개 클럭 사이클마다 행렬 Z는 계산 유니트(18)의 첫 번째 메모리 블록에 로드되는 행렬
로 변환된다. 그리고 행렬 Z'의 i번째 행은 데이타 벡터이며, 이 데이타 벡터는 벡터 Y의 비트들의 i번째 J비트 그룹에 의해 곱해지게 될 것이다(i=1, 2, ..., N/J). 모든 벡터들는 벡터들의 어떤 벡터의 형식과 같은 형식을 가진다. 행렬 Z는 행렬 Z의 k번째 행 Zk를 행렬 Z'의 다음의 식에 의해 생성되는 N'k/J개 행들로 대체하여 행렬 Z'로 변환된다.
이때에 Ik는 벡터 Y의 k개 첫 번째 오퍼랜드에 있는 비트들의 J비트 그룹들의 총 개수이며,는 벡터 Y의 k번째 구성 요소의 워드 길이이며, 다음의 식과 같은 관계가 있다.
상기 표현에 나타난 것으로부터등이 뒤따른다. 이것은 행렬 Z가 행렬 Z'로 ,대개는, 다른 위치에서 표현될 것이다.
행렬 Z는 N/J개 클럭마다 쉬프트 레지스터(50)에 의해 행렬 Z'로 변환된다. 이 N/J개 클럭 사이클들 각각에 한 클럭 신호가 계산 유니트(18)의 제어 입력(26)에 인가되며, 이 클럭은 시프트 레지스터(50)의 클럭 입력을 공급하며, 그리고 상기에 설명된 N비트 제어 워드 H는 계속적으로 계산 유니트(18)의 입력들(24)에 인가되며, 그리고 이 제어 워드는 시프트 레지스터(50)의 오퍼랜드 벡터들을 위해 설정된 데이타 경계들의 입력들을 공급한다. i번째 클럭 사이클(i=1, 2, ..., N/J)에서 상기 설명된 (N/J) 비트 제어 워드 E의 i번째 비트 ei는 계산 유니트(18)의 제어 입력(25)에 인가된다. 이 신호는 시프트 레지스터(50)의 모드 선택 입력을 공급한다.
(Ik-1+1)번째 클럭 사이클에서(k=1, 2, ..., K), 값 1인 워드 E의 한 비트가 계산 유니트(18)의 입력들(25)에 인가되며, 시프트 레지스터(50)는 자신의 모드를 계산 유니트(18)의 입력들(21)에 인가된 벡터 Zk를 로드하기 위한 것으로 바꾼다. 남은 (N/J-K)개 클럭 사이클에서, 값 0인 워드 E의 한 비트가 계산 유니트(18)의 입력(25)에 인가되고, 시프트 레지스터(50)는 내장하고 있는 그 데이타 벡터에 J비트들의 왼쪽으로의 산술적인 시프트를 실행한다.
그러므로, 행렬 Z를 행렬 Z'으로 변환하는 과정의 i번째 클럭 사이클(i=1, 2, ..., N/J)이 끝나면, 벡터 z'i는 시프트 레지스터(50)에 저장된다. 시프트 레지스터(50)의 출력들로부터의 데이타는 연속적인 입력 포트를 포함하는 첫 번째 메모리 블록(52)의 데이타 입력들로 인가된다.
행렬 Z를 행렬 Z'으로 변환하는 전 과정동안 각 클럭 사이클에서 계산 유니트(18)의 입력(26)에 인가되는 클럭 신호는 보통의 인버터 게이트일 수 있는 지연 소자(51)를 통하여 계산 유니트(18)의 첫 번째 메모리 블록(52)의 쓰기 제어 입력에 전달된다. 그러므로 계산 유니트(18)의 첫 번째 메모리 블록(52)에 행렬 Z'를 로드하는 것은 행렬 Z를 행렬 Z'으로 변환하는 것과 동시에 발생할 것이다. 로딩하는 끝에서 벡터 Z'i(i=1, 2, ..., N/J)는 계산 유니트(18)의 첫 번째 메모리 블록(52)의 i번째 셀에 저장될 것이다.
클락 신호가 한 클럭 사이클마다 계산 유니트(18)의 제어 입력(27)에 인가된 후에, 그리고 이 신호때문에 첫 번째 메모리 블록(52)의 모든 셀들의 내용들은 계산 유니트(18)의 두 번째 메모리 블록(53)의 대응 셀들에 다시 써진다. 그러므로 행렬 Z'는 한 클럭 사이클마다 계산 유니트(18)의 첫 번째(52)로부터 두 번째(53) 메모리 블록으로 이동된다.
다음의 클럭 사이클로부터 시작하여 곱셈기 블록들(54)와 벡터 가산 회로(55)인 가산 유니트(18)의 실행 유니트는 각 클럭 사이클에 연산 X + Y × Z의 부분곱을 생성할 것이다. 그리고 계산 유니트(18)의 입력들(20)에 인가된 벡터 Y의 비트들 Y'i의 i번째 그룹에 의해 계산 유니트(18)의 두 번째 메모리 블록(53)의 i번째 셀에 저장되는 벡터 Z'i의 곱셈의 부분곱을 생성하기 위해 i번째 곱셈기 블록(54)은 다음의 식을 사용한다.
Pi= Z'i× Y'i
제어 위드 E는 계산 유니트(18)의 입력들(23)에 인가되며, 이 워드의 j번째 비트 ej는 (j-1)번째 곱셈기 블록(54)의 부호 정정 입력을 공급한다(j=2, 3, ..., N/J). 제어 워드 E의 최하위 비트 e1은 (N/J)번째 곱셈기 블록(54)의 부호 정정 입력에 인가된다. 그러므로 벡터 Y의 구성 요소들 중 하나의 최상위 비트들의 한 그룹이 곱셈기 비트들의 입력들에 인가되는 때에, 각 곱셈기 블록(54)는 2의 보수의 표현으로 곱셈을 수행할 것이다. 나머지 N/J-K 개 곱셈기 블록들(54)는 부호와 크기를 나타내는 표현으로 연산할 것이다.
벡터 가산 회로(55)는 부분곱 P1, P2, ..., PN/J와 계산 유니트(18)의 입력들(19)에 인가된 벡터 X의 합의 부분곱을 생성한다. 이 회로는 올림수 저장 가산기에 기초하여 설계될 수도 있을 것이다.
제어 워드 H는 계산 유니트(18)의 입력들(22)에 인가되며, 모든 곱셈기 블록(54)의 피승수 벡터들을 위해 설정된 데이타 경계들의 입력들과 벡터 가산 회로(55)의 피가수 벡터들을 위해 설정된 데이타 경계들의 입력들을 공급한다. 이런 경우 계산 유니트(18)의 각 실행 유니트에서 입력 벡터들의 다른 구성 요소들을 처리하는 이런 유니트들의 비트들간의 올림수 전달은 막힐 것이다.
벡터 가산 회로(55)의 출력들에서 벡터 A과 벡터 B는 생성되며 그들의 합은 다음의 식과 같다.
부분곱들을 그룹짓고, 벡터 Y의 분리된 구성 요소들을 참조하면 마지막 표현은 다음의 식과 같이 표현될 수 있다.
벡터 Y의 모든 k번째 구성 요소들이과 같다는 사실을 고려하면, 이전의 표현은 다음의 식과 같이 전환될 것이다.
그러므로, 연산 X + Y × Z의 부분곱은 계산 유니트의 출력들(28, 29)에서 생성된다.
일반적인 경우에 클럭 사이클 시간은 3-입력 2-출력 스위치(11), 포화 유니트(14), 계산 유니트(18) 및 가산기 회로(30)에 연속적으로 연결되어 총 전달 지연 시간에 의해 정의된다. 그 데이타 입력들이 포화 유니트들의 입력들(15)에 연결되는 입력 데이타 레지스터들을 포함하는 포화 유니트들(13, 14), 그 데이타 입력들의 계산 유니트의 입력들(19, 20)에 연결되는 입력 데이타 레지스터를 포함하는 계산 유니트(18), 그 데이타 입력들이 가산기 회로의 입력들(31, 32, 33)에 연결되는 입력 데이타 레지스터를 포함하는 가산기 회로(30)을 사용하게 되면 신경 프로세서 성능은 본질적으로 증가할 수 있다. 신경 프로세서에 실행 유니트에 그러한 레지스터들이 있다는 것은 다음의 세 가지 과정들을 매 클럭에 병행하여 실행하는 것을 제공하는 파이프라인 모드에서 데이타를 처리할 수 있도록 하는 것이다: 계산 유니트(18)에 의해 현재의 데이타 집합의 가중된 합의 부분곱을 생성하고, 이전 데이타 집합의 가중된 합의 부분곱을 가산기 회로(30)에서 더하며, 포화 유니트들(13, 14)에서 입력 오퍼랜드들의 다음 집합을 위한 포화 함수들을 계산. 포화 유니트들(13, 14), 계산 유니트(18) 및 가산기 회로(30)의 최대 전달 지연들은 거의 같은 값들을 가지며, 파이프라인 레지스터들이 합쳐진 것은 신경 프로세서 클럭 레이트를 실제로 세 배 증가하도록 한다.
포화 유니트는 도 5에 그 블록 다이아그램이 제시되어 있는데, 입력 오퍼랜드 벡터(15) 비트들의 입력들, 제어 입력들(16) 및 결과 벡터(17) 비트들의 출력들을 포함한다. 상기 유니트의 N개 비트들(56) 각각은 첫 번째(57)와 두 번째(58) 멀티플렉서들, 하나의 EXCLUSIVE OR 게이트(59), 하나의 EQUIVALENCE 게이트(60), 하나의 NAND 게이트(61) 및 반전된 입력을 가지는 하나의 AND 게이트(62)를 포함한다. 상기 유니트는 또한 올림수 전달(carry propagation) 회로(63) 하나를 포함하며, 초기 올림수 입력(64), 분리된 비트들을 통한 올림수 전달의 반전된 입력들(65), 분리된 비트들의 올림수 입력(66)과 분리된 비트들로의 올림수의 출력들(67) 및 올림수 예견 회로(68)를 포함하는데, 올림수 예견 회로는 초기 올림수 입력(69), 분리된 비트들을 통한 올림수 전달의 입력들(70), 분리된 비트들의 올림수 생성 입력들(71) 및 분리된 비트들로의 올림수의 출력을 포함한다.
첫 번째(57)와 두 번째(58) 멀티플렉서의 두 번째 데이타 입력과 상기 유니트의 각 비트(56)의 EXCLUSIVE OR 게이트(59)의 첫 번째 입력은 짝지어서 상기 유니트의 입력 오퍼랜드 벡터의 각 비트(15)에 연결되며, 결과 벡터의 각 비트(17)의 출력은 상기 유니트의 각 비트(56)의 첫 번째 멀티플렉서(57)의 출력에 연결된다.
반전된 입력을 가지는 AND 게이트(62)의 반전되지 않은 입력과 상기 유니트의 각 비트(56)의 NAND 게이트(61)와 EQUIVALENCE 게이트(60)의 첫 번째 입력들은 짝지어서 상기 유니트의 각 제어 입력(16)에 연결된다. 상기 유니트의 EXCLUSIVE OR 게이트(59)의 첫 번째 입력과 q번째 비트(56)의 반전된 입력(62)를 가지는 AND 게이느의 반전되지 않은 입력은 각각 상기 유니트의 EXCLUSIVE OR 게이트(59)의 두 번째 입력과 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트(62)의 반전된 입력에 연결되며, 두 번째 멀티플렉서(58)의 첫 번째 데이타 입력은 올림수 전달 회로(63)의 (N-q+2)번째 비트로의 올림수의 출력(67)에 연결된다(이때에 q=2, 3, ..., N). 상기 유니트의 n번째 비트(56)의 NAND 게이트(61)의 출력은 올림수 예견 회로(68)의 (N-n+1)번째 비트(70)를 통해 올림수 전달의 입력에 연결되며, 올림수 예견 회로에서 (N-n+2)번째 비트(72)로의 올림수의 출력은 상기 유니트의 n번째 비트(56)의 첫 번째 멀티플렉서(57)의 제어 입력에 연결되며, 반전된 입력을 가지는 AND 게이트(62)의 출력은 상기 유니트의 동일 비트(56)의 두 번째 멀티플렉서(58)의 제어 입력, 올림수 예견 회로(68)의 (N-n+1)번째 비트(71)의 올림수 생성 입력 및 올림수 전달 회로(63)의 (N-n+1)번째 비트(65)를 통해 올림수 전달의 반전된 입력에 연결되며, 올림수 전달 회로에서 (N-n+1)번째 비트(66)로부터의 올림수 입력은 상기 유니트의 n번째 비트(56)의 두 번째 멀티플렉서(58)의 출력에 연결된다(이때에 n=1, 2, ..., N). 상기 유니트의 각 비트(56)에서 두 번째 멀티플렉서(58)의 출력은 EQUIVALENCE 게이트(60)의 두 번째 입력에 연결되며, EQUIVALENCE 게이트의 출력은 첫 번째 멀티플렉서(57)의 첫 번째 데이타 입력에 연결되며, EXCLUSIVE OR 게이트(59)의 출력은 NAND 게이트(61)의 두 번째 입력에 연결된다.
상기 유니트의 n번째 비트의 NAND 게이트의 출력은 올림수 예견 회로의 (N-n+1)번째 비트를 통해 올림수 전달의 입력으로 연결되며, 올림수 예견 회로에서 (N-n+2)번째 비트로의 올림수 출력은 상기 유니트의 n번째 비트의 첫 번째 멀티플렉서의 제어 입력에 연결되며, 반전된 입력을 가지는 AND 게이트의 출력은 상기 유니트의 같은 비트의 두 번째 멀티플렉서의 제어 입력과 상기 올림수 전달 회로의 (N-n+1)번째 비트의 올림수 생성 입력 및 상기 올림수 전달 회로의 (N-n+1)번째 비트를 통해서 올림수 전달의 반전된 입력에 연결되며, 올림수 전달 회로에서 (N-n+1)번째 입력으로부터의 올림수 입력은 상기 유니트의 n번째 비트의 두 번째 멀티플렉서의 출력에 연결되며 (이때에 n=1, 2, ..., N), EXCLUSIVE OR 게이트(59)의 두 번째 입력, 반전된 입력을 가지는 AND 게이트(62)의 반전된 입력 및 상기 유니트의 N번째 비트(56)의 두 번째 멀티플렉서(58)의 첫 번째 데이터 입력, 올림수 전달 회로(63)의 초기 올림수 입력(64) 및 올림수 예견 회로의 초기 올림수 입력(69)은 짝지어서 "0"에 연결된다.
포화 유니트의 회로들(63, 68)과 같이 다양한 올림수 전달 회로들과 올림수 예견 회로들이, 병렬 가산기들에 응용되어, 사용될 수 있을 것이다.
올림수 전달 회로(63) 구현의 가장 단순한 변형에서 q번째 비트(67)로의 올림수의 출력이 (q-1)번째 비트로부터의 올림수 입력에 연결된다(이때에 q=1, 2, ..., N).
포화 유니트는 다음과 같이 동작한다.
입력 오퍼랜드 벡터 D = (D1D2... DL)의 비트들이 상기 유니트의 입력들(15)에 인가된다. 벡터 D는 L개 묶음된 2의 보수로 표현된 N비트 워드이며, 이것들은 이 벡터의 구성 요소들이다. 그리고 벡터 D의 최하위 비트들은 첫 번째 자료 D1의 비트들이며, 그러면 두 번째 자료 D2의 비트들이 뒤따른다. 벡터 D의 최상위 비트들은 L번째 자료 DL의 비트들이다. 그러한 묶음으로 λ번째 자료 Dλ의 ν번째 비트는 벡터 D의번째 비트이며, 이때에 Nλ는 λ번째 자료 Dλ의 워드 길이이며, ν=1, 2, ..., Nλ, λ=1, 2, ..., L 이다.
벡터 D를 포함하는 데이타의 최소 워드 길이는 2과 같다. 일반적인 경우에 벡터 D의 λ번째 자료 Dλ내의 비트들의 개수는 2부터 N까지의 어떤 수일 것이며(λ=1, 2, ...,L), 이 벡터내에 묶음된 데이타 L의 개수는 1부터 N/2까지의 어떤 수일 것이다. 하나의 벡터 D에 묶음된 모든 데이타의 총 워드 길이는 그의 워드 길이와 같아야 한다는 제한만이 있으며, 이 관계는 다음의 식으로 표현된다.
그 유니트는 벡터 F = (F1F2... FL)의 출력들(17)에 생성하는 것이 목적이며, λ번째 구성 요소 Fλ는 다음의 식과 같이 벡터 D의 λ번째 오퍼랜드 Dλ의 포화 함수를 계산한 결과이다.
이때에 Qλ는 오퍼랜드 Dλ를 위해 계산되는 포화 함수의 계수이다(λ=1, 2, ..., L). 상기 유니트에 의해 계산된 포화 함수의 일반적인 면은 도 2에 제시되어 있으며 다음의 식으로 기술될 수 있을 것이다.
벡터 F는 벡터 D의 형식과 같은 형식을 가진다. 부호 비트를 고려하지 않으면 벡터 F의 구성 요소 Fλ의 유효 비트들의 개수는 계수 Qλ의 값과 같으며, 이는 오퍼랜드 Dλ와 Fλ의 워드 길이 Nλ보다 작아야 한다(λ=1, 2, ..., L).
벡터 D와 F의 필요한 형식과 구현된 포화 함수들의 계수들의 필요한 값들을 위해 상기 유니트의 하드웨어를 조절하는 것은 N비트 제어 워드 U를 상기 유니트의 제어 입력들(16)에 세팅함으로 해서 이루어진다.
그리고 워드 U의 비트들은 다음의 값들을 가져야 한다: 첫 번째에서 Q1번째까지의 비트들 값은 각각 0, (Q1+1)번째에서 N1번째 비트들의 값은 각각 1, (N1+1)번째에서 (N1+Q1)번째 비트들의 값은 각각 0, (N1+Q1+1)번째에서 (N1+N2)번째 비트들의 값은 각각 1, 등등. 일반적인 경우에 U 워드의 ()번째에서 ()번째 비트들의 값은 0이어야 하며 ()번째에서 ()번째 비트들의 값은 각각 1이어야 한다(λ=1, 2, ...,L).
워드 U의 n번째 비트의 값이 1과 같고 (un=1) (n+1)번째 비트의 값은 0과 같으면(un=0), 상기 유니트는 벡터 D의 n번째 비트를 이 벡터의 대응 원소의 최상위(sign) 비트로 간주할 것이다. 워드 U의 0비트들의 개수는 결과들의 벡터 F의 모든 원소들에 있는 유효 비트들의 총 개수와 같다.
상기 유니트의 n번째 비트(56)의 반전된 입력을 가지는 AND 게이트(62)는 신호를 생성하며, 이 신호는 상기 유니트의 n번째(이하에서는 n=1, 2, ..., N) 비트가 벡터 D를 포함하는 입력 오퍼랜드들 중 하나의 부호 비트를 처리하는 것을 나타낸다. 상기 유니트의 n번째 비트(56)의 두 번째 멀티플렉서(58)는 신호를 생성하며, 그 신호는 비트가 벡터 D의 n번째 비트 dn인 입력 오퍼랜드의 부호(최상위) 비트의 값을 가진다.
상기 유니트 모든 비트들(56)을 위한 신호들 vn을 생성하는 것을 빠르게 할 목적으로 올림수 전달 회로(63)가 사용되며, 이 회로는 보통의 병렬 가산기들에 인가된 연속적인 혹은 예견 올림수를 가진 회로로 알려져 있을 것이다. 제공된 유니트의 올림수 전달 회로(63)의 특징은 신호들 vn이 입력과 출력 올림수로 사용되고 신호들 gn의 반전된 값들은 분리된 비트들을 통해 올림수 전달의 신호들로 사용된다는 것이다. 이런 경우 올림수는 상기 유니트의 최상위 비트들로부터 최하위 비트로 전달된다.
상기 유니트의 n번째 비트(56)의 EXCLUSIVE OR 게이트(59)와 NAND 게이트(61)는 신호을 생성하며, 이 신호는 벡터 D의 n번째 비트 dn의 값이 입력 오퍼랜드를 위해 워드 U에 의해 결정된 포화 영역을 초과하지 않는 다는 것을 나타내며, 그 입력 오퍼랜드의 비트는 벡터 D의 n번째 비트 dn이다.
올림수 예견 회로(68)는 상기 유니트의 모든 n번째 비트(56)을 위해 신호를 생성하며, 이 신호는 그의 비트가 벡터 D의 n번째 비트 dn인 입력 오퍼랜드의 n번째 비트 dn으로부터 최상위 비트까지 벡터 D의 모든 비트들의 값이 이 입력 오퍼랜드를 위해 워드 U에 의해 결정된 포화 영역을 초과하지 않는다는 것을 나타낸다. 보통의 병렬 덧셈기에 인가된 어떤 알려진 연속적인 혹은 올림수 생성 회로가 참조 번호 68의 회로로 사용될 수 있을 것이다. 제공된 유니트에서 신호들 gn이 입력들(71)에 인가된 올림수 생성 신호들로 사용되며, 신호들 pn이 입력들(70)에 인가된 올림수 전달 신호들로 사용되며, 신호들 cn은 올림수 출력들(72)에서 생성되는 것이 올림수 예상 회로(68)의 특징이다. 이런 경우 올림수는 상기 회로의 최상위 비트에서 최하위 비트로 전달된다.
EQUIVALENCE 게이트(60)와 상기 유니트의 n번째 비트(56)의 첫 번째 멀티플렉서(57)는 결과 벡터 F의 n번째 비트 fn의 값을 다음의 식에 따라 생성한다.
만일 cn=1이면 첫 번째 멀티플렉서(57)의 출력에서 벡터 D의 비트 dn이 설정되며, 만일 cn=0이고 un=1이면 첫 번째 멀티플렉서(57)의 출력에서 벡터 D의 대응 오퍼랜드의 부호 비트(vn)의 반전되지 않은 값이 설정되고, 만일 cn=0이고 un=0이면 첫 번째 멀티플렉서(57)의 출력에서 벡터 D의 대응 오퍼랜드의 부호 비트()의 반전된 값이 설정된다. 첫 번째 멀티플렉서들(57)의 출력들에서 얻어진 결과 벡터 비트들은 상기 유니트의 출력들(17)을 공급한다.
만일 제어 워드 U=(100...0)가 상기 유니트의 입력들(16)에 인가되면 상기 유니트의 입력들(15)로부터의 데이타는, 변하지 않고(F=D) 그 유니트의 출력으로 지나갈 것이라는 것을 주목할 필요가 있다.
그러므로, 제공된 포화 유니트는 두개의 N비트 숫자들의 보통의 병렬 가산기의 전달 지연과 거의 같은 전달 지연을 갖는다. 이 경우 상기 유니트는 워드 길이가 사용자에 의해 프로그램될 수 있는 여러 개의 데이타를 위한 포화 함수들을 동시에 계산하도록 한다.
도 7에 블록 다이아그램이 도시된 계산 유니트는 첫 번째(19), 두 번째(20)와 세 번째(21) 오퍼랜드 벡터 비트들의 입력들, 첫 번째 오퍼랜드 벡터들과 결과 벡터들, 두 번째 오퍼랜드 벡터들(23)과 세 번째 오퍼랜드 벡터들(24)을 위한 경계 설정의 입력들, 세 번째 오퍼랜드 벡터들을 첫 번째 메모리 블록으로 로드하는 제어의 첫 번째(25)와 두 번째(26) 입력들, 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력 및 결과들의 첫 번째 피가수 벡터(28)와 결과들의 두 번째 피가수 벡터(29)의 비트들의 출력들을 포함한다. 상기 유니트는 하나의 시프트 레지스터(50), 하나의 지연 소자(51), 반전된 입력을 가지는 N/2개의 AND 게이트들, 곱셈기 비트들의 N/2 디코더들(76), 각 열이 N개 열들과 N/2 셀들의 곱인 곱셈기 어레이(77) 하나를 포함한다. 시프트 레지스터(50)의 어떤 비트도 반전된 입력을 가지는 하나의 AND 게이트(78), 하나의 멀티플렉서(79) 및 하나의 트리거(80)를 포함한다. 곱셈기 어레이(77)의 각 셀은 상기 유니트의 각각 첫 번째 메모리 블록들과 두 번째 메모리 블록들의 메모리 셀들의 기능을 하는 첫 번째(81)과 두 번째(82) 트리거들, 반전된 입력을 가지는 하나의 AND 게이트(83), 하나의 일비트 부분곱 생성 회로(84), 하나의 일비트 가산기(85) 및 하나의 멀티플렉서(86)를 포함한다. 도 7에서 곱셈기 어레이(77)의 셀들의 열들은 왼쪽에서 오른쪽으로 번호가 붙여지며, 곱셈기 어레이(77)의 열들의 셀들은 위에서 아래로 번호가 붙여진다.
상기 유니트의 첫 번째 오퍼랜드 벡터(19)의 각 비트의 입력은 곱셈기 어레이(77)의 각 열의 첫 번째 셀의 일비트 가산기(85)의 두 번째 입력에 연결되며, 곱셈기 어레이의 각 셀의 일비트 가산기(85)의 첫 번째 입력은 곱셈기 어레이(77)의동일 셀의 일비트 부분곱 생성 회로(84)의 출력에 연결되며, 멀티플렉서들(86)의 제어 입력들과 상기 곱셈기 어레이의 각 열의 모든 셀들의 반전된 입력을 가지는 AND 게이트들(83)의 반전된 입력들은 짝지어서 상기 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들(22)을 위해 설정된 데이터 경계들의 각 입력에 연결된다. 상기 유니트의 두 번째 오퍼랜드 벡터들(23)을 위해 설정된 데이터 경계들의 각 입력은 반전된 입력을 가지는 각 AND 게이트(75)의 반전된 입력에 연결되며, AND 게이트의 출력은 곱셈기 비트들의 각 디코더(76)의 첫 번째 입력에 연결된다. 곱셈기 어레이(77)의 모든 행들의 i번째 셀들의 일비트 부분곱 생성 회로들(84)의 각 제어 입력들은 짝지어서 곱셈기 비트들의 i번째 디코더(76)의 각 출력에 연결되며, 곱셈기 비트들의 i번째 디코더(76)의 두 번째와 세 번째 입력은 상기 유니트의 두 번째 오퍼랜드 벡터의 (2i-1)번째와 (2i)번째 비트의 입력들에 각각 연결된다(이때에 i=1, 2, ..., N/2).
반전된 입력을 가지는 j번째 AND 게이트(75)의 반전되지 않은 입력은 곱셈기 비트들의 (j-1)번째 디코더(76)의 세 번째 입력에 연결된다(이때에 j=2, 3, ..., N/2). 상기 유니트의 세 번째 오퍼랜드 벡터의 각 비트의 입력(21)은 시프트 레지스터(50)의 각 비트의 멀티플렉서(79)의 두 번째 데이터 입력에 연결되며, 시프트 레지스터에서 첫 번째 데이터 입력은 시프트 레지스터(50)의 동일 비트의 반전된 입력을 가지는 AND 게이트(78)의 출력에 연결되며, 그 AND 게이트의 첫 번째 반전된 입력은 상기 유니트의 세 번째 오퍼랜드 벡터들(24)을 위해 설정된 데이터 경계들의 각 입력에 연결된다. 시프트 레지스터(50)의 q번째 비트의 반전된 입력을 가지는 AND 게이트(78)의 두 번째 반전된 입력은 상기 시프트 레지스터(50)의 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트(78)의 첫 번째 반전된 입력에 연결된다(이때에 q=2, 3, ..., N). 시프트 레지스터(50)의 r번째 비트의 반전된 입력들을 가지는 AND 게이트(78)의 반전되지 않은 입력은 그 시프트 레지스터의 (r-2)번째 비트의 트리거(80) 출력에 연결된다(이때에 r=3, 4, ..., N). 모든 시프트 레지스터(50) 비트들의 멀티플렉서들(79)의 제어 입력들은 짝지어서 상기 유니트의 첫 번째 메모리 블록(25)으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력에 연결된다. 모든 시프트 레지스터(50) 비트들의 트리거들(80)의 클럭 입력들과 지연 소자(51)의 입력은 짝지어서 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어(26)의 두 번째 입력에 연결된다. 각 시프트 레지스터(50) 비트의 멀티플렉서(79)의 출력은 시프트 레지스터(50)의 동일 비트의 트리거(80)의 데이터 입력에 연결되고, 시프트 레지스터의 출력은 곱셈기 어레이(77)의 각 열의 마지막 셀의 첫 번째 트리거(81)의 데이터 입력에 연결된다. 각 곱셈기 어레이(77) 열의 j번째 셀의 첫 번째 트리거(81)의 출력은 동일 곱셈기 어레이(77) 열의 (j-1)번째 셀의 첫 번째 트리거(81)의 데이터 입력에 연결된다(이때에 j=2, 3, ..., N/2). 모든 곱셈기 어레이(77) 셀들의 첫 번째 트리거들(81)의 클럭 입력들은 짝지어서 지연 소자(51)의 출력에 연결된다. 모든 곱셈기 어레이(77) 셀들의 두 번째 트리거들(82)의 클럭 입력들은 짝지어서 첫 번째 메모리 블록에서 두 번째 메모리 블록(27)으로 세 번째 오퍼랜드 행렬을 다시 로드하는 제어의 입력에 연결된다. q번째 곱셈기 어레이(77) 열의 i번째 셀의 일비트 부분곱 생성 회로(84)의 두 번째 데이터 입력은 (q-1)번째 곱셈기 어레이(77) 열의 i번째 셀의 반전된 입력을 가지는 AND 게이트(83)의 출력에 연결된다(이때에 i=2, 3, ..., N/2 그리고 q=2, 3, ..., N). 각 곱셈기 어레이(77) 열의 j번째 셀의 일비트 가산기(85)의 두 번째 입력은 동일 곱셈기 어레이(77) 열의 (j-1)번째 셀의 일비트 가산기(85)의 합 출력에 연결된다(이때에 j=2, 3, ..., N/2). q번째 곱셈기 어레이(77) 열의 j번째 셀의 일비트 가산기(85)의 세 번째 입력은 (q-1)번째 곱셈기 어레이(77) 열의 (j-1)번째 셀의 멀티플렉서(86)의 출력에 연결되며(이때에 j=2, 3, ..., N/2 그리고 q=2, 3, ..., N), 첫 번째 곱셈기 어레이(77) 열의 j번째 셀의 일비트 가산기(85)의 세 번째 입력은 곱셈기 비트들의 (j-1)번째 디코더(76)의 세 번째 출력에 연결된다(이때에 j=2, 3, ..., N/2).
각 곱셈기 어레이(77) 열의 마지막 셀의 일비트 가산기(85)의 합 출력은 상기 유니트의 첫 번째 피가수 벡터의 각 비트(28)의 출력이다. (q-1)번째 곱셈기 어레이(77) 열의 마지막 셀의 멀티플렉서(86)의 출력은 상기 유니트의 결과들의 두 번째 피가수 벡터의 q번째 비트의 출력(29)이며(이때에 q=2, 3, ..., N), 상기 유니트에서 결과들의 두 번째 피가수 벡터의 첫 번째 비트(29)는 곱셈기 비트들의 (N/2)번째 디코더(76)의 세 번째 출력에 연결된다. 상기 시프트 레지스터의 첫 번째 비트의 반전된 입력들을 가지는 AND 게이트(78)의 두 번째 반전된 입력과 반전되지 않은 입력 그리고 시프트 레지스터의 두 번째 비트의 반전된 입력들을 가지는 AND 게이트(78)의 반전되지 않은 입력, 곱셈기 어레이(77)의 첫 번째 열의 모든 셀들의 일비트 부분곱 생성 생성 회로들의 두 번째 데이터 입력들, 모든 곱셈기 어레이 열들의 첫 번째 셀들의 일비트 가산기들의 세 번째 입력들 및 반전된 입력을 가지는 첫 번째 AND 게이트(75)의 반전되지 않은 입력은 짝지어서 "0"에 연결된다. 각 곱셈기 어레이(77) 셀에서 첫 번째 트리거(81)의 출력은 두 번째 트리거(82)의 데이터 입력에 연결되며, 두 번째 트리거의 출력은 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 일비트 부분곱 생성 회로(84)의 첫 번째 데이터 입력에 연결되며, 부분곱 생성 회로의 세 번째 제어 입력은 멀티플렉서(86)의 두 번째 데이터 입력에 연결되며, 멀티플렉서의 첫 번째 데이터 입력은 곱셈기 어레이(77)의 동일 셀의 일비트 가산기(85)의 올림수 출력에 연결된다.
계산 유니트는 그의 비트들이 상기 유니트의 입력들(20)에 인가되는 두 번째 오퍼랜드 벡터 Y =(Y1Y2... Yk)의 배수의 부분곱을, 상기 유니트의 두 번째 메모리 블록에 이전에 로드되고 저장된 행렬
를 곱하여, 벡터의 비트들이 상기 유니트의 입력들(19)에 공급되는 첫 번째 오퍼랜드 벡터 X =(X1X2... XM)의 얻어진 곱에 부가되어 생성한다. 각 클럭 사이클내에 계산 유니트(18)의 출력들(28, 29)에서 A = (A1A2... AM)와 B =(B1B2... BM) 벡터의 비트들이 생성되며, 그 합은 X + Y × Z 연산의 결과이다. 즉, 벡터 A와 B의 m번째 구성 요소들의 합은 다음의 식과 같이 표현된다.
벡터 X는 M개의 묶음지어진 데이타의 하나의 N 비트 워드를 2의 보수로 표현한 것이며, 이 데이타가 이 벡터의 구성 요소이다. 그리고 벡터 X의 최하위 비트들은 첫 번째 자료 X1의 비트들이며, 그러면 두 번째 자료 X2가 뒤따르게 된다. 벡터 X의 최상위 비트들은 M번째 자료 XM의 비트들이다. 그러한 묶음으로 m번째 자료의 v번째 비트는 벡터 X 의번째 비트이며, 이때에 Nm은 벡터 X의 m번째 자료 Xm의 워드 길이이며, v=1, 2, ..., Nm, m=1, 2, ..., M이다. 벡터 X의 데이타 M의 개수와 이 벡터의 m번째 자료 Xm의 비트들 Nm의 개수는 1부터 N까지의 어떤 정수라도 될 수 있을 것이다(m=1, 2, ..., M). 하나의 벡터 X에 묶음된 모든 데이타의 총 워드 길이는 그 벡터의 워드 길이와 같아야 한다는 제약만이 있으며, 이 관계는 다음의 식과 같이 표현된다.
벡터 X는 M개의 꾸러미된 데이타의 하나의 N 비트 워드를 2의 보수로 표현한 것이며, 이 데이타가 이 벡터의 구성 요소이다. 벡터 Y의 형식은 벡터 X의 것과 동일하다. 그러나, 이러한 벡터들은 이러한 벡터들에 묶음지어진 구성 요소들의 개수와 개별적인 데이타의 워드 길이에 있어 달라질 수 있을 것이다. 벡터 Y의 k번째 자료 Yk의 비트들 N'k의 개수는 2부터 N까지의 어떤 정수도 될 수 있을 것이다. 벡터 Y의 데이타 K의 개수는 1부터 N/2까지의 어떤 정수값도 될 수 있을 것이다. 그러나 한 벡터 Y에 묶음된 모든 데이타의 총 워드 길이는 벡터의 워드 길이와 같아야 하며, 이는 다음 식과 같이 표현된다.
행렬 Z의 k번째 행은 데이타 벡터 Zk= (Zk,1Zk,2... Zk,M)이며, 이때에 k=1, 2, ..., K이다. 벡터들 Z1, Z2, ..., ZK각각은 벡터 X와 같은 형식을 가져야 한다.
상기 유니트의 출력들(28, 29)에서 생성된 벡터 A와 B는 벡터 X와 같은 형식을 가진다.
계산 유니트 하드웨어를 필요한 형식들의 프로세스 벡터들로 조절하는 것은 N비트 제어 워드 H를 상기 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들(22)을 위해 설정되는 데이타 경계들의 입력들에 인가하고 (N/2)비트 제어 워드 E를 상기 유니트의 두 번째 오퍼랜드 벡터들(23)을 위해 설정된 데이타 경계들의 입력들에 로드해서 이루어진다.
워드 H의 n번째 비트 hn가 1의 값이라는 것은 상기 유니트가 벡터들 X, Z1, Z2, ..., ZK각각의 n번째 비트를 이 벡터의 각 구성 요소의 최상위 비트로 간주할 것이라는 것을 의미한다. 워드 H에서 값이 1인 비트들의 개수는 벡터들 X, Z1, Z2, ..., ZK각각에 있는 구성 요소들의 개수와 같으며, 이 관계는 다음 식과 같이 표현된다.
워드 E의 i번째 비트 ei의 값이 1이라는 것은 상기 유니트가 벡터 Y의 비트들의 i번째 비트들의 쌍을 이 벡터의 각 구성 요소의 최하위 비트들의 그룹으로 간주할 것이라는 것을 의미한다. 워드 E에서 값이 1인 비트들의 개수는 벡터 Y의 구성 요소들의 개수와 같으며, 이 관계는 다음 식과 같이 표현된다.
상기 유니트의 메모리 셀들의 기능들은 곱셈기 어레이(77) 셀들의 두 번째 트리거들(82)에 의해 실행되며, 상기 설명된 연산이 수행되기 전에 행렬 Z를 상기 유니트의 두 번째 메모리 블록에 로딩하는 과정이 선행되어야 한다. 상기 과정은 두 가지 단계들로 실행된다.
처음에 N/2개 클럭 사이클마다 행렬 Z는 계산 유니트(18)의 첫 번째 메모리 블록에 로드되는 행렬
로 변환된다. 그리고 행렬 Z'의 i번째 행은 데이타 벡터이며, 이 데이타 벡터는 벡터 Y의 비트들의 i번째 쌍에 의해 곱해지게 될 것이다(i=1, 2, ..., N/2). 모든 벡터들는 벡터들의 임의의 벡터의 형식과 같은 형식을 가진다. 행렬 Z는 행렬 Z의 k번째 행 Zk를 행렬 Z'의 다음의 식에 의해 생성되는 N'k/2개 행들로 대체하여 행렬 Z'로 변환된다.
이때에 Ik는 벡터 Y의 k개 첫 번째 오퍼랜드에 있는 비트들의 J비트 그룹들의 총 개수이며, 다음의 식과 같이 표시된다.
상기 표현에 나타난 것으로부터등이 뒤따른다. 즉 행렬 Z의 모든 행은 행렬 Z'에서, 대개는, 다른 위치에서 표현될 것이다.
행렬 Z는 두 가지동작 모드를 가지는 시프트 레지스터(50)에 의해 행렬 Z'으로 변환된다. 로드하는 모드에서 상기 유니트의 제어 입력(25)에 값 1이 인가되면 시프트 레지스터(50)의 모든 멀티플렉서들(79)은 상기 유니트의 입력들(21)에 인가되는 데이타 벡터 비트들을 시프트 레지스터(50)의 트리거들(80)의 데이타 입력들로 전달한다. 시프트 모드에서 상기 유니트의 제어 입력(25)에 값 0이 인가되면 시프트 레지스터(50)의 모든 멀티플렉서들(79)은 시프트 레지스터(50)의 반전된 입력들을 가지는 대응 AND 게이트(78)의 출력단들로부터 시프트 레지스터(50)의 트리거들(80)의 데이타 입력단들로 데이타를 전달한다. 시프트 레지스터(50)의 r번째 비트(r=3, 4, ..., N)의 반전된 입력을 가지는 AND 게이트(78)의 출력단에서 신호가 생성되며, 이때에 wr-2는 시프트 레지스터(50)의 (r-2)번째 비트의 트리거(80)에 저장된 데이타이며, hr은 상기 유니트의 입력들과 프로세싱 벡터들의 데이타 경계를 설정하는 N비트 제어 워드 H의 r번째 비트의 값이다. 반전된 입력을 가지는 AND 게이트들(78)은 이전에 시프트 레지스터(50)에 로드되었던 데이타 벡터의 다른 구성 요소들의 비트들을 저장하고 있는 시프트 레지스터(50) 비트들간의 데이타의 전달을 방해한다. 시프트 레지스터의 2개의 최하위 비트들의 반전된 입력을 가진 AND 게이트의 출력에서 값이 0인 신호들은 끊임없이 생성되는데, 이는 그들의 반전되지 않은 입력들이 "0"에 연결되기 때문이다. 그러므로 시프트 모드에 있는 시프트 레지스터(50)는 그 안에 저장된 데이타 벡터에 2비트 왼쪽으로 산술적인 시프트를 수행하는데, 이는 이 벡터에 4를 곱한 것과 같은 것이다.
N/2 클럭 사이클마다 행렬 Z가 행렬 Z'으로 변환된다. 이 N/2 클럭 사이클 각각에서 클럭 신호 하나가 상기 유니트의 제어 입력(26)에 인가되고, 그러면 이 클락 신호는 시프트 레지스터(50)의 트리거들(80)의 클럭 입력을 공급하며, 상기에 설명된 N비트 제어 워드 H는 계속적으로 상기 유니트의 세 번째 오퍼랜드 벡터들(24)을 위해 설정된 데이타 경계들의 입력들에 인가되며, 그러면 이 제어 워드는 행렬 Z가 로드된 후에 X + Y × Z 연산 수행시에 상기 유니트에 입력들(23)을 공급한다. i번째(i=1, 2, ..., N) 클럭 사이클에 상기에 설명된 (N/2) 비트 제어 워드 E의 i번째 비트 ei가 상기 유니트의 제어 입력(25)에 인가되며, 이 제어 워드는 행렬 Z 변환과 로드 후에 X + Y × Z 연산 수행시에 상기 유니트의 입력들(23)을 공급할 것이다.
(Ik-1+1)번째 클럭 사이클에서(k=1, 2, ..., K), 값 1인 워드 E의 한 비트가 상기 유니트의 입력(25)에 인가되고, 벡터 Zk의 비트들이 상기 유니트에 입력들(21)에 인가되며, 그리고 이 벡터는 시프트 레지스터(50)의 트리거들(80)에 변하지 않고 써질 것이다. 남은 N/2-K 클럭 사이클들에서, 값이 0인 워드의 한 비트가 상기 유니트의 입력(25)에 인가될 때에, 시프트 레지스터(50)에 저장된 데이타 벡터의 구성 요소들의 4배 증가된 값들이 시프트 레지스터(50)의 트리거들(80)에 써질 것이다.
그러므로, 행렬 Z를 행렬 Z'로 변환하는 과정의 i번째 클럭 사이클(i=1, 2, ..., N/2)이 끝나면, 벡터는 시프트 레지스터(50)의 트리거들(80)에 저장될 것이다.
시프트 레지스터(50)의 출력들로부터의 데이타는 상기 유니트의 첫 번째 메모리 블록(52)의 데이타 입력에 인가되고, 상기 유니트는 곱셈기 어레이(77) 셀들의 첫 번째 트리거들(81)에 의해 구현된다. N 곱하기 N/2 트리거들의 행렬은 N개의 병렬 연결된 (N/2) 비트 시프트 레지스터들을 포함하며, 그들 각각은 트리거들(81)에 직렬로 연결된 N/2개로 구성되며, 그 트리거들은 곱셈기 어레이(77) 열들의 하나의 셀들에 포함된다. 그러므로 트리거들(81)의 행렬은 셀 각각이 N 비트 워드들의 용량을 제공하는 N/2개 메모리 셀들을 포함하는 연속적인 입력 포트를 가진 메모리 블록으로 간주될 수 있을 것이다. 첫 번째 메모리 블록의 i번째 셀의 기능들은 곱셈기 어레이(77)의 i번째 행의 셀들의 트리거들에 의해 실행된다(i-1, 2, ..., N/2).
행렬 Z가 행렬 Z'로 변환하는 전 과정 동안에 각 클럭 사이클에서 상기 유니트의 입력(26)에 인가된 클럭 신호는 보통의 인버터 게이트일 지연 소자(51)을 통해 모든 곱셈기(77) 셀들의 첫 번째 트리거들(81)의 클럭 입력들로 움직인다. 그러므로 상기 유니트의 첫 번째 메모리 블록으로 행렬 Z'를 로딩하는 것은 행렬 Z를 행렬 Z'로 변환하는 것과 동시에 발생할 것이다. 로딩 과정의 끝에 벡터는 곱셈기 어레이(77)의 i번째(i=1, 2, ..., N/J) 행의 첫 번째 트리거들(81)에 저장될 것이다.
그 후에 클럭 신호가 상기 유니트의 제어 입력(27)에 한 클럭 사이클마다 인가되며, 이 신호때문에 곱셈기 어레이(77)의 모든 셀들의 첫 번째 트리거들(81)의 내용들은 곱셈기 어레이(77)의 동일 셀들의 두 번째 트리거들(82)에 다시 써진다. N 곱하기 N/2 트리거들(82)의 행렬은 셀들 각각은 N비트 워드들의 용량을 제공하는 N/2개 메모리 셀들을 포함하는 두 번째 메모리 블록으로 간주될 수 있다. 두 번째 메모리 블록의 i번째 셀의 기능들은 곱셈기 어레이(77)의 i번째(i=1, 2, ..., N/2) 행의 셀들의 트리거들(82)에 의해 실행된다. 그러므로, 행렬 Z'는 한 클럭 사이클마다 상기 유니트의 첫 번째에서 두 번째 메모리 블록으로 이동된다.
다음 클럭 사이클로부터 시작하여, 반전된 입력을 가지는 AND 게이트들(75), 곱셈기 비트들의 디코더들(76) 및 또한 곱셈기 어레이(77)의 셀들에 포함된 반전된 입력을 가지는 AND 게이트들(83)인, 계산 유니트의 실행 유니트들, 일비트 부분곱 생성 회로들(84), 일비트 가산기(85) 및 멀티플렉서들(86)은 각 클럭 사이클에 상기에 설명된 연산을 다음의 식과 같이 실행할 것이다.
이 경우에 곱셈기 비트들의 i번째 디코더(76), 반전된 입력을 가지는 i번째 AND 게이트(75)와 곱셈기 어레이(77)의 셀들에 포함된 반전된 입력을 가지는 AND 게이트들(83) 및 회로들(84)는 곱셈기 어레이의 i번째 행의 셀들의 두 번째 트리거들(82)에 저장된 벡터에 벡터 Y의 비트들의 i번째 쌍을 다음식과 같이 곱하여 부분곱의 비트들을 생성하는 데 사용된다(이하 i=1, 2, ..., N/2).
모든 부분곱들은 변형된 부스 알고리즘에 기초하여 계산되는데, 그에 따르면 벡터 Y의 2i번째와 (2i-1)번째 비트들의 값과 곱셈기 비트들의 이웃하는 낮은 순위 쌍으로부터의 올림수 신호 ci는 다음과 같이 부분곱 Pi의 값을 결정한다.
만일 y2i=0, y2i-1=0 그리고 ci=0 혹은 y2i=1, y2i-11=1 그리고 ci=1 이면 Pi=0;
만일 y2i=0, y2i-1=0 그리고 ci=1 혹은 y2i=0, y2i-11=1 그리고 ci=0 이면 Pi=;
만일 y2i=0, y2i-1=1 그리고 ci=1 이면 Pi= 2 ×;
만일 y2i=1, y2i-1=0 그리고 ci=0 이면 Pi= -2 ×;
만일 y2i=1, y2i-1=0 그리고 ci=1 혹은 y2i=1, y2i-11 = 1 그리고 ci= 0 이면 Pi= -.
부스 알고리즘에 기초하여 동작하는 보통의 2개 오퍼랜드 곱셈기에서 (2i-2)번째 곱셈기 비트는 올림수 신호 ci로 사용된다. 제공된 유니트에서, 피승수가 프로그램가능한 워드 길이 오퍼랜드들의 벡터일 때에, 올림수 신호 ci는 반전된 입력을 가지는 i번째 AND 게이트의 출력에서 생성되며, 다음의 식과 같이 설명된다.
이때에 y2i-2는 벡터 Y의 (2i-2)번째 비트이며, ei는 제어 워드 E의 i번째 비트이다. 반전된 입력을 가지는 AND 게이트(75) 사용은 벡터 Y의, 다른 원소들에 포함되는, 비트들의 쌍들 간의 올림수 전달을 막게할 수 있다,
곱셈기 비트들의 i번째 디코더(76)의 출력들에서 다음 식의 신호들이 생성된다.
이 신호들은 곱셈기 어레이(77)의 i번째 행의 셀들의 일비트 부분곱 생성 회로들(84)를 제어하여, 곱셈기 어레이(77)의 i번째 행의 셀들의 두 번째 트리거들의 출력들로부터 곱셈기 어레이의 첫 번째 데이타 입력들로의 비트들이 인가되며, 곱셈기 어레이(77)의 i번째 행의 셀들의 반전된 입력을 가지는 AND 게이트들의 출력들로부터 두 번째 데이타 입력들로의 비트들이 인가된다. n번째 곱셈기 어레이(77) 열의 i번째 셀의 반전된 입력을 가지는 AND 게이트(83)는 벡터의 (n+1)번째 비트이 다음의 식에 따라 생성된다.
이때에은 n번째 곱셈기 어레이(77) 열의 i번째 셀의 트리거(82)에 저장된 벡터의 n번째 비트이며, hn은 제어 워드 H의 n번째 비트이다 (i=1, 2, ..., N/2 그리고 n=1, 2, ..., N). 상기의 식으로부터 벡터와 같으며, 벡터의 형식과 같은 형식을 가진다.
곱셈기 어레이(77)의 i번째 행의 일비트 부분곱 생성 회로들(84)의 구성 요소들인 AND 게이트들(90, 91)과 OR 게이트(92)는 N비트 스위치로서 동작하여, onei=1이고 twoi=0일 때에 그 스위치의 출력들로 벡터가 지나가며, onei=1이고 twoi=0일 때에 그 스위치의 출력들로 벡터가 지나가며, onei=0이고 twoi=0일 때에 각 비트의 값이 0인 벡터가 그 스위치들의 출력으로 지나간다. 그러므로, 상기 스위치의 출력에서 하나의 벡터가 생성되며, subi=0 일 때에 그 벡터는 부분곱 벡터와 같고, subi=1 일 때에 그 벡터는 부분곱 벡터 -와 같다.
subi=1일 때에 벡터 Pi를 구하는 데 필수적인 벡터의 각 구성 요소의 부호를 바꾸는 것은 벡터의 각 비트를 반전시키고 반전된 벡터의 각 구성 요소에 1의 값을 더함으로 해서 실행될 수 있을 것이다. 곱셈기 어레이(77)의 i번째 행의 셀들의 일비트 부분곱 생성 회로들(84)의 구성 요소들인 EXCLUSIVE OR 게이트들(93)은 subi신호에 제어되어 인버터로 동작한다. subi=0이면, 벡터는 EXCLUSIVE OR 게이트들(93)을 통해 곱셈기 어레이(77)의 i번째 행의 셀들의 일비트 부분곱 생성 회로들(84)의 출력들로 변하지 않고 지나간다. subi=1이면, EXCLUSIVE OR 게이트들(93)은 이 벡터의 각 비트을 반전시킨다. 그러므로, 곱셈기 어레이(77)의 i번째 행의 셀들의 일비트 부분곱 생성 회로들(84)의 출력들에서 한 N비트 벡터가 생성되며, 이 벡터는 벡터들의 형식과 같은 형식을 가지며 그래서 다음의 식을 만족시킨다.
이때에 SUBi는 N비트 벡터이며, m번째 구성 요소는 Nm비트 오퍼랜드 (00...0 subi)이고, 그 최하위 비트는 subi과 같으며, 나머지 비트들은 각각 0의 값을 갖는다.
곱셈기 어레이(77)의 셀들의 일비트 가산기들(85)와 멀티플렉서들(86)은 벡터들의 합의 부분곱을 생성하는 데 사용된다.상기 유니트에서 합만이 올림수 세이브 가산기의 기반에서 설계된 보통의 N/2+1 오퍼랜드 합 회로들같은 일비트 가산기들(85)에 의해 실행된다. 멀티플렉서들(86)은 벡터들의 다른 구성 요소들간의 합산을 실행하는 일비트 가산기들(85)의 열들간의 올림수 신호들을 sub1, sub2, ..., subN/2신호들을 이용해서 교체하는데 사용된다. 만일 제어 워드 H의 (q-1)번째 비트 hq-1값이 0과 같으면, (q-1)번째 곱셈기 어레이(77) 행의 셀들의 멀티플렉서들(86)은 곱셈기 어레이(77)의 (q-1)번째 행들의 셀의 일비트 가산기들(85)의 올림수 출력들에서 곱셈기 어레이(77)의 q번째 행들의 셀의 일비트 가산기들(85)의 각 입력들로 신호들이 지나게 한다(q=2, 3, ..., N). 만일 제어 워드 H의 (q-1)번째 비트 hq-1의 값이 1과 같으면, (q-1)번째 곱셈기 어레이(77) 행의 셀들의 멀티플렉서들(86)은 sub1, sub2, ..., subN/2신호들을 곱셈기 어레이(77)의 디코더들(76)의 출력들에서 곱셈기 어레이(77)의 q번째 행의 셀들의 일비트 가산기들(85)의 각 입력들로 지나가게 한다(q=2, 3, ..., N). 이런 결과 상기 유니트의 출력들(28, 29)에서 벡터들 A와 B는 생성되고 그들의 합은 다음의 식으로 표시된다.
부분곱들을 그룹짓고, 벡터 Y의 분리된 구성 요소들을 참조하면 마지막 표현은 다음의 식과 같이 표현될 수 있다.
벡터 Y의 모든 k번째 구성 요소들이과 같다는 사실을 고려하면, 이전의 표현은 다음의 식과 같이 전환될 것이다.
그러므로, 연산 X + Y × Z의 부분곱은 계산 유니트의 출력들(28, 29)에서 생성된다.
계산 유니트는 입력 오퍼랜드 벡터들의 벡터들에 대한 꾸러미 처리에 방향을 둔 것이며, 그와 함께 상기 유니트의 각 입력들(19, 20)에 연속적으로 인가된 입력 오퍼랜드 벡터들의 집합은 연속적으로 처리된 부분 집합들(꾸러미들)로 나누어진다. 상기 유니트의 입력들(19, 20)에 연속적으로 인가되고 τ번째 꾸러미에 포함된 입력 오퍼랜드 벡터들의 집합은 다음의 식과 같은 데이타 벡터들의 벡터 모습으로 제시될 수 있다.
이때에 Tτ는 모든 τ번째 꾸러미에 포함된 벡터들의 개수이다. 그리고 하나의 꾸러미의 모든 벡터들은 같은 형식을 가져야 한다. 즉, 상기 유니트의 제어 입력들(22, 23)에 인가된 정보는 하나의 꾸러미가 처리되는 동안에는 바뀌지 않아야 한다.
τ번째 꾸러미들 Xτ와 Yτ를 처리하는 것은 Tτ개 클럭 사이클들마다 실행된다. 그리고 t번째 클럭 사이클에 계산 유니트는 다음의 식과 같은 연산을 실행한다.
이때에 Zτ는 상기 유니트의 두 번째 메모리 블록의 내용들이며, 상기 계산 유니트는 τ번째 꾸러미들 Xτ와 Yτ를 처리하는 동안은 바뀌지 않아야 한다.
τ번째 벡터 묶음 프로세싱과 동시에 벡터들을 상기 유니트의 입력들(21)로부터 상기 유니트의 첫 번째 메모리 블록으로 연속적으로 로딩하는 상기에 설명된 과정이 실행된다. 이 과정은 N/2개 클럭 사이클을 점유한다.
언급된 처리 과정 양쪽이 다 완료되면, 행렬 Zτ+1를 상기 유니트의첫 번째 메모리 블록에서 두 번째 메모리 블록으로의 이동을 시작시키는 활성 신호가 신경 프로세서 제어 입력(27)에 인가된다. 상기 이동은 한 클럭 사이클마다 실행된다. 그 후에 상기 유니트는 벡터들 Xτ+1와 Yτ+1의 (τ+1)번째 패킷을 처리하고 행렬 Zτ+1를 로드할 것이다.
각 τ번째 꾸러미의 벡터들 Tτ의 개수는 프로그램 모드에서 설정될 수 있을 것이다. 그리고 N/J+2보다 작은 Tτ의 벡터들의 꾸러미를 사용하는 것은 좋은 방법이 아니다. 이런 경우 신경 프로세서의 계산 능력이 효율적으로 사용되지 않기 때문이다.
도 9에 블록 다이아그램이 도시된 가산기 회로는 첫 번째 피가산 벡터(31)와 두 번째 피가산 벡터(32)의 비트의 입력들, 피가산 벡터들과 합 벡터들(33)을 위해 설정된 데이터 경계들의 입력들 및 합 벡터(34)의 비트들의 출력들을 가진다. 가산기 회로의 N비트들의 각각(94)은 하나의 반가산기(95), 하나의 EXCLUSIVE OR 게이트(96), 반전된 입력을 가지는 첫 번째(97)와 두 번째(98) AND 게이트를 포함한다. 또한 가산기 회로는 올림수 예견 회로(99) 하나를 포함한다.
가산기 회로의 첫 번째 피가수 벡터 비트의 입력들(31)과 가산기 회로의 두 번째 피가수 벡터의 비트들의 입력들(32)은 가산기 회로의 비트들(94)의 반가산기들(95)의 첫 번째와 두 번째 입력에 각각 연결된다. 가산기 회로의 각 비트(94)의 반전된 입력을 가지는 첫 번째(97)와 두 번째(98) AND 게이트들의 반전된 입력들은 짝지어서 가산기 회로의 피가산 벡터들과 합 벡터들을 위해 설정된 데이타 경계들의 각 입력(33)에 연결된다. 가산기 회로의 비트들(94)의 EXCLUSIVE OR 게이트들(96)의 출력들은 가산기 회로의 합 벡터의 비트들(34)의 출력들이다. 가산기 회러의 각 비트(94)의 반전된 입력을 가지는 첫 번째 AND 게이트(97)의 출력은 올림수 예견 회로(99)의 각 비트를 통해 올림수 전달 입력에 연결되며, 올림수 예견 회로의 각 비트의 올림수 생성 입력은 가산기 회로의 각 비트(94)의 반전된 입력을 가지는 두 번째 AND 게이트(98)의 출력에 연결된다. 가산기 회로의 q번째 비트(94)의 EXCLUSIVE OR 게이트(96)의 두 번째 입력은 올림수 예견 회로(99)의 q번째 비트로의 올림수의 출력에 연결되며(q=2, 3, ..., N), 올림수 예견 회로의 초기 올림수 입력과 가산기 회로의 첫 번째 비트(94)의 EXCLUSIVE OR 게이트(96)의 두 번째 입력은 "0"에 연결된다. 가산기 회로의 각 비트(94)에서 반가산기(95)의 합 출력은 EXCLUSIVE OR 게이트(96)의 첫 번째 입력에 연결되고 반전된 입력을 가지는 첫 번째 AND 게이트(97)의 반전되지 않은 입력에 연결되며, 반가산기(95)의 올림수 출력은 반전된 입력을 가지는 두 번째 AND 게이트(98)의 반전되지 않은 입력에 연결된다.
가산기 회로는 다음과 같이 동작한다.
첫 번째 피가수 벡터 A = (A1A2... AM)의 비트들이 가산기 회로의 입력들(31)에 인가된다. 벡터 A는 2의 보수로 표현된 M개의 꾸러미된 데이타의 N비트 워드이며, 그 데이타가 이 벡터의 구성 요소이다. 그리고 벡터 A의 최하위 비트들은 첫 번째 자료 A1의 비트들이며, 두 번째 자료 A2의 비트들이 뒤따른다. 벡터 A의 촤상위 비트들은 M번째 자료 AM의 비트들이다. 그러한 묶음 방법으로 m번째 자료 AM의 ν번째 비트는 벡터 A의번째 비트이며, 이때에 Nm는 벡터 A의 m번째 자료 AM의 워드 길이이며, ν=1, 2, ..., Nm, m=1, 2, ..., M 이다. 벡터 A의 데이타 M의 개수와 이 벡터의 각 m번째 자료 Am각각의 비트들 Nm의 개수는 1부터 N까지의 어떤 정수일 수 있을 것이다(m=1, 2, ..., M). 하나의 벡터 A에 묶음된 모든 데이타의 총 워드 길이는 그의 워드 길이와 같아야 한다는 제한만이 있으며, 이 관계는 다음의 식으로 표현된다.
두 번째 피가수 벡터 B = (B1B2... BM)의 비트들이 가산기 회로의 입력들(32)에 인가되며, 이 벡터는 벡터 A과 같은 형식을 가진다.
필요한 형식의 벡터들을 처리하기 위해 가산기 회로 하드웨어를 조절하는 것은 N비트 제어 워드 H를 가산기 회로의 입력들(33)에 로드해서 이루어진다. 워드 H의 n번째 비트 hn의 값이 1이라는 것은 가산기 회로가 벡터 A와 B 각각의 n번째 비트를 이 벡터의 대응 구성 요소의 최상위 비트로 간주할 것이라는 것을 뜻한다. 워드 H에서 1의 값을 가지는 비트들의 개수는 벡터 A와 B 각각의 구성 요소들의 개수와 같으며(이하 n=1, 2, ..., N), 이는 다음의 식과 같이 표현된다.
상기 회로의 n번째 비트(94)에서 벡터 A와의 n번째 비트 an과 벡터 B의 n번째 비트 bn은 반가산기(95)의 입력들에 인가된다. 이 반가산기(95)의 합과 올림수 출력들에서 올림수 전달 pn과 올림수 생성 gn의 부가적인 신호들이 가산기 회로의 이 비트를 위해 생성된다.
신호들 pn과 gn은 각각 첫 번째(97)와 두 번째(98) 반전된 입력을 가지는 AND 게이트들의 반전되지 않은 입력을 공급하고, 제어 워드 H의 n번째 비트 hn은 상기 AND 게이트들의 반전된 입력을 공급한다. 만일 벡터 A와 B의 n번째 비트 an과 bn이 각각의 구성 요소들의 부호 비트가 아니라면, 이런 벡터들을 구성하고, 그러면 hn=0 그리고 신호들 pn과 gn은 반전된 입력을 가지는 AND 게이트들(97, 98)의 출력으로 변화되지 않고 이동한다. 만일 벡터 A와 B의 n번째 비트 an과 bn이 그 구성 요소들의 부호 비트라면, hn=1 그리고 0의 값을 가지는 신호들이 반전된 입력을 가지는 AND 게이트들(97, 98)의 출력으로 설정된다. 그러므로, 반전된 입력을 가지는 AND 게이트들(97, 98)은 상기 회로의 올림수 전달의 신호들과 올림수 생성의 신호들을 막는데 사용되며, 이렇게 해서 입력 벡터들 A와 B의 분리된 구성 요소들의 최상위 비트를 처리한다.
반전되 입력을 가지는 AND 게이트들(97, 98)의 출력들의 신호들은 회로(99)의 올림수 전달과 올림 생성 입력들에 인가되며, 이 회로는 가산기 회로의 분리된 비트들에게 올림수 신호들을 생성하는 것을 촉진시키기 위해 사용된다. 두개의 오퍼랜드 가산기들에 인가되는 알려진 어떤 연속적인, 그룹이나 예견 올림수 생성 회로도 올림수 예견 회로(99)로 사용될 수 있을 것이다. 회로(99)의 출력들에서 가산기 회로의 분리된 비트들로의 올림수의 신호들이 다음의 식 cn+1= gn∨ pn∨ cn에 따라 발생된다. 그러므로 hn=1이면 pn=gn=0이고, 회로(99)는 신호 cn+1= 0을 발생시킬 것이다.
회로(99)에 의해 발생되는 올림수 신호들은 가산기 회로의 각 비트들(94)의 EXCLUSIVE OR 게이트들(96)의 입력들에 인가되며, 그 게이트의 다른 입력들에는 반가산기(95)의 합 출력들로부터 올림수 전달 신호들이 전달된다. 가산기 회로의 각 n번째 비트의 EXCLUSIVE OR 게이트들(96)의 출력에서 신호 sn=pn cn이 생성된다. 그러므로 가산기 회로의 출력들(34)에서 벡터 S = (S1S2... SM)이 생성되며, 그 벡터의 각 구성 요소는 벡터 A와 B의 각 구성 요소들의 합과 같으며, 이는 다음의 식과 같이 표시된다.
Sm= Am+ Bm(m=1, 2, ..., M)
그리고 벡터 S는 벡터 A와 B의 형식과 같은 형식을 가질 것이다.
본 발명의 얻을 수 있는 기술적인 결과는 프로그램 모드에서 입력 오퍼랜드의 워드 길이들과 결과들의 워드 길이를 변화시키는 능력에 의해 신경 프로세서의 성능을 향상시키는 데 있다.
제공된 신경 프로세서의 특성은 사용자가 프로그램 모드에서 다음의 신경 프로세서 네트웍 인수들을 설정할 수 있다는 것이다: 계층들의 개수, 각 계층의 뉴런과 신경 입력들의 개수, 각 신경 입력에서의 데이터의 워드 길이, 각 가중 계수의 워드 길이, 각 뉴런의 출력 값의 워드 길이 및 각 뉴런을 위한 포화 함수 인수.
한 신경 프로세서는 실제로 무한의 크기의 신경 네트웍 하나를 에뮬레이트할 수 있다. 신경 네트웍은 계층마다 에뮬레이트된다(연속적으로 계층 계층마다).
모든 신경 네트웍 계층은 연속적으로 처리되는 단편들로 분할된다. 각 단편은 한 클럭마다 실행된다. 입력 데이터의 워드 길이와 가중 계수들의 워드 길이를 줄여서 신경 네트웍의 보다 큰 단편이 한 클럭마다 실행된다. 몇몇 신경 프로세서들은 에뮬레이션 기간을 수배 줄이는 것을 허용하는 하나의 신경 네트웍을 에뮬레이트 하는데 사용될 수 있을 것이다.
얻을 수 있는 기술적인 결과는 각 포화 유니트, 계산 유니트 및 가산기 회로에 입력 데이터 레지스터들을 삽입하여 클럭 사이클 시간을 줄임으로 해서 강조될 수 있을 것이다. 이런 레지스터들은 파이프라인 레지스터로 동작하며, 신경 프로세서 클럭 시간을 실제 3배 줄이게 한다.
신경 프로세서 실행 유니트들은 포화 유니트들, 하나의 계산 유니트 및 하나의 가산기 회로이다. 각 실행 유니트는 프로그램 가능한 워드 길이의 벡터들에 애해 연산을 수행한다. 덧붙여 이런 실행 유니트들은 제공된 신경 프로세서에서 그리고 벡터 데이터 프로세싱의 다른 유니트에서 사용될 수 있을 것이다.
본 발명의 얻을 수 있는 기술적인 결과는 프로그램 가능한 워드 길이를 가진 입력 오퍼랜드들의 벡터를 한번에 처리하는 능력에 의해 포화 유니트의 성능을 향상시키는 데 있다. 포화 유니트에서 올림수 예견 회로와 올림수 전달 회로들이 사용되며, 그 결과 상기 유니트의 전달 지연은 두 개 오퍼랜드를 가진 보통의 가산기의 전달 지연과 거의 비슷하다.
본 발명의 얻을 수 있는 기술적인 결과는 계산 유니트 기능성을 확장하는 데 있다. 상기 유니트는 데이터의 행렬의 곱셈을 프로그램 가능한 워드 길이의 벡터에 의해 실행한다. 이 동작은 한 클럭 사이클마다 실행되며, 그 주기는 보통의 2개 오퍼랜드 어레이 곱셈기의 전달 지연과 같다.
본 발명의 얻을 수 있는 기술적인 결과는 프로그램 가능한 워드 길이를 가진 입력 오퍼랜드들의 벡터에 대한 산술적인 연산들을 그 연산 집합에 포함시킴으로 해서 가산기 회로의 성능을 향상시키는 데 있다. 알려진 데이터 벡터 가산기와 대비하여, 제공된 가산기 회로에서 입력 벡터들의 인접한 오퍼랜드들을 처리한 가산기 회로의 비트들간의 올림수의 신호들을 잠그는 것은 올림수 생성과 올림수 전달의 부가적인 기능들의 수준에서 구현된다. 그것은 가산기 회로에서 두 개의 오퍼랜드를 가진 보통의 가산기들에서 인가되는 올림수 전달 회로들을 사용할 수 있도록 한다. 그래서 프로그램 가능한 워드 길이 데이터의 벡터들의 합을 구하기 위해 제공된 가산기 회로는 2개 오퍼랜드 가산기들에서의 전달 지연과 실제적으로 같은 전달 지연을 갖는다.
제공된 신경 프로세서는 하다마드 변환(Hadamard Transform), 고속과 이산 프리에 변환의 실행을 위한 재귀적인 그리고 비재귀적인 컨벌루션을 위한 계산에 효율적으로 사용될 수 있으며, 또한 다른 디지털 신호 처리 알고리즘들의 실행을 위해 사용될 수 있다.
신경 프로세서는 독립적인 마이크로 회로나 컴퓨터 시스템들의 보조 프로세서로 구현될 수 있을 것이다.

Claims (8)

  1. 첫 번째, 두 번째, 세 번째 레지스터, 첫 번째 FIFO 및 모든 비트의 첫 번째 데이터 입력은 첫 번째 레지스터의 각 비트의 출력에 연결되는 멀티플렉서를 포함하고, 두 번째 레지스터의 모든 비트의 데이터 입력은 신경 프로세서의 첫 번째 입력 버스의 각 비트에 연결되며, 첫 번째, 두 번째 및 세 번째 레지스터들의 제어 입력들은 각각 신경 프로세서의 제어 입력들인 신경 프로세서에 있어서,
    네 번째, 다섯 번째, 여섯 번째 레지스터들, 하나의 시프트 레지스터, 하나의 AND 게이트, 두 번째 FIFO, 3-입력 2-출력 스위치 하나, 두 개의 포화 영역들, 하나의 가산기 회로 및 하나의 계산 회로를 포함하며,
    첫 번째 오퍼랜드 벡터 비트들의 입력들, 두 번째 오퍼랜드 벡터 비트들의 입력들, 세 번째 오퍼랜드 벡터 비트들의 입력들, 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 두 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 세 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들, 세 번째 오퍼랜드 벡터들을 첫 번째 메모리 블록으로 로드하는 제어의 첫 번째와 두 번째 입력들, 첫 번째 메모리 블록으로부터 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력 및 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과의 첫 번째와 두 번째 피가수(summand) 벡터의 비트들의 출력들을 포함하며,
    3-입력 2-출력 스위치의 비트들의 첫 번째 데이터 입력들, 첫 번째 FIFO의 데이터 입력들, 첫 번째, 세 번째와 네 번째 레지스터들의 데이터 입력들 및 시프트 레지스터의 병행한 데이터 입력들은 비트마다 짝지어서 신경 프로세서의 첫 번째 입력 버스의 각 비트들에 연결되며,
    신경 프로세서에서 두 번째 입력 버스의 각 비트는 3-입력 2-출력 스위치의 각 비트의 두 번째 데이터 입력에 연결되며,
    스위치에서 각 비트의 첫 번째 출력은 첫 번째 포화 유니트의 입력 오퍼랜드 벡터의 각 비트의 입력에 연결되며,
    첫 번째 포화 유니트에서 모든 비트의 제어 입력은 두 번째 레지스터의 각 비트의 출력에 연결되고,
    3-입력 2-출력 스위치의 각 비트의 두 번째 출력은 두 번째 포화 유니트의 입력 오퍼랜드 벡터의 각 비트의 입력에 연결되고,
    두 번째 포화 유니트에서 각 비트의 제어 입력은 세 번째 레지스터의 각 비트의 출력에 연결되며,
    첫 번째 포화 영역의 결과 벡터의 각 비트의 출력은 멀티플렉서의 각 비트의 두 번째 데이터 입력에 연결되고, 멀티플렉서에서 각 비트의 출력은 계산 유니트의 첫 번째 오퍼랜드 벡터의 각 비트의 입력에 연결되고, 계산 유니트에서 두 번째 오퍼랜드 벡터의 각 비트의 입력은 두 번째 포화 유니트의 결과 벡터의 각 비트의 출력에 연결되며,
    첫 번째 FIFO의 데이터 출력들은 계산 유니트의 세 번째 오퍼랜드 벡터의 각 비트들의 입력에 연결되고, 계산 유니트에서 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과들의 첫 번째 피가수(summand) 벡터의 각 비트의 출력은 가산기 회로의 첫 번째 피가수 벡터의 각 비트의 입력에 연결되고, 가산기 회로에서 두 번째 피가수 벡터의 각 비트의 입력은 첫 번째 오퍼랜드 벡터와 두 번째 오퍼랜드 벡터를 두 번째 메모리 블록에 저장되는 세 번째 오퍼랜드 행렬과 곱한 결과를 더한 결과의 각 비트의 출력에 연결되며,
    계산 유니트에서 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 각 입력은 다섯 번째 레지스터의 각 비트의 출력 및 가산기 회로의 피가수 벡터들과 합 벡터들의 각 입력에 연결되며, 가산기 회로에서 합 벡터의 각 비트의 출력은 두 번째 FIFO의 각 데이터 입력에 연결되며, 두 번째 FIFO에서 각 데이터 불럭은 신경 프로세서의 출력 버스의 각 비트와 3-입력 2-출력 스위치의 각 비트의 세 번째 입력에 연결되며,
    네 번째 레지스터의 각 비트의 출력은 다섯 번째 레지스터의 각 비트의 데이터 입력과 계산 유니트의 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며, 계산 유니트에서 두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력은 여섯 번째 레지스터의 각 비트의 출력에 연결되며, 여섯 번째 레지스터에서 각 비트의 데이터 입력은 시프트 레지스터의 각 비트의 출력에 연결되며, 시프트 레지스터에서 연속적인 데이터 입력과 출력은 짝지어서 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력 및 AND 게이트의 첫 번째 입력에 연결되고, AND 게이트의 출력은 첫 번째 FIFO의 읽기 제어 입력에 연결되며,
    AND 게이트의 두 번째 입력, 시프트 레지스터의 시프트 제어 입력 및 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력은 짝으로 연결되고 신경 프로세서의 각 제어 입력에 연결되며,
    계산 유니트의 첫 번째 메모리 블록으로부터 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 재 로드하는 제어의 입력과 다섯 번째 및 여섯 번째 레지스터들의 제어 입력들이 짝지어서 신경 프로세서의 각 제어 입력으로 연결되며,
    3-입력 2-출력 스위치의 쓰기 제어 입력, 시프트 레지스터와 첫 번째 FIFO의 쓰기 제어 입력들 및 두 번째 FIFO의 읽기와 쓰기 제어 입력들은 신경 프로세서의 각 제어 입력들이며,
    첫 번째 및 두 번째 FIFO들의 상태 출력들은 신경 프로세서의 상태 출력임을 특징으로 하는 신경 프로세서.
  2. 제1항에 있어서,
    상기 계산 유니트는 J 최소값이 계산 유니트의 두 번째 오퍼랜드 벡터들의 데이터 워드 길이들의 약수일 때에 시프트 레지스터 내에 저장된 모든 N-비트 벡터 오퍼랜드들에 J 비트들을 왼쪽으로 산술적으로 시프트시키는 것이 실행되는 시프트 레지스터 하나, 한 개의 지연 소자, N-비트 데이터를 저장하기 위해 연속적인 입력 포트와 N/J 셀들을 포함하는 첫 번째 메모리 블록, N-비트 데이터를 저장하기 위한 N/J개의 셀들을 포함하는 두 번째 메모리 블록, 각각 프로그램 가능한 워드 길이의 N비트 벡터를 J-비트 곱셈기에 의해 곱하는 N/J개의 곱셈기 블록들 및 N/J+1개의 프로그램 가능한 워드 길이 데이터 벡터들의 피가수의 부분곱이 생성되는 벡터 가산 회로를 포함하며,
    계산 유니트의 세 번째 오퍼랜드 벡터 비트들의 입력들은 시프트 레지스터의 데이터 입력들에 연결되며, 상기 시프트 레지스터의 출력들은 첫 번째 메모리 블록의 데이터 입력들에 연결되며, 첫 번째 메모리 블록에서 각 셀의 출력들은 두 번째 메모리 블록의 각 셀의 데이터 입력들에 연결되며, 두 번째 메모리 블록에서 각 셀의 출력들은 각 곱셈기 블록의 피승수 벡터 비트들의 입력들에 연결되며, 곱셈기 블록에서 곱셈기 비트들의 입력들은 계산 유니트의 두 번째 오퍼랜드 벡터 비트들의 각 J-비트 그룹의 입력들에 연결되며,
    각 곱셈기 블록의 출력들은 벡터 가산 회로의 각 피가수 벡터의 비트들의 입력들에 연결되며, 벡터 가산 회로에서 (N/J+1)번째 피가수 벡터 비트들의 입력들은 계산 유니트의 첫 번째 오퍼랜드 벡터 비트들의 입력에 연결되며, 계산 유니트에서 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 입력들은 시프트 레지스터의 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력들에 연결되며, 시프트 레지스터에서 모드 선택 입력은 계산 유니트의 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력에 연결되며, 계산 유니트에서 첫 번째 메모리 블록에 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력은 시프트 레지스터의 클럭 입력과 지연 소자 입력에 연결되며, 지연 소자의 출력은 첫 번째 메모리 블록의 쓰기 제어 입력에 연결되며, 두 번째 메모리 블록의 쓰기 제어 입력은 세 번째 오퍼랜드 행렬을 계산 유니트의 첫 번째 메모리 블록에서 두 번째 메모리 블록에 다시 로드하는 제어의 입력에 연결되며, 계산 유니트에서 두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 모든 입력은 각 곱셈기 블록의 부호 정정의 입력에 연결되며, 계산 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들은 각 곱셈기 블록의 피승수 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들과 벡터 가산기 회로의 피가수 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 입력들에 연결되며, 벡터 가산 회로에서 결과들의 첫 번째와 두 번째 피가수 벡터들은 계산 유니트의 각 출력들임을 특징으로 하는 신경 프로세서.
  3. 제1항에 있어서,
    각 포화 유니트는 입력 레지스터 하나를 포함하며, 그 데이터 레지스터의 데이터 입력은 상기 유니트의 입력 오퍼랜드 벡터의 각 비트들의 입력이고,
    계산 유니트는 입력 데이터 레지스터 하나를 포함하며, 그 데이터 레지스터의 데이터 입력들은 상기 유니트의 첫 번째와 두 번째 오퍼랜드 벡터들의 각 비트들의 입력이며,
    가산기 회로는 입력 데이터 레지스터 하나를 포함하며, 그 데이터 레지스터의 데이터 입력들은 상기 가산기 회로의 각 입력들의 입력들임을 특징으로 하는 신경 프로세서.
  4. N개 비트들 각각에 첫 번째 멀티플렉서 하나를 포함하며, 첫 번째 멀티플렉서의 두 번째 데이터 입력이 그 유니트의 입력 오퍼랜드 벡터의 각 비트의 입력에 연결되며, 결과 벡터의 각 비트의 출력은 그 유니트의 각 비트의 첫 번째 멀티플렉서의 출력에 연결되는 포화 유니트에 있어서,
    올림수 전달(carry propagation) 회로 하나와 올림수 예견(carry look-ahead) 회로 하나를 포함하며,
    그 각 비트는 하나의 두 번째 멀티플렉서, 하나의 EXCLUSIVE OR 게이트, 하나의 EQUIVALENCE 게이트, 하나의 NAND 게이트 및 반전된 입력을 가지는 하나의 AND 게이트를 포함하며,
    반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 상기 유니트의 각 비트의 NAND 게이트와 EQUIVALENCE 게이트의 첫 번째 입력들은 짝지어서 상기 유니트의 각 제어 입력에 연결되며, 상기 유니트의 n번째 비트의 NAND 게이트의 출력은 올림수 예견 회로의 (N-n+1)번째 비트를 통해 올림수 전달의 입력으로 연결되며, 올림수 예견 회로에서 (N-n+2)번째 비트로의 올림수 출력은 상기 유니트의 n번째 비트의 첫 번째 멀티플렉서의 제어 입력에 연결되며, 반전된 입력을 가지는 AND 게이트의 출력은 상기 유니트의 같은 비트의 두 번째 멀티플렉서의 제어 입력과 상기 올림수 전달 회로의 (N-n+1)번째 비트의 올림수 생성 입력 및 상기 올림수 전달 회로의 (N-n+1)번째 비트를 통해서 올림수 전달의 반전된 입력에 연결되며, 올림수 전달 회로에서 (N-n+1)번째 입력으로부터의 올림수 입력은 상기 유니트의 n번째 비트의 두 번째 멀티플렉서의 출력에 연결되며 (이때에 n=1, 2, ..., N), EXCLUSIVE OR 게이트의 첫 번째 입력과 상기 유니트의 q 번째 비트의 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력은 각각 EXCLUSIVE OR 게이트의 두 번째 입력과 상기 유니트의 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트의 반전된 입력에 연결되며, 상기 유니트의 두 번째 멀티플렉서의 첫 번째 데이터 입력은 올림수 전달 회로의 (N-q+2)번째 비트에로의 올림수 출력에 연결되며 (이때에 q=1, 2, ..., N), 올림수 전달 회로 및 올림수 예견 회로의 초기 올림수 입력들, EXCLUSIVE OR 게이트의 두 번째 입력, 반전된 입력을 가지는 AND 게이트의 반전된 입력 및 상기 유니트의 N번째 비트의 두 번째 멀티플렉서의 첫 번째 데이터 입력은 짝지어서 "0"에 연결되며, 상기 유니트의 각 비트에서 두 번째 멀티플렉서의 출력은 EQUIVALENCE 게이트의 두 번째 입력에 연결되며, EQUIVALENCE 게이트 출력은 첫 번째 멀티플렉서의 첫 번째 데이터 입력에 연결되며, 첫 번째 멀티플렉서의 두 번째 데이터 입력은 두 번째 멀티플렉서의 두 번째 데이터 입력과 EXCLUSIVE OR 게이트의 첫 번째 입력에 연결되며, EXCLUSIVE OR 게이트 출력은 상기 유니트의 동일 비트의 NAND 게이트의 두 번째 입력에 연결되는 것을 특징으로 하는 포화 유니트.
  5. 제4항에 있어서, q번째 비트로의 올림수의 출력은 올림수 전달 회로의 (q-1)번째 비트로부터의 올림수 입력에 연결되는 것을 특징으로 하는 포화 유니트(이때에 q=1, 2, ..., N).
  6. 제4항에 있어서, 올림수 예견 회로는 N개의 AND 게이트들과 N개의 OR 게이트들을 포함하며, 상기 회로의 각 비트를 통한 올림수 전달의 각 AND 게이트의 첫 번째 입력에 연결되며, AND 게이트의 출력은 각 OR 게이트의 첫 번째 입력에 연결되며, OR 게이트의 두 번째 입력과 출력은 각각 상기 회로의 각 비트의 올림수 생성 입력과 상기 회로의 동일 비트로의 올림수 회로의 출력에 연결되며, 첫 번째 AND 게이트의 두 번째 입력은 상기 회로의 초기의 올림수 입력이며, q번째 AND 게이트의 두 번째 입력은 (q-1)번째 OR 게이트의 출력에 연결되는 것을 특징으로 하는 포화 유니트(이때에 q=2, 3, ..., N).
  7. 곱셈기 비트들의 N/2개의 디코더들과 N개 열 곱하기 N/2개 셀의 곱셈기 어레이 하나를 포함하며, 그들 각각은 일비트(one-bit) 부분곱 생성 회로와 일비트 가산기로 구성되며, 곱셈기 어레이의 모든 열들의 i번째 셀들의 일비트 부분곱 생성 회로들의 각 제어 입력들은 짝지어서 곱셈기 비트들의 i번째 디코더의 각 출력들에 연결되며(이때에 i=1, 2, ..., N/2), 곱셈기 어레이의 각 셀의 일비트 가산기의 첫 번째 입력은 상기 곱셈기 어레이의 동일 셀의 일비트 부분곱 생성 회로의 출력에 연결되는 계산 유니트에 있어서,
    반전된 입력을 가지는 N/2개의 AND 게이트들, 하나의 지연 소자 및 하나의 N 비트 시프트 레지스터를 포함하며,
    시프트 레지스터 각 비트는 반전된 입력들을 가진 하나의 AND 게이트, 하나의 멀티플렉서 및 하나의 트리거로 구성되며, 상기 곱셈기 어레이의 각 셀은 각각 상기 유니트, 반전된 입력을 가지는 하나의 AND 게이트 및 하나의 멀티플렉서의 첫 번째와 두 번째 메모리 블록들의 메모리 셀들의 기능을 하는 첫 번째와 두 번째 트리거와 반전된 입력을 가지는 하나의 AND 게이트와 하나의 멀티플렉서를 포함하며,
    상기 유니트의 첫 번째 오퍼랜드의 각 비트의 입력은 상기 곱셈기 어레이의 각 열의 첫 번째 셀의 일비트 가산기의 두 번째 입력에 연결되며,
    멀티플렉서들의 제어 입력들과 상기 곱셈기 어레이의 각 열의 모든 셀들의 반전된 입력을 가지는 AND 게이트들의 반전된 입력들은 짝지어서 상기 유니트의 첫 번째 오퍼랜드 벡터들과 결과 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며,
    상기 유니트의 두 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력은 반전된 입력을 가지는 각 AND 게이트의 반전된 입력에 연결되며, AND 게이트의 출력은 곱셈기 비트들의 각 디코더의 첫 번째 입력에 연결되며,
    곱셈기 비트들의 i번째 디코더의 두 번째와 세 번째 입력은 상기 유니트의 두 번째 오퍼랜드 벡터의 (2i-1)번째와 (2i)번째 비트의 입력들에 각각 연결되며(이때에 i=1, 2, ..., N/2),
    반전된 입력을 가지는 j번째 AND 게이트의 반전되지 않은 입력은 곱셈기 비트들의 (j-1)번째 디코더의 세 번째 입력에 연결되며(이때에 j=2, 3, ..., N/2),
    상기 유니트의 세 번째 오퍼랜드 벡터의 각 비트의 입력은 시프트 레지스터의 각 비트의 멀티플렉서의 두 번째 데이터 입력에 연결되며, 시프트 레지스터에서 첫 번째 데이터 입력은 시프트 레지스터의 동일 비트의 반전된 입력을 가지는 AND 게이트의 출력에 연결되며, 그 AND 게이트의 첫 번째 반전된 입력은 상기 유니트의 세 번째 오퍼랜드 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되며,
    상기 시프트 레지스터의 q번째 비트의 반전된 입력을 가지는 AND 게이트의 두 번째 반전된 입력은 상기 시프트 레지스터의 (q-1)번째 비트의 반전된 입력을 가지는 AND 게이트의 첫 번째 반전된 입력에 연결되며(이때에 q=2, 3, ..., N), 시프트 레지스터의 r번째 비트의 반전된 입력들을 가지는 AND 게이트의 반전되지 않은 입력은 그 시프트 레지스터의 (r-2)번째 비트의 트리거 출력에 연결되며(이때에 r=3, 4, ..., N),
    모든 시프트 레지스터 비트들의 멀티플렉서들의 제어 입력들은 짝지어서 상기 유니트의 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 첫 번째 입력에 연결되며,
    모든 시프트 레지스터 비트들의 트리거들의 클럭 입력들과 지연 소자의 입력은 짝지어서 첫 번째 메모리 블록으로 세 번째 오퍼랜드 벡터들을 로드하는 제어의 두 번째 입력에 연결되며,
    각 시프트 레지스터 비트의 멀티플렉서의 출력은 시프트 레지스터의 동일 비트의 트리거의 데이터 입력에 연결되고, 시프트 레지스터의 출력은 곱셈기 어레이의 각 열의 마지막 셀의 첫 번째 트리거의 데이터 입력에 연결되며,
    각 곱셈기 어레이 열의 j번째 셀의 첫 번째 트리거의 출력은 동일 곱셈기 어레이 열의 (j-1)번째 셀의 첫 번째 트리거의 데이터 입력에 연결되며(이때에 j=2, 3, ..., N/2), 모든 곱셈기 어레이 셀들의 첫 번째 트리거들의 클럭 입력들은 짝지어서 지연 소자의 출력에 연결되며,
    모든 곱셈기 어레이 셀들의 두 번째 트리거들의 클럭 입력들은 짝지어서 첫 번째 메모리 블록에서 두 번째 메모리 블록으로 세 번째 오퍼랜드 행렬을 다시 로드하는 제어의 입력에 연결되며,
    q번째 곱셈기 어레이 열의 i번째 셀의 일비트 부분곱 생성 회로의 두 번째 데이터 입력은 (q-1)번째 곱셈기 어레이 열의 i번째 셀의 반전된 입력을 가지는 AND 게이트의 출력에 연결되며(이때에 i=2, 3, ..., N/2 그리고 q=2, 3, ..., N), 각 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 두 번째 입력은 동일 곱셈기 어레이 열의 (j-1)번째 셀의 일비트 가산기의 합 출력에 연결되며(이때에 j=2, 3, ..., N/2), q번째 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 세 번째 입력은 (q-1)번째 곱셈기 어레이 열의 (j-1)번째 셀의 멀티플렉서의 출력에 연결되며(이때에 j=2, 3, ..., N/2 그리고 q=2, 3, ..., N), 첫 번째 곱셈기 어레이 열의 j번째 셀의 일비트 가산기의 세 번째 입력은 곱셈기 비트들의 (j-1)번째 디코더의 세 번째 출력에 연결되며(이때에 j=2, 3, ..., N/2),
    각 곱셈기 어레이 열의 마지막 셀의 일비트 가산기의 합 출력은 상기 유니트의 첫 번째 피가수 벡터의 각 비트의 출력이며, (q-1)번째 곱셈기 어레이 열의 마지막 셀의 멀티플렉서의 출력은 상기 유니트의 결과들의 두 번째 피가수 벡터의 q번째 비트의 출력이며(이때에 q=2, 3, ..., N),
    상기 유니트에서 결과들의 두 번째 피가수 벡터의 첫 번째 비트는 곱셈기 비트들의 (N/2)번째 디코더의 세 번째 출력에 연결되며, 상기 시프트 레지스터의 첫 번째 비트의 반전된 입력들을 가지는 AND 게이트의 두 번째 반전된 입력과 반전되지 않은 입력 그리고 시프트 레지스터의 두 번째 비트의 반전된 입력들을 가지는 AND 게이트의 반전되지 않은 입력, 곱셈기 어레이의 첫 번째 열의 모든 셀들의 일비트 부분곱 생성 생성 회로들의 두 번째 데이터 입력들, 모든 곱셈기 어레이 열들의 첫 번째 셀들의 일비트 가산기들의 세 번째 입력들 및 반전된 입력을 가지는 첫 번째 AND 게이트의 반전되지 않은 입력은 짝지어서 "0"에 연결되며,
    각 곱셈기 어레이 셀에서 첫 번째 트리거의 출력은 두 번째 트리거의 데이터 입력에 연결되며, 두 번째 트리거의 출력은 반전된 입력을 가지는 AND 게이트의 반전되지 않은 입력과 일비트 부분곱 생성 회로의 첫 번째 데이터 입력에 연결되며, 부분곱 생성 회로의 세 번째 제어 입력은 멀티플렉서의 두 번째 데이터 입력에 연결되며, 멀티플렉서의 첫 번째 데이터 입력은 곱셈기 어레이의 동일 셀의 일비트 가산기의 올림수 출력에 연결되는 것을 특징으로 하는 계산 유니트.
  8. 자신의 N개의 비트들 각각에 올림수 예견 회로, 하나의 반가산기 및 하나의 EXCLUSIVE OR 게이트를 포함하고, 가산기 회로의 첫 번째 피가수 벡터의 각 비트의 입력과 가산기 회로의 두 번째 피가수 벡터의 각 비트의 입력은 가산기 회로의 각 비트의 반가산기의 첫 번째와 두 번째 입력에 각각 연결되며, 가산기 회로에서 합 출력은 가산기 회로의 동일 비트의 EXCLUSIVE OR 게이트의 첫 번째 입력에 연결되며, 가산기 회로의 출력은 가산기 회로의 합 벡터의 각 비트의 출력이며, 가산기 회로의 q번째 비트의 EXCLUSIVE OR 게이트의 두 번째 입력은 올림수 예견 회로의 q번째 비트로의 올림수 출력에 연결되며(이때에 q=2, 3, ..., N), 올림수 예견 회로에서 초기 올림수 입력과 가산기 회로의 첫 번째 비트의 EXCLUSIVE OR 게이트의 두 번째 입력은 "0"에 연결되는 가산기 회로에서,
    반전된 입력을 가지는 첫 번째 그리고 두 번째 AND 게이트들은 각각 그들의 비트에서 합쳐지고, 가산기 회로의 각 비트의 반 가산기의 합 출력은 가산기 회로의 동일 비트의 반전된 입력을 가지는 첫 번째 AND 게이트의 반전되지 않은 입력에 연결되며, 가산기 회로의 출력은 올림수 예견 회로의 각 비트를 통해서 올림수 전달 입력에 연결되며, 가산기 회로의 각 비트의 반 가산기의 올림수 출력은 가산기 회로의 동일 비트의 반전된 입력을 가지는 두 번째 AND 게이트의 반전되지 않은 입력에 연결되며, 가산기 회로의 출력은 올림수 예견 회로의 각 비트의 올림수 생성 입력에 연결되며, 가산기 회로의 각 비트의 반전된 입력을 가지는 첫 번째와 두 번째 AND 게이트들의 반전된 입력들은 짝지어서 피가수 벡터들과 합 벡터들을 위해 설정된 데이터 경계들의 각 입력에 연결되는 것을 특징으로 하는 가산기 회로.
KR1019997010077A 1998-06-16 1998-12-31 신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로 KR100336266B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
RU98110876 1998-06-16
RU98110876/09A RU2131145C1 (ru) 1998-06-16 1998-06-16 Нейропроцессор, устройство для вычисления функций насыщения, вычислительное устройство и сумматор

Publications (2)

Publication Number Publication Date
KR20010020446A true KR20010020446A (ko) 2001-03-15
KR100336266B1 KR100336266B1 (ko) 2002-05-13

Family

ID=20206976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019997010077A KR100336266B1 (ko) 1998-06-16 1998-12-31 신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로

Country Status (7)

Country Link
US (1) US6539368B1 (ko)
EP (1) EP1014274A4 (ko)
JP (1) JP2000514230A (ko)
KR (1) KR100336266B1 (ko)
AU (1) AU2191999A (ko)
RU (1) RU2131145C1 (ko)
WO (1) WO1999066419A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200067915A (ko) * 2016-05-26 2020-06-12 더 가버닝 카운슬 오브 더 유니버시티 오브 토론토 심층 신경망용 가속기
KR20210086937A (ko) * 2019-12-31 2021-07-09 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 매트릭스 저장 방법, 매트릭스 액세스 방법, 장치 및 전자 기기

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1115204B1 (en) * 2000-01-07 2009-04-22 Nippon Telegraph and Telephone Corporation Function reconfigurable semiconductor device and integrated circuit configuring the semiconductor device
US6836767B2 (en) * 2001-10-03 2004-12-28 International Business Machines Corporation Pipelined hardware implementation of a neural network circuit
DE10311323A1 (de) * 2003-03-14 2004-09-30 Infineon Technologies Ag Vorrichtung zur Synchronisation eines Mobilfunkempfängers auf eine Rahmenstruktur eines empfangenen Funksignals
US8190863B2 (en) * 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US7600104B2 (en) * 2006-08-15 2009-10-06 Peter Neumann Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length
US8429107B2 (en) * 2009-11-04 2013-04-23 International Business Machines Corporation System for address-event-representation network simulation
FR2980586A1 (fr) * 2011-09-22 2013-03-29 St Microelectronics Grenoble 2 Dispositif et procede de determination de la distance a un objet
RU2473126C1 (ru) * 2011-10-28 2013-01-20 Федеральное государственное унитарное предприятие "Научно-производственное объединение автоматики имени академика Н.А. Семихатова" Нейропроцессор
US9235799B2 (en) 2011-11-26 2016-01-12 Microsoft Technology Licensing, Llc Discriminative pretraining of deep neural networks
RU2486576C1 (ru) * 2012-04-17 2013-06-27 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Вятский государственный университет ФГБОУ ВПО "ВятГУ" Однородная вычислительная среда для конвейерных вычислений суммы m n-разрядных чисел
US9477925B2 (en) * 2012-11-20 2016-10-25 Microsoft Technology Licensing, Llc Deep neural networks training for speech and pattern recognition
RU2553098C2 (ru) * 2013-08-23 2015-06-10 Федеральное государственное унитарное предприятие "Научно-производственное объединение автоматики имени академика Н.А. Семихатова" Нейровычислитель
RU2595906C1 (ru) * 2015-03-13 2016-08-27 Федеральное государственное бюджетное образовательное учреждение высшего образования "Кубанский государственный технологический университет" (ФГБОУ ВО "КубГТУ") Устройство для вычисления функций
CN106447035B (zh) * 2015-10-08 2019-02-26 上海兆芯集成电路有限公司 具有可变率执行单元的处理器
KR102656190B1 (ko) 2016-11-24 2024-04-11 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 불휘발성 메모리 장치의 액세스 방법
WO2018103736A1 (en) 2016-12-09 2018-06-14 Beijing Horizon Information Technology Co., Ltd. Systems and methods for data management
CN108241484B (zh) * 2016-12-26 2021-10-15 上海寒武纪信息科技有限公司 基于高带宽存储器的神经网络计算装置和方法
US11132599B2 (en) * 2017-02-28 2021-09-28 Microsoft Technology Licensing, Llc Multi-function unit for programmable hardware nodes for neural network processing
US10261786B2 (en) 2017-03-09 2019-04-16 Google Llc Vector processing unit
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US11551028B2 (en) 2017-04-04 2023-01-10 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network
US11238334B2 (en) 2017-04-04 2022-02-01 Hailo Technologies Ltd. System and method of input alignment for efficient vector operations in an artificial neural network
US11615297B2 (en) 2017-04-04 2023-03-28 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network compiler
US11544545B2 (en) 2017-04-04 2023-01-03 Hailo Technologies Ltd. Structured activation based sparsity in an artificial neural network
JP7315317B2 (ja) * 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US20200242445A1 (en) * 2019-01-26 2020-07-30 Mipsology SAS Generic quantization of artificial neural networks
US11625583B2 (en) * 2019-02-13 2023-04-11 Mipsology SAS Quality monitoring and hidden quantization in artificial neural network computations
RU2708501C1 (ru) * 2019-05-21 2019-12-09 Федеральное государственное бюджетное образовательное учреждение высшего образования "Юго-Западный государственный университет" (ЮЗГУ) Параллельно-последовательный сумматор-вычитатель старшими разрядами вперед на нейронах
RU2715177C1 (ru) * 2019-06-13 2020-02-25 Федеральное государственное бюджетное образовательное учреждение высшего образования "Юго-Западный государственный университет" (ЮЗГУ) Сумматор-вычислитель на элементах нейронной логики
US11604972B2 (en) 2019-06-28 2023-03-14 Microsoft Technology Licensing, Llc Increased precision neural processing element
RU201114U1 (ru) * 2020-07-20 2020-11-27 Владислав Сергеевич Емельянов Устройство для расчета рационального количества изделий, подвергаемых диагностированию
US11221929B1 (en) 2020-09-29 2022-01-11 Hailo Technologies Ltd. Data stream fault detection mechanism in an artificial neural network processor
US11237894B1 (en) 2020-09-29 2022-02-01 Hailo Technologies Ltd. Layer control unit instruction addressing safety mechanism in an artificial neural network processor
US11811421B2 (en) 2020-09-29 2023-11-07 Hailo Technologies Ltd. Weights safety mechanism in an artificial neural network processor
US11263077B1 (en) 2020-09-29 2022-03-01 Hailo Technologies Ltd. Neural network intermediate results safety mechanism in an artificial neural network processor
US11874900B2 (en) 2020-09-29 2024-01-16 Hailo Technologies Ltd. Cluster interlayer safety mechanism in an artificial neural network processor

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SU690477A1 (ru) 1977-06-01 1979-10-05 Предприятие П/Я А-1639 Цифровое устройство ограничени числа по модулю
DE3323607A1 (de) 1983-06-30 1985-01-03 Siemens AG, 1000 Berlin und 8000 München Digitales rechenwerk
JPS62229440A (ja) 1986-03-31 1987-10-08 Toshiba Corp 配列乗算器
GB8612453D0 (en) 1986-05-22 1986-07-02 Inmos Ltd Multistage digital signal multiplication & addition
EP0309348B1 (fr) 1987-09-23 1993-04-21 France Telecom Dispositif d'addition et de multiplication binaire
GB2211966A (en) 1987-11-02 1989-07-12 Philips Nv Digital integrated circuit
US5047975A (en) 1987-11-16 1991-09-10 Intel Corporation Dual mode adder circuitry with overflow detection and substitution enabled for a particular mode
EP0378115B1 (en) * 1989-01-06 1998-09-30 Hitachi, Ltd. Neural computer
JP2679738B2 (ja) * 1989-03-01 1997-11-19 富士通株式会社 ニューロコンピュータにおける学習処理方式
US5278945A (en) * 1992-01-10 1994-01-11 American Neuralogical, Inc. Neural processor apparatus
RU2022339C1 (ru) 1992-01-31 1994-10-30 Винницкий политехнический институт Множительное устройство
RU2074414C1 (ru) 1993-08-02 1997-02-27 Акционерное общество закрытого типа "Нейрома-РД" Нейроимитатор
US5630024A (en) * 1994-01-19 1997-05-13 Nippon Telegraph And Telephone Corporation Method and apparatus for processing using neural network with reduced calculation amount
RU2097826C1 (ru) 1994-03-22 1997-11-27 Курский государственный технический университет Параллельный асинхронный сумматор
US5644519A (en) * 1995-04-07 1997-07-01 Motorola, Inc. Method and apparatus for a multiply and accumulate circuit having a dynamic saturation range
US6018728A (en) * 1996-02-09 2000-01-25 Sarnoff Corporation Method and apparatus for training a neural network to learn hierarchical representations of objects and to detect and classify objects with uncertain training data

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200067915A (ko) * 2016-05-26 2020-06-12 더 가버닝 카운슬 오브 더 유니버시티 오브 토론토 심층 신경망용 가속기
KR20210086937A (ko) * 2019-12-31 2021-07-09 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 매트릭스 저장 방법, 매트릭스 액세스 방법, 장치 및 전자 기기

Also Published As

Publication number Publication date
JP2000514230A (ja) 2000-10-24
US6539368B1 (en) 2003-03-25
EP1014274A4 (en) 2003-10-08
KR100336266B1 (ko) 2002-05-13
EP1014274A1 (en) 2000-06-28
RU2131145C1 (ru) 1999-05-27
AU2191999A (en) 2000-01-05
WO1999066419A1 (fr) 1999-12-23

Similar Documents

Publication Publication Date Title
KR100336266B1 (ko) 신경 프로세서, 포화 유니트, 계산 유니트 및 가산기 회로
Zhuo et al. High performance linear algebra operations on reconfigurable systems
JP2021524082A (ja) ニューラル・ネットワーク処理要素
CN109543816A (zh) 一种基于权重捏合的卷积神经网络计算方法和系统
CA2189148A1 (en) Computer utilizing neural network and method of using same
JPH01201764A (ja) 神経回路網およびその回路網に用いる回路
CN110851779B (zh) 用于稀疏矩阵运算的脉动阵列架构
US9372665B2 (en) Method and apparatus for multiplying binary operands
Nedjah et al. Compact yet efficient hardware implementation of artificial neural networks with customized topology
KR20040092376A (ko) 몽고메리 모듈러 곱셈기 및 캐리 저장 가산을 이용한몽고메리 모듈러 곱셈 방법
Prasad et al. Design of low power and high speed modified carry select adder for 16 bit Vedic Multiplier
KR100305530B1 (ko) 배정밀도.단정밀도.내적연산 및 복소승산이 가능한 승산기
US5025408A (en) Bit serial multiplier with parallel-in-serial-out carry and partial product shift registers
US5957999A (en) Booth multiplier with squaring operation accelerator
KR100308726B1 (ko) 고속 산술 장치에서 올림수 예견가산기 스테이지의 수를 감소시키는 장치 및 방법
Ciminiera et al. Low cost serial multipliers for high-speed specialised processors
CN109284085B (zh) 一种基于fpga的高速模乘和模幂运算方法及装置
Sayahi et al. FPGA implementation of matrix-vector multiplication using xilinx system generator
Ago et al. The parallel FDFM processor core approach for neural networks
Dey et al. An application specific processor architecture with 3D integration for recurrent neural networks
Yeh et al. Efficient pipelined multi-operand adders with high throughput and low latency: designs and applications
Rani et al. Multilayer perceptron neural network architecture using VHDL with combinational logic sigmoid function
Bessalah et al. Left to right serial multiplier for large numbers on FPGA
Tu et al. Application of on-line arithmetic algorithms to the SVD computation: Preliminary results
Murthy et al. Modulo 2n±1 adder/subtractors for DSP applications

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130430

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20140428

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20170411

Year of fee payment: 16

FPAY Annual fee payment

Payment date: 20180430

Year of fee payment: 17

EXPY Expiration of term