KR101960104B1 - 상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법 - Google Patents

상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법 Download PDF

Info

Publication number
KR101960104B1
KR101960104B1 KR1020137000566A KR20137000566A KR101960104B1 KR 101960104 B1 KR101960104 B1 KR 101960104B1 KR 1020137000566 A KR1020137000566 A KR 1020137000566A KR 20137000566 A KR20137000566 A KR 20137000566A KR 101960104 B1 KR101960104 B1 KR 101960104B1
Authority
KR
South Korea
Prior art keywords
parallel machine
programmable
digit
machine
state
Prior art date
Application number
KR1020137000566A
Other languages
English (en)
Other versions
KR20130083893A (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 KR20130083893A publication Critical patent/KR20130083893A/ko
Application granted granted Critical
Publication of KR101960104B1 publication Critical patent/KR101960104B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17362Indirect interconnection networks hierarchical topologies
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • G06F15/825Dataflow computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Image Processing (AREA)
  • Logic Circuits (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Abstract

상태 정보를 제공하기 위한 프로그래밍 디바이스, 계층적 병렬 기계 및 방법이 개시된다. 하나의 이러한 프로그래밍가능한 디바이스에서 프로그래밍가능한 요소들이 제공된다. 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성된다. 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 상기 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성된다. M 디지트 출력은 프로그래밍가능한 요소들 전부보다 더 적은 것으로부터 상태 정보를 포함한다. 다른 프로그래밍가능한 디바이스, 계층적 병렬 기계 및 방법이 또한 개시된다.

Description

상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법{PROGRAMMABLE DEVICE, HIERARCHICAL PARALLEL MACHINES, METHODS FOR PROVIDING STATE INFORMATION}
본 특허 출원은, 본 명세서에 그 전체 내용이 참조 문헌으로 병합된, 2010년 6월 10일에 출원된 발명의 명칭이 "System and Method for Transferring State Between Finite State Machine"인 미국 가특허 출원 일련 번호 61/353,551에 대한 35 U.S.C Section 119(e) 하에서 우선권의 이익을 청구하는, 본 명세서에 그 전체 내용이 참조 문헌으로 병합된, 2011년 3월 1일에 출원된 발명의 명칭이 "Programmable Device, Hierarchical Parallel Machines, Methods for Providing State Information" 인 미국 출원 번호 13/037,706의 우선권의 이익을 청구한다.
프로그래밍가능한 디바이스의 일례는 병렬 기계이다. 병렬 기계는 예를 들어, 유한 상태 기계(FSM: finite state machines) 엔진 및 전계 프로그래밍가능한 게이트 어레이(FPGA: field programmable gate arrays)를 포함한다. FSM은 상태, 상태들 사이의 전이 및 동작의 표현이다. 유한 상태 기계는 지향된 흐름 그래프의 형태로 표현될 수 있다. 이들은 예를 들어, 엔지니어링, 패턴 인식, 생물학 및 인공 지능에서 문제를 해결하는데 사용될 수 있다.
도 1은 본 발명의 여러 실시예에 따라 계층적 병렬 기계의 일례를 도시한 도면;
도 2는 본 발명의 여러 실시예에 따라 패턴 인식을 위해 구성된 계층적 병렬 기계의 일례를 도시한 도면;
도 3은 본 발명의 여러 실시예에 따라 병렬 기계의 일례를 도시한 도면;
도 4는 본 발명의 여러 실시예에 따라 유한 상태 기계 다이어그램의 일례를 도시한 도면;
도 5는 본 발명의 여러 실시예에 따라 유한 상태 기계 다이어그램의 다른 예를 도시한 도면;
도 6은 본 발명의 여러 실시예에 따라 병렬 기계로 구현된 2-레벨의 계층의 다른 예를 도시한 도면;
도 7은 본 발명의 여러 실시예에 따라 병렬 기계로 구현된 4-레벨 계층의 일례를 도시한 도면;
도 8은 본 발명의 여러 실시예에 따라 유한 상태 기계 다이어그램의 그룹의 일례를 도시한 도면;
도 9는 본 발명의 여러 실시예에 따라 도식적으로 도시된 상태 기계의 유한 상태들이 집합(aggregate)되어 있는 유한 상태 기계 다이어그램의 다른 예를 도시한 도면;
도 10은 본 발명의 여러 실시예에 따라 도식적으로 도시된 유한 상태 기계들 각각의 최종 상태가 집합되어 있는 유한 상태 기계 다이어그램의 그룹의 다른 예를 도시한 도면;
도 11은 본 발명의 여러 실시예에 따라 프로그래밍가능한 요소의 어레이의 일례를 도시한 도면;
도 12는 본 발명의 여러 실시예에 따라 패턴 인식 프로세서의 스택의 일례를 도시한 도면;
도 13은 본 발명의 여러 실시예에 따라 병렬 기계로 구현된 피드백을 가지는 4-레벨 계층의 일례를 도시한 도면;
도 14는 본 발명의 여러 실시예에 따라 병렬 기계로 구현된 피드백을 가지는 4-레벨 계층의 다른 예를 도시한 도면;
도 15는 본 발명의 여러 실시예에 따라 유한 상태 기계 엔진을 도시한 도면;
도 16은 본 발명의 여러 실시예에 따라 도 15의 유한 상태 기계 엔진의 블록의 일례를 도시한 도면;
도 17은 본 발명의 여러 실시예에 따라 도 16의 블록의 행(row)의 일례를 도시한 도면;
도 18은 본 발명의 여러 실시예에 따라 도 10의 행 중 2개의 행의 그룹의 일례를 도시한 도면;
도 19는 본 발명의 여러 실시예에 따라 컴파일러가 도 8의 유한 상태 기계를 프로그래밍하기 위해 소스 코드를 이미지로 변환하기 위한 방법의 일례를 도시한 도면;
도 20은 본 발명의 여러 실시예에 따라 폰 노이만(Von Neumann) 기반 아키텍처를 가지는 컴퓨터의 일례를 도시한 도면.
이하 상세한 설명 및 도면은 이 기술 분야에 통상의 지식을 가진 자가 본 발명을 실시할 수 있도록 하는 특정 실시예를 충분히 예시한다. 다른 실시예들은 구조적, 논리적, 전기적 공정 및 다른 변경을 포함할 수 있다. 일부 실시예의 부분과 특징은 다른 실시예의 것에 포함되거나 이에 대체될 수 있다.
본 문헌은 특히 계층적 병렬 기계, 예를 들어, 계층적 유한 상태 기계(HFSM: hierarchical finite state machine) 엔진 및 관련 방법을 기술한다. 하나의 이러한 계층적 병렬 기계(10)는 도 1에 도시되어 있다. 각 계층적 병렬 기계(10)는 2개 이상의 유한 상태 기계(FSM) 엔진(12)과 같은 2개 이상의 병렬 기계를 포함한다. 각 유한 상태 기계 엔진(12)은 입력 버스(16)에서의 데이터(예를 들어, 데이터 스트림)를 수신하고 이에 반응하여 수신된 데이터의 함수로서 출력을 제공(예를 들어, 생성)하는 디바이스이다.
각 유한 상태 기계 엔진(12)은 임의 복소수(complex)일 수 있다. 도 1에 도시된 것과 같은 일 실시예에서, 유한 상태 기계 엔진(12)은 케스케이드 연결되어 있는데, 적어도 하나의 유한 상태 기계 엔진(12)의 출력(예를 들어, 상태)은 케스케이드에서 하류에 있는 하나 이상의 유한 상태 기계 엔진(12)에 전체적으로 또는 부분적으로 제공된다(예를 들어, 전달된다). 일례에서, 케스케이드에서 마지막 유한 상태 기계 엔진은 결과를 생성하고 이 결과는 결과 버스(20)와 같은 출력 버스에 제공될 수 있다. 일 실시예에서, 각 유한 상태 기계 엔진(12)은, 예를 들어, 프로그램(예를 들어, 이미지)을 프로그램 버스(14)를 사용하여 유한 상태 기계 엔진(12)에 로딩(예를 들어, 저장)하는 것에 의해 각 프로그램 버스(14)를 통해 프로그래밍될 수 있다.
일부 실시예에서, HPRP(10)로 데이터를 처리하는데 필요한 시간을 감소시키기 위해 중요할 수 있다. HPRP(10)로 데이터를 처리하는 시간은 유한 상태 기계 엔진(12)들 사이에 전달되는 데이터의 양(예를 들어, 상태 벡터와 같은 상태 정보)에 의해 적어도 부분적으로 제한될 수 있다. 일부 이러한 실시예에서, 유한 상태 기계 엔진(12)은 계층적 구성으로 연결되고, 유한 상태 기계 엔진(12)들 사이의 인터페이스는 거의 실시간 동작으로 설계될 수 있다. 특히, 본 문헌은 이러한 고려사항을 기술하며 FSM 엔진(12)의 계층적 세트와 같은 병렬 기계의 계층적 세트의 물리적 구현을 위한 일반적인 방법을 제안한다.
일례의 실시예에서, HPRP(Hierarchical Pattern Recognition Processor)(30)가 도 2에 도시된 바와 같이 구현된다. 패턴 인식 프로세서는, 데이터(예를 들어, 심볼 시퀀스)를 수신하고 관련 시퀀스(들)가 인식(예를 들어, 검출)될 때 일부 유형의 통지(notification)를 제공하는 출력을 생성하는 디바이스이다. 간단한 경우에, 입력 심볼의 단일 스트림이 입력 버스(36)에서 HPRP(30)에 제공된다. HPRP(30)는 프로그램 버스(들)(34)를 통해 입력 심볼의 특정 시퀀스 또는 특정 시퀀스들을 검출하도록 프로그래밍된다. 결과(검출된 시퀀스)가 생성되고 이는 결과 버스(40)에 제공될 수 있다. HPRP(30)의 논리 인터페이스(프로그램 인터페이스(34)와 데이터 입력(36))가 도 2에 도시된다.
도시된 실시예에서, HPRP(30)는 패턴 인식 프로세서(PRP)(32)로서 프로그래밍된 2개 이상의 유한 상태 기계 엔진을 포함할 수 있다. 각 PRP(32)는 각 데이터 스트림(입력 버스(36) 또는 입력 버스(42)에서의 데이터 스트림과 같은)으로 심볼의 시퀀스(들)를 검출할 수 있는 디바이스이다. 예를 들어, 각 PRP(32)는 각 데이터 스트림에서 각 패턴과 매칭(match)할 수 있다. 도시된 실시예에서, 제2 PRP(32)는 그 입력으로서 제1 PRP(32)의 출력(출력 버스(38)에 제공된 것)을 수신하고 결과 버스(40)에 결과를 생성한다. 일 실시예에서, 각 PRP(32)는 각 프로그램 버스(34)를 통해 프로그래밍될 수 있다. 일례 PRP(32)는 도 15 내지 도 18을 참조하여 아래에 설명된다(이는 또한 "컨텐츠 검사 프로세서"라고도 지칭된다). 특정 예에서, HPRP(30)는 유한 상태 기계(FSM) 엔진 또는 전계 프로그래밍가능한 게이트 어레이(FPGA) 또는 그 변형 또는 병렬 기계의 다른 구현예를 사용하여 구현된다.
계층적 병렬 기계(10, 30)의 2 레벨(예를 들어, 스테이지) 계층은 2개의 독립적인 프로그램이 동일한 데이터 스트림에 기초하여 동작하게 한다. 2 레벨 계층은 상이한 영역으로 모델링된 사람의 뇌에서의 시각적 인식과 유사할 수 있다. 이 모델 하에서, 영역은 효과적으로 상이한 패턴 인식 프로세서이며, 각 프로세서는 (데이터 스트림에서 심볼의 시퀀스를 검출하는) 유사한 계산 함수를 상이한 프로그램(예를 들어, 시그너처)을 사용하여 수행한다. 다수의 병렬 기계를 서로 연결시키는 것에 의해, 데이터 스트림에 관한 더 깊은 지식이 획득될 수 있다.
(제1 FSM 엔진(12) 또는 제1 PRP(32)에 의해 구현된 것과 같은) 계층의 제1레벨은 예를 들어 원시 데이터(raw date) 스트림에 직접 처리를 수행할 수 있다. 즉, 제1 FSM(12) 또는 PRP(32)는 입력 버스(16) 또는 입력 버스(36)에서의 원시 데이터 스트림의 함수로서 출력 데이터 스트림(예를 들어, 원시 데이터 스트림에서 매칭 또는 매칭들의 표시)을 각각 생성할 수 있다. 도 1에 도시된 바와 같이, (제2 FSM 엔진(12) 또는 제2 PRP(32)에 의해 구현되는 것과 같은) 제2레벨은 제1레벨로부터 출력 데이터 스트림을 처리한다. 예를 들어, 제2 FSM 엔진(12)은 (출력 버스(18)에 제공되는) 제1 FSM 엔진(12)으로부터 출력 데이터 스트림을 수신하고, 제2 FSM 엔진(12)은 제1 FSM 엔진(12)의 출력 데이터 스트림을 처리한다. 따라서, 제2 FSM 엔진(12)은 입력으로서 원시 데이터 스트림을 수신하지 않으나, 제1 FSM 엔진(12)에 의해 생성된 출력 데이터 스트림을 수신한다. 제2 FSM 엔진(12)은 제1 FSM 엔진(12)에 의해 생성된 출력 데이터 스트림에서 시퀀스(들)를 검출하기 위해 제1이미지로 프로그래밍될 수 있다. 제2 FSM 엔진(12)은 제2이미지를 수신하기 위해 (예를 들어, 프로그램 버스(14)에 의해) 별도의 프로그래밍 인터페이스에 연결될 수 있다.
일례에서, HPRP(30)는 패턴 인식 함수를 구현하도록 프로그래밍될 수 있다. 예를 들어, HPRP(30)에 의해 구현된 FSM은 HPRP(30)에 데이터 스트림 입력에서의 하나 이상의 데이터 시퀀스(예를 들어, 시그너처)를 인식하도록 구성될 수 있다. 데이터 스트림에서 관련 시퀀스가 제1 PRP(32)에 의해 인식(예를 들어, 매칭)되면, 이 인식을 나타내는 출력 데이터 스트림이 출력 버스(38)에 제공될 수 있다. 일례에서, 패턴 인식은 예를 들어, 네트워크 데이터에서 말웨어(malware) 또는 다른 정보를 식별하기 위해 심볼 스트링(예를 들어, ASCII 문자)을 인식하는 것일 수 있다.
이 출력 데이터 스트림(예를 들어, 출력 워드, 검출 상태 등)은 도 2에 도시된 바와 같이 제1 PRP(32)의 출력 버스(38)로부터 다른 PRP(32)의 입력 버스(42)로 공급될 수 있다. 2개의 PRP(32)의 이러한 직렬 연결은 제1 PRP(32)로부터 제2 PRP(32)로 압축된 워드(word)에 지난 이벤트(past events)에 관한 정보를 제공하는 수단을 제공한다. 이러한 정보의 제공은 효과적으로 제1 PRP(32)에 의해 인식된 복잡한 이벤트의 개요(예를 들어, 데이터 스트림 시퀀스)일 수 있다.
전술된 바와 같이, 일부 실시예에서, PRP의 레벨들 사이에 출력을 전달하는데 필요한 시간을 감소시키는 것이 중요할 수 있다. 일부 이러한 실시예에서, PRP(32)들 사이의 인터페이스는 HPRP(30)의 각 레벨의 실시간 동작을 지원하도록 설계될 수 있다. 본 문헌은 이러한 고려사항을 기술하고 예를 들어 HPRP(30)의 물리적 구현을 위한 일반적인 방법을 제안한다.
본 문헌은 특히 계층적 구조를 사용하여 데이터를 처리하는 방법 및 장치를 기술한다. 계층적 구조는 복수의 레벨(예를 들어, 층)을 포함하며 각 레벨은 데이터를 처리(예를 들어, 데이터에 분석을 수행)하고 (예를 들어, 분석에 기초하여)출력을 제공할 수 있다. 계층 구조에서 더 낮은 레벨로부터의 출력은 더 높은 레벨에의 입력으로 제공될 수 있다. 이런 방식으로, 더 낮은 레벨은 더 기본적인/기초적인 분석을 수행하는 것인 반면, 더 높은 레벨은 하나 이상의 더 낮은 레벨로부터의 출력을 사용하여 더 복잡한 분석을 수행할 수 있다. 일례에서, 계층 구조는 패턴 인식을 수행한다.
일례에서, 계층 구조는 케스케이드 방식으로 서로 연결된 복수의 유한 상태 기계 엔진으로 구현된다. 예를 들어, 제1 및 제2유한 상태 기계 엔진은 제2유한 상태 기계 엔진이 입력으로서 제1유한 상태 기계 엔진으로부터의 출력을 수신하도록 직렬 연결될 수 있다. 임의의 개수의 유한 상태 기계 엔진이 이 계층 구조에서 서로 연결될 수 있다.
계층 구조를 사용하여 데이터를 처리하는 이외에, 본 문헌은 또한 다른 유한 상태 기계 엔진에 의해 수행되는 처리를 수정하도록 하나의 유한 상태 기계 엔진으로부터의 출력을 사용하는 방법 및 장치를 기술한다. 전술된 유한 상태 기계 엔진의 예를 사용하여, 더 높은 처리 레벨을 구현하는 제2유한 상태 기계 엔진이 더 낮은 처리 레벨을 구현하는 제1유한 상태 기계 엔진으로 피드백 정보를 제공할 수 있다. 피드백 정보는 생물학적 뇌에서의 학습과 유사한 방식으로 처리를 수정(예를 들어, 업데이트)하도록 제1유한 상태 기계 엔진에 의해 사용될 수 있다.
도 3은 유한 상태 기계 엔진 또는 패턴 인식 프로세서를 구현하도록 사용될 수 있는 예시적인 병렬 기계(100)를 도시한다. 병렬 기계(100)는 입력 데이터를 수신하고 입력 데이터에 기초하여 출력을 제공할 수 있다. 병렬 기계(100)는 입력 데이터를 수신하는 데이터 입력 포트(110)와, 출력을 다른 디바이스에 제공하는 출력 포트(114)를 포함할 수 있다. 데이터 입력 포트(110)는 병렬 기계(100)에 데이터를 입력하는 인터페이스를 제공한다.
병렬 기계(100)는 일반 목적 요소(general purpose elements)(102)와 특수 목적 요소(special purpose elements)(112)를 포함하는 복수의 프로그래밍가능한 요소를 포함한다. 일반 목적 요소(102)는 하나 이상의 입력(104)과 하나 이상의 출력(106)을 포함할 수 있다. 일반 목적 요소(102)는 복수의 상태 중 하나의 상태로 프로그래밍될 수 있다. 일반 목적 요소(102)의 상태는 일반 목적 요소(102)가 주어진 입력(들)에 기초하여 어떤 출력(들)을 제공할지를 결정할 수 있다. 즉, 일반 목적 요소(102)의 상태는 프로그래밍가능한 요소가 주어진 입력에 어떻게 반응하는지(예를 들어, 응답하는지)를 결정한다. 데이터 입력 포트(110)에의 데이터 입력은 복수의 일반 목적 요소(102)에 제공되어 일반 목적 요소(102)가 동작을 취하게 할 수 있다. 일반 목적 요소(102)의 예는 예를 들어, 아래에 상세히 설명된 바와 같이 상태 기계 요소(SME), 다른 프로그래밍가능한 요소들 중에서 카운터 및/또는 구성가능한 논리 블록을 포함할 수 있다. 일례에서, SME는 주어진 입력이 데이터 입력 포트(110)에 수신될 때 특정 출력(예를 들어, 하이 또는 "1" 신호)을 제공하도록 프로그래밍(예를 들어, 설정)될 수 있다. 주어진 입력과는 다른 입력이 데이터 입력 포트(110)에서 수신되면, SME는 다른 출력(예를 들어, 로우 또는 "0" 신호)을 제공할 수 있다. 일례에서, 구성가능한 논리 블록은 데이터 입력 포트(110)에서 수신된 입력에 기초하여 부울리안 논리 함수(Boolean logic function)(예를 들어, AND, OR, NOR, ext.)를 수행하도록 설정될 수 있다. 카운터의 일례는 본 명세서에서 후술된다. 특수 목적 요소(112)는 메모리(예를 들어, RAM), 논리 게이트, 카운터, 룩업 테이블, 전계 프로그래밍가능한 게이트 어레이(FPGA), 및 다른 하드웨어 요소를 포함할 수 있다. 특수 목적 요소(112)는 일반 목적 요소(102)와 상호작용하며 특수 목적 기능을 수행할 수 있다.
병렬 기계(100)는 병렬 기계(100)에 프로그램(예를 들어, 이미지)을 로딩하기 위한 프로그래밍 인터페이스(111)를 또한 포함할 수 있다. 이미지는 일반 목적 요소(102)의 상태를 프로그래밍(예를 들어, 설정)할 수 있다. 즉, 이미지는 주어진 입력에 특정 방식으로 반응하도록 일반 목적 요소(102)를 구성할 수 있다. 예를 들어, 일반 목적 요소(102)는 문자 'a'가 데이터 입력 포트(110)에서 수신된 경우 하이(high) 신호를 출력하도록 설정될 수 있다. 일부 예에서, 병렬 기계(100)는 일반 목적 요소(102)의 동작 타이밍을 제어하기 위한 클록 신호를 사용할 수 있다. 일부 실시예에서, 데이터 입력 포트(110)에서 수신된 데이터는 시간에 걸쳐 또는 한번에 전부 수신된 고정된 데이터 세트, 또는 시간에 걸쳐 수신된 데이터 스트림을 포함할 수 있다. 데이터는 병렬 기계(100)에 연결된 데이터베이스, 센서, 네트워크 등과 같은 임의의 소스로부터 수신되거나 임의의 소스에 의해 생성될 수 있다.
병렬 기계(100)는 또한 병렬 기계(100)의 상이한 요소들(예를 들어, 일반 목적 요소(102), 데이터 입력 포트(110), 출력 포트(114), 프로그래밍 인터페이스(111), 및 특수 목적 요소(112))을 서로 선택적으로 연결하기 위한 복수의 프로그래밍가능한 스위치(108)를 포함한다. 따라서, 병렬 기계(100)는 요소들 중에서 형성된 프로그래밍가능한 매트릭스를 포함한다. 일례에서, 프로그래밍가능한 스위치(108)는 일반 목적 요소(102), 데이터 입력 포트(110), 프로그래밍 인터페이스(111) 또는 특수 목적 요소(112)의 입력(104)이 하나 이상의 프로그래밍가능한 스위치(108)를 통해 일반 목적 요소(102), 출력 포트(114), 프로그래밍 인터페이스(111) 또는 특수 목적 요소(112)의 출력(106)에 연결될 수 있도록 2개 이상의 요소를 서로 선택적으로 연결할 수 있다. 따라서, 요소들 사이에 신호의 라우팅은 프로그래밍가능한 스위치(108)를 설정하는 것에 의해 제어될 수 있다. 도 3이 주어진 요소와 프로그래밍가능한 스위치(108) 사이에 특정 개수의 전도체(예를 들어, 와이어)를 도시하고 있으나, 다른 예에서, 상이한 개수의 전도체가 사용될 수 있다는 것이 이해될 수 있을 것이다. 또한, 도 3이 각 일반 목적 요소(102)가 프로그래밍가능한 스위치(108)에 개별적으로 연결된 것을 도시하고 있으나, 다른 예에서, 다수의 일반 목적 요소(102)들이 프로그래밍가능한 스위치(108)에 그룹(예를 들어, 도 15에 도시된 바와 같이, 블록(802))으로서 연결될 수 있다. 일례에서, 데이터 입력 포트(110), 데이터 출력 포트(114), 및/또는 프로그래밍 인터페이스(111)는 레지스터에 기록하는 것이 데이터를 각 요소에 제공하거나 각 요소로부터 데이터를 제공하도록 레지스터로 구현될 수 있다.
일례에서, 단일 병렬 기계(100)는 물리적 디바이스 위에 구현되지만, 다른 예에서는 2개 이상의 병렬 기계(100)는 단일 물리적 디바이스(예를 들어, 물리적 칩) 위에 구현될 수 있다. 일례에서, 다수의 병렬 기계(100) 각각은 별개의 데이터 입력 포트(110), 별개의 출력 포트(114), 별개의 프로그래밍 인터페이스(111), 및 별개의 일반 목적 요소(102) 세트를 포함할 수 있다. 나아가, 각 일반 목적 요소(102) 세트는 그 대응하는 입력 데이터 포트(110)에서의 데이터에 반응(예를 들어, 하이 또는 로우 신호를 출력)할 수 있다. 예를 들어, 제1병렬 기계(100)에 대응하는 일반 목적 요소(102)의 제1세트는 제1병렬 기계(100)에 대응하는 제1 데이터 입력 포트(110)에서의 데이터에 반응할 수 있다. 제2병렬 기계(100)에 대응하는 일반 목적 요소(102)의 제2세트는 제2병렬 기계(100)에 대응하는 제2데이터 입력 포트(110)에 반응할 수 있다. 따라서, 각 병렬 기계(100)는 일반 목적 요소(102)의 세트를 포함하며, 일반 목적 요소(102)의 다른 세트는 다른 입력 데이터에 반응할 수 있다. 이와 유사하게, 각 병렬 기계(100), 및 일반 목적 요소(102)의 각 대응하는 세트는 별개의 출력을 제공할 수 있다. 일부 예에서, 제1병렬 기계(100)로부터의 출력 포트(114)는 제2병렬 기계(100)를 위한 입력 데이터가 제1병렬 기계(100)로부터의 출력 데이터를 포함할 수 있도록 제2병렬 기계(100)의 입력 포트(110)에 연결될 수 있다.
일례에서, 병렬 기계(100)에 로딩하기 위한 이미지는, 병렬 기계(100) 내에 있는 일반 목적 요소(102)의 상태를 설정하고, 프로그래밍가능한 스위치(108)를 프로그래밍하고, 특수 목적 요소(112)를 구성하기 위한 복수의 정보 비트를 포함한다. 일례에서, 이미지는 특정 입력에 기초하여 원하는 출력을 제공하도록 병렬 기계(100)를 프로그래밍하도록 병렬 기계(100)에 로딩될 수 있다. 출력 포트(114)는 일반 목적 요소(102)의 반응에 기초하여 병렬 기계(100)로부터 출력을 입력 포트(110)에서 수신된 데이터에 제공할 수 있다. 출력 포트(114)로부터 출력은 주어진 패턴의 매칭을 나타내는 단일 비트, 복수의 패턴에 매칭 및 비매칭을 나타내는 복수의 비트를 포함하는 워드, 및 모든 또는 특정 일반 목적 요소(102)와 특수 목적 요소(112)의 상태에 대응하는 출력 벡터를 포함할 수 있다.
병렬 기계(100)에 대한 예시적인 사용은 패턴 인식(예를 들어, 음성 인식, 이미지 인식, 등) 신호 처리, 이미징, 컴퓨터 비전, 암호화 등을 포함한다. 특정 예에서, 병렬 기계(100)는 유한 상태 기계(FSM) 엔진, 전계 프로그래밍가능한 게이트 어레이(FPGA), 및 그 변형을 포함할 수 있다. 나아가, 병렬 기계(100)는 컴퓨터, 페이저(pager), 셀룰러 폰(cellular phone), 퍼스널 오거나이저(personal organizer), 휴대용 오디오 플레이어, 네트워크 디바이스(예를 들어, 라우터, 방화벽, 스위치 또는 임의의 조합), 제어 회로, 카메라 등과 같은 더 큰 디바이스에서의 구성 요소일 수 있다.
병렬 기계(예를 들어, FSM 엔진, PRP 등)는 상태 기계(들)를 구현할 수 있다. 상태 기계는 지향된 그래프로 표현될 수 있다. 도 4는 워드 'DOG'에서 발견되는 문자의 시퀀스를 나타내는 단순한 상태 기계 다이어그램(150)을 도시한다. 상태(152)는 상태 기계 다이어그램(150)에 대한 입력 상태이다. 상태(154)는 중간 상태이다. 도 4에서 최종 상태(156)(종종, 단자 상태(terminal state)라고도 함)는 'G' 상태 주위의 점선 라인 경계에 의해 식별된다. 일반적인 경우에, 최종 상태에 도달하면, 매칭 조건이 일부 메커니즘을 통해 표시된다. 이 매칭 조건은 병렬 기계(100)(예를 들어, FSM 엔진(12), PRP(32))로부터 명시적인 신호에 의해 표현될 수 있으며 또는 이것은 이진 워드로 인코딩되어 메모리 레지스터에 저장될 수 있다.
상태 기계의 사이즈에는 이론적으로 제한이 없다. 일반적인 경우에, PRP 또는 FSM 엔진은 PRP 또는 FSM 엔진에 의해 검출될 수 있는 심볼의 각 특정 시퀀스에 대한 별도의 상태 기계를 구현할 수 있다. 원하는 경우, 예를 들어 상태 기계를 더 큰 구현으로 조합하거나 또는 특정 상태 기계의 구현의 사이즈를 최소화하기 위해 리던던시(redundancy)(공통 경로)를 제거하기 위하여 상태 기계에 최적화를 수행할 수 있다. 이러한 최적화는 상태 기계 구현(들)의 집합 사이즈를 감소시킬 수 있고 이에 따라 예를 들어, 상태 기계(들)를 구현하는 상태 기계 엔진을 감소시킬 수 있다. 이 최적화가 완료되면, 단일의 큰 상태 기계가 구현될 수 있다.
도 5는 더 큰 상태 기계 다이어그램(200)을 도시한다. 일반적인 경우에, 상태 기계의 구현은 포워드 및 백워드로의 복잡한 연결을 구비할 수 있다. 도 5에 도시된 예에서, 하나의 입력 상태(202)는 2개의 중간 상태(204)를 공급한다. 이러한 상태 기계에서, 많은 최종 상태(208)와 많은 다른 중간 상태(204)들이 있을 수 있다.
상태 기계에서 각 상태는 이 상태가 활성(active)인지 아닌지 여부를 나타내는 순간 스테이터스(instantaneous status)를 구비한다. 활성 상태만이 입력 심볼에 반응할 수 있다. 일 실시예에서, 입력 심볼이 입력 버스(36)에서 수신되면, 상태 기계에서 각 활성 상태는 이 심볼을 분석하여 활성 신호가 생성되어야 하는지 여부를 결정한다. 이 활성 신호는 시퀀스에서의 그 다음 상태를 활성화하는데 사용될 수 있다. 예를 들어, 문자 'b'를 특정하는 제1상태(204)는, 제1노드(204)가 활성이고 문자 'b'가 입력 데이터로서 수신될 때, 입력 문자 'b'에 대한 전이부(206)에 의해 제1상태(204)에 연결된 제2상태(204)를 활성화시킬 수 있다.
다이어그램(200)에서, 입력 상태(202)는 처음에 활성화될 수 있고, 입력 데이터가 입력 노드(202)로부터 전이부(206)와 매칭하는 경우 다운스트림 상태(204)를 활성화할 수 있다. 상태(204, 208)는 다이어그램(200) 전체에 걸쳐 입력 데이터가 수신될 때 이런 방식으로 활성화될 수 있다. 활성화된 최종 상태(208)는 입력 데이터에 의해 관련 시퀀스의 매칭에 대응한다. 따라서, 최종 상태(208)의 활성화는 관련 시퀀스가 입력 데이터에서 수신된 것을 나타낸다. 패턴 인식 함수를 구현하는 유한 상태 기계 엔진(100)의 상황에서 최종 상태(208)를 활성화하는 것은 관련 특정 패턴이 입력 데이터에서 검출된 것을 나타낼 수 있다.
일례에서, 각 중간 상태(204)와 최종 상태(208)는 유한 상태 기계 엔진(100)에서 일반 목적 요소(102)에 대응할 수 있다. 각 전이부(206)는 일반 목적 요소(102)들 사이에 연결부에 대응할 수 있다. 따라서, 다른 중간 상태(204) 또는 최종 상태(208)로 전이하는(예를 들어, 이에 연결하는 전이부(206)를 구비하는) 중간 상태(204)는 다른 일반 목적 요소(102)에 연결될 수 있는 일반 목적 요소(102)에 대응한다. 일부 특수 경우에, 시작 상태(202)는 대응하는 일반 목적 요소(102)를 반드시 가져야 하는 것은 아닐 수 있다.
유한 상태 기계 엔진(100)이 FSM을 구현하도록 프로그래밍되는 경우, 일반 목적 요소(102)들 각각은 활성 또는 비활성 상태에 있을 수 있다. 비활성 일반 목적 요소(102)는 입력 인터페이스(110)에서 데이터 스트림에 반응하지 않는다. 활성 일반 목적 요소(102)는 입력 인터페이스(110)에서 데이터 스트림에 반응할 수 있고 입력 데이터 스트림이 일반 목적 요소(102)의 설정에 매칭하는 경우 다운스트림의 일반 목적 요소(102)를 활성화시킬 수 있다. 일반 목적 요소(102)가 최종 상태(208)에 대응하는 경우, 일반 목적 요소(102)는, 일부 경우에 다른 유한 상태 기계 엔진(100)일 수 있는 외부 디바이스에 매칭의 표시(indication)를 제공하도록 출력 포트(114)에 연결될 수 있다.
프로그래밍 인터페이스(111)를 통해 유한 상태 기계 엔진(100)으로 로딩된 이미지는 원하는 FSM이 입력 인터페이스(110)에서 데이터 스트림에의 응답에 기초하여 다운스트림 상태의 활성화를 통해 구현되도록 일반 목적 요소(102)를, 및 이 일반 목적 요소(102)들 사이의 연결을 구성할 수 있다. 일례에서, 일반 목적 요소(102)는 단일 데이터 사이클(예를 들어, 단일 문자, 문자 세트, 단일 클록 사이클) 동안 활성으로 유지된 다음, 업스트림의 일반 목적 요소(102)에 의해 재활성화되지 않는 한, 비활성으로 스위치된다.
최종 상태(208)는 과거 이벤트의 압축된 이력을 저장하는데 고려될 수 있다. 예를 들어, 최종 상태(208)를 활성화하는데 필요한 입력 데이터의 하나 이상의 시퀀스는 그 최종 상태(208)의 활성화에 의해 표현될 수 있다. 일례에서, 최종 상태(208)에 의해 제공되는 출력이 이진(binary)이며, 즉 그 출력은 관련 대응하는 시퀀스가 매칭되었는지 아닌지를 나타낸다. FSM에서 중간 상태(204)에 대한 최종 상태(208)의 비는 상당히 작을 수 있다. 다시 말해, FSM에서 높은 복잡성이 있을 수 있으나, FSM의 출력은 그에 비해 작을 수 있다.
FSM 엔진이 하나의 조합된(최적화된) 상태 기계를 구현할지 또는 많은 독립적인 상태 기계를 구현할지 여부에 상관없이, 상태 벡터의 개념이 존재한다. 상태 벡터는 구현된 상태 기계(들)에서의 개별 상태와 벡터 내 개별 디지트(digit)(예를 들어, 비트) 위치 사이에 일대일 대응관계를 가지는 일차원 벡터이다. 다시 말해, 상태 기계(들)에서 각 상태는 상태 벡터에서 디지트와 관련된다. 도 4의 경우에, 상태 벡터는 3비트 폭이다(하나의 비트는 상태(152, 154, 및 156)들 각각의 상태를 나타낸다). 도 5의 경우에, 상태 벡터는 74비트 폭이다. 상태 기계는 임의 복소수일 수 있으며, 그리하여 이론적으로 기계의 전체 사이즈에 놓인 제한이 없다. 그 결과, 상태 벡터는 무한히 길 수 있다.
그러나, 병렬 기계에서 실제 상태 기계를 구현하기 위하여 일부 유한 제한이 일반적으로 상태 기계의 사이즈에 놓여진다. 이러한 제한은 엄격히 한정된 것은 아니고 상태 기계를 구현하는데 사용되는 병렬 기계의 특성에 기초하여 결정될 수 있다.
다른 HFSM(400)이 도 6에 도시된다. 도 6에 도시된 HFSM(400)에서, 3개의 유한 상태 기계 엔진(402)이 모든 각 상태 벡터 디지트의 전부 또는 일부를 사용하여 하나의 유한 상태 기계 엔진(404)에 각 상태에 관한 정보를 제공한다. 도시된 예에서, 각 상태 기계 엔진(402, 404)은 각 프로그래밍 인터페이스(PROG)를 통해 프로그래밍된다. 다른 실시예에서, 각 FSM 엔진(402)으로부터 데이터는 FSM 엔진(404)을 프로그래밍하는데 사용된다. 일부 이러한 실시예에서, FSM 엔진(404)은 FSM 엔진(402)으로부터 수신된 상태 정보에 적응하도록 설계된다.
더 복잡한 HFSM(500)이 도 7에 도시된다. 도 7의 HFSM(500)에서, 다수의 FSM 엔진(502, 504, 506, 508)은 서로 연결되고, FSM 엔진(502)은 버스(510)를 통해 상태 정보를 FSM 엔진(504)으로 제공(예를 들어, 공급)하고, FSM 엔진(504)은 버스(512)를 통해 상태 정보를 FSM 엔진(506)으로 공급하고, FSM 엔진(506)은 버스(514)를 통해 상태 정보를 FSM 엔진(508)으로 공급한다. 다수의 FSM 레벨(502 내지 508)의 이러한 연결은 각 계층 레벨이 상이한 상태 기계를 구현하게 한다. 일부 예시적인 HFSM에서, 각 계층 레벨은 상이한 유형의 패턴에 민감하다. HFSM(500)에서와 같이 이들 예시적인 HFSM에서, 계층 레벨의 이러한 분리는 HFSM이 낮은 레벨의 인식을 구현하게 하고 이는 더 높은 레벨의 인식을 달성하기 위해 여러 계층 레벨을 통해 전달된다. 일례에서, 결과는 예를 들어 특정 패턴(예를 들어, 위상)의 식별과 같은 HFSM(500)의 결과 버스(516)에 제공된다. 다른 예에서, 결과는 FSM 엔진(502, 504, 506 및 508) 중 하나 이상으로부터 상태 비트의 조합이다.
도 7에 도시된 바와 같이, 개별 FSM 엔진을 계층적인 방식으로 연결하는 하나의 방법은 하나의 FSM 엔진의 출력을 계층에서 그 다음 더 높은 레벨의 FSM 엔진의 입력으로 연결하는 것이다. HFSM(500)이 하나의 레벨로부터 상태 정보가 계층 내 임의의 다른 레벨로 제공(예를 들어, 포워드 또는 백워드 공급)되는 것으로 구현될 수 있다는 것이 이해될 수 있을 것이다. 예를 들어, FSM 엔진(502)으로부터 상태 정보는 FSM 엔진(506)으로 송신될 수 있는 반면, FSM 엔진(508)으로부터 상태 정보는 FSM 엔진(502)으로 백워드 공급될 수 있다. 일반적인 용어로, 하나 이상의 FSM 엔진으로부터 상태 정보는 어떤 구성이 필요한 것으로 고려되던지 간에 다른 FSM 엔진의 하나 이상(예를 들어, 전부)으로 제공될 수 있다.
도 7에 도시된 예는 기록된 언어의 시각적 식별에 대응한다. 처리가 더 높은 레벨의 계층으로 진행함에 따라 데이터 스트림의 누적된 지식이 따라서 증가한다. 도시된 실시예에서, 각 레벨(FSM 엔진(502, 504, 506, 508))에서 FSM 엔진은 계층적 인식 능력을 달성하기 위해 케스케이드 연결된다. 각 연속적인 계층 레벨은 이전의 레벨의 출력에 적용되는 새로운 규칙(패턴 시그너처)을 구현할 수 있다. 이런 방식으로, 매우 상세한 객체(object)가 매우 기초적인 기본 정보의 검출에 기초하여 식별될 수 있다.
예를 들어, 레벨 1(예를 들어, 제1 FSM 엔진(502))로의 원시 데이터 입력 스트림은 이미지에 대한 픽셀 정보(예를 들어, 주어진 비트가 블랙인지/화이트인지 또는 온인지/오프인지)를 포함할 수 있다. FSM 엔진(502)은 비트로 형성된 기본적인 패턴을 인식(예를 들어, 식별)하도록 프로그래밍될 수 있다. 일례에서, FSM 엔진(502)은 인접한 비트의 그룹이 수직 라인, 수평 라인, 호(arc) 등을 형성할 때를 식별하도록 구성된다. 이들 패턴들 각각은 FSM 엔진(502)으로부터 별도의 출력 비트(또는 신호)로 식별될 수 있다. 예를 들어, FSM 엔진(502)이 적어도 3비트의 수직 라인을 인식할 때, 하이 신호(예를 들어, 논리 1)가 출력 워드의 제1비트에서 FSM 엔진(504)으로 송신될 수 있다. FSM 엔진(502)이 적어도 3비트의 수평 라인을 식별하면, 하이 신호가 출력 워드의 제2비트에서 FSM 엔진(504)으로 송신될 수 있다.
FSM 엔진(504)은 한편 FSM 엔진(502)으로부터의 출력(510)으로 형성된 패턴을 식별하도록 프로그래밍될 수 있다. 예를 들어, FSM 엔진(504)은 FSM 엔진(502)으로 식별된 기본 패턴(라인, 호, 등)의 조합으로 형성된 패턴을 식별하도록 프로그래밍될 수 있다. FSM 엔진(504)은 수평 라인과 수직 라인이 교차하여 예를 들어, 문자 "t"를 형성할 때를 식별하도록 프로그래밍될 수 있다. 전술된 바와 같이, FSM 엔진(504)을 사용하여 구현된 HFSM(500)은 FSM 엔진(502)으로부터의 출력에 반응한다. 따라서, 기본 패턴의 조합은 FSM 엔진(502)으로부터의 출력 비트의 패턴을 식별하는 것에 의해 식별된다.
FSM 엔진(504)으로부터 출력(512)은 FSM 엔진(506)으로 입력되고, 이는 FSM 엔진(504)으로 식별된 문자의 조합으로부터 워드를 식별할 수 있다. 제4레벨(FSM 엔진(508))은 FSM 엔진(506)으로 식별된 워드로 형성된 어구를 식별할 수 있다. 따라서, 더 높은 레벨은 더 낮은 레벨 출력에서의 패턴을 식별하도록 프로그래밍될 수 있다. 추가적으로, 더 낮은 레벨은 (더 낮은 레벨로 피드백된) 더 높은 레벨에서 식별된 패턴을 구성하는 성분을 식별하도록 프로그래밍될 수 있다.
문자의 시각적 식별은 일례로서 사용된다. 그러나, 본 명세서에 설명된 계층적 방법 및 시스템은 다른 데이터에 적용될 수 있다. 예를 들어, 음성에 대응하는 데이터에의 계층적 처리는 레벨 1에서 음소의 조합으로부터 음절을 식별하고 레벨 2에서 음절의 조합으로부터 워드를 식별할 수 있다. 다른 예에서, 계층적 처리는 계층적인 방식으로 그 자체 위에 형성된 기계 데이터에 적용될 수 있다.
HFSM(500)과 같은 HPRP 또는 HFSM을 구현할 때 나타날 수 있는 하나의 문제는 입력 데이터와 출력 데이터 사이에 비대칭 관계이다. 이 비대칭은 구현되는 상태 기계(들)가 충분히 커지게 될 때 악화된다. 처리되는 각 입력 심볼에서, FSM 엔진의 상태 벡터는 입력 심볼에 응답하여 변화할 수 있다. 일 실시예에서, 각 FSM 은 예를 들어, 최대 2의 16승(up to 2 to the 16th power)(64K) 상태를 포함한다. 각 상태가 상태 벡터에서 대응하는 디지트를 구비하는 경우, 상태 벡터는 64K 비트 길이일 수 있다. FSM 엔진들 사이에 이 길이의 벡터를 전달하는 것은 어려울 수 있다. 입력 데이터의 사이즈와 출력 데이터의 사이즈 사이의 이러한 비대칭을 감소시키는 방법은 다음에 기술된다.
일 실시예에서, 데이터는 버스에서 FSM 엔진들 사이에 송신된다. N 비트 폭의 버스는 64Kb/N 사이클에서 64Kb 상태 벡터를 전달할 수 있다. 다른 실시예에서, 상태 벡터는 입력 심볼에 응답하여 변화한 벡터의 디지트만이 다른 FSM 엔진들로 전파되도록 압축된다. 예를 들어, 각 버스 사이클은 이전의 심볼 사이클에서 변화된 상태 벡터의 디지트의 위치를 포함할 수 있다. 이 경우에, 출력은 차이 벡터라고도 지칭될 수 있다.
또 다른 실시예에서, 각 FSM 엔진은 상태 벡터로부터 다른 FSM 엔진으로 디지트의 서브세트만을 송신하도록 설계된다. 하나의 이러한 실시예에서, 각 FSM 엔진은 다른 FSM 엔진으로 전달된 상태 정보만이 최종 상태의 것이 되도록 프로그래밍된다. 일반적인 경우에, 최종 상태의 수는 상태의 총 수보다 더 작다. 예를 들어, PRP(32)의 총 상태에 대해 최종 상태의 비는 PRP에서 구현되는 상태 기계에 종속적이다. 비는 예를 들어 높은(1:5) 또는 상당히 낮은(1:10,000) 것일 수 있다.
총 상태에 대해 최종 상태의 비는 1:10이고 상태 벡터는 64Kb인 실제적인 예에서, 이것은 출력 벡터가 64Kb/10 또는 6,554비트일 수 있는 것을 의미한다. 이 예에서, PRP(8비트 심볼)의 매 입력 사이클은 6,554비트의 대응하는 출력 벡터를 생성할 수 있다.
포워드로 가는 예에서, ASCII 문자 세트가 입력(심볼) 언어인 일례를 사용해 보자. 이 경우에, 각 입력 심볼은 8비트 이진 워드로 표현될 수 있다. 대안적인 실시예에서, 다른 심볼, 예를 들어, 각 입력 심볼이 N 비트 이진 워드인 것이 사용될 수 있다.
예를 들어, 하나의 실시예에서, 도 2에 도시된 것과 같은 HPRP(30)에서 제2레벨 PRP(32)로 송신된 출력 벡터는 제1레벨 PRP(32)의 최종 상태만을 나타낼 수 있다. 다른 예에서, 도 7에 도시된 것과 같은 HFSM(500)에서 FSM 엔진(504)은 그 최종 상태를 나타내는 출력 벡터를 생성하고 출력 벡터를 출력 버스(514)에 있는 FSM 엔진(506)으로 송신할 수 있다. 하나의 이러한 예에서, 출력 버스(514)는 8비트 폭의 버스이다. 이전의 예로부터 언급된 8:6,554 비를 사용하면, 출력 벡터의 6,554비트를 제공(예를 들어, 전송)하는데 필요한 사이클의 수는 6,554/8 또는 820 사이클일 수 있다. 즉, 각 연속하는 계층 레벨은 이전의 레벨로부터 출력 워드를 처리하는데 820개의 입력 사이클을 요구할 수 있다. 이 효과는 계층을 선형적으로 리플(ripple)하여 각 연속하는 상태가 그 입력 워드를 분해(resolve)하는데 820개의 입력 사이클을 요구할 수 있다. 이 경우에, 주어진 비에서 PRP의 6개의 레벨 계층은 4,100(5x820)개의 입력 사이클을 요구하여, 결과가 최고 레벨에서 생성될 때까지 입력 심볼이 리플될 수 있게 한다. 이 수는 일례로서만 제공된 것이다. 총 상태에 대해 최종 상태의 비가 증가하면, 리플 시간이 증가한다. 마찬가지로, 계층 레벨의 수가 증가하면, 리플 시간이 각 연속 레벨과 함께 선형으로 증가한다.
앞서 사용된 예에 기초하면, HFSM 또는 HPRP가 결과를 생성하는데 (입력 사이클에 비해) 수 자리수(several orders of magnitude)의 지연이 가능하다. 이런 유형의 지연은 실시간 응용에서는 허용되지 않을 수 있다. 전술된 바와 같이, 예를 들어, 버스의 사이즈를 증가시키는 것에 의해 상태 정보를 전달하는데 필요한 사이클의 수를 감소시킬 수 있다. 또한 상태 정보를 전달하는데 필요한 시간을 감소시키기 위해 버스 사이클 시간을 감소시킬 수 있다. 나아가, 전술된 바와 같이, 마지막 심볼의 결과로서 변화된 상태 벡터의 디지트만을 식별하는 차이 벡터를 송신할 수 있다. 다른 무손실 압축 메커니즘이 또 사용될 수 있다.
입력과 출력 사이에 1:1 관계를 구현하는 것과 같은 이러한 지연을 감소시키는 다른 방법은 다음에 설명된다.
HFSM(500)과 같은 HFSM에서 입력과 출력 사이에 1:1 관계를 얻는 하나의 방법은 사이즈(폭)가 동일한 입력 버스(518)와 출력 버스(510)를 만드는 것이다. 출력 버스(510)의 폭은 HFSM(500) 그 자체에 의해 결정될 수 있다. 예를 들어, 출력 버스(510)의 사이즈는 상태 기계 엔진(502)의 최종 상태의 수에 의해 결정될 수 있다. 일반적으로 말하면, FSM 엔진은 동시에 많은 상이한 패턴을 인식하도록 프로그래밍된다. 이들 패턴 각각은 개별적인 상태 기계로 구현될 수 있다. 이런 방식으로 FSM 엔진은 모두 병렬로 동작하는 상태 기계의 세트를 구현할 수 있다.
도 8은 단일 FSM 엔진 내에서 병렬로 모두 동작하는 상태 기계(532)의 그룹(530)의 일례를 도식적으로 도시한다. 도 8에서, 8개의 상태 기계(532)들이 도시된다. 실제로, FSM 엔진은 수 천개의 개별 상태 기계를 구현할 수 있다.
단계 1 : 상태 기계 출력(최종 상태)의 집합
도 9에 도시된 바와 같이, 각 개별 상태 기계(532)는 하나 이상의 최종 상태(208)를 구비할 수 있다. 수 개의 최종 상태(208)들이 있을 수 있으나, 특정 상태 기계(532)의 최종 상태 중 임의의 것은 동일한 것을 구비하고 또는 관련된 의미를 구비한다. 이것을 말하는 다른 방법은 상태 기계(532)가 상태 기계의 최종 상태(208) 중 임의의 것(ANY)이 도달하는 경우 매칭을 가지는 것으로 고려되는 것이다. 효과적으로, 이것은 단일 상태 기계(532)의 최종 상태(208)가 도 9에 도시된 바와 같이 단일 출력(542)을 제공하도록 최종 상태에 대응하는 프로그래밍가능한 요소의 출력을 서로 연결하도록 OR 게이트(540)를 사용하는 것에 의해 집합(예를 들어, 서로 OR'd)될 수 있다. 도 9에 도시된 예에서, 상태 기계(532)는 3개의 최종 상태(208)를 서로 OR 처리한다. 이해될 수 있는 바와 같이, 다른 논리회로가 최종 상태(208)를 집합하도록 사용될 수 있다.
일례에서, 각 상태 기계(532)의 최종 상태(208)가 집합(예를 들어, OR'd)되었다면, 결과는 N개의 상태 기계(532)의 논리 그룹으로 그룹화(예를 들어, 수집)될 수 있고, 여기서 N은 각 입력 심볼 언어로 디지트의 수와 동일하다. 제1레벨의 입력 심볼 언어가 8비트 입력 워드를 포함하는 일례에서, 8개의 개별 상태 기계 출력(542)이 계층의 그 다음 레벨에 제공된 입력 심볼(546) 중 하나를 제공하도록 집합될 수 있다. 도 7에서, 예를 들어, 제1계층 레벨만이 표준 언어(ASCII 또는 다른 것)와 상관하는 입력 심볼을 수신한다. 이 예에서, FSM 엔진(502)은 출력 버스(510)에서 FSM 엔진(504)에 제공된 8비트 출력 벡터를 생성할 수 있다. 후속 계층 레벨이 이전의 레벨에 의해 결정된 의미를 가지는 입력 심볼을 수신한다.
상태 기계가 8의 세트에서와 같이 그룹화되었다면, 입력 및 출력 벡터를 정규화(normalizing)하는 제1레벨이 완료되었다. 본 명세서에서 사용되는 예로부터의 수를 사용하면, 820개의 최종 상태는 103 8비트 워드로 표현될 수 있다. 이들 8비트 워드 각각은 8개의 개별 상태 기계(532)를 위한 최종 상태의 스테이터스(status)를 인코딩한다. 이 8비트 출력 벡터에서 인코딩된 최종 상태의 총 수는 8보다 훨씬 더 클 수 있다는 것이 주목된다. 이것은 동일한 상태 기계(532)의 최종 상태(208)에서 수행되는 OR'ing 함수가 8개를 초과하는 상태를 서로 OR 처리할 수 있기 때문이다.
일 실시예에서, 각 FSM 엔진은 N 비트 폭의 입력 포트와 N 비트 폭의 출력 포트를 포함한다. 일 실시예에서, (예를 들어, 상태 벡터의 전부 또는 일부 또는 차이 벡터와 같은 출력 벡터의 형태로) 각 레벨로부터의 상태 정보는 N 비트 버스를 통해 그 다음 FSM 엔진으로 분배된다. 예를 들어, FSM 엔진(502)은 N 비트 출력 버스(510)를 사용하여 FSM 엔진(504)으로 상태 정보를 분배한다. 일 실시예에서, 동일한 N 비트 출력 벡터는 FSM 엔진(504)에서 각 상태 기계로 제공(예를 들어, 분배)된다. 다른 실시예에서, FSM 엔진(504)에서 프로그래밍가능한 요소는 그룹(예를 들어, 블록)으로 그룹화되고, FSM 엔진(502)의 출력 포트는 N 비트 워드의 시퀀스를 FSM 엔진(504)으로 기록하며, 워드 시퀀스는 미리 한정된 방식으로(순차 방식과 같이) FSM 엔진(504)으로 상태 기계 요소의 블록으로 분배된다. 이러한 접근법은 FSM 엔진(504)으로 추가적인 상태 정보의 분배를 가능하게 하지만, 완전한 상태 정보를 전달하는데 추가적인 버스 사이클을 필요로 한다.
일 실시예에서, 프로그래밍가능한 요소의 하나의 그룹에 대한 상태 정보는 FSM 엔진 내 그룹의 어드레스와 FSM 엔진의 표시를 포함하는 어드레스 정보를 송신하는 것에 의해 다른 FSM 엔진에 있는 프로그래밍가능한 요소의 그룹으로 송신된다. 이 정보는 도 7에서 예를 들어 버스(510)에서 분배될 수 있다.
단계 2 : PRP 에서 입력 버스의 수의 확장
FSM(12) 또는 PRP(32)의 일 구현은 PRP에서 구현된 모든 상태 기계(532)로 입력 심볼을 방송하는 단일 스트림 입력을 구비한다. 그러나, FSM(12)과 PRP(32)의 정의는 하나를 초과하는 스트림 입력(각각 16 및 36)을 구현하도록 확장될 수 있다. 이전에 언급된 예에서, 독립적인 스트림 입력의 총 수는 103과 같을 수 있다. 완전히 구현하기 위해 예를 들어, HPRP는 103 8비트 입력 또는 각 PRP(32)에 대해 820비트의 입력 버스를 요구할 수 있다.
일 실시예에서, FSM(12) 및 PRP(32)는 상태 기계 요소(SME)와 같은 프로그래밍 가능한 요소의 어레이(560) 위에 구현된다. 일례에서, 각 SME는 균일한 2차원 어레이(560)이다. 이 어레이(560)는 개별 영역으로 분할될 수 있으며, 각 영역은 자기 자신의 전용 스트림 입력(각각 16 및 36)을 구비한다. 도 11은 SME 요소의 2차원 어레이(560)를 도시한다. 도 11은 SME 그룹(562)의 어레이(560)로 분할되고, SME의 각 그룹(562)은 예를 들어, 유한 상태 기계 엔진(800)에 있는 블록(802)에 대응할 수 있다. 전체 어레이(560)는 예를 들어 16x16 SME 그룹(256개의 그룹, 총)을 포함할 수 있고, 각 그룹(562)은 2개의 SME(GOT)의 128개의 그룹을 포함한다(예를 들어, 각 그룹(562)은 도 16에서 도시된 행(806)과 같은 GOT의 16개의 행을 포함한다).
GOT의 각 행이 8개의 GOT를 포함하는 일부 실시예에서, 추가적인 프로그래밍가능한 요소(들)(예를 들어, 부울리안 논리 또는 카운터)는 출력 버스(18, 38)에 2개의 출력을 제공할 수 있다. 모든 이용가능한 출력이 FSM(12)과 PRP(32)에 걸쳐 사용되는 경우, 이 어레이는 예를 들어, 그 다음 레벨 PRP(32)로 구동하기 위해 최대 8192개의 비트를 구비할 수 있다.
HSFM(500)이 도 7에 도시된 바와 같이 구성될 때, FSM 엔진(502, 504)과 같은 2개의 상이한 반도체 디바이스에서 SME 그룹(562)의 2차원 어레이는 서로 연결될 수 있다. 2개의 반도체 디바이스를 서로 연결하는 수단은 여럿 있다. I/O 카운트가 충분히 높아질 때, 예를 들어, 다이 대 다이 상호연결이 사용될 수 있다. 도 12에 도시된 바와 같이 하나의 예시적인 구현에서, HPRP(570)에서 256개의 SME 그룹(562) 각각은 다이의 하부에 8비트 인터페이스(예를 들어, 입력 버스(36, 42))를 구비하고 다이의 상부에서 8비트 인터페이스(예를 들어, 출력 버스(38, 40))를 구비할 수 있다. 이들 인터페이스가 미리 한정된 위치에 놓일 때, PRP의 1레벨(PRP1)(582)이 더 낮은 레벨의 PRP(PRP0)(580)의 바로 상부에 적층될 수 있고, 입력 및 출력 인터페이스는 상호연결부(574)와 같은 상호연결부(예를 들어, 관통 실리콘 비아)를 사용하여 자연히 정렬되고 서로 연결된다.
이 정렬은 효과적으로 (입력 경로(572), 출력 경로(578) 및 상호연결부(574, 576)에 의해 한정된) SME 열(column)의 개념을 생성하며, 열의 각 레벨은 동일한 다이에 포함된 SME의 그룹을 나타낸다. 이전에 설명된 예시적인 수를 계속 사용하면, 각 PRP 레벨(580, 582, 584)에서, SME 그룹(562)은 이전의 레벨에 구현된 최대 8개의 상태 기계에 의해 구동될 수 있다. 이전의 레벨로부터 8개의 상태 기계는 SME 그룹(562)에 의해 부과된 제한에까지 임의 복소수일 수 있다. 도 12는 SME 열 중 하나를 하이라이트 한 것인 3레벨 HPRP(에지 뷰)의 일례를 도시한다. 각 레벨에서 SME의 그룹화는 이 레벨(예를 들어, 인코딩된 8비트 워드)로부터 그 다음 더 높은 레벨로 상태 정보를 제공한다.
전체적으로, 이런 방식으로 구성될 때, HPRP는 PRP 계층의 각 레벨에 대해 단 하나의 입력 클록 사이클의 지연이 있게 실질적으로 순간 결과를 제공할 수 있다. 입력 및 출력 워드의 비대칭에 의해 부과된 문제는 해결되고 전체 계층이 스트림 입력(572)과 동기하여 동작할 수 있다.
특정 실시예에서, 하나의 FSM 엔진(12)으로부터 상태 정보는 하나를 초과하는 다른 FSM 엔진(12)으로 송신된다. 이러한 실시예는 도 6에 도시된다. 도 12에 도시된 HPRP(570)를 참조하여 이 실시예를 설명하면, 예를 들어, PRP(580)로부터 상태 정보는 PRP(584)로 송신될 수 있다. 하나의 이러한 실시예에서, 상호연결부(576, 574)는 열의 블록 중 임의의 블록으로 상태 정보를 전달하는 버스를 형성한다. 예를 들어, 상호연결부(574, 576)는 하나 이상의 관통 비아 상호연결부를 포함할 수 있고, 상태 정보를 인접치 않은 PRP로 전달하도록 각 열에 제공될 수 있다. 하나의 이러한 실시예에서, 적층에서 각 PRP는 관통 바이로부터 정보를 수신하도록 연결된다. 다른 실시예에서, PRP의 입력은 필요에 따라 제조 공정 동안 관통 비아에 선택적으로 연결된다.
다른 실시예에서, SME의 하나의 그룹으로부터 상태 정보는 동일한 PRP(32) 내의 인접한 블록으로 분배되고 이들 블록을 통해 다른 PRP(32)(예를 들어 동일한 블록 열에 있는)로 분배된다.
일 실시예에서, 하나 이상의 PRP(32)로부터 상태 정보 또는 이 상태 정보로부터 유도된 정보는 계층에서 다른 PRP(32)를 재프로그래밍하는데 사용된다. 도 13은 계층의 일부를 재프로그래밍하는데 피드백을 사용하는 4개의 레벨 계층의 일례를 도시한다. 일반적으로, 주어진 PRP(32)(예를 들어, 제1유한 상태 기계 엔진(602))는 더 높은 또는 더 낮은 레벨 유한 상태 기계 엔진으로부터 출력에 기초하여 또는 자기 자신의 출력에 기초하여 재프로그래밍될 수 있다. 따라서, 제1유한 상태 기계 엔진(602)은 실행 시간 동안 변화하는 조건에 적응하도록 변화될 수 있다. 일례에서, 피드백은 더 높은 레벨에 기초하여 학습(재프로그래밍)하도록 더 낮은 레벨에 사용될 수 있다. 피드백은 일례로서 유한 상태 기계 엔진(602)을 사용하여 프로그래밍 인터페이스(602b)에서 수신될 수 있고 유한 상태 기계 엔진(602)에 대해 새로운 또는 업데이트된 프로그램의 형태일 수 있다. 일례에서, 업데이트된 프로그램은 유한 상태 기계 엔진(602)의 전부나 일부를 재프로그래밍할 수 있다.
도 13에서 4레벨 계층(600)은 입력 포트(602A, 604A, 606A, 608A), 프로그래밍 인터페이스(602B, 604B, 606C, 608B), 및 출력 포트(602C, 604C, 606C, 608C)를 각각 구비하는 4개의 유한 상태 기계 엔진(602, 604, 606, 608)으로 구현된다. 제1유한 상태 기계 엔진(602)은 계층(600)의 제1레벨을 구현하고 출력을 제2유한 상태 기계 엔진(604)으로 제공하며, 제2유한 상태 기계 엔진은 계층(600)의 제2레벨을 구현한다. 제3 및 제4유한 상태 기계 엔진(606, 608)은 마찬가지로 계층(600)의 제3 및 제4레벨을 구현한다. 일례에서, 제4유한 상태 기계 엔진(608)으로부터 출력은 제1유한 상태 기계 엔진(602)에 의해 수신된 입력 데이터에 대한 계층(600) 분석에 기초하여 계층(600) 출력으로서 외부 디바이스로 송신된다. 따라서, 제4유한 상태 기계 엔진(608)으로부터 출력은 계층(600)의 집합적 출력에 대응한다. 다른 예에서, 유한 상태 기계 엔진(602, 604, 또는 606)의 다른 것으로부터 출력은 계층(600)에 대한 집합적 출력에 대응할 수 있다.
제2, 제3, 및 제4유한 상태 기계 엔진(604, 606, 608)으로부터의 출력은 각각 아래 레벨에 유한 상태 기계 엔진(602, 604, 606)의 프로그래밍 인터페이스(602B, 604B, 606B)로 피드백될 수 있다. 예를 들어, 제4유한 상태 기계 엔진(608)으로부터의 출력은 제3유한 상태 기계 엔진(606)의 프로그래밍 인터페이스(606B)로 피드백된다. 제3유한 상태 기계 엔진(606)은 그러므로 제4유한 상태 기계 엔진(608)으로부터 출력에 기초하여 재프로그래밍될 수 있다. 따라서, 제3유한 상태 기계 엔진(608)은 실행 시간 동안 그 프로그램을 수정할 수 있다. 제1 및 제2유한 상태 기계 엔진(602, 604)은 제2 및 제3유한 상태 기계 엔진(604, 606)으로부터 출력에 각각 기초하여 실행시간 동안 이와 유사하게 재프로그래밍될 수 있다.
일례에서, 유한 상태 기계 엔진(604, 606, 608)으로부터의 출력으로부터 피드백은 유한 상태 기계 엔진(602, 604, 606)을 재프로그래밍하기 위한 프로그램을 형성하도록 처리된다(예를 들어, 분석 및 컴파일된다). 예를 들어, 유한 상태 기계 엔진(608)으로부터 출력은 프로그래밍 인터페이스(606B)로 송신되기 전에 처리 디바이스(614)에 의해 분석되고 컴파일될 수 있다. 처리 디바이스(614)는 유한 상태 기계 엔진(608)으로부터 출력에 기초하여 유한 상태 기계 엔진(606)을 위한 업데이트된 프로그램을 생성할 수 있다. 처리 디바이스(614)는 출력을 분석하고 제3유한 상태 기계 엔진(606)을 위한 업데이트된 프로그램을 컴파일할 수 있다. 업데이트된 프로그램은 제3유한 상태 기계 엔진(606)을 재프로그래밍하기 위해 프로그래밍 인터페이스(606B)를 통해 제3유한 상태 기계 엔진(606)으로 로딩될 수 있다. 일례에서, 업데이트된 프로그램은 현재 프로그램으로부터 부분적인 변화만을 포함할 수 있다. 따라서, 일례에서, 업데이트된 프로그램은 유한 상태 기계 엔진(602, 604, 606, 608)에 있는 현재 프로그램의 일부분만을 교체한다. 다른 예에서, 업데이트된 프로그램은 현재 프로그램의 전부 또는 대부분을 교체한다. 마찬가지로, 처리 디바이스(610, 612)는 제2 및 제3유한 상태 기계 엔진(604, 606)으로부터 출력에 기초하여 이와 유사한 방식으로 피드백을 분석하고 컴파일할 수 있다. 처리 디바이스(610, 612, 614)는 하나 이상의 추가적인 유한 상태 기계 엔진으로 구현될 수 있으며 또는 여러 유형의 기계(예를 들어, 폰 노이만 아키텍처를 가지는 컴퓨터)로 구현될 수 있다.
일부 실시예에서, 처리 디바이스(610, 612, 614)는 새로운 프로그램을 컴파일하기 전에 더 높은 레벨로부터 출력을 분석한다. 일례에서, 처리 디바이스(610, 612, 614)는 출력을 분석하고 분석에 기초하여 더 낮은 레벨의 프로그램을 업데이트하는 방법을 결정하고 새로운 또는 업데이트된 더 낮은 레벨의 프로그램을 컴파일한다. 계층(600)에서 주어진 유한 상태 기계 엔진에서 피드백이 주어진 유한 상태 기계 엔진 바로 위 레벨로부터 수신되었으나, 피드백은 임의의 레벨의 유한 상태 기계 엔진으로부터 더 높은 레벨, 더 낮은 레벨, 또는 동일한 레벨의 다른 유한 상태 기계 엔진으로 이루어질 수 있다. 예를 들어, 피드백은 동일한 유한 상태 기계 엔진의 출력으로부터 또는 동일한 레벨, 더 높은 레벨 또는 더 낮은 레벨의 다른 유한 상태 기계 엔진의 출력으로부터 유한 상태 기계 엔진의 프로그래밍 입력에서 수신될 수 있다. 추가적으로, 유한 상태 기계 엔진은 다수의 상이한 유한 상태 기계 엔진으로부터 피드백을 수신할 수 있다. 피드백에 기초하여 유한 상태 기계 엔진의 재프로그래밍은 (예를 들어, 원시 데이터의 처리와 비실시간으로) 입력 데이터의 패턴의 식별과 시간적으로 분리될 수 있다.
더 낮은 레벨의 재프로그래밍에 영향을 미치기 위해 정보를 계층 아래로 다시 송신하는 목적은 더 낮은 레벨이 관련 패턴을 분별하는데 더 효과적일 수 있도록 하기 위함이다. 일부 예에서, 정보를 더 높은 레벨로 송신하는 공정은, 더 높은 레벨의 계층으로 정보를 송신하는 데 시간이 드는 것을 인식하여, 가능하면 회피된다. 일부 예에서, 더 높은 레벨이 시스템에 새로운 패턴의 식별을 분해하는데 본질적으로 사용될 수 있다. 이것은 생물학적 뇌의 신피질에서 일어나는, 사용되는 공정과 유사할 수 있다. 일례에서, 패턴이 더 낮은 레벨에서 완전히 분해되면, 그러할 수 있다. 피드백 메커니즘은 더 낮은 레벨의 계층으로 "학습"을 전송하는 하나의 방법이다. 계층 아래로 다시 정보를 푸시하는 이 공정은 새로운 또는 친숙치 않은 패턴을 처리하기 위해 상위 레벨의 계층을 보존하는 것을 도울 수 있다. 나아가, 전체 인식 공정은 여러 레벨의 계층을 통해 데이터 전송 양을 감소시키는 것에 의해 가속될 수 있다.
피드백은 더 낮은 레벨의 계층을 입력에서 데이터 스트림에 매우 예민하게 민감하게 만들 수 있다. 정보를 이렇게 "푸시 다운"한 결과는 더 낮은 레벨의 계층에서 결정이 이루어질 수 있게 하고 이 결정이 매우 신속히 수행될 수 있게 한다는 것이다. 따라서, 일례에서, 더 낮은 레벨의 유한 상태 기계 엔진(예를 들어, 제1유한 상태 기계 엔진(602))으로부터 출력은 제4유한 상태 기계 엔진(608)으로부터 출력과 함께 계층(600)으로부터 다른 디바이스로의 집합적 출력에 대응할 수 있다. 외부 디바이스는 예를 들어, 패턴이 계층(600)에 의해 식별된 때를 결정하기 위해 이들 유한 상태 기계 엔진(602, 608)들 각각으로부터 출력을 모니터링할 수 있다.
일례에서, 피드백 정보는 분석된 데이터 스트림에 대응하는 정보를 식별하는 것을 포함할 수 있다. 예를 들어, 식별 정보는 데이터의 식별 특성, 데이터의 포맷, 데이터의 프로토콜 및/또는 식별 정보의 임의의 다른 유형을 포함할 수 있다. 식별 정보는 예를 들어, 처리 디바이스(610)에 의해 입력 데이터에 대한 분석 방법을 적응시키도록 수집되고 분석되고 사용될 수 있다. 유한 상태 기계 엔진은 적응된 분석 방법으로 프로그래밍될 수 있다. 식별 정보는 예를 들어, 입력 데이터의 언어를 포함할 수 있다. 유한 상태 기계 엔진은 초기에 입력 데이터의 언어를 결정하도록 프로그래밍될 수 있고, 입력에 대응하는 언어가 식별된 후에는 실행 시간 동안 적응(예를 들어, 재프로그래밍)될 수 있다. 유한 상태 기계 엔진을 위한 적응된 분석 방법은 식별된 언어를 위한 분석 방법에 보다 구체적으로 대응할 수 있다. 마지막으로, 유한 상태 기계 엔진은 적응된 분석 방법을 사용하여 차후 입력 데이터를 분석할 수 있다. 피드백 공정은 반복적일 수 있으며, 이에 분석 방법의 추가적인 적응을 허용하도록 추가적인 식별 정보가 입력 데이터에서 발견될 수 있다.
유한 상태 기계 엔진으로 로딩하기 위한 프로그램(이는 또한 본 명세서에서"이미지"라고도 지칭됨)이 도 19와 관련하여 아래에 설명된 바와 같이 컴파일러에 의해 생성될 수 있다. 일반적으로, 컴파일은 계산 집약 공정일 수 있으며 처음에 패턴 시그너처의 큰 데이터베이스를 컴파일할 때 가장 명백할 수 있다. 실행시간 동작에서, 더 높은 레벨의 유한 상태 기계 엔진은 더 낮은 레벨의 유한 상태 기계 엔진에 대해 증분적 프로그램 업데이트의 형태로 더 낮은 레벨로 피드백을 제공할 수 있다. 따라서, 더 낮은 레벨의 유한 상태 기계 엔진으로의 피드백 정보는 컴파일하는데 덜 연산 집약적인, 원래의 프로그램에 비해 훨씬 더 작은 증분적 업데이트일 수 있다.
도 14는 4개의 유한 상태 기계 엔진(702, 704, 706, 708)으로 구현된 4레벨 계층(700)의 다른 예를 도시한다. 여기서, 제2, 제3, 및 제4레벨의 유한 상태 기계 엔진(704, 706, 708)은 원시 데이터 스트림뿐만 아니라 더 낮은 레벨의 출력으로부터 입력 데이터를 수신한다. 따라서, 레벨 2, 3 및 4는 더 낮은 레벨로부터 패턴과 원시 데이터의 조합으로부터 패턴을 식별할 수 있다.
도 13 및 도 14에서 볼 수 있는 바와 같이, 유한 상태 기계 엔진은, 유한 상태 기계 엔진으로부터의 출력과, 계층으로 입력된 원시 데이터가 자기 자신을 포함해서 임의의 다른 유한 상태 기계 엔진으로 송신될 수 있는 거의 임의의 방식으로 케스케이드 연결될 수 있다. 나아가, 주어진 유한 상태 기계 엔진으로부터 출력은 유한 상태 기계 엔진을 위한 프로그램을 업데이트하기 위한 피드백으로 및/또는 입력 데이터로서 다른 유한 상태 기계 엔진으로 송신될 수 있다.
전술된 바와 같이, 유한 상태 기계 엔진이 입력 데이트 스트림의 일 비트(또는 워드)를 처리하는데 드는 시간으로 인해, 유한 상태 기계 엔진을 직렬 케스케이드 연결하는 것은 모든 유한 상태 기계 엔진을 통해 입력 데이터 스트림을 전부 처리하는 시간을 증가시킬 수 있다. 계층의 최하위 레벨은 종종 최하위 (대부분 과립상(granular)) 레벨의 입력을 종종 수신할 수 있다. 따라서, 더 낮은 레벨이 높은 레벨의 출력보다 더 활성인 것으로 기대되어야 한다. 즉, 계층에서 각 연속하는 레벨이 더 높은 레벨의 객체를 어셈블링할 수 있다. 일례에서, 유한 상태 기계 엔진은 입력 데이터가 유한 상태 기계 엔진으로 얼마나 빠르게 공급될 수 있는지를 제한하는 최대 입력 속도를 구비한다. 이 입력 속도는 단일 데이터 사이클로 생각될 수 있다. 각 연속하는 데이터 사이클에서, 유한 상태 기계 엔진은 많은 최종 상태를 활성화하는 가능성을 구비한다. 이것은 유한 상태 기계 엔진(특히 최하위 레벨의 계층에서)이 상당한 양의 출력(매칭) 데이터를 생성하게 할 수 있다. 예를 들어, 입력이 최하위 레벨의 유한 상태 기계 엔진으로 바이트 스트림으로 제공되면, 임의의 주어진 데이터 사이클에서, 유한 상태 기계 엔진이 다수의 바이트의 상태 정보를 생성하는 것이 가능할 수 있다. 일 바이트의 정보가 상태 정보의 다수의 바이트를 생성할 수 있다면, 유한 상태 기계 엔진의 전체 계층이 이 정보가 계층 위로 전달되도록 동기화되어야 한다. 그러나, 피드백은 동기화될 필요가 없으며, 피드백이 더 낮은 레벨에서 더 빠르게 수신되면 될수록, 더 낮은 레벨이 더 빠르게 적응될 수 있고, 분석이 더 효율적으로 이루어질 수 있다.
일례로서, (단일 유한 상태 기계 엔진으로 구현된) 각 계층 레벨에 대해 최대 사이즈 출력은 1024 바이트와 같으며 계층의 깊이는 4레벨과 같을 수 있다. 유한 상태 기계 엔진에 대한 입력 데이터 스트림 데이터 속도는 128MB/초일 수 있다. 이들 조건에서, 각 계층 레벨은 7.63마이크로초로 횡단(traversed)될 수 있다. 4개의 레벨 계층에서, 유한 상태 기계 엔진의 전체 적층의 총 설정 시간은 7.63마이크로초의 4배 또는 30.5마이크로초일 수 있다. 30.5마이크로초 설정 시간에서, 구현은 입력 데이터 주파수가 32KB/s로 제한되어야 하는 것이다.
특히, 이것은 유한 상태 기계 엔진의 구성에 매우 종속적이다. 유한 상태 기계 엔진은 입력 데이터 속도 대 상태 기계 사이즈가 트레이드오프(tradeoff)를 이루도록 구성될 수 있다. 나아가, 유한 상태 기계 엔진에의 입력 워드 사이즈는 유한 상태 기계 엔진에 로딩된 추가적인 이미지를 생성하는 컴파일러에 대응하는 수정이 이루어지는 경우 조절될 수 있다.
일례에서, 도 1 내지 도 14에 대하여 설명된 하나 이상의 FSM을 구현하는 방법은 폰 노이만 아키텍처를 가지는 기계에서 소프트웨어로 구현될 수 있다. 따라서, 소프트웨어 명령은 프로세서로 하여금 원시 데이터 스트림에 제1레벨 분석 FSM을 구현하게 할 수 있다. 제1레벨 FSM으로부터 출력은 제2레벨 FSM 등에 따라 프로세서에 의해 처리될 수 있다. 나아가, 전술된 피드백 루프는, FSM의 레벨로부터 출력을 분석하고 하나 이상의 레벨에 대해 새로운 FSM을 생성하기 위해 이를 사용하는 프로세서에 의해 구현될 수 있다.
도 15 내지 도 18은 본 명세서에서 "FSM 엔진(800)"이라 지칭된 병렬 기계의 일례를 도시한다. 일례에서, FSM 엔진(800)은 유한 상태 기계의 하드웨어 구현을 포함한다. 따라서, FSM 엔진(800)은 FSM에서 복수의 상태에 대응하는 복수의 선택적으로 연결가능한 하드웨어 요소(예를 들어, 프로그래밍가능한 요소)를 구현한다. FSM에서의 상태와 유사하게 하드웨어 요소는 입력 스트림을 분석하고 입력 스트림에 기초하여 다운스트림의 하드웨어 요소를 활성화시킬 수 있다.
FSM 엔진(800)은 일반 목적 요소와 특수 목적 요소를 포함하는 복수의 프로그래밍가능한 요소를 포함한다. 일반 목적 요소는 많은 상이한 함수를 구현하도록 프로그래밍될 수 있다. 이들 일반 목적 요소는 행(806)(도 16 및 도 17에 도시)과 블록(802)(도 15 및 도 16에 도시)으로 계층적으로 구성된 SME(804, 805)(도 18에 도시)를 포함한다. 계층적으로 구성된 SME(804, 805)들 사이에 신호를 라우팅하기 위해, 프로그래밍가능한 스위치의 계층이 인터 블록(inter-block) 스위치(803)(도 15 및 도 16에 도시), 인트라 블록(intra-block) 스위치(808)(도 9 및 도 10에 도시), 및 인트라 행(intra-row) 스위치(812)(도 17에 도시)를 포함하여 사용된다. SME(804, 805)는 FSM 엔진(800)에 의해 구현된 FSM의 상태에 대응할 수 있다. SME(804, 805)는 후술되는 프로그래밍가능한 스위치를 사용하는 것에 의해 서로 연결될 수 있다. 따라서, FSM은, 상태 함수에 대응하도록 SME(804, 805)를 프로그래밍하고 FSM에서 상태들 사이에 전이에 대응하도록 SME(804, 805)를 선택적으로 서로 연결하는 것에 의해 FSM 엔진(800)에 구현될 수 있다.
도 15는 예시적인 FSM 엔진(800)의 전체적인 뷰를 도시한다. FSM 엔진(800)은 프로그래밍가능한 인터 블록 스위치(803)와 선택적으로 서로 연결될 수 있는 복수의 블록(802)을 포함한다. 추가적으로, 블록(802)은, 신호(예를 들어, 데이터)를 수신하고 이 데이터를 블록(802)으로 제공하기 위해 입력 블록(809)(예를 들어, 데이터 입력 포트)에 선택적으로 연결될 수 있다. 블록(802)은 또한 블록(802)으로부터 신호를 외부 디바이스(예를 들어, 다른 FSM 엔진(800))로 제공하기 위해 출력 블록(813)(예를 들어, 출력 포트)에 선택적으로 연결될 수 있다. FSM 엔진(800)은 또한 FSM 엔진(800)으로 프로그램(예를 들어, 이미지)을 로딩하기 위해 프로그래밍 인터페이스(811)를 포함할 수 있다. 이미지는 SME(804, 805)의 상태를 프로그래밍(예를 들어, 설정)할 수 있다. 즉, 이미지는 입력 블록(809)에서 주어진 입력에 특정 방식으로 반응하도록 SME(804, 805)를 구성할 수 있다. 예를 들어, SME(804)는 문자 'a'가 입력 블록(809)에서 수신될 때 하이 신호를 출력하도록 설정될 수 있다.
일례에서, 입력 블록(809), 출력 블록(813) 및/또는 프로그래밍 인터페이스(811)는 레지스터에 기록하는 것이 데이터를 각 요소에 제공하거나 각 요소로부터 데이터를 제공하도록 레지스터로서 구현될 수 있다. 따라서, 프로그래밍 인터페이스(811)에 대응하는 레지스터에 저장된 이미지로부터 비트는 SME(804, 805)에 로딩될 수 있다. 도 15는 블록(802), 입력 블록(809), 출력 블록(813), 및 인터 블록 스위치(803) 사이에 특정 개수의 전도체(예를 들어, 와이어, 트레이스)를 도시하고 있으나, 다른 예에서, 더 적은 또는 더 많은 전도체들이 사용될 수 있다는 것이 이해될 수 있을 것이다.
도 16은 블록(802)의 일례를 도시한다. 블록(802)은 프로그래밍가능한 인트라 블록 스위치(808)에 서로 선택적으로 연결될 수 있는 복수의 행(806)을 포함할 수 있다. 추가적으로, 행(806)은 인터 블록 스위치(803)로 다른 블록(802) 내의 다른 행(806)과 선택적으로 연결될 수 있다. 일례에서, 버퍼(801)는 인터 블록 스위치(803)로/로부터 신호의 타이밍을 제어하도록 포함된다. 행(806)은 GOT(groups of two)(810)라고 지칭되는 한 쌍의 요소로 구성된 복수의 SME(804, 805)를 포함한다. 일례에서, 블록(802)은 16개의 행(806)을 포함한다.
도 17은 행(806)의 일례를 도시한다. GOT(810)는 프로그래밍가능한 인트라 행 스위치(812)에 의해 행(806) 내 다른 GOT(810)와 임의의 다른 요소(824)에 선택적으로 연결될 수 있다. GOT(810)는 또한 인트라 블록 스위치(808)로 다른 행(806) 내 다른 GOT(810) 또는 인터 블록 스위치(803)로 다른 블록(802) 내 다른 GOT(810)와 연결될 수 있다. 일례에서, GOT(810)는 제1 및 제2입력(814, 816), 및 출력(818)을 구비한다. 제1입력(814)은 GOT(810)의 제1 SME(804)에 연결되고, 제2입력(816)은 GOT(810)의 제2 SME(805)에 연결된다.
일례에서, 행(806)은 제1 및 제2 복수의 행 상호연결 전도체(820, 822)를 포함한다. 일례에서, GOT(810)의 입력(814, 816)은 하나 이상의 행 상호연결 전도체(820, 822)에 연결될 수 있고, 출력(818)은 하나의 행 상호연결 전도체(820, 822)에 연결될 수 있다. 일례에서, 제1 복수의 행 상호연결 전도체(820)는 행(806) 내 각 GOT(810)의 각 SME(804)에 연결될 수 있다. 제2 복수의 행 상호연결 전도체(822)는 행(806) 내 각 GOT(810)의 하나의 SME(804)에 연결될 수 있으나, GOT(810)의 다른 SME(805)에 연결될 수는 없다. 일례에서, 제2 복수의 행 상호연결 전도체(822)의 제1절반은 행(806) 내 SME(804)의 제1절반(각 GOT(810)로부터 하나의 SME(804))에 연결될 수 있고, 제2 복수의 행 상호연결 전도체(822)의 제2절반은 행(806) 내 SME(805)의 제2절반(각 GOT(810)로부터 다른 SME(804))에 연결될 수 있다. 제2 복수의 행 상호연결 전도체(822)와 SME(804, 805) 사이에 제한된 연결은 본 명세서에서 "패리티(parity)"라고 지칭된다. 일례에서, 행(806)은 카운터, 프로그래밍가능한 부울리안 논리 요소, 전계 프로그래밍가능한 게이트 어레이(FPGA), 응용 특정 집적 회로(ASIC), 프로그래밍가능한 프로세서(예를 들어, 마이크로프로세서), 및 다른 요소와 같은 특수 목적 요소(824)를 또한 포함할 수 있다.
일례에서, 특수 목적 요소(824)는 카운터(이는 또한 본 명세서에서 카운터(824)라고도 지칭됨)를 포함한다. 일례에서, 카운터(824)는 12비트 프로그래밍가능한 다운(down) 카운터를 포함한다. 12비트 프로그래밍가능한 카운터(824)는 카운트 입력, 리셋 입력 및 제로 카운트 출력을 구비한다. 카운트 입력은 선언(asserted)될 때, 카운터(824)의 값을 일만큼씩 감분한다. 리셋 입력은 선언될 때 카운터(824)가 연관된 레지스터로부터 초기 값을 로딩하게 한다. 12비트 카운터(824)에서, 최대 12비트 수가 초기 값으로 로딩될 수 있다. 카운터(824)의 값이 제로(0)로 감분된 경우, 제로 카운트 출력이 선언된다. 카운트(824)는 적어도 2개의 모드, 즉 펄스 모드와 홀드(hold) 모드를 구비한다. 카운터(824)가 펄스 모드로 설정되면, 제로 카운트 출력은 카운터(824)가 제로로 감분될 때 클록 사이클 동안 선언되고, 그 다음 클록 사이클에서 제로 카운트 출력은 더 이상 선언되지 않는다. 카운터(824)가 홀드 모드로 설정될 때, 제로 카운트 출력은 카운터(824)가 제로로 감분될 때 클록 사이클 동안 선언되고, 카운터(824)가 선언되는 리셋 입력에 의해 리셋될 때까지 선언이 유지된다. 일례에서, 특수 목적 요소(824)는 부울리안 논리를 포함한다. 일부 예에서, 이 부울리안 논리는 FSM 엔진(800)에서 단자 상태 SME로부터 정보를 추출하는데 사용될 수 있다. 추출된 정보는 상태 정보를 다른 FSM 엔진(800)으로 전달하고 및/또는 FSM 엔진(800)을 재프로그래밍하기 위해 또는 다른 FSM 엔진(800)을 재프로그래밍하기 위해 사용된 프로그래밍 정보를 전달하는데 사용될 수 있다.
도 18은 GOT(810)의 일례를 도시한다. GOT(810)는, 입력(814, 816)을 구비하고 OR 게이트(830)에 연결된 출력(826, 828)과 3대1 다중화기(842)를 구비하는 제1 SME(804)와 제2 SME(805)를 포함한다. 3대1 다중화기(842)는 GOT(810)의 출력(818)을 제1 SME(804), 제2 SME(805), 또는 OR 게이트(830)에 연결하도록 설정될 수 있다. OR 게이트(830)는 GOT(810)의 공통 출력(818)을 형성하도록 출력(826, 828)을 서로 연결하는데 사용될 수 있다. 일례에서, 제1 및 제2 SME(804, 805)는 전술된 바와 같이 패리티를 나타내며, 여기서 제1 SME(804)의 입력(814)은 행 상호연결 전도체(822) 중 일부에 연결될 수 있고, 제2 SME(805)의 입력(816)은 다른 행 상호연결 전도체(822)에 연결될 수 있다. 일례에서, GOT(810) 내 2개의 SME(804, 805)는 스위치(840) 중 어느 하나 또는 둘 모두를 설정하는 것에 의해 자체적으로 케스케이드 연결되거나 및/또는 백 루프(looped back)될 수 있다. SME(804, 805)는 SME(804, 805)의 출력(826, 828)을 다른 SME(804, 805)의 입력(814, 816)에 연결하는 것에 의해 케스케이드 연결될 수 있다. SME(804, 805)는 출력(826, 828)을 자기 자신의 입력(814, 816)에 연결하는 것에 의해 자체적으로 백 루프될 수 있다. 따라서, 제1 SME(804)의 출력(826)은 제1 SME(804)의 입력(814)과 제2 SME(805)의 입력(816) 중 어느 하나 또는 둘 모두에 연결되거나 또는 그 어느 것에도 연결되지 않을 수 있다.
일례에서, 상태 기계 요소(804, 805)는 검출 라인(834)과 병렬로 연결된, 동적 랜덤 액세스 메모리(DRAM)에 종종 사용되는 것과 같은, 복수의 메모리 셀(832)을 포함한다. 하나의 이러한 메모리 셀(832)은 하이 또는 로우 값(예를 들어, 1 또는 0) 중 어느 하나에 대응하는 것과 같은 데이터 상태로 설정될 수 있는 메모리 셀을 포함한다. 메모리 셀(832)의 출력은 검출 라인(834)에 연결되고 메모리 셀(832)에의 입력은 데이터 스트림 라인(836)에서의 데이터에 기초하여 신호를 수신한다. 일례에서, 데이터 스트림 라인(836)에서의 입력은 메모리 셀(832) 중 하나를 선택하도록 디코딩된다. 선택된 메모리 셀(832)은 검출 라인(834)으로의 출력으로 저장된 데이터 상태를 제공한다. 예를 들어, 데이터 입력 포트(809)에서 수신된 데이터는 디코더(미도시)에 제공될 수 있고, 디코더는 데이터 스트림 라인(836) 중 하나를 선택할 수 있다. 일례에서, 디코더는 ACSII 문자를 256비트 중 1로 변환할 수 있다.
그리하여, 메모리 셀(832)은, 메모리 셀(832)이 하이 값으로 설정되고 데이터 스트림 라인(836)에 있는 데이터가 메모리 셀(832)에 대응할 때 검출 라인(834)에 하이 신호를 출력한다. 데이터 스트림 라인(836)에 있는 데이터가 메모리 셀(832)에 대응하고 메모리 셀(832)이 로우 값으로 설정될 때, 메모리 셀(832)이 검출 라인(834)으로 로우 신호를 출력한다. 검출 라인(834)에 있는 메모리 셀(832)로부터 출력은 검출 회로(838)에 의해 감지된다. 일례에서, 입력 라인(814, 816)에 있는 신호는 각 검출 회로(838)를 활성 상태 또는 비활성 상태로 설정한다. 비활성 상태로 설정할 때, 검출 회로(838)는 각 검출 라인(834)에 있는 신호에 상관없이 로우 신호를 각 출력(826, 828)에 출력한다. 활성 상태로 설정할 때, 검출 회로(838)는 하이 신호가 각 SME(804, 805)의 메모리 셀(834) 중 하나로부터 검출될 때 하이 신호를 출력 라인(826, 828)에 출력한다. 활성 상태에 있을 때, 검출 회로(838)는 각 SME(804, 805)의 메모리 셀(834) 전부로부터 신호가 로우일 때 각 출력 라인(826, 828)에 로우 신호를 출력한다.
일례에서, SME(804, 805)는 256개의 메모리 셀(832)을 포함하고 각 메모리 셀(832)은 상이한 데이터 스트림 라인(836)에 연결된다. 따라서, SME(804, 805)는 데이터 스트림 라인(836) 중 선택된 하나 이상이 하이 신호를 가질 때 하이 신호를 출력하도록 프로그래밍될 수 있다. 예를 들어, SME(804)는 제1메모리 셀(832)(예를 들어, 비트 0)을 하이로 설정하고 모든 다른 메모리 셀(832)(예를 들어, 비트 1 내지 255)을 로우로 설정할 수 있다. 각 검출 회로(838)가 활성 상태에 있을 때, SME(804)는, 비트 0에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 출력(826)에 하이 신호를 출력한다. 다른 예에서, SME(804)는 적절한 메모리 셀(832)을 하이 값으로 설정하는 것에 의해 다수의 데이터 스트림 라인(836) 중 하나가 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다.
일례에서, 메모리 셀(832)은 연관된 레지스터로부터 비트를 판독하는 것에 의해 하이 또는 로우 값으로 설정될 수 있다. 따라서, SME(804)는 컴파일러에 의해 생성된 이미지를 레지스터에 저장하고 레지스터에 있는 비트를 연관된 메모리 셀(832)에 로딩하는 것에 의해 프로그래밍될 수 있다. 일레에서, 컴파일러에 의해 생성된 이미지는 하이 및 로우(예를 들어, 1 및 0) 비트의 이진 이미지를 포함한다. 이미지는 SME(804, 805)를 케스케이드 연결하는 것에 의해 FSM으로서 동작하도록 FSM 엔진(800)을 프로그래밍할 수 있다. 예를 들어, 제1 SME(804)는 검출 회로(838)를 활성 상태로 설정하는 것에 의해 활성 상태로 설정될 수 있다. 제1 SME(804)는 비트 0에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다. 제2 SME(805)는 초기에 비활성 상태로 설정될 수 있으나, 활성일 때에는, 비트 1에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다. 제1 SME(804)와 제2 SME(805)는 제2 SME(805)의 입력(816)에 연결하도록 제1 SME(804)의 출력(826)을 설정하는 것에 의해 케스케이드 연결될 수 있다. 따라서, 하이 신호가 비트 0에 대응하는 데이터 스트림 라인(836)에서 감지될 때, 제1 SME(804)는 출력(826)에서 하이 신호를 출력하고 제2 SME(805)의 검출 회로(838)를 활성 상태로 설정한다. 하이 신호가 비트 1에 대응하는 데이터 스트림 라인(836)에서 감지될 때 제2 SME(805)는 다른 SME(504), SME(805)를 활성화시키기 위해 또는 FSM 엔진(800)으로부터 출력하기 위해 출력(828)에 하이 신호를 출력한다.
도 19는 컴파일러가 병렬 기계를 프로그래밍하도록 구성된 이미지로 소스 코드를 변환하는 방법(1000)의 일례를 도시한다. 방법(1000)은 소스 코드를 구문 트리(syntax tree)로 파싱(parsing)하는 단계(블록 1002), 상기 구문 트리를 자동화로 변환하는 단계(블록 1004), 상기 자동화를 최적화하는 단계(블록 1006), 상기 자동화를 네트리스트(netlist)로 변환하는 단계(블록 1008), 상기 네트리스트를 하드웨어 상에 배치하는 단계(블록 1010), 상기 네트리스트를 라우팅하는 단계(블록 1012) 및 상기 최종 이미지를 발행하는 단계(블록 1014)를 포함한다.
일례에서, 컴파일러는 소프트웨어 개발자가 FSM 엔진(800)에 FSM을 구현하도록 이미지를 생성하게 하는 API(application programming interface)를 포함한다. 컴파일러는 소스 코드의 정규 표현의 입력 세트를 FSM 엔진(800)을 프로그래밍하도록 구성된 이미지로 변환하는 방법을 제공한다. 컴파일러는 폰 노이만 아키텍처를 구비하는 컴퓨터에 대한 명령에 의해 구현될 수 있다. 이들 명령은 컴퓨터 상의 프로세서가 컴파일러의 기능을 구현하게 할 수 있다. 예를 들어, 명령은 프로세서에 의해 실행될 때 프로세서로 하여금 프로세서에 액세스가능한 소스 코드에 블록(1002, 1004, 1006, 1008, 1010, 1012, 및 1014)에서 설명된 동작을 수행할 수 있게 한다. 폰 노이만 아키텍처를 구비하는 예시적인 컴퓨터는 도 20에 도시되고 후술된다.
일례에서, 소스 코드는 심볼 그룹 내 심볼의 패턴을 식별하기 위한 검색 스트링(search string)을 기술한다. 검색 스트링을 기술하기 위해, 소스 코드는 복수의 정규 표현(regular expression)(regex)을 포함할 수 있다. regex는 심볼 검색 패턴을 기술하는 스트링일 수 있다. regex는 프로그래밍 언어, 텍스트 편집기, 네트워크 보안, 등과 같은 여러 컴퓨터 도메인에 널리 사용된다. 일례에서, 컴파일러에 의해 지원되는 정규 표현은 비구조화된 데이터의 검색에 대한 검색 기준을 포함한다. 비구조화된 데이터는 자유 형식인 데이터를 포함할 수 있고 데이터 내 워드에 적용된 인덱스를 구비하지 않는다. 워드는 데이터 내에 프린트가능한 및 프린트가능하지 않은 바이트의 임의의 조합을 포함할 수 있다. 일례에서, 컴파일러는 Perl(예를 들어, Perl 호환 정규 표현(PCRE)), PHP, Java 및 .NET 언어를 포함하는 regex를 구현하기 위한 다수의 상이한 소스 코드 언어를 지원할 수 있다.
블록(1002)에서, 컴파일러는 관계적으로 연결된 오퍼레이터의 배열을 형성하기 위해 소스 코드를 파싱할 수 있고, 여기서 상이한 유형의 오퍼레이터는 소스 코드에 의해 구현된 상이한 함수에 대응한다(예를 들어, 상이한 함수는 소스 코드에서 regex로 구현된다). 소스 코드를 파싱하는 것은 소스 코드의 일반적 표현을 생성할 수 있다. 일례에서, 일반적 표현은 구문 트리로 알려진 트리 그래프의 형태로 소스 코드에서 regex의 인코딩된 표현을 포함한다. 본 명세서에 언급된 예는 구문 트리(이는 또한 "추상 구문 트리"라고도 알려져 있음)로서의 배열을 말하는 것이지만, 다른 실시예에서 구체적인 구문 트리 또는 다른 배열이 사용될 수 있다.
전술된 바와 같이, 컴파일러는 소스 코드의 다수의 언어를 지원할 수 있으므로, 파싱은 소스 코드를 언어에 상관없이 비언어 특정 표현, 예를 들어 구문 트리로 변환한다. 따라서, 컴파일러에 의한 추가적인 처리(블록 1004, 1006, 1008, 1010)는 소스 코드의 언어에 상관없이 공통 입력 구조로 작동할 수 있다.
전술된 바와 같이, 구문 트리는 관계적으로 연결된 복수의 오퍼레이터를 포함한다. 구문 트리는 다수의 상이한 유형의 오퍼레이터를 포함할 수 있다. 즉, 상이한 오퍼레이터는 소스 코드에서 regex에 의해 구현된 상이한 함수에 대응할 수 있다.
블록(1004)에서, 구문 트리는 자동화로 변환된다. 자동화는 FSM의 소프트웨어 모델을 포함하며, 이에 따라 결정적 또는 비결정적인 것으로 분류될 수 있다. 결정적 자동화는 주어진 시간에 단일 실행 경로를 구비하는 반면, 비결정적인 자동화는 다수의 동시 실행 경로를 구비한다. 자동화는 복수의 상태를 포함한다. 구문 트리를 자동화로 변환하기 위하여, 구문 트리에서 오퍼레이터와 이 오퍼레이터 사이의 관계는 상태들 사이의 전이를 가지는 상태로 변환된다. 일례에서, 자동화는 FSM 엔진(800)의 하드웨어에 부분적으로 기초하여 변환될 수 있다.
일례에서, 자동화를 위한 입력 심볼은 알파벳의 심볼, 숫자 0 내지 9, 및 다른 프린트가능한 문자를 포함한다. 일례에서, 입력 심볼은 값 0 내지 255(0과 255를 포함해서) 바이트로 표현된다. 일례에서, 자동화는 그래프의 노드가 상태 세트에 대응하는 지향된 그래프로 표현될 수 있다. 일례에서, 입력 심볼(α)에서 상태 p로부터 상태 q로의 전이, 즉 δ(p, α)는 노드 p로부터 노드 q로 지향된 연결로 도시된다. 일례에서, 자동화의 역전은 새로운 자동화를 생성하며, 여기서 일부 심볼(α)에서 각 전이부 p→q는 동일한 심볼에서 역전된 q → p이다. 역전시에, 시작 상태는 최종 상태로 되고 최종 상태는 시작 상태로 된다. 일례에서, 자동화로 허용된(예를 들어, 매칭된) 언어는 모든 가능한 문자 스트림의 세트이며 이는 자동화로 순차 입력될 때 최종 상태에 이를 수 있다. 자동화에 의해 허용된 언어에서 각 스트링은 시작 상태로부터 하나 이상의 최종 상태로 경로를 트레이스한다.
블록(1006)에서, 자동화가 구성된 후에, 자동화는 특히 그 복잡성과 사이즈를 감소시키기 위해 최적화된다. 자동화는 리던던시 상태를 조합하는 것에 의해 최적화될 수 있다.
블록(1008)에서, 최적화된 자동화는 네트리스트로 변환된다. 자동화를 네트리스트로 변환하는 것은 자동화의 각 상태를 FSM 엔진(800)에 있는 하드웨어 요소(예를 들어, SME(804, 805), 다른 요소(824))로 맵핑하며 하드웨어 요소들 사이에 연결을 결정한다.
블록(1010)에서, 네트리스트는 네트리스트의 각 노드에 대응하는 타깃 디바이스(예를 들어, SME(804, 805), 특수 목적 요소(824))의 특정 하드웨어 요소를 선택하도록 배치된다. 일례에서, 배치하는 것은 FSM 엔진(800)의 것에 대한 일반적인 입력 및 출력 제약에 기초하여 각 특정 하드웨어 요소를 선택한다.
블록(1012)에서, 배치된 네트리스트는 네트리스트에 의해 기술된 연결을 달성하기 위하여 선택된 하드웨어 요소를 서로 연결하기 위하여 프로그래밍가능한 스위치(예를 들어, 인터 블록 스위치(803), 인트라 블록 스위치(808) 및 인트라 행 스위치(812))에 대해 설정을 결정하도록 라우팅된다. 일례에서, 프로그래밍가능한 스위치에 대한 설정은 프로그래밍가능한 스위치에 대한 설정과 선택된 하드웨어 요소를 연결하는데 사용될 수 있는 FSM 엔진(800)의 특정 전도체를 결정하는 것에 의해 결정된다. 라우팅은 블록(1010)에서 배치되는 것보다 더 하드웨어 요소들 사이의 연결에 대해 특정한 제한을 고려할 수 있다. 따라서, 라우팅은 FSM 엔진(800)에 있는 전도체의 실제 제한이 정해지면 적절한 연결을 만들기 위하여 전체 배치에 의해 결정된 하드웨어 요소들 중 일부의 위치를 조절할 수 있다.
네트리스트가 배치되고 라우팅되면, 배치되고 라우팅된 네트리스트는 FSM 엔진(800)을 프로그래밍하기 위한 복수의 비트로 변환될 수 있다. 복수의 비트는 본 명세서에서 이미지라 지칭된다.
블록(1014)에서, 이미지는 컴파일러에 의해 발행(published)된다. 이미지는 FSM 엔진(800)의 특정 하드웨어 요소들 및/또는 프로그래밍가능한 스위치를 프로그래밍하기 위한 복수의 비트를 포함한다. 이미지가 복수의 비트(예를 들어, 0 및 1)를 포함하는 실시예에서, 이미지는 이진 이미지라 지칭될 수 있다. 비트는 프로그래밍된 FSM 엔진(800)이 소스 코드에 의해 기술된 함수를 가지는 FSM을 구현하도록 SME(804, 805), 특수 목적 요소(824), 및 프로그래밍가능한 스위치의 상태를 프로그래밍하기 위해 FSM 엔진(800)에 로딩될 수 있다. 배치(블록 1010)와 라우팅(블록 1012)이 FSM 엔진(800)에서의 특정 위치에 있는 특정 하드웨어 요소를 자동화에서의 특정 상태로 맵핑할 수 있다. 따라서, 이미지에서 비트는 원하는 함수(들)를 구현하기 위하여 특정 하드웨어 요소들 및/또는 프로그래밍가능한 스위치를 프로그래밍할 수 있다. 일례에서, 이미지는 기계 코드를 컴퓨터 판독가능한 매체에 저장하는 것에 의해 발행될 수 있다. 다른 예에서, 이미지는 디스플레이 디바이스에 이미지를 디스플레이하는 것에 의해 발행될 수 있다. 또 다른 예에서, 이미지는 FSM 엔진(800)에 이미지를 로딩하기 위해 프로그래밍 디바이스와 같은 다른 디바이스에 이미지를 송신하는 것에 의해 발행될 수 있다. 더 다른 실시예에서, 이미지는 병렬 기계(예를 들어, FSM 엔진(800))에 이미지를 로딩하는 것에 의해 발행될 수 있다.
일례에서, 이미지는 이미지로부터 비트 값을 SME(804, 805)와 다른 하드웨어 요소(824)로 직접 로딩하거나 또는 이미지를 하나 이상의 레지스터로 로딩한 후에 레지스터로부터 비트 값을 SME(804, 805)와 다른 하드웨어 요소(824)로 기록하는 것에 의해 FSM 엔진(800)으로 로딩될 수 있다. 일례에서, 프로그래밍가능한 스위치(예를 들어, 인터 블록 스위치(803), 인트라 블록 스위치(808), 및 인트라 행 스위치(812))의 상태. 일례에서, FSM 엔진(800)의 하드웨어 요소(예를 들어, SME(804, 805), 다른 요소(824), 프로그래밍가능한 스위치(803, 808, 812))는 프로그래밍 디바이스 및/또는 컴퓨터가 이미지를 하나 이상의 메모리 어드레스로 기록하는 것에 의해 이미지를 FSM 엔진(800)으로 로딩할 수 있도록 메모리 맵핑된다.
본 명세서에서 설명된 예시적인 방법은 적어도 부분적으로 기계 또는 컴퓨터로 구현될 수 있다. 일부 예는 상기 예에서 설명된 바와 같은 방법을 수행하도록 전자 디바이스를 구현하도록 동작가능한 명령으로 인코딩된 컴퓨터 판독가능한 매체 또는 기계 판독가능한 매체를 포함할 수 있다. 이 방법의 구현은 마이크로코드, 어셈블리 언어 코드, 더 상위 레벨의 언어 코드 등과 같은 코드를 포함할 수 있다. 이러한 코드는 여러 방법을 수행하는 컴퓨터 판독가능한 명령을 포함할 수 있다. 코드는 컴퓨터 프로그램 제품의 부분을 형성할 수 있다. 나아가, 코드는 실행 동안 또는 다른 시간에 하나 이상의 휘발성 또는 비휘발성 컴퓨터 판독가능한 매체에 유형적으로 저장될 수 있다. 이들 컴퓨터 판독가능한 매체는 하드 디스크, 이동식 자기 디스크, 이동식 광학 디스크(예를 들어, 컴팩트 디스크와 디지털 비디오 디스크), 자기 카세트, 메모리 카드 또는 스틱, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM) 등을 포함할 수 있으나, 이들로 제한되지 않는다.
도 20은 일반적으로 폰 노이만 아키텍처를 가지는 컴퓨터(1500)의 일례를 도시한다. 본 명세서의 내용을 읽고 이해하면 이 기술 분야에 통상의 지식을 가진 자라면 소프트웨어 프로그램에 한정된 함수를 실행하도록 컴퓨터 기반 시스템에서 컴퓨터 판독가능한 매체로부터 론칭(launched)될 수 있다. 이 기술 분야에 통상의 지식을 가진 자라면 본 명세서에 개시된 방법을 구현하고 수행하도록 설계된 하나 이상의 소프트웨어 프로그램을 생성하도록 사용될 수 있는 여러 프로그래밍 언어를 더 이해할 수 있을 것이다. 프로그램은 자바, C++, 또는 하나 이상의 다른 언어와 같은 개체 지향적인 언어를 사용하여 객체 지향적인 포맷으로 구조화될 수 있다. 대안적으로, 프로그램은 어셈블리, C 등과 같은 절차 언어(procedural language)를 사용하여 절차 지향적인 포맷으로 구조화될 수 있다. 소프트웨어 성분은 원격 절차 호출 또는 다른 것을 포함하는 API(application program interfaces) 또는 IPC(inter-process communication) 기술과 같은 이 기술 분야에 통상의 지식을 가진 자에게 잘 알려진 다수의 메커니즘 중 어느 것을 사용하여 통신할 수 있다. 여러 실시예의 개시 내용은 임의의 특정 프로그래밍 언어 또는 환경으로 제한되는 것은 아니다.
따라서, 다른 실시예가 실현될 수 있다. 예를 들어, 컴퓨터, 메모리 시스템, 자기 또는 광학 디스크, 일부 다른 저장 디바이스, 또는 임의의 유형의 전자 디바이스 또는 시스템과 같은 제조 물품은 하나 이상의 프로세서(1502)에 의해 실행될 때 상기 방법에 대하여 설명된 동작 중 임의의 것을 수행하는 것을 초래하는 저장된 명령(1524)(예를 들어, 컴퓨터 프로그램 명령)을 구비하는 메모리(예를 들어, 이동식 저장 매체, 및 전기, 광 또는 전자기 전도체를 포함하는 임의의 메모리)와 같은 컴퓨터 판독가능한 매체(1522)에 연결된 하나 이상의 프로세서(1502)를 포함할 수 있다.
컴퓨터(1500)는 버스(1508)를 사용하여 및/또는 다수의 성분에 직접 연결된 프로세서(1502)를 구비하는 컴퓨터 시스템의 형태를 취할 수 있다. 이러한 성분은 메인 메모리(1504), 정적 또는 비휘발성 메모리(1506), 및 대용량 저장 매체(1516)를 포함할 수 있다. 프로세서(1502)에 연결된 다른 성분은 비디오 디스플레이와 같은 출력 디바이스(1510), 키보드와 같은 입력 디바이스(1512), 마우스와 같은 커서 제어 디바이스(1514)를 포함할 수 있다. 프로세서(1502)와 다른 성분을 네트워크(1526)에 연결하는 네트워크 인터페이스 디바이스(1520)는 또한 버스(1508)에 연결될 수 있다. 명령(1524)은 다수의 잘 알려진 전송 프로토콜(예를 들어, HTTP) 중 어느 것을 사용하여 네트워크 인터페이스 디바이스(1520)를 통해 네트워크(1526)에 걸쳐 더 전송되거나 수신될 수 있다. 버스(1508)에 연결된 이들 요소들 중 어느 것은 실현되는 특정 실시예에 따라 없을 수 있거나, 또는 하나만 존재할 수 있거나, 또는 복수개 존재할 수 있다.
일례에서, 프로세서(1502), 메모리(1504, 1506), 또는 저장 디바이스(1516) 중 하나 이상은 각각 명령(1524)을 포함할 수 있으며, 이 명령은 실행될 때, 컴퓨터(1500)로 하여금 본 명세서에 설명된 방법 중 하나 또는 하나 이상을 수행하게 할 수 있다. 대안적인 실시예에서, 컴퓨터(1500)는 독립형 디바이스로서 동작하거나 다른 디바이스에 연결(예를 들어, 네트워크 연결)될 수 있다. 네트워크 연결될 환경에서, 컴퓨터(1500)는 서버-클라이언트 네트워크 환경에서 서버 또는 클라이언트 디바이스의 능력으로 동작하거나 또는 피어-투-피어(또는 분배된) 네트워크 환경에서 피어 디바이스로서 동작할 수 있다. 컴퓨터(1500)는 PC(personal computer), 태블릿 PC, 셋탑 박스(STB), PDA(Personal Digital Assistant), 셀룰러 폰, 웹 어플라이언스(web appliance), 네트워크 라우터, 스위치 또는 브리지, 또는 디바이스에 의해 취해진 동작을 특정하는 명령(순차 또는 다른 방식) 세트를 실행할 수 있는 임의의 디바이스를 포함할 수 있다. 나아가, 단일 컴퓨터(1500)만이 도시되어 있으나, "컴퓨터"라는 용어는 또 본 명세서에 설명된 방법 중 어느 하나 또는 그 이상을 수행하는 명령 세트(또는 다수의 명령 세트)를 개별적으로 또는 공동으로 실행하는 임의의 디바이스 집합을 포함하는 것으로 이해되어야 한다.
컴퓨터(1500)는 또한 하나 이상의 통신 프로토콜(예를 들어, USB(universal serial bus), IEEE 1394 등)을 사용하여 주변 디바이스와 통신하는 출력 제어기(1528)를 포함할 수 있다. 출력 제어기(1528)는 예를 들어, 컴퓨터(1500)에 통신가능하게 연결된 프로그래밍 디바이스(1530)에 이미지를 제공할 수 있다. 프로그래밍 디바이스(1530)는 병렬 기계(예를 들어, 병렬 기계(100), FSM 엔진(800))를 프로그래밍하도록 구성될 수 있다. 다른 예에서, 프로그래밍 디바이스(1530)는 컴퓨터(1500)와 통합될 수 있고 버스(1508)에 연결될 수 있고 또는 네트워크 인터페이스 디바이스(1520) 또는 다른 디바이스를 통해 컴퓨터(1500)와 통신할 수 있다.
컴퓨터 판독가능한 매체(1524)가 단일 매체로 도시되어 있으나, "컴퓨터 판독가능한 매체"라는 용어는 하나 이상의 명령(1524) 세트를 저장하는 단일 매체 또는 다수의 매체(예를 들어, 집중화된 또는 분산된 데이터베이스 또는 연관된 캐시 또는 서버 및 또는 여러 저장 매체, 예를 들어, 프로세서(1502) 레지스터, 메모리(1504, 1506), 및 저장 디바이스(1516))를 포함하는 것으로 이해되어야 한다. "컴퓨터 판독가능한 매체"라는 용어는 또한, 컴퓨터로 실행하기 위한 명령 세트를 저장, 인코딩 또는 운반할 수 있으며, 컴퓨터로 하여금 본 발명의 방법 중 어느 하나 또는 그 이상을 수행하게 하며, 또는 명령 세트에 의해 사용되거나 명령 세트와 연관된 데이터 구조를 저장, 인코딩 또는 운반할 수 있는 임의의 매체를 포함하는 것으로 이해되어야 한다. "컴퓨터 판독가능한 매체"라는 용어는 따라서, 고체 메모리, 광 매체 및 자기 매체와 같은 유형적인 매체를 포함하지만, 이들로 제한되지 않는 것으로 이해되어야 한다.
요약은 독자로 하여금 기술적 개시 내용의 특징과 요지를 확인하도록 하는 요약을 요구하는 37 C.F.R. Section 1.72(b)에 따라 제공된다. 이 요약은 청구범위 또는 그 의미를 제한하거나 해석하는 데 사용되어서는 아니되는 것으로 이해된다. 이하 청구범위는 이에 따라 상세한 설명에 포함되며, 각 청구항은 별도의 실시예로서 독립적으로 존재한다.
예시적인 실시예
실시예 1은 복수의 프로그래밍가능한 요소를 구비하는 프로그래밍 디바이스를 포함하되, 여기서 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되고, M 디지트 출력은 프로그래밍가능한 요소들 전부보다 더 적은 것으로부터 상태 정보를 포함한다.
실시예 2는, 복수의 프로그래밍가능한 요소들을 포함하는 제1병렬 기계로서, 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 여기서 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되고, M 디지트 출력은 프로그래밍가능한 요소의 전부보다 더 적은 것으로부터 상태 정보를 포함하는 것인, 제1병렬 기계와, M 디지트 출력의 적어도 일부를 수신하고 처리하도록 구성된 제2병렬 기계를 구비하는 계층적 병렬 기계를 포함한다.
실시예 3은 복수의 프로그래밍가능한 요소들을 구비하는 프로그래밍가능한 디바이스를 포함하며, 여기서 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하여 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되며, M 디지트 출력은 프로그래밍가능한 요소들 각각으로부터 상태 정보를 압축하여 형성된다.
실시예 4는 복수의 프로그래밍가능한 요소를 구비하는 제1병렬 기계를 구비하는 계층적 병렬 기계를 포함하며, 여기서 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되고, M 디지트 출력은 프로그래밍가능한 요소들 각각으로부터 상태 정보를 압축하는 것에 의해 형성된다.
실시예 5는 병렬 기계로부터 다른 디바이스로 상태 정보를 제공하는 방법을 포함하며, 여기서 병렬 기계는 복수의 프로그래밍가능한 요소를 포함하며, 상기 프로그래밍 요소들 각각은 대응하는 상태를 가지도록 구성된다. 상기 방법은 병렬 기계에서 프로그래밍가능한 요소들 각각의 상태를 포함하는 상태 정보를 결정하는 단계; 상태 정보를 압축하는 단계; 및 압축된 상태 정보를 다른 디바이스에 제공하는 단계를 포함한다.
실시예 6은 적어도 하나의 N 디지트 입력과 복수의 N 디지트 출력을 구비하는 제1레벨 병렬 기계를 구비하는 계층적 병렬 기계를 포함하며, 여기서 N 디지트 출력들 각각은 제1레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대응한다.
실시예 7은 적어도 하나의 유한 상태 기계를 구현하도록 구성된 복수의 프로그래밍가능한 요소를 구비하는 병렬 기계를 포함한다. 병렬 형성은 프로그래밍가능한 요소들 각각의 상태를 포함하는 상태 정보를 결정하고; 상태 정보를 압축하며; 압축된 상태 정보를 다른 디바이스에 제공하도록 구성된다.
실시예 8에서, 실시예 1 내지 7 중 어느 것의 주제는 복수의 프로그래밍가능한 요소들이 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나를 포함하는 것을 포함할 수 있다.
실시예 9에서, 실시예 1 내지 8 중 어느 것의 주제는 프로그래밍가능한 요소의 하나의 그룹에 연결되고 N 디지트 입력을 수신하도록 구성된 N 디지트 입력 인터페이스; 및 프로그래밍가능한 요소의 하나의 그룹에 연결되고 M 디지트 출력을 제공하도록 구성된 M 디지트 출력 인터페이스를 옵션으로 포함할 수 있다.
실시예 10에서, 실시예 1 내지 9 중 어느 것의 주제는 프로그래밍가능한 요소의 하나의 그룹이 프로그래밍가능한 요소의 블록을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 11에서, 실시예 1 내지 10 중 어느 것의 주제는 프로그래밍가능한 요소의 블록이 프로그래밍가능한 요소의 복수의 행을 포함하고, 각 행은 복수의 인트라 블록 스위치 각각에 연결되는 것을 옵션으로 포함할 수 있다.
실시예 12에서, 실시예 1 내지 11 중 어느 것의 주제는 각 행에 있는 프로그래밍가능한 요소들이 2개의 상태 기계 요소의 복수의 그룹; 및 다른 프로그래밍가능한 요소를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 13에서, 실시예 1 내지 12 중 어느 것의 주제는 프로그래밍가능한 요소의 하나의 그룹을 프로그래밍가능한 요소의 다른 하나의 그룹, 입력 포트 및/또는 출력 포트에 선택적으로 연결하도록 구성된 프로그래밍가능한 스위치를 옵션으로 포함할 수 있다.
실시예 14에서, 실시예 1 내지 13 중 어느 것의 주제는 복수의 프로그래밍가능한 요소와 복수의 프로그래밍가능한 스위치를 프로그래밍하도록 구성된 프로그램을 저장하도록 구성된 레지스터를 옵션으로 포함할 수 있다.
실시예 15에서, 실시예 1 내지 14 중 어느 것의 주제는 N이 M과 같은 것을 옵션으로 포함할 수 있다.
실시예 16에서, 실시예 1 내지 15 중 어느 것의 주제는 M이 N의 정수배인 것을 옵션으로 포함할 수 있다.
실시예 17에서, 실시예 1 내지 16 중 어느 것의 주제는 유한 상태 기계의 동일한 것을 구현하는데 사용된 2개 이상의 프로그래밍가능한 요소로부터 출력을 집합하도록 구성된 OR 논리회로를 옵션으로 포함할 수 있다.
실시예 18에서, 실시예 1 내지 17 중 어느 것의 주제는 프로그래밍 요소가 N개의 상태 기계의 논리 그룹을 구현하도록 구성되고, N개의 상태 기계의 출력이 M 디지트 출력을 제공하도록 집합되는 것을 옵션으로 포함할 수 있다.
실시예 19에서, 실시예 1 내지 18 중 어느 것의 주제는 논리회로가 OR 게이트를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 20에서, 실시예 1 내지 19 중 어느 것의 주제는 M 디지트 출력에 포함된 상태 정보가 압축된 상태 정보를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 21에서, 실시예 1 내지 20 중 어느 것의 주제는 복수의 프로그래밍가능한 요소가 상태 기계 요소를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 22에서, 실시예 1 내지 21 중 어느 것의 주제는 M 디지트 출력이 차이 벡터를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 23에서, 실시예 1 내지 22 중 어느 것의 주제는 구현된 하나 이상의 유한 상태 기계의 각 상태가 상태 벡터의 각 디지트에 대응하고, 차이 벡터는 프로그래밍가능한 디바이스에 제공된 입력 심볼에 응답하여 변화된 상태 벡터의 디지트만을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 24에서, 실시예 1 내지 23 중 어느 것의 주제는 구현된 하나 이상의 유한 상태 기계의 각 상태가 상태 벡터의 각 디지트에 대응하고, M 디지트 출력은 상태 벡터의 디지트의 서브세트만을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 25에서, 실시예 1 내지 24 중 어느 것의 주제는 디지트의 서브세트가 하나 이상의 유한 상태 기계의 최종 상태에 대응하는 디지트를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 26에서, 실시예 1 내지 25 중 어느 것의 주제는 디바이스에서 구현된 모든 상태 기계가 N 디지트 입력을 수신하는 것을 옵션으로 포함할 수 있다.
실시예 27에서, 실시예 1 내지 26 중 어느 것의 주제는 복수의 프로그래밍가능한 요소가 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나를 포함하고, 그룹 각각은 자기 자신의 전용 입력을 구비하는 것을 옵션으로 포함할 수 있다.
실시예 28에서, 실시예 1 내지 27 중 어느 것의 주제는 N 디지트 입력이 반도체 다이의 하부에 있고 M 디지트 출력이 반도체 다이의 상부에 있는 것을 옵션으로 포함할 수 있다.
실시예 29에서, 실시예 1 내지 28 중 어느 것의 주제는 복수의 프로그래밍가능한 요소가 프로그래밍가능한 요소의 2개 이상 그룹 중 하나를 포함하고, 프로그래밍가능한 디바이스는 프로그래밍가능한 디바이스의 그룹 중 하나로부터 상태 정보를 프로그래밍가능한 디바이스의 그룹 중 다른 것으로 제공하도록 구성되는 것을 옵션으로 포함할 수 있다.
실시예 30에서, 실시예 1 내지 29 중 어느 것의 주제는 제2병렬 기계가 전체 M 디지트 출력을 수신하고 처리하도록 구성된 것을 옵션으로 포함할 수 있다.
실시예 31에서, 실시예 1 내지 30 중 어느 것의 주제는 제1병렬 기계에 연결되고 N 디지트 입력을 제공하도록 구성된 입력 버스; 및 제1병렬 기계와 제2병렬 기계 사이에 연결된 출력 버스를 포함하되, 상기 출력 버스는 M 디지트 출력 중 적어도 일부를 제2병렬 기계에 제공하도록 구성된 것을 옵션으로 포함할 수 있다.
실시예 32에서, 실시예 1 내지 31 중 어느 것의 주제는 입력 버스와 출력 버스가 동일한 사이즈인 것을 옵션으로 포함할 수 있다.
실시예 33에서, 실시예 1 내지 32 중 어느 것의 주제는 제1 및 제2병렬 기계에서 대응하는 그룹은 상호연결부의 각 그룹에 의해 연결되는 것을 옵션으로 포함할 수 있다.
실시예 34에서, 실시예 1 내지 33 중 어느 것의 주제는 M 디지트 출력이 제2병렬 기계에 구현된 각 상태 기계에 제공되는 것을 옵션으로 포함할 수 있다.
실시예 35에서, 실시예 1 내지 34 중 어느 것의 주제는 제2병렬 기계가 복수의 그룹으로 그룹화된 복수의 프로그래밍가능한 요소를 포함하고 M 디지트 출력은 미리 한정된 방식에 따라 그룹들 각각으로 제공되는 것을 옵션으로 포함할 수 있다.
실시예 36에서, 실시예 1 내지 35 중 어느 것의 주제는 제2병렬 기계가 어드레스 정보를 제2병렬 기계로 송신하도록 구성된 복수의 프로그래밍가능한 요소를 포함하고 어드레스 정보는 M 디지트 출력이 제2병렬 기계의 어느 그룹에 제공되고 있는지를 나타내는 것을 옵션으로 포함할 수 있다.
실시예 37에서, 실시예 1 내지 36 중 어느 것의 주제는 병렬 기계가 적층된 것을 옵션으로 포함할 수 있다.
실시예 38에서, 실시예 1 내지 37 중 어느 것의 주제는 복수의 프로그래밍가능한 요소가 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나를 포함하고, 각 그룹에 대응하는 논리회로를 더 포함하며, 그 그룹 각각에 대응하는 논리회로는 그 그룹에서 2개 이상의 프로그래밍가능한 요소로부터 상태 정보를 집합하고, 이 그룹으로부터 M 디지트 출력의 하나 이상의 디지트는 이 논리회로의 함수인 것을 옵션으로 포함할 수 있다.
실시예 39에서, 실시예 1 내지 38 중 어느 것의 주제는 M 디지트 출력이 프로그래밍가능한 요소로부터 상태 정보를 압축하는 것에 의해 형성된 것을 옵션으로 포함할 수 있다.
실시예 40에서, 실시예 1 내지 39 중 어느 것의 주제는 유한 상태 기계의 동일한 것을 구현하는데 사용되는 프로그래밍가능한 요소 중 2개 이상으로부터 출력을 집합하도록 구성된 논리회로를 옵션으로 포함할 수 있다.
실시예 41에서, 실시예 1 내지 40 중 어느 것의 주제는 프로그래밍가능한 요소가 N개의 상태 기계의 논리 그룹을 구현하도록 구성되고, N개의 상태 기계의 출력은 M 디지트 출력을 제공하도록 집합되는 것을 옵션으로 포함할 수 있다.
실시예 42에서, 실시예 1 내지 41 중 어느 것의 주제는 상태 정보를 압축하는 것이 상태 정보에 무손실 압축 알고리즘을 적용하는 것을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 43에서, 실시예 1 내지 42 중 어느 것의 주제는 압축된 상태 정보를 다른 디바이스에 제공하는 것이 압축된 상태 정보를 다른 병렬 기계에 제공하는 것을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 44에서, 실시예 1 내지 43 중 어느 것의 주제는 압축된 상태 정보를 다른 디바이스에 제공하는 것이 압축된 상태 정보를 시스템 메모리에 제공하는 것을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 45에서, 실시예 1 내지 44 중 어느 것의 주제는 상태 정보를 압축하는 것이 병렬 기계 상에 구현된 유한 상태 기계의 최종 상태를 집합하는 것을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 46에서, 실시예 1 내지 45 중 어느 것의 주제는 적어도 하나의 N 디지트 입력과 복수의 N 디지트 출력을 구비하는 제1레벨의 병렬 기계를 포함하고, N 디지트 출력 각각은 제1레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대응하는 것을 옵션으로 포함할 수 있다.
실시예 47에서, 실시예 1 내지 46 중 어느 것의 주제는 제1레벨의 병렬 기계에 구현된 상태 기계 중 적어도 하나는 적어도 하나의 상태 기계의 복수의 최종 상태에 대응하는 복수의 프로그래밍가능한 요소를 포함하고, 상기 복수의 최종 상태에 대응하는 복수의 프로그래밍가능한 요소의 출력은 N 디지트 출력 중 하나의 출력의 하나의 디지트를 제공하도록 서로 집합되는 것을 옵션으로 포함할 수 있다.
실시예 48에서, 실시예 1 내지 47 중 어느 것의 주제는 N 디지트 출력 중 하나에 제공된 데이터가 제1레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대해 최종 상태의 스테이터스를 인코딩하는 것을 옵션으로 포함할 수 있다.
실시예 49에서, 실시예 1 내지 48 중 어느 것의 주제는 제1레벨의 병렬 기계가 유한 상태 기계 엔진을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 50에서, 실시예 1 내지 49 중 어느 것의 주제는 유한 상태 기계 엔진이 프로그래밍가능한 요소의 그룹의 어레이를 포함하고, 프로그래밍가능한 요소의 그룹 각각은 N 디지트 출력 각각에 연결된 것을 옵션으로 포함할 수 있다.
실시예 51에서, 실시예 1 내지 50 중 어느 것의 주제는 제1레벨의 병렬 기계가 복수의 N 디지트 입력을 구비하고, 프로그래밍가능한 요소의 그룹 각각은 제1레벨의 병렬 기계의 N 디지트 입력 각각에 연결되는 것을 옵션으로 포함할 수 있다.
실시예 52에서, 실시예 1 내지 51 중 어느 것의 주제는 제2레벨의 병렬 기계가 유한 상태 기계 엔진을 구비하는 것을 옵션으로 포함할 수 있다.
실시예 53에서, 실시예 1 내지 52 중 어느 것의 주제는 유한 상태 기계 엔진이 프로그래밍가능한 요소의 그룹의 어레이를 구비하고, 프로그래밍가능한 요소의 그룹들 각각은 N 디지트 입력 각각에 연결되는 것을 옵션으로 포함할 수 있다.
실시예 54에서, 실시예 1 내지 53 중 어느 것의 주제는 제2레벨의 병렬 기계가 복수의 N 디지트 출력을 구비하고 프로그래밍가능한 요소의 그룹들 각각은 제2레벨의 병렬 기계의 N 디지트 출력들 각각에 연결되는 것을 옵션으로 포함할 수 있다.
실시예 55에서, 실시예 1 내지 54 중 어느 것의 주제는 제1병렬 기계가 제1다이를 포함하고 제2병렬 기계는 제1다이와 적층된 제2다이를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 56에서, 실시예 1 내지 55 중 어느 것의 주제는 제3병렬 기계와 버스를 더 포함하되, 제3병렬 기계는 제1다이 및 제2다이와 적층된 제3다이를 포함하고, 제2다이는 적층에서 제1다이와 제3다이 사이에 있고, 버스는 제1병렬 기계와 제3병렬 기계 사이에 상태 정보를 전달하도록 구성된 것을 옵션으로 포함할 수 있다.
실시예 57에서, 실시예 1 내지 56 중 어느 것의 주제는 버스가 복수의 상호연결부를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 58에서, 실시예 1 내지 57 중 어느 것의 주제는 상호연결부가 관통 비아 상호연결부를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 59에서, 실시예 1 내지 58 중 어느 것의 주제는 병렬 기계가 유한 상태 기계 엔진을 포함하는 것을 옵션으로 포함할 수 있다.
실시예 60에서, 실시예 1 내지 59 중 어느 것의 주제는 유한 상태 기계 엔진이 패턴 인식 프로세서를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 61에서, 실시예 1 내지 60 중 어느 것의 주제는 병렬 기계가 전계 프로그래밍가능한 게이트 어레이를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 62에서, 실시예 1 내지 61 중 어느 것의 주제는 제1레벨의 병렬 기계의 적어도 하나의 N 디지트 입력이 원시 데이터를 수신하도록 구성된 것을 옵션으로 포함할 수 있다.
실시예 63에서, 실시예 1 내지 62 중 어느 것의 주제는 제2레벨의 병렬 기계의 N 디지트 입력 각각이 제2레벨 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대응하고, 제2레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹은 제1레벨의 병렬 기계에 구현된 최대 N개의 상태 기계에 의해 구동되는 것을 옵션으로 포함할 수 있다.
실시예 64에서, 실시예 1 내지 63 중 어느 것의 주제는 다른 디바이스가 제2병렬 기계를 포함하고, 상기 제2병렬 기계는 압축된 상태 정보를 수신하고 처리하도록 구성된 것을 옵션으로 포함할 수 있다.
실시예 65에서, 실시예 1 내지 64 중 어느 것의 주제는 상태 정보를 압축하도록 구성된 병렬 기계가 병렬 기계 상에 구현된 유한 상태 기계의 최종 상태를 집합하도록 구성된 병렬 기계를 포함하는 것을 옵션으로 포함할 수 있다.
실시예 66에서, 실시예 1 내지 65 중 어느 것의 주제는 최종 상태를 집합하도록 구성된 부울리안 논리를 옵션으로 포함할 수 있다.
실시예 67에서, 실시예 1 내지 66 중 어느 것의 주제는 상태 정보를 압축하도록 구성된 병렬 기계가 차이 벡터를 출력하도록 구성된 병렬 기계를 포함하고, 차이 벡터는 입력 심볼에 응답하여 변화된 상태만을 식별하는 것을 옵션으로 포함할 수 있다.
실시예 68에서, 실시예 1 내지 67 중 어느 것의 주제는 상태 정보를 압축하도록 구성된 병렬 기계가 출력 벡터를 출력하도록 구성된 병렬 기계를 포함하고, 출력 벡터는 병렬 기계에 구현된 최종 상태 기계의 최종 상태에 대한 상태 정보만을 제공하는 것을 옵션으로 포함할 수 있다.

Claims (71)

  1. 프로그래밍가능한 디바이스로서,
    복수의 프로그래밍가능한 요소를 포함하되, 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 상기 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되며, 상기 M 디지트 출력은 상기 프로그래밍가능한 요소들 전부보다 더 적은 것으로부터의 상태 정보를 포함하는 것인 프로그래밍가능한 디바이스.
  2. 제1항에 있어서, 상기 복수의 프로그래밍가능한 요소는 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나의 그룹을 포함하는 것인 프로그래밍가능한 디바이스.
  3. 제2항에 있어서, 프로그래밍가능한 요소의 상기 하나의 그룹에 연결되고 상기 N 디지트 입력을 수신하도록 구성된 N 디지트 입력 인터페이스; 및
    프로그래밍가능한 요소의 상기 하나의 그룹에 연결되고 상기 M 디지트 출력을 제공하도록 구성된 M 디지트 출력 인터페이스를 더 포함하는 프로그래밍가능한 디바이스.
  4. 제2항에 있어서, 프로그래밍가능한 요소의 상기 하나의 그룹은 프로그래밍가능한 요소의 블록을 포함하는 것인 프로그래밍가능한 디바이스.
  5. 제4항에 있어서, 프로그래밍가능한 요소의 상기 블록은 프로그래밍가능한 요소의 복수의 행을 포함하고, 상기 행 각각은 복수의 인트라 블록 스위치 각각에 연결된 것인 프로그래밍가능한 디바이스.
  6. 제5항에 있어서, 상기 행 각각의 상기 프로그래밍가능한 요소는,
    2개의 상태 기계 요소의 복수의 그룹; 및
    다른 프로그래밍가능한 요소를 포함하는 것인 프로그래밍가능한 디바이스.
  7. 제2항에 있어서, 프로그래밍가능한 요소의 상기 하나의 그룹을 프로그래밍가능한 요소의 상기 그룹 중 다른 그룹, 입력 포트 및/또는 출력 포트에 선택적으로 연결하도록 구성된 프로그래밍가능한 스위치를 더 포함하는 프로그래밍가능한 디바이스.
  8. 제7항에 있어서, 상기 복수의 프로그래밍가능한 요소와 상기 복수의 프로그래밍가능한 스위치를 프로그래밍하도록 구성된 프로그램을 저장하도록 구성된 레지스터를 더 포함하는 프로그래밍가능한 디바이스.
  9. 제1항에 있어서, N은 M과 동일한 것인 프로그래밍가능한 디바이스.
  10. 제1항에 있어서, M은 N의 정수배인 것인 프로그래밍가능한 디바이스.
  11. 제1항에 있어서, 상기 유한 상태 기계의 동일한 것을 구현하는데 사용되는 상기 프로그래밍가능한 요소들 중 2개 이상으로부터의 출력을 집합하도록 구성된 OR 논리회로를 더 포함하는 프로그래밍가능한 디바이스.
  12. 제11항에 있어서, 상기 프로그래밍가능한 요소는 N개의 상태 기계의 논리 그룹을 구현하도록 구성되고, 상기 N개의 상태 기계의 출력은 상기 M 디지트 출력을 제공하도록 집합되는 것인 프로그래밍가능한 디바이스.
  13. 제11항에 있어서, 상기 논리회로는 OR 게이트를 포함하는 것인 프로그래밍가능한 디바이스.
  14. 제1항에 있어서, 상기 M 디지트 출력에 포함된 상기 상태 정보는 압축된 상태 정보를 포함하는 것인 프로그래밍가능한 디바이스.
  15. 제1항에 있어서, 상기 복수의 프로그래밍가능한 요소는 상태 기계 요소를 포함하는 것인 프로그래밍가능한 디바이스.
  16. 제1항에 있어서, 상기 M 디지트 출력은 차이 벡터를 포함하는 것인 프로그래밍가능한 디바이스.
  17. 제16항에 있어서, 상기 구현된 하나 이상의 유한 상태 기계의 각 상태는 상태 벡터의 각 디지트에 대응하고, 상기 차이 벡터는 상기 프로그래밍가능한 디바이스에 제공된 입력 심볼에 응답하여 변화된 상기 상태 벡터의 디지트만을 포함하는 것인 프로그래밍가능한 디바이스.
  18. 제1항에 있어서, 상기 구현된 하나 이상의 유한 상태 기계의 각 상태는 상태 벡터의 각 디지트에 대응하고, 상기 M 디지트 출력은 상기 상태 벡터의 상기 디지트의 서브세트만을 포함하는 것인 프로그래밍가능한 디바이스.
  19. 제18항에 있어서, 상기 디지트의 상기 서브세트는 상기 하나 이상의 유한 상태 기계의 최종 상태에 대응하는 디지트를 포함하는 것인 프로그래밍가능한 디바이스.
  20. 제1항에 있어서, 상기 디바이스에서 구현된 모든 상태 기계는 상기 N 디지트 입력을 수신하는 것인 프로그래밍가능한 디바이스.
  21. 제1항에 있어서, 상기 복수의 프로그래밍가능한 요소는 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나의 그룹을 포함하고, 상기 그룹 각각은 자기 자신의 전용 입력을 구비하는 것인 프로그래밍가능한 디바이스.
  22. 제1항에 있어서, 상기 N 디지트 입력은 반도체 다이의 하부에 있고, 상기 M 디지트 출력은 상기 반도체 다이의 상부에 있는 것인 프로그래밍가능한 디바이스.
  23. 제1항에 있어서, 상기 복수의 프로그래밍가능한 요소는 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나의 그룹을 포함하고, 상기 프로그래밍가능한 디바이스는 상기 프로그래밍가능한 디바이스의 상기 그룹 중 하나의 그룹으로부터 다른 그룹으로 상태 정보를 제공하도록 구성된 것인 프로그래밍가능한 디바이스.
  24. 계층적 병렬 기계로서,
    복수의 프로그래밍가능한 요소를 구비하는 제1병렬 기계로서, 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 상기 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되며, 상기 M 디지트 출력은 상기 프로그래밍가능한 요소들 전부보다 더 적은 것으로부터 상태 정보를 포함하는 것인, 상기 제1병렬 기계; 및
    상기 M 디지트 출력의 적어도 일부를 수신하고 처리하도록 구성된 제2병렬 기계를 포함하는 계층적 병렬 기계.
  25. 제24항에 있어서, 상기 제2병렬 기계는 전체 M 디지트 출력을 수신하고 처리하도록 구성된 것인 계층적 병렬 기계.
  26. 제24항에 있어서, 상기 제1병렬 기계에 연결되고 상기 N 디지트 입력을 제공하도록 구성된 입력 버스; 및
    상기 제1병렬 기계와 상기 제2병렬 기계 사이에 연결된 출력 버스를 더 포함하되,
    상기 출력 버스는 상기 M 디지트 출력의 적어도 일부를 상기 제2병렬 기계에 제공하도록 구성된 것인 계층적 병렬 기계.
  27. 제26항에 있어서, 상기 입력 버스와 출력 버스는 동일한 사이즈인 것인 계층적 병렬 기계.
  28. 제27항에 있어서, 상기 제1 및 제2병렬 기계에서 대응하는 그룹은 상호연결부의 각 그룹에 의해 연결되는 것인 계층적 병렬 기계.
  29. 제24항에 있어서, 상기 M 디지트 출력은 상기 제2병렬 기계에서 구현된 각 상태 기계에 제공되는 것인 계층적 병렬 기계.
  30. 제24항에 있어서, 상기 제2병렬 기계는 복수의 그룹들로 그룹화된 복수의 프로그래밍가능한 요소를 포함하며, 상기 M 디지트 출력은 미리 한정된 방식에 따라 상기 그룹들 각각에 제공되는 것인 계층적 병렬 기계.
  31. 제30항에 있어서, 상기 제2병렬 기계는 어드레스 정보를 상기 제2병렬 기계에 송신하도록 구성된 복수의 프로그래밍가능한 요소를 포함하며, 상기 어드레스 정보는 상기 제2병렬 기계의 상기 그룹들 중 어느 그룹으로 상기 M 디지트 출력이 제공되는지를 나타내는 것인 계층적 병렬 기계.
  32. 제24항에 있어서, 상기 병렬 기계는 적층된 것인 계층적 병렬 기계.
  33. 제24항에 있어서, 상기 복수의 프로그래밍가능한 요소는 프로그래밍가능한 요소의 2개 이상의 그룹 중 하나를 포함하고, 각 그룹에 대응하는 논리회로를 더 포함하며, 상기 그룹 각각에 대응하는 상기 논리회로는 그 그룹에서 2개 이상의 프로그래밍가능한 요소로부터 상태 정보를 집합하며, 그 그룹으로부터 상기 M 디지트 출력의 하나 이상의 디지트는 그 논리회로의 함수인 것인 계층적 병렬 기계.
  34. 제24항에 있어서, 상기 M 디지트 출력은 상기 프로그래밍가능한 요소로부터 상태 정보를 압축하는 것에 의해 형성된 것인 계층적 병렬 기계.
  35. 프로그래밍가능한 디바이스로서,
    복수의 프로그래밍가능한 요소를 포함하되, 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 상기 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되며, 상기 M 디지트 출력은 상기 프로그래밍가능한 요소 각각으로부터 상태 정보를 압축하는 것에 의해 형성된 것인 프로그래밍가능한 디바이스.
  36. 제35항에 있어서, N은 M과 동일한 것인 프로그래밍가능한 디바이스.
  37. 제35항에 있어서, M은 N의 정수배인 것인 프로그래밍가능한 디바이스.
  38. 제35항에 있어서, 상기 유한 상태 기계의 동일한 것을 구현하는데 사용되는 상기 프로그래밍가능한 요소 중 2개 이상으로부터의 출력을 집합하도록 구성된 논리회로를 더 포함하는 프로그래밍가능한 디바이스.
  39. 제38항에 있어서, 상기 프로그래밍가능한 요소는 N개의 상태 기계의 논리 그룹을 구현하도록 구성되고, 상기 N개의 상태 기계의 출력은 상기 M 디지트 출력을 제공하도록 집합된 것인 프로그래밍가능한 디바이스.
  40. 계층적 병렬 기계로서,
    복수의 프로그래밍가능한 요소를 포함하는 제1병렬 기계를 포함하되, 상기 프로그래밍가능한 요소는 하나 이상의 유한 상태 기계를 구현하도록 구성되고, 상기 복수의 프로그래밍가능한 요소는 N 디지트 입력을 수신하고 상기 N 디지트 입력의 함수로서 M 디지트 출력을 제공하도록 구성되며, 상기 M 디지트 출력은 상기 프로그래밍가능한 요소 각각으로부터 상태 정보를 압축하는 것에 의해 형성된 것인 계층적 병렬 기계.
  41. 제40항에 있어서, N은 M과 동일한 것인 계층적 병렬 기계.
  42. 제40항에 있어서, M은 N의 정수배인 것인 계층적 병렬 기계.
  43. 병렬 기계로부터 다른 디바이스로 상태 정보를 제공하는 방법으로서, 상기 병렬 기계는 복수의 프로그래밍가능한 요소를 포함하고, 상기 프로그래밍가능한 요소 각각은 대응하는 상태를 가지도록 구성되며, 상기 방법은,
    상기 병렬 기계에서 상기 프로그래밍가능한 요소 각각의 상태를 포함하는 상태 정보를 결정하는 단계;
    상기 상태 정보를 압축하는 단계; 및
    상기 압축된 상태 정보를 상기 다른 디바이스로 제공하는 단계를 포함하는 상태 정보 제공 방법.
  44. 제43항에 있어서, 상기 상태 정보를 압축하는 단계는 상기 상태 정보에 무손실 압축 알고리즘을 적용하는 단계를 포함하는 것인 상태 정보 제공 방법.
  45. 제43항에 있어서, 상기 압축된 상태 정보를 상기 다른 디바이스에 제공하는 단계는 상기 압축된 상태 정보를 다른 병렬 기계에 제공하는 단계를 포함하는 것인 상태 정보 제공 방법.
  46. 제43항에 있어서, 상기 압축된 상태 정보를 상기 다른 디바이스에 제공하는 단계는 상기 압축된 상태 정보를 시스템 메모리에 제공하는 단계를 포함하는 것인 상태 정보 제공 방법.
  47. 제43항에 있어서, 상기 상태 정보를 압축하는 단계는 상기 병렬 기계 상에 구현된 유한 상태 기계의 최종 상태를 집합하는 단계를 포함하는 것인 상태 정보 제공 방법.
  48. 계층적 병렬 기계로서,
    적어도 하나의 N 디지트 입력과 복수의 N 디지트 출력을 구비하는 제1레벨의 병렬 기계를 포함하되, 상기 N 디지트 출력 각각은 상기 제1레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대응하는 것인 계층적 병렬 기계.
  49. 제48항에 있어서, 상기 제1레벨의 병렬 기계에 구현된 상기 상태 기계의 적어도 하나는 상기 적어도 하나의 상태 기계의 복수의 최종 상태들에 대응하는 복수의 프로그래밍가능한 요소를 포함하며, 상기 복수의 최종 상태들에 대응하는 상기 복수의 프로그래밍가능한 요소의 출력은 상기 N 디지트 출력 중 하나의 출력의 하나의 디지트를 제공하도록 서로 집합되는 것인 계층적 병렬 기계.
  50. 제49항에 있어서, 상기 N 디지트 출력 중 하나의 출력에 제공되는 데이터는 상기 제1레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대한 상기 최종 상태들의 스테이터스를 인코딩하는 것인 계층적 병렬 기계.
  51. 제48항에 있어서, 상기 제1레벨의 병렬 기계는 유한 상태 기계 엔진을 포함하는 것인 계층적 병렬 기계.
  52. 제51항에 있어서, 상기 유한 상태 기계 엔진은 프로그래밍가능한 요소의 그룹의 어레이를 포함하고, 상기 프로그래밍가능한 요소의 그룹 각각은 상기 N 디지트 출력 각각에 연결되는 것인 계층적 병렬 기계.
  53. 제52항에 있어서, 상기 제1레벨의 병렬 기계는 복수의 N 디지트 입력을 구비하고, 상기 프로그래밍가능한 요소의 그룹 각각은 상기 제1레벨의 병렬 기계의 상기 N 디지트 입력 각각에 연결된 것인 계층적 병렬 기계.
  54. 제48항에 있어서, 제2레벨의 병렬 기계를 더 포함하고, 상기 제2레벨의 병렬 기계는 유한 상태 기계 엔진을 포함하는 것인 계층적 병렬 기계.
  55. 제54항에 있어서, 상기 유한 상태 기계 엔진은 프로그래밍가능한 요소의 그룹의 어레이를 포함하고, 상기 프로그래밍가능한 요소의 그룹 각각은 상기 N 디지트 입력 각각에 연결되는 것인 계층적 병렬 기계.
  56. 제55항에 있어서, 상기 제2레벨의 병렬 기계는 복수의 N 디지트 출력을 구비하고, 상기 프로그래밍가능한 요소의 그룹 각각은 상기 제2레벨의 병렬 기계의 상기 N 디지트 출력 각각에 연결되는 것인 계층적 병렬 기계.
  57. 제54항에 있어서, 상기 제1레벨의 병렬 기계는 제1다이를 포함하고, 상기 제2레벨의 병렬 기계는 상기 제1다이와 적층된 제2다이를 포함하는 것인 계층적 병렬 기계.
  58. 제57항에 있어서, 제3레벨의 병렬 기계와 버스를 더 포함하되, 상기 제3레벨의 병렬 기계는 상기 제1다이 및 상기 제2다이와 적층된 제3다이를 포함하며, 상기 제2다이는 상기 적층에서 상기 제1다이와 상기 제3다이 사이에 있고, 상기 버스는 상기 제1레벨의 병렬 기계와 상기 제3레벨의 병렬 기계 사이에 상태 정보를 전달하도록 구성된 것인 계층적 병렬 기계.
  59. 제58항에 있어서, 상기 버스는 복수의 상호연결부를 포함하는 것인 계층적 병렬 기계.
  60. 제59항에 있어서, 상기 상호연결부는 관통 비아 상호연결부를 포함하는 것인 계층적 병렬 기계.
  61. 제48항에 있어서, 상기 병렬 기계는 유한 상태 기계 엔진을 포함하는 것인 계층적 병렬 기계.
  62. 제61항에 있어서, 상기 유한 상태 기계 엔진은 패턴 인식 프로세서를 포함하는 것인 계층적 병렬 기계.
  63. 제48항에 있어서, 상기 병렬 기계는 전계 프로그래밍가능한 게이트 어레이(field programmable gate arrays)를 포함하는 것인 계층적 병렬 기계.
  64. 제48항에 있어서, 상기 제1레벨의 병렬 기계의 상기 적어도 하나의 N 디지트 입력은 원시 데이터(raw data)를 수신하도록 구성된 것인 계층적 병렬 기계.
  65. 제55항에 있어서, 상기 제2레벨의 병렬 기계의 상기 N 디지트 입력 각각은 상기 제2레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹에 대응하고, 상기 제2레벨의 병렬 기계에 구현된 N개의 상태 기계의 각 그룹은 상기 제1레벨의 병렬 기계에 구현된 최대 N개의 상태 기계에 의해 구동되는 것인 계층적 병렬 기계.
  66. 적어도 하나의 유한 상태 기계를 구현하도록 구성된 복수의 프로그래밍가능한 요소를 포함하는 병렬 기계로서,
    상기 프로그래밍가능한 요소들 각각의 상태를 포함하는 상태 정보를 결정하고;
    상기 상태 정보를 압축하며;
    상기 압축된 상태 정보를 다른 디바이스로 제공하도록 구성된 것인 병렬 기계.
  67. 제66항에 있어서, 상기 다른 디바이스는 제2병렬 기계를 포함하고, 상기 제2병렬 기계는 상기 압축된 상태 정보를 수신하고 처리하도록 구성된 것인 병렬 기계.
  68. 제66항에 있어서, 상기 상태 정보를 압축하도록 구성된 상기 병렬 기계는 상기 병렬 기계 상에 구현된 유한 상태 기계의 최종 상태를 집합하도록 구성된 상기 병렬 기계를 포함하는 것인 병렬 기계.
  69. 제68항에 있어서, 상기 최종 상태를 집합하도록 구성된 부울리안 논리(Boolean logic)를 더 포함하는 병렬 기계.
  70. 제66항에 있어서, 상기 상태 정보를 압축하도록 구성된 상기 병렬 기계는 차이 벡터를 출력하도록 구성된 상기 병렬 기계를 포함하고, 상기 차이 벡터는 입력 심볼에 응답하여 변화된 상태만을 식별하는 것인 병렬 기계.
  71. 제66항에 있어서, 상기 상태 정보를 압축하도록 구성된 병렬 기계는 출력 벡터를 출력하도록 구성된 상기 병렬 기계를 포함하고, 상기 출력 벡터는 상기 병렬 기계에서 구현된 유한 상태 기계의 최종 상태에 대한 상태 정보만을 제공하는 것인 병렬 기계.
KR1020137000566A 2010-06-10 2011-06-09 상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법 KR101960104B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US35355110P 2010-06-10 2010-06-10
US61/353,551 2010-06-10
US13/037,706 2011-03-01
US13/037,706 US8766666B2 (en) 2010-06-10 2011-03-01 Programmable device, hierarchical parallel machines, and methods for providing state information
PCT/US2011/039861 WO2011156644A2 (en) 2010-06-10 2011-06-09 Programmable device, heirarchical parallel machines, methods for providing state information

Publications (2)

Publication Number Publication Date
KR20130083893A KR20130083893A (ko) 2013-07-23
KR101960104B1 true KR101960104B1 (ko) 2019-03-19

Family

ID=45097043

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137000566A KR101960104B1 (ko) 2010-06-10 2011-06-09 상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법

Country Status (6)

Country Link
US (6) US8766666B2 (ko)
EP (1) EP2580656A4 (ko)
JP (1) JP6258034B2 (ko)
KR (1) KR101960104B1 (ko)
TW (1) TWI526935B (ko)
WO (1) WO2011156644A2 (ko)

Families Citing this family (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8209521B2 (en) 2008-10-18 2012-06-26 Micron Technology, Inc. Methods of indirect register access including automatic modification of a directly accessible address register
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
US7970964B2 (en) 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US8402188B2 (en) 2008-11-10 2013-03-19 Micron Technology, Inc. Methods and systems for devices with a self-selecting bus decoder
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
US8214672B2 (en) 2009-01-07 2012-07-03 Micron Technology, Inc. Method and systems for power consumption management of a pattern-recognition processor
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US9836555B2 (en) 2009-06-26 2017-12-05 Micron Technology, Inc. Methods and devices for saving and/or restoring a state of a pattern-recognition processor
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US9323994B2 (en) * 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8766666B2 (en) * 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
US8601013B2 (en) 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
JP5857072B2 (ja) 2011-01-25 2016-02-10 マイクロン テクノロジー, インク. オートマトンの入次数および/または出次数を制御するための量化子の展開
US8843911B2 (en) 2011-01-25 2014-09-23 Micron Technology, Inc. Utilizing special purpose elements to implement a FSM
JP5763784B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 要素利用のための状態のグループ化
US8726253B2 (en) 2011-01-25 2014-05-13 Micron Technology, Inc. Method and apparatus for compiling regular expressions
US8688608B2 (en) * 2011-06-28 2014-04-01 International Business Machines Corporation Verifying correctness of regular expression transformations that use a post-processor
US8417689B1 (en) * 2011-11-21 2013-04-09 Emc Corporation Programming model for transparent parallelization of combinatorial optimization
US8593175B2 (en) 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic in a state machine lattice
US9443156B2 (en) * 2011-12-15 2016-09-13 Micron Technology, Inc. Methods and systems for data analysis in a state machine
US8782624B2 (en) * 2011-12-15 2014-07-15 Micron Technology, Inc. Methods and systems for detection in a state machine
US8648621B2 (en) 2011-12-15 2014-02-11 Micron Technology, Inc. Counter operation in a state machine lattice
US8680888B2 (en) 2011-12-15 2014-03-25 Micron Technologies, Inc. Methods and systems for routing in a state machine
US9430735B1 (en) 2012-02-23 2016-08-30 Micron Technology, Inc. Neural network in a memory device
US20130275709A1 (en) 2012-04-12 2013-10-17 Micron Technology, Inc. Methods for reading data from a storage buffer including delaying activation of a column select
US9336774B1 (en) * 2012-04-20 2016-05-10 Google Inc. Pattern recognizing engine
US9235798B2 (en) 2012-07-18 2016-01-12 Micron Technology, Inc. Methods and systems for handling data received by a state machine engine
US9389841B2 (en) * 2012-07-18 2016-07-12 Micron Technology, Inc. Methods and systems for using state vector data in a state machine engine
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
US9304968B2 (en) * 2012-07-18 2016-04-05 Micron Technology, Inc. Methods and devices for programming a state machine engine
US9063532B2 (en) * 2012-08-31 2015-06-23 Micron Technology, Inc. Instruction insertion in state machine engines
US9075428B2 (en) 2012-08-31 2015-07-07 Micron Technology, Inc. Results generation for state machine engines
US9501131B2 (en) * 2012-08-31 2016-11-22 Micron Technology, Inc. Methods and systems for power management in a pattern recognition processing system
US10042959B2 (en) 2014-03-05 2018-08-07 Ayasdi, Inc. Systems and methods for capture of relationships within information
US9268881B2 (en) 2012-10-19 2016-02-23 Intel Corporation Child state pre-fetch in NFAs
US9117170B2 (en) 2012-11-19 2015-08-25 Intel Corporation Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel
US9665664B2 (en) 2012-11-26 2017-05-30 Intel Corporation DFA-NFA hybrid
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9251440B2 (en) * 2012-12-18 2016-02-02 Intel Corporation Multiple step non-deterministic finite automaton matching
US9268570B2 (en) 2013-01-23 2016-02-23 Intel Corporation DFA compression and execution
US9703574B2 (en) 2013-03-15 2017-07-11 Micron Technology, Inc. Overflow detection and correction in state machine engines
US10089043B2 (en) 2013-03-15 2018-10-02 Micron Technology, Inc. Apparatus and methods for a distributed memory system including memory nodes
US9448965B2 (en) * 2013-03-15 2016-09-20 Micron Technology, Inc. Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine
US9747080B2 (en) * 2013-06-14 2017-08-29 Massively Parallel Technologies, Inc. Software design sharing systems and methods
US10216828B2 (en) 2014-03-05 2019-02-26 Ayasdi, Inc. Scalable topological summary construction using landmark point selection
US10002180B2 (en) 2014-03-05 2018-06-19 Ayasdi, Inc. Landmark point selection
WO2016040018A1 (en) * 2014-09-08 2016-03-17 Invensense Incorporated System and method for hierarchical sensor processing
US11366675B2 (en) 2014-12-30 2022-06-21 Micron Technology, Inc. Systems and devices for accessing a state machine
WO2016109571A1 (en) 2014-12-30 2016-07-07 Micron Technology, Inc Devices for time division multiplexing of state machine engine signals
US10430210B2 (en) 2014-12-30 2019-10-01 Micron Technology, Inc. Systems and devices for accessing a state machine
US9489709B2 (en) * 2015-03-27 2016-11-08 Kyocera Document Solutions Inc. Real-time state-machine implemented with micro-controller
GB2536921A (en) * 2015-03-31 2016-10-05 Fujitsu Ltd Apparatus, program, and method for updating cache memory
US10740116B2 (en) * 2015-09-01 2020-08-11 International Business Machines Corporation Three-dimensional chip-based regular expression scanner
US10846103B2 (en) 2015-10-06 2020-11-24 Micron Technology, Inc. Methods and systems for representing processing resources
US10977309B2 (en) 2015-10-06 2021-04-13 Micron Technology, Inc. Methods and systems for creating networks
US10691964B2 (en) 2015-10-06 2020-06-23 Micron Technology, Inc. Methods and systems for event reporting
CN105656688B (zh) * 2016-03-03 2019-09-20 腾讯科技(深圳)有限公司 状态控制方法和装置
US10146555B2 (en) 2016-07-21 2018-12-04 Micron Technology, Inc. Adaptive routing to avoid non-repairable memory and logic defects on automata processor
US10019311B2 (en) 2016-09-29 2018-07-10 Micron Technology, Inc. Validation of a symbol response memory
US10268602B2 (en) 2016-09-29 2019-04-23 Micron Technology, Inc. System and method for individual addressing
US10592450B2 (en) 2016-10-20 2020-03-17 Micron Technology, Inc. Custom compute cores in integrated circuit devices
US10929764B2 (en) 2016-10-20 2021-02-23 Micron Technology, Inc. Boolean satisfiability
CN107220028B (zh) * 2017-05-24 2020-05-29 上海兆芯集成电路有限公司 加速压缩方法以及使用此方法的装置
US10289093B1 (en) * 2017-12-21 2019-05-14 Xilinx, Inc. Runtime adaptive generator circuit
US11620345B2 (en) * 2018-09-24 2023-04-04 Salesforce, Inc. Method and apparatus for a mechanism for event replay when a reroute of recordation of the event occurred in a multiplexed event recordation system
US10861551B2 (en) 2018-12-28 2020-12-08 Micron Technology, Inc. Memory cells configured to generate weighted inputs for neural networks
US11941625B2 (en) * 2019-06-04 2024-03-26 Jpmorgan Chase Bank, N.A. Systems and methods for real-time classification and verification of data using hierarchal state machines
JP7326501B2 (ja) * 2019-08-22 2023-08-15 グーグル エルエルシー 伝搬レイテンシの短縮
US11451230B2 (en) * 2020-04-23 2022-09-20 Xilinx, Inc. Compute dataflow architecture
US11989508B2 (en) 2020-09-15 2024-05-21 Microsoft Technology Licensing, Llc High-performance microcoded text parser
US11381241B2 (en) * 2020-09-15 2022-07-05 Microsoft Technology Licensing, Llc High-performance table-based state machine
CN113326083A (zh) 2021-05-28 2021-08-31 阿波罗智联(北京)科技有限公司 状态机处理、状态处理方法、装置、电子设备及存储介质
US20230056987A1 (en) * 2021-08-19 2023-02-23 Digital Asset Capital, Inc. Semantic map generation using hierarchical clause structure

Family Cites Families (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5081608A (en) 1988-04-18 1992-01-14 Matsushita Electric Industrial Co., Ltd. Apparatus for processing record-structured data by inserting replacement data of arbitrary length into selected data fields
US4984192A (en) 1988-12-02 1991-01-08 Ultrasystems Defense Inc. Programmable state machines connectable in a reconfiguration switching network for performing real-time data processing
JP2994926B2 (ja) * 1993-10-29 1999-12-27 松下電器産業株式会社 有限状態機械作成方法とパターン照合機械作成方法とこれらを変形する方法および駆動方法
US5414833A (en) * 1993-10-27 1995-05-09 International Business Machines Corporation Network security system and method using a parallel finite state machine adaptive active monitor and responder
US5699505A (en) 1994-08-08 1997-12-16 Unisys Corporation Method and system for automatically collecting diagnostic information from a computer system
US5729678A (en) 1996-03-04 1998-03-17 Ag Communication Systems Corporation Bus monitor system
US6421815B1 (en) * 1998-01-09 2002-07-16 Synopsys, Inc. Method and apparatus for optimized partitioning of finite state machines synthesized from hierarchical high-level descriptions
JP2000181679A (ja) * 1998-12-15 2000-06-30 Mitsutaka Kameyama チップ内通信用データ圧縮技術
US6212625B1 (en) 1999-05-25 2001-04-03 Advanced Micro Devices, Inc. General purpose dynamically programmable state engine for executing finite state machines
US6564336B1 (en) 1999-12-29 2003-05-13 General Electric Company Fault tolerant database for picture archiving and communication systems
JP2002026721A (ja) * 2000-07-10 2002-01-25 Fuji Xerox Co Ltd 情報処理装置
JP3923734B2 (ja) * 2001-01-31 2007-06-06 株式会社東芝 割込み構造局所化の装置および方法およびプログラム
JP4846924B2 (ja) 2001-05-31 2011-12-28 キヤノン株式会社 パターン認識装置
US7546354B1 (en) 2001-07-06 2009-06-09 Emc Corporation Dynamic network based storage with high availability
JP2003044184A (ja) 2001-08-01 2003-02-14 Canon Inc データ処理装置及び電力制御方法
AU2002327599A1 (en) 2001-08-29 2003-03-18 Analog Devices, Inc. Generic serial port architecture and system
US7170891B2 (en) 2001-08-30 2007-01-30 Messenger Terabit Networks, Inc. High speed data classification system
US6715024B1 (en) * 2001-12-31 2004-03-30 Lsi Logic Corporation Multi-bank memory device having a 1:1 state machine-to-memory bank ratio
US7171561B2 (en) 2002-10-17 2007-01-30 The United States Of America As Represented By The Secretary Of The Air Force Method and apparatus for detecting and extracting fileprints
US7180328B2 (en) * 2003-05-23 2007-02-20 Sensory Networks, Inc. Apparatus and method for large hardware finite state machine with embedded equivalence classes
JP2005018310A (ja) * 2003-06-25 2005-01-20 Nippon Telegr & Teleph Corp <Ntt> データ変換方法および装置
US7487542B2 (en) 2004-01-14 2009-02-03 International Business Machines Corporation Intrusion detection using a network processor and a parallel pattern detection engine
JP4347087B2 (ja) * 2004-02-26 2009-10-21 日本電信電話株式会社 パターンマッチング装置および方法ならびにプログラム
WO2006013428A1 (en) 2004-07-26 2006-02-09 Nokia Corporation, System and method for searching for content stored by one or more media servers
GB0420442D0 (en) 2004-09-14 2004-10-20 Ignios Ltd Debug in a multicore architecture
US7353347B2 (en) * 2004-09-23 2008-04-01 Mathstar, Inc. Reconfigurable state machine
US7307453B1 (en) * 2004-10-12 2007-12-11 Nortel Networks Limited Method and system for parallel state machine implementation
US8135652B2 (en) 2004-10-29 2012-03-13 Nec Laboratories America, Inc. Parallel support vector method and apparatus
US7392229B2 (en) 2005-02-12 2008-06-24 Curtis L. Harris General purpose set theoretic processor
JP4654731B2 (ja) * 2005-03-31 2011-03-23 富士ゼロックス株式会社 集積回路装置および信号処理装置
JP2006302132A (ja) * 2005-04-22 2006-11-02 Yaskawa Electric Corp 信号処理装置及び再構成可能論理回路装置及び再構成可能順序回路
US7761851B2 (en) 2005-05-31 2010-07-20 International Business Machines Corporation Computer method and system for integrating software development and deployment
US7805301B2 (en) * 2005-07-01 2010-09-28 Microsoft Corporation Covariance estimation for pattern recognition
US7500209B2 (en) * 2005-09-28 2009-03-03 The Mathworks, Inc. Stage evaluation of a state machine
CN101099147B (zh) 2005-11-11 2010-05-19 松下电器产业株式会社 对话支持装置
JP4635147B2 (ja) * 2005-11-17 2011-02-16 国立大学法人 筑波大学 パターンマッチング装置、その形成方法、それを用いたネットワーク不正侵入検知装置の動作方法、およびそれを用いた侵入防止システムの動作方法
US7797672B2 (en) * 2006-05-30 2010-09-14 Motorola, Inc. Statechart generation using frames
WO2007149494A2 (en) * 2006-06-21 2007-12-27 Element Cxi, Llc. Resilient integrated circuit architecture
US8200807B2 (en) * 2006-08-31 2012-06-12 The Mathworks, Inc. Non-blocking local events in a state-diagramming environment
US8065249B1 (en) 2006-10-13 2011-11-22 Harris Curtis L GPSTP with enhanced aggregation functionality
US7774286B1 (en) 2006-10-24 2010-08-10 Harris Curtis L GPSTP with multiple thread functionality
US20080168013A1 (en) 2006-12-05 2008-07-10 Paul Cadaret Scalable pattern recognition system
US7899976B2 (en) 2006-12-08 2011-03-01 Pandya Ashish A FSA extension architecture for programmable intelligent search memory
JP2008293226A (ja) * 2007-05-24 2008-12-04 Renesas Technology Corp 半導体装置
JP5388323B2 (ja) * 2007-11-09 2014-01-15 独立行政法人 宇宙航空研究開発機構 計算機
US8577665B2 (en) * 2008-03-14 2013-11-05 Fujitsu Limited Synthesis of message sequence charts from communicating finite-state machines
JP5321589B2 (ja) * 2008-08-13 2013-10-23 日本電気株式会社 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
US8209521B2 (en) 2008-10-18 2012-06-26 Micron Technology, Inc. Methods of indirect register access including automatic modification of a directly accessible address register
US7970964B2 (en) 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US9639493B2 (en) 2008-11-05 2017-05-02 Micron Technology, Inc. Pattern-recognition processor with results buffer
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US20100118425A1 (en) 2008-11-11 2010-05-13 Menachem Rafaelof Disturbance rejection in a servo control loop using pressure-based disc mode sensor
US10007486B2 (en) 2008-12-01 2018-06-26 Micron Technology, Inc. Systems and methods to enable identification of different data sets
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8214672B2 (en) 2009-01-07 2012-07-03 Micron Technology, Inc. Method and systems for power consumption management of a pattern-recognition processor
US8843523B2 (en) 2009-01-12 2014-09-23 Micron Technology, Inc. Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine
US7683665B1 (en) 2009-04-21 2010-03-23 International Business Machines Corporation Multiple parallel programmable finite state machines using a shared transition table
US9836555B2 (en) 2009-06-26 2017-12-05 Micron Technology, Inc. Methods and devices for saving and/or restoring a state of a pattern-recognition processor
US8489534B2 (en) 2009-12-15 2013-07-16 Paul D. Dlugosch Adaptive content inspection
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8766666B2 (en) * 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
US8601013B2 (en) 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
JP5857072B2 (ja) * 2011-01-25 2016-02-10 マイクロン テクノロジー, インク. オートマトンの入次数および/または出次数を制御するための量化子の展開

Also Published As

Publication number Publication date
US20210255911A1 (en) 2021-08-19
US20140279796A1 (en) 2014-09-18
EP2580656A2 (en) 2013-04-17
US20190087243A1 (en) 2019-03-21
US9519860B2 (en) 2016-12-13
CN103026332A (zh) 2013-04-03
TW201211897A (en) 2012-03-16
US20230214282A1 (en) 2023-07-06
KR20130083893A (ko) 2013-07-23
WO2011156644A3 (en) 2012-04-19
US8766666B2 (en) 2014-07-01
US10191788B2 (en) 2019-01-29
US20170060649A1 (en) 2017-03-02
EP2580656A4 (en) 2015-07-15
WO2011156644A2 (en) 2011-12-15
US11003515B2 (en) 2021-05-11
US20110307433A1 (en) 2011-12-15
JP2013534660A (ja) 2013-09-05
US11604687B2 (en) 2023-03-14
JP6258034B2 (ja) 2018-01-10
TWI526935B (zh) 2016-03-21

Similar Documents

Publication Publication Date Title
KR101960104B1 (ko) 상태 정보를 제공하는 프로그래밍가능한 디바이스, 계층적 병렬 기계, 방법
US11488378B2 (en) Analyzing data using a hierarchical structure
US11928590B2 (en) Methods and systems for power management in a pattern recognition processing system
EP2875433B1 (en) Methods and systems for handling data received by a state machine engine
US8680888B2 (en) Methods and systems for routing in a state machine
US11580055B2 (en) Devices for time division multiplexing of state machine engine signals

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant